test.bats 51 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713
  1. #!/usr/bin/env bats
  2. if [ "${PATH#*/usr/local/hestia/bin*}" = "$PATH" ]; then
  3. . /etc/profile.d/hestia.sh
  4. fi
  5. load 'test_helper/bats-support/load'
  6. load 'test_helper/bats-assert/load'
  7. load 'test_helper/bats-file/load'
  8. function random() {
  9. head /dev/urandom | tr -dc 0-9 | head -c$1
  10. }
  11. function setup() {
  12. # echo "# Setup_file" > &3
  13. if [ $BATS_TEST_NUMBER = 1 ]; then
  14. echo 'user=test-5285' > /tmp/hestia-test-env.sh
  15. echo 'user2=test-5286' >> /tmp/hestia-test-env.sh
  16. echo 'userbk=testbk-5285' >> /tmp/hestia-test-env.sh
  17. echo 'userpass1=test-5285' >> /tmp/hestia-test-env.sh
  18. echo 'userpass2=t3st-p4ssw0rd' >> /tmp/hestia-test-env.sh
  19. echo 'HESTIA=/usr/local/hestia' >> /tmp/hestia-test-env.sh
  20. echo 'domain=test-5285.hestiacp.com' >> /tmp/hestia-test-env.sh
  21. echo 'domainuk=test-5285.hestiacp.com.uk' >> /tmp/hestia-test-env.sh
  22. echo 'rootdomain=testhestiacp.com' >> /tmp/hestia-test-env.sh
  23. echo 'subdomain=cdn.testhestiacp.com' >> /tmp/hestia-test-env.sh
  24. echo 'database=test-5285_database' >> /tmp/hestia-test-env.sh
  25. echo 'dbuser=test-5285_dbuser' >> /tmp/hestia-test-env.sh
  26. echo 'pguser=test5290' >> /tmp/hestia-test-env.sh
  27. echo 'pgdatabase=test5290_database' >> /tmp/hestia-test-env.sh
  28. echo 'pgdbuser=test5290_dbuser' >> /tmp/hestia-test-env.sh
  29. fi
  30. source /tmp/hestia-test-env.sh
  31. source $HESTIA/func/main.sh
  32. source $HESTIA/conf/hestia.conf
  33. source $HESTIA/func/ip.sh
  34. }
  35. function validate_web_domain() {
  36. local user=$1
  37. local domain=$2
  38. local webproof=$3
  39. local webpath=${4}
  40. refute [ -z "$user" ]
  41. refute [ -z "$domain" ]
  42. refute [ -z "$webproof" ]
  43. source $HESTIA/func/ip.sh
  44. run v-list-web-domain $user $domain
  45. assert_success
  46. USER_DATA=$HESTIA/data/users/$user
  47. local domain_ip=$(get_object_value 'web' 'DOMAIN' "$domain" '$IP')
  48. SSL=$(get_object_value 'web' 'DOMAIN' "$domain" '$SSL')
  49. domain_ip=$(get_real_ip "$domain_ip")
  50. if [ ! -z $webpath ]; then
  51. domain_docroot=$(get_object_value 'web' 'DOMAIN' "$domain" '$CUSTOM_DOCROOT')
  52. if [ -n "$domain_docroot" ] && [ -d "$domain_docroot" ]; then
  53. assert_file_exist "${domain_docroot}/${webpath}"
  54. else
  55. assert_file_exist "${HOMEDIR}/${user}/web/${domain}/public_html/${webpath}"
  56. fi
  57. fi
  58. # Test HTTP
  59. # Curl hates UTF domains so convert them to ascci.
  60. domain_idn=$(idn -a $domain)
  61. run curl --location --silent --show-error --insecure --resolve "${domain_idn}:80:${domain_ip}" "http://${domain_idn}/${webpath}"
  62. assert_success
  63. assert_output --partial "$webproof"
  64. # Test HTTPS
  65. if [ "$SSL" = "yes" ]; then
  66. run v-list-web-domain-ssl $user $domain
  67. assert_success
  68. run curl --location --silent --show-error --insecure --resolve "${domain_idn}:443:${domain_ip}" "https://${domain_idn}/${webpath}"
  69. assert_success
  70. assert_output --partial "$webproof"
  71. fi
  72. }
  73. function validate_headers_domain() {
  74. local user=$1
  75. local domain=$2
  76. local webproof=$3
  77. refute [ -z "$user" ]
  78. refute [ -z "$domain" ]
  79. refute [ -z "$webproof" ]
  80. source $HESTIA/func/ip.sh
  81. run v-list-web-domain $user $domain
  82. assert_success
  83. USER_DATA=$HESTIA/data/users/$user
  84. local domain_ip=$(get_object_value 'web' 'DOMAIN' "$domain" '$IP')
  85. SSL=$(get_object_value 'web' 'DOMAIN' "$domain" '$SSL')
  86. domain_ip=$(get_real_ip "$domain_ip")
  87. # Test HTTP with code redirect for some reasons due to 301 redirect it fails
  88. curl -i --resolve "${domain}:80:${domain_ip}" "http://${domain}"
  89. assert_success
  90. assert_output --partial "$webproof"
  91. }
  92. function validate_mail_domain() {
  93. local user=$1
  94. local domain=$2
  95. refute [ -z "$user" ]
  96. refute [ -z "$domain" ]
  97. run v-list-mail-domain $user $domain
  98. assert_success
  99. assert_dir_exist $HOMEDIR/$user/mail/$domain
  100. assert_dir_exist $HOMEDIR/$user/conf/mail/$domain
  101. assert_file_exist $HOMEDIR/$user/conf/mail/$domain/aliases
  102. if [ -n "$ANTISPAM_SYSTEM" ]; then
  103. assert_file_exist $HOMEDIR/$user/conf/mail/$domain/antispam
  104. fi
  105. if [ -n "$ANTIVIRUS_SYSTEM" ]; then
  106. assert_file_exist $HOMEDIR/$user/conf/mail/$domain/antivirus
  107. fi
  108. assert_file_exist $HOMEDIR/$user/conf/mail/$domain/fwd_only
  109. assert_file_exist $HOMEDIR/$user/conf/mail/$domain/ip
  110. assert_file_exist $HOMEDIR/$user/conf/mail/$domain/passwd
  111. }
  112. function validate_webmail_domain() {
  113. local user=$1
  114. local domain=$2
  115. local webproof=$3
  116. local webpath=${4}
  117. refute [ -z "$user" ]
  118. refute [ -z "$domain" ]
  119. refute [ -z "$webproof" ]
  120. source $HESTIA/func/ip.sh
  121. USER_DATA=$HESTIA/data/users/$user
  122. local domain_ip=$(get_object_value 'web' 'DOMAIN' "$domain" '$IP')
  123. SSL=$(get_object_value 'mail' 'DOMAIN' "$domain" '$SSL')
  124. domain_ip=$(get_real_ip "$domain_ip")
  125. if [ ! -z "$webpath" ]; then
  126. assert_file_exist /var/lib/roundcube/$webpath
  127. fi
  128. if [ "$SSL" = "no" ]; then
  129. # Test HTTP
  130. run curl --location --silent --show-error --insecure --resolve "webmail.${domain}:80:${domain_ip}" "http://webmail.${domain}/${webpath}"
  131. assert_success
  132. assert_output --partial "$webproof"
  133. # Test HTTP
  134. run curl --location --silent --show-error --insecure --resolve "mail.${domain}:80:${domain_ip}" "http://mail.${domain}/${webpath}"
  135. assert_success
  136. assert_output --partial "$webproof"
  137. fi
  138. # Test HTTPS
  139. if [ "$SSL" = "yes" ]; then
  140. # Test HTTP with 301 redirect for some reasons due to 301 redirect it fails
  141. run curl --silent --show-error --insecure --resolve "webmail.${domain}:80:${domain_ip}" "http://webmail.${domain}/${webpath}"
  142. assert_success
  143. assert_output --partial "301 Moved Permanently"
  144. # Test HTTP with 301 redirect for some reasons due to 301 redirect it fails
  145. run curl --silent --show-error --insecure --resolve "mail.${domain}:80:${domain_ip}" "http://mail.${domain}/${webpath}"
  146. assert_success
  147. assert_output --partial "301 Moved Permanently"
  148. run v-list-mail-domain-ssl $user $domain
  149. assert_success
  150. run curl --location --silent --show-error --insecure --resolve "webmail.${domain}:443:${domain_ip}" "https://webmail.${domain}/${webpath}"
  151. assert_success
  152. assert_output --partial "$webproof"
  153. run curl --location --silent --show-error --insecure --resolve "mail.${domain}:443:${domain_ip}" "https://mail.${domain}/${webpath}"
  154. assert_success
  155. assert_output --partial "$webproof"
  156. fi
  157. }
  158. function validate_database(){
  159. local type=$1
  160. local database=$2
  161. local dbuser=$3
  162. local password=$4
  163. host_str=$(grep "HOST='localhost'" $HESTIA/conf/$type.conf)
  164. parse_object_kv_list "$host_str"
  165. if [ -z $PORT ]; then PORT=3306; fi
  166. refute [ -z "$HOST" ]
  167. refute [ -z "$PORT" ]
  168. refute [ -z "$database" ]
  169. refute [ -z "$dbuser" ]
  170. refute [ -z "$password" ]
  171. if [ "$type" = "mysql" ]; then
  172. # Create an connection to verify correct username / password has been set correctly
  173. tmpfile=$(mktemp /tmp/mysql.XXXXXX)
  174. echo "[client]">$tmpfile
  175. echo "host='$HOST'" >> $tmpfile
  176. echo "user='$dbuser'" >> $tmpfile
  177. echo "password='$password'" >> $tmpfile
  178. echo "port='$PORT'" >> $tmpfile
  179. chmod 600 $tmpfile
  180. sql_tmp=$(mktemp /tmp/query.XXXXXX)
  181. echo "show databases;" > $sql_tmp
  182. run mysql --defaults-file=$tmpfile < "$sql_tmp"
  183. assert_success
  184. assert_output --partial "$database"
  185. rm -f "$sql_tmp"
  186. rm -f "$tmpfile"
  187. else
  188. echo "*:*:*:$dbuser:$password" > /root/.pgpass
  189. chmod 600 /root/.pgpass
  190. run export PGPASSWORD="$password" | psql -h $HOST -U "$dbuser" -p $PORT -d "$database" --no-password -c "\l"
  191. assert_success
  192. rm /root/.pgpass
  193. fi
  194. }
  195. function check_ip_banned(){
  196. local ip=$1
  197. local chain=$2
  198. run grep "IP='$ip' CHAIN='$chain'" $HESTIA/data/firewall/banlist.conf
  199. assert_success
  200. assert_output --partial "$ip"
  201. }
  202. function check_ip_not_banned(){
  203. local ip=$1
  204. local chain=$2
  205. run grep "IP='$ip' CHAIN='$chain'" $HESTIA/data/firewall/banlist.conf
  206. assert_failure E_ARGS
  207. refute_output
  208. }
  209. #----------------------------------------------------------#
  210. # IP #
  211. #----------------------------------------------------------#
  212. @test "Check reverse Dns validation" {
  213. # 1. PTR record for a IP should return a hostname(reverse) which in turn must resolve to the same IP addr(forward). (Full circle)
  214. # `-> not implemented in `is_ip_rdns_valid` yet and also not tested here
  215. # 2. Reject rPTR records that match generic dynamic IP pool patterns
  216. local ip="54.200.1.22"
  217. local rdns="ec2-54-200-1-22.us-west-2.compute.amazonaws.com"
  218. run is_ip_rdns_valid "$ip"
  219. assert_failure
  220. refute_output
  221. local rdns="ec2.54.200.1.22.us-west-2.compute.amazonaws.com"
  222. run is_ip_rdns_valid "$ip"
  223. assert_failure
  224. refute_output
  225. local rdns="ec2-22-1-200-54.us-west-2.compute.amazonaws.com"
  226. run is_ip_rdns_valid "$ip"
  227. assert_failure
  228. refute_output
  229. local rdns="ec2.22.1.200.54.us-west-2.compute.amazonaws.com"
  230. run is_ip_rdns_valid "$ip"
  231. assert_failure
  232. refute_output
  233. local rdns="ec2-200-54-1-22.us-west-2.compute.amazonaws.com"
  234. run is_ip_rdns_valid "$ip"
  235. assert_failure
  236. refute_output
  237. local rdns="panel-22.mydomain.tld"
  238. run is_ip_rdns_valid "$ip"
  239. assert_success
  240. assert_output "$rdns"
  241. local rdns="mail.mydomain.tld"
  242. run is_ip_rdns_valid "$ip"
  243. assert_success
  244. assert_output "$rdns"
  245. local rdns="mydomain.tld"
  246. run is_ip_rdns_valid "$ip"
  247. assert_success
  248. assert_output "$rdns"
  249. }
  250. #----------------------------------------------------------#
  251. # User #
  252. #----------------------------------------------------------#
  253. @test "Add new user" {
  254. run v-add-user $user $user $user@hestiacp.com default "Super Test"
  255. assert_success
  256. refute_output
  257. }
  258. @test "Change user password" {
  259. run v-change-user-password "$user" t3st-p4ssw0rd
  260. assert_success
  261. refute_output
  262. }
  263. @test "Change user email" {
  264. run v-change-user-contact "$user" tester@hestiacp.com
  265. assert_success
  266. refute_output
  267. }
  268. @test "Change user contact invalid email " {
  269. run v-change-user-contact "$user" testerhestiacp.com
  270. assert_failure $E_INVALID
  271. assert_output --partial 'Error: invalid email format'
  272. }
  273. @test "Change user name" {
  274. run v-change-user-name "$user" "New name"
  275. assert_success
  276. refute_output
  277. }
  278. @test "Change user shell" {
  279. run v-change-user-shell $user bash
  280. assert_success
  281. refute_output
  282. }
  283. @test "Change user invalid shell" {
  284. run v-change-user-shell $user bashinvalid
  285. assert_failure $E_INVALID
  286. assert_output --partial 'shell bashinvalid is not valid'
  287. }
  288. @test "Change user default ns" {
  289. run v-change-user-ns $user ns0.com ns1.com ns2.com ns3.com
  290. assert_success
  291. refute_output
  292. run v-list-user-ns "$user" plain
  293. assert_success
  294. assert_output --partial 'ns0.com'
  295. }
  296. @test "Change user language" {
  297. run v-change-user-language $user "nl"
  298. assert_success
  299. refute_output
  300. }
  301. @test "Change user language (Does not exists)" {
  302. run v-change-user-language $user "aa"
  303. assert_failure $E_NOTEXIST
  304. }
  305. @test "Change user sort order" {
  306. run v-change-user-sort-order $user "name"
  307. assert_success
  308. refute_output
  309. }
  310. @test "Change user theme" {
  311. run v-change-user-theme $user "flat"
  312. assert_success
  313. refute_output
  314. }
  315. @test "Change user theme (Does not exists)" {
  316. run v-change-user-theme $user "aa"
  317. assert_failure $E_NOTEXIST
  318. }
  319. @test "Change user login ip" {
  320. run v-change-user-config-value $user "LOGIN_USE_IPLIST" "1.2.3.4,1.2.3.5"
  321. assert_success
  322. refute_output
  323. }
  324. @test "Change user login ip (Failed)" {
  325. run v-change-user-config-value $user "LOGIN_USE_IPLIST" "'; echo 'jaap'; echo '"
  326. assert_failure $E_INVALID
  327. }
  328. @test "Add user notification" {
  329. run v-add-user-notification $user "Test message" "Message"
  330. assert_success
  331. refute_output
  332. }
  333. @test "Acknowledge user notification" {
  334. run v-acknowledge-user-notification $user 1
  335. assert_success
  336. refute_output
  337. }
  338. @test "List user notification" {
  339. run v-list-user-notifications $user csv
  340. assert_success
  341. assert_output --partial "1,\"Test message\",\"Message\",yes"
  342. }
  343. @test "Delete user notification" {
  344. run v-delete-user-notification admin 1
  345. assert_success
  346. refute_output
  347. }
  348. #----------------------------------------------------------#
  349. # Cron #
  350. #----------------------------------------------------------#
  351. @test "Cron: Add cron job" {
  352. run v-add-cron-job $user 1 1 1 1 1 echo
  353. assert_success
  354. refute_output
  355. }
  356. @test "Cron: Suspend cron job" {
  357. run v-suspend-cron-job $user 1
  358. assert_success
  359. refute_output
  360. }
  361. @test "Cron: Unsuspend cron job" {
  362. run v-unsuspend-cron-job $user 1
  363. assert_success
  364. refute_output
  365. }
  366. @test "Cron: Delete cron job" {
  367. run v-delete-cron-job $user 1
  368. assert_success
  369. refute_output
  370. }
  371. @test "Cron: Add cron job (duplicate)" {
  372. run v-add-cron-job $user 1 1 1 1 1 echo 1
  373. assert_success
  374. refute_output
  375. run v-add-cron-job $user 1 1 1 1 1 echo 1
  376. assert_failure $E_EXISTS
  377. assert_output --partial 'JOB=1 already exists'
  378. }
  379. @test "Cron: Second cron job" {
  380. run v-add-cron-job $user 2 2 2 2 2 echo 2
  381. assert_success
  382. refute_output
  383. }
  384. @test "Cron: Two cron jobs must be listed" {
  385. run v-list-cron-jobs $user csv
  386. assert_success
  387. assert_line --partial '1,1,1,1,1,"echo",no'
  388. assert_line --partial '2,2,2,2,2,"echo",no'
  389. }
  390. @test "Cron: rebuild" {
  391. run v-rebuild-cron-jobs $user
  392. assert_success
  393. refute_output
  394. }
  395. #----------------------------------------------------------#
  396. # IP #
  397. #----------------------------------------------------------#
  398. @test "Ip: Add new ip on first interface" {
  399. interface=$(v-list-sys-interfaces plain | head -n 1)
  400. run ip link show dev $interface
  401. assert_success
  402. local a2_rpaf="/etc/$WEB_SYSTEM/mods-enabled/rpaf.conf"
  403. local a2_remoteip="/etc/$WEB_SYSTEM/mods-enabled/remoteip.conf"
  404. # Save initial state
  405. echo "interface=${interface}" >> /tmp/hestia-test-env.sh
  406. [ -f "$a2_rpaf" ] && file_hash1=$(cat $a2_rpaf |md5sum |cut -d" " -f1) && echo "a2_rpaf_hash='${file_hash1}'" >> /tmp/hestia-test-env.sh
  407. [ -f "$a2_remoteip" ] && file_hash2=$(cat $a2_remoteip |md5sum |cut -d" " -f1) && echo "a2_remoteip_hash='${file_hash2}'" >> /tmp/hestia-test-env.sh
  408. local ip="198.18.0.12"
  409. run v-add-sys-ip $ip 255.255.255.255 $interface $user
  410. assert_success
  411. refute_output
  412. assert_file_exist /etc/$WEB_SYSTEM/conf.d/$ip.conf
  413. assert_file_exist $HESTIA/data/ips/$ip
  414. assert_file_contains $HESTIA/data/ips/$ip "OWNER='$user'"
  415. assert_file_contains $HESTIA/data/ips/$ip "INTERFACE='$interface'"
  416. if [ -n "$PROXY_SYSTEM" ]; then
  417. assert_file_exist /etc/$PROXY_SYSTEM/conf.d/$ip.conf
  418. [ -f "$a2_rpaf" ] && assert_file_contains "$a2_rpaf" "RPAFproxy_ips.*$ip\b"
  419. [ -f "$a2_remoteip" ] && assert_file_contains "$a2_remoteip" "RemoteIPInternalProxy $ip\$"
  420. fi
  421. }
  422. @test "Ip: Add ip (duplicate)" {
  423. run v-add-sys-ip 198.18.0.12 255.255.255.255 $interface $user
  424. assert_failure $E_EXISTS
  425. }
  426. @test "Ip: Add extra ip" {
  427. local ip="198.18.0.121"
  428. run v-add-sys-ip $ip 255.255.255.255 $interface $user
  429. assert_success
  430. refute_output
  431. assert_file_exist /etc/$WEB_SYSTEM/conf.d/$ip.conf
  432. assert_file_exist $HESTIA/data/ips/$ip
  433. assert_file_contains $HESTIA/data/ips/$ip "OWNER='$user'"
  434. assert_file_contains $HESTIA/data/ips/$ip "INTERFACE='$interface'"
  435. if [ -n "$PROXY_SYSTEM" ]; then
  436. assert_file_exist /etc/$PROXY_SYSTEM/conf.d/$ip.conf
  437. local a2_rpaf="/etc/$WEB_SYSTEM/mods-enabled/rpaf.conf"
  438. [ -f "$a2_rpaf" ] && assert_file_contains "$a2_rpaf" "RPAFproxy_ips.*$ip\b"
  439. local a2_remoteip="/etc/$WEB_SYSTEM/mods-enabled/remoteip.conf"
  440. [ -f "$a2_remoteip" ] && assert_file_contains "$a2_remoteip" "RemoteIPInternalProxy $ip\$"
  441. fi
  442. }
  443. @test "Ip: Delete ips" {
  444. local ip="198.18.0.12"
  445. run v-delete-sys-ip $ip
  446. assert_success
  447. refute_output
  448. assert_file_not_exist /etc/$WEB_SYSTEM/conf.d/$ip.conf
  449. assert_file_not_exist $HESTIA/data/ips/$ip
  450. ip="198.18.0.121"
  451. run v-delete-sys-ip $ip
  452. assert_success
  453. refute_output
  454. assert_file_not_exist /etc/$WEB_SYSTEM/conf.d/$ip.conf
  455. assert_file_not_exist $HESTIA/data/ips/$ip
  456. if [ -n "$PROXY_SYSTEM" ]; then
  457. assert_file_not_exist /etc/$PROXY_SYSTEM/conf.d/$ip.conf
  458. fi
  459. # remoteip and rpaf config hashes must match the initial one
  460. if [ ! -z "$a2_rpaf_hash" ]; then
  461. local a2_rpaf="/etc/$WEB_SYSTEM/mods-enabled/rpaf.conf"
  462. file_hash=$(cat $a2_rpaf |md5sum |cut -d" " -f1)
  463. assert_equal "$file_hash" "$a2_rpaf_hash"
  464. fi
  465. if [ ! -z "$a2_remoteip_hash" ]; then
  466. local a2_remoteip="/etc/$WEB_SYSTEM/mods-enabled/remoteip.conf"
  467. file_hash=$(cat $a2_remoteip |md5sum |cut -d" " -f1)
  468. assert_equal "$file_hash" "$a2_remoteip_hash"
  469. fi
  470. }
  471. @test "Ip: Add IP for rest of the test" {
  472. local ip="198.18.0.125"
  473. run v-add-sys-ip $ip 255.255.255.255 $interface $user
  474. assert_success
  475. refute_output
  476. assert_file_exist /etc/$WEB_SYSTEM/conf.d/$ip.conf
  477. assert_file_exist $HESTIA/data/ips/$ip
  478. assert_file_contains $HESTIA/data/ips/$ip "OWNER='$user'"
  479. assert_file_contains $HESTIA/data/ips/$ip "INTERFACE='$interface'"
  480. if [ -n "$PROXY_SYSTEM" ]; then
  481. assert_file_exist /etc/$PROXY_SYSTEM/conf.d/$ip.conf
  482. local a2_rpaf="/etc/$WEB_SYSTEM/mods-enabled/rpaf.conf"
  483. [ -f "$a2_rpaf" ] && assert_file_contains "$a2_rpaf" "RPAFproxy_ips.*$ip\b"
  484. local a2_remoteip="/etc/$WEB_SYSTEM/mods-enabled/remoteip.conf"
  485. [ -f "$a2_remoteip" ] && assert_file_contains "$a2_remoteip" "RemoteIPInternalProxy $ip\$"
  486. fi
  487. }
  488. #----------------------------------------------------------#
  489. # WEB #
  490. #----------------------------------------------------------#
  491. @test "WEB: Add web domain" {
  492. run v-add-web-domain $user $domain 198.18.0.125
  493. assert_success
  494. refute_output
  495. echo -e "<?php\necho 'Hestia Test:'.(4*3);" > $HOMEDIR/$user/web/$domain/public_html/php-test.php
  496. validate_web_domain $user $domain 'Hestia Test:12' 'php-test.php'
  497. rm $HOMEDIR/$user/web/$domain/public_html/php-test.php
  498. }
  499. @test "WEB: Add web domain (duplicate)" {
  500. run v-add-web-domain $user $domain 198.18.0.125
  501. assert_failure $E_EXISTS
  502. }
  503. @test "WEB: Add web domain alias" {
  504. run v-add-web-domain-alias $user $domain v3.$domain
  505. assert_success
  506. refute_output
  507. }
  508. @test "WEB: Add web domain alias (duplicate)" {
  509. run v-add-web-domain-alias $user $domain v3.$domain
  510. assert_failure $E_EXISTS
  511. }
  512. @test "WEB: Add web domain wildcard alias" {
  513. run v-add-web-domain-alias $user $domain "*.$domain"
  514. assert_success
  515. refute_output
  516. }
  517. @test "WEB: Delete web domain wildcard alias" {
  518. run v-delete-web-domain-alias $user $domain "*.$domain"
  519. assert_success
  520. refute_output
  521. }
  522. @test "WEB: Add web domain stats" {
  523. run v-add-web-domain-stats $user $domain awstats
  524. assert_success
  525. refute_output
  526. }
  527. @test "WEB: Add web domain stats user" {
  528. skip
  529. run v-add-web-domain-stats-user $user $domain test m3g4p4ssw0rd
  530. assert_success
  531. refute_output
  532. }
  533. @test "WEB: Suspend web domain" {
  534. run v-suspend-web-domain $user $domain
  535. assert_success
  536. refute_output
  537. validate_web_domain $user $domain 'This site is currently suspended'
  538. }
  539. @test "WEB: Unsuspend web domain" {
  540. run v-unsuspend-web-domain $user $domain
  541. assert_success
  542. refute_output
  543. echo -e "<?php\necho 'Hestia Test:'.(4*3);" > $HOMEDIR/$user/web/$domain/public_html/php-test.php
  544. validate_web_domain $user $domain 'Hestia Test:12' 'php-test.php'
  545. rm $HOMEDIR/$user/web/$domain/public_html/php-test.php
  546. }
  547. @test "WEB: Add redirect to www.domain.com" {
  548. run v-add-web-domain-redirect $user $domain www.$domain 301
  549. assert_success
  550. refute_output
  551. run validate_headers_domain $user $domain "301"
  552. }
  553. @test "WEB: Delete redirect to www.domain.com" {
  554. run v-delete-web-domain-redirect $user $domain
  555. assert_success
  556. refute_output
  557. }
  558. @test "WEB: Enable Fast CGI Cache" {
  559. if [ "$WEB_SYSTEM" != "nginx" ]; then
  560. skip "FastCGI cache is not supported"
  561. fi
  562. run v-add-fastcgi-cache $user $domain '1m' yes
  563. assert_success
  564. refute_output
  565. echo -e "<?php\necho 'Hestia Test:'.(4*3);" > $HOMEDIR/$user/web/$domain/public_html/php-test.php
  566. run validate_headers_domain $user $domain "Miss"
  567. run validate_headers_domain $user $domain "Hit"
  568. rm $HOMEDIR/$user/web/$domain/public_html/php-test.php
  569. }
  570. @test "WEB: Disable Fast CGI Cache" {
  571. if [ "$WEB_SYSTEM" != "nginx" ]; then
  572. skip "FastCGI cache is not supported"
  573. fi
  574. run v-delete-fastcgi-cache $user $domain '1m' yes
  575. assert_success
  576. refute_output
  577. }
  578. @test "WEB: Generate Self signed certificate" {
  579. ssl=$(v-generate-ssl-cert "$domain" "info@$domain" US CA "Orange County" HestiaCP IT "mail.$domain" | tail -n1 | awk '{print $2}')
  580. echo $ssl;
  581. mv $ssl/$domain.crt /tmp/$domain.crt
  582. mv $ssl/$domain.key /tmp/$domain.key
  583. }
  584. @test "WEB: Add ssl" {
  585. # Use self signed certificates during last test
  586. run v-add-web-domain-ssl $user $domain /tmp
  587. assert_success
  588. refute_output
  589. }
  590. @test "WEB: Rebuild web domain" {
  591. run v-rebuild-web-domains $user
  592. assert_success
  593. refute_output
  594. }
  595. #----------------------------------------------------------#
  596. # IDN #
  597. #----------------------------------------------------------#
  598. @test "WEB: Add IDN domain UTF idn-tést.eu" {
  599. run v-add-web-domain $user idn-tést.eu 198.18.0.125
  600. assert_success
  601. refute_output
  602. echo -e "<?php\necho 'Hestia Test:'.(4*3);" > $HOMEDIR/$user/web/idn-tést.eu/public_html/php-test.php
  603. validate_web_domain $user idn-tést.eu 'Hestia Test:12' 'php-test.php'
  604. rm $HOMEDIR/$user/web/idn-tést.eu/public_html/php-test.php
  605. }
  606. @test "WEB: Add IDN domain ASCII idn-tést.eu" {
  607. # Expected to fail due to utf exists
  608. run v-add-web-domain $user $( idn -a idn-tést.eu) 198.18.0.125
  609. assert_failure $E_EXISTS
  610. }
  611. @test "WEB: Delete IDN domain idn-tést.eu" {
  612. run v-delete-web-domain $user idn-tést.eu
  613. assert_success
  614. refute_output
  615. }
  616. @test "WEB: Add IDN domain UTF bløst.com" {
  617. run v-add-web-domain $user bløst.com 198.18.0.125
  618. assert_success
  619. refute_output
  620. }
  621. @test "WEB: Delete IDN domain bløst.com" {
  622. run v-delete-web-domain $user bløst.com
  623. assert_success
  624. refute_output
  625. }
  626. #----------------------------------------------------------#
  627. # MULTIPHP #
  628. #----------------------------------------------------------#
  629. @test "Multiphp: Default php Backend version" {
  630. def_phpver=$(multiphp_default_version)
  631. multi_domain="multiphp.${domain}"
  632. run v-add-web-domain $user $multi_domain 198.18.0.125
  633. assert_success
  634. refute_output
  635. echo -e "<?php\necho PHP_MAJOR_VERSION.'.'.PHP_MINOR_VERSION;" > "$HOMEDIR/$user/web/$multi_domain/public_html/php-test.php"
  636. validate_web_domain $user $multi_domain "$def_phpver" 'php-test.php'
  637. rm "$HOMEDIR/$user/web/$multi_domain/public_html/php-test.php"
  638. }
  639. @test "Multiphp: Change backend version - PHP v5.6" {
  640. test_phpver='5.6'
  641. multi_domain="multiphp.${domain}"
  642. if [ ! -d "/etc/php/${test_phpver}/fpm/pool.d/" ]; then
  643. skip "PHP ${test_phpver} not installed"
  644. fi
  645. run v-change-web-domain-backend-tpl $user $multi_domain 'PHP-5_6' 'yes'
  646. assert_success
  647. refute_output
  648. # Changing web backend will create a php-fpm pool config in the corresponding php folder
  649. assert_file_exist "/etc/php/${test_phpver}/fpm/pool.d/${multi_domain}.conf"
  650. # A single php-fpm pool config file must be present
  651. num_fpm_config_files="$(find -L /etc/php/ -name "${multi_domain}.conf" | wc -l)"
  652. assert_equal "$num_fpm_config_files" '1'
  653. echo -e "<?php\necho 'hestia-multiphptest:'.PHP_MAJOR_VERSION.'.'.PHP_MINOR_VERSION;" > "$HOMEDIR/$user/web/$multi_domain/public_html/php-test.php"
  654. validate_web_domain $user $multi_domain "hestia-multiphptest:$test_phpver" 'php-test.php'
  655. rm "$HOMEDIR/$user/web/$multi_domain/public_html/php-test.php"
  656. }
  657. @test "Multiphp: Change backend version - PHP v7.0" {
  658. test_phpver='7.0'
  659. multi_domain="multiphp.${domain}"
  660. if [ ! -d "/etc/php/${test_phpver}/fpm/pool.d/" ]; then
  661. skip "PHP ${test_phpver} not installed"
  662. fi
  663. run v-change-web-domain-backend-tpl $user $multi_domain 'PHP-7_0' 'yes'
  664. assert_success
  665. refute_output
  666. # Changing web backend will create a php-fpm pool config in the corresponding php folder
  667. assert_file_exist "/etc/php/${test_phpver}/fpm/pool.d/${multi_domain}.conf"
  668. # A single php-fpm pool config file must be present
  669. num_fpm_config_files="$(find -L /etc/php/ -name "${multi_domain}.conf" | wc -l)"
  670. assert_equal "$num_fpm_config_files" '1'
  671. echo -e "<?php\necho 'hestia-multiphptest:'.PHP_MAJOR_VERSION.'.'.PHP_MINOR_VERSION;" > "$HOMEDIR/$user/web/$multi_domain/public_html/php-test.php"
  672. validate_web_domain $user $multi_domain "hestia-multiphptest:$test_phpver" 'php-test.php'
  673. rm "$HOMEDIR/$user/web/$multi_domain/public_html/php-test.php"
  674. }
  675. @test "Multiphp: Change backend version - PHP v7.1" {
  676. test_phpver='7.1'
  677. multi_domain="multiphp.${domain}"
  678. if [ ! -d "/etc/php/${test_phpver}/fpm/pool.d/" ]; then
  679. skip "PHP ${test_phpver} not installed"
  680. fi
  681. run v-change-web-domain-backend-tpl $user $multi_domain 'PHP-7_1' 'yes'
  682. assert_success
  683. refute_output
  684. # Changing web backend will create a php-fpm pool config in the corresponding php folder
  685. assert_file_exist "/etc/php/${test_phpver}/fpm/pool.d/${multi_domain}.conf"
  686. # A single php-fpm pool config file must be present
  687. num_fpm_config_files="$(find -L /etc/php/ -name "${multi_domain}.conf" | wc -l)"
  688. assert_equal "$num_fpm_config_files" '1'
  689. echo -e "<?php\necho 'hestia-multiphptest:'.PHP_MAJOR_VERSION.'.'.PHP_MINOR_VERSION;" > "$HOMEDIR/$user/web/$multi_domain/public_html/php-test.php"
  690. validate_web_domain $user $multi_domain "hestia-multiphptest:$test_phpver" 'php-test.php'
  691. rm "$HOMEDIR/$user/web/$multi_domain/public_html/php-test.php"
  692. }
  693. @test "Multiphp: Change backend version - PHP v7.2" {
  694. test_phpver='7.2'
  695. multi_domain="multiphp.${domain}"
  696. if [ ! -d "/etc/php/${test_phpver}/fpm/pool.d/" ]; then
  697. skip "PHP ${test_phpver} not installed"
  698. fi
  699. run v-change-web-domain-backend-tpl $user $multi_domain 'PHP-7_2' 'yes'
  700. assert_success
  701. refute_output
  702. # Changing web backend will create a php-fpm pool config in the corresponding php folder
  703. assert_file_exist "/etc/php/${test_phpver}/fpm/pool.d/${multi_domain}.conf"
  704. # A single php-fpm pool config file must be present
  705. num_fpm_config_files="$(find -L /etc/php/ -name "${multi_domain}.conf" | wc -l)"
  706. assert_equal "$num_fpm_config_files" '1'
  707. echo -e "<?php\necho 'hestia-multiphptest:'.PHP_MAJOR_VERSION.'.'.PHP_MINOR_VERSION;" > "$HOMEDIR/$user/web/$multi_domain/public_html/php-test.php"
  708. validate_web_domain $user $multi_domain "hestia-multiphptest:$test_phpver" 'php-test.php'
  709. rm "$HOMEDIR/$user/web/$multi_domain/public_html/php-test.php"
  710. }
  711. @test "Multiphp: Change backend version - PHP v7.3" {
  712. test_phpver='7.3'
  713. multi_domain="multiphp.${domain}"
  714. if [ ! -d "/etc/php/${test_phpver}/fpm/pool.d/" ]; then
  715. skip "PHP ${test_phpver} not installed"
  716. fi
  717. run v-change-web-domain-backend-tpl $user $multi_domain 'PHP-7_3' 'yes'
  718. assert_success
  719. refute_output
  720. # Changing web backend will create a php-fpm pool config in the corresponding php folder
  721. assert_file_exist "/etc/php/${test_phpver}/fpm/pool.d/${multi_domain}.conf"
  722. # A single php-fpm pool config file must be present
  723. num_fpm_config_files="$(find -L /etc/php/ -name "${multi_domain}.conf" | wc -l)"
  724. assert_equal "$num_fpm_config_files" '1'
  725. echo -e "<?php\necho 'hestia-multiphptest:'.PHP_MAJOR_VERSION.'.'.PHP_MINOR_VERSION;" > "$HOMEDIR/$user/web/$multi_domain/public_html/php-test.php"
  726. validate_web_domain $user $multi_domain "hestia-multiphptest:$test_phpver" 'php-test.php'
  727. rm "$HOMEDIR/$user/web/$multi_domain/public_html/php-test.php"
  728. }
  729. @test "Multiphp: Change backend version - PHP v7.4" {
  730. test_phpver='7.4'
  731. multi_domain="multiphp.${domain}"
  732. if [ ! -d "/etc/php/${test_phpver}/fpm/pool.d/" ]; then
  733. skip "PHP ${test_phpver} not installed"
  734. fi
  735. run v-change-web-domain-backend-tpl $user $multi_domain 'PHP-7_4' 'yes'
  736. assert_success
  737. refute_output
  738. # Changing web backend will create a php-fpm pool config in the corresponding php folder
  739. assert_file_exist "/etc/php/${test_phpver}/fpm/pool.d/${multi_domain}.conf"
  740. # A single php-fpm pool config file must be present
  741. num_fpm_config_files="$(find -L /etc/php/ -name "${multi_domain}.conf" | wc -l)"
  742. assert_equal "$num_fpm_config_files" '1'
  743. echo -e "<?php\necho 'hestia-multiphptest:'.PHP_MAJOR_VERSION.'.'.PHP_MINOR_VERSION;" > "$HOMEDIR/$user/web/$multi_domain/public_html/php-test.php"
  744. validate_web_domain $user $multi_domain "hestia-multiphptest:$test_phpver" 'php-test.php'
  745. rm "$HOMEDIR/$user/web/$multi_domain/public_html/php-test.php"
  746. }
  747. @test "Multiphp: Change backend version - PHP v8.0" {
  748. test_phpver='8.0'
  749. multi_domain="multiphp.${domain}"
  750. if [ ! -d "/etc/php/${test_phpver}/fpm/pool.d/" ]; then
  751. skip "PHP ${test_phpver} not installed"
  752. fi
  753. run v-change-web-domain-backend-tpl $user $multi_domain 'PHP-8_0' 'yes'
  754. assert_success
  755. refute_output
  756. # Changing web backend will create a php-fpm pool config in the corresponding php folder
  757. assert_file_exist "/etc/php/${test_phpver}/fpm/pool.d/${multi_domain}.conf"
  758. # A single php-fpm pool config file must be present
  759. num_fpm_config_files="$(find -L /etc/php/ -name "${multi_domain}.conf" | wc -l)"
  760. assert_equal "$num_fpm_config_files" '1'
  761. echo -e "<?php\necho 'hestia-multiphptest:'.PHP_MAJOR_VERSION.'.'.PHP_MINOR_VERSION;" > "$HOMEDIR/$user/web/$multi_domain/public_html/php-test.php"
  762. validate_web_domain $user $multi_domain "hestia-multiphptest:$test_phpver" 'php-test.php'
  763. rm $HOMEDIR/$user/web/$multi_domain/public_html/php-test.php
  764. }
  765. @test "Multiphp: Change backend version - PHP v8.1" {
  766. test_phpver='8.1'
  767. multi_domain="multiphp.${domain}"
  768. if [ ! -d "/etc/php/${test_phpver}/fpm/pool.d/" ]; then
  769. skip "PHP ${test_phpver} not installed"
  770. fi
  771. run v-change-web-domain-backend-tpl $user $multi_domain 'PHP-8_0' 'yes'
  772. assert_success
  773. refute_output
  774. # Changing web backend will create a php-fpm pool config in the corresponding php folder
  775. assert_file_exist "/etc/php/${test_phpver}/fpm/pool.d/${multi_domain}.conf"
  776. # A single php-fpm pool config file must be present
  777. num_fpm_config_files="$(find -L /etc/php/ -name "${multi_domain}.conf" | wc -l)"
  778. assert_equal "$num_fpm_config_files" '1'
  779. echo -e "<?php\necho 'hestia-multiphptest:'.PHP_MAJOR_VERSION.'.'.PHP_MINOR_VERSION;" > "$HOMEDIR/$user/web/$multi_domain/public_html/php-test.php"
  780. validate_web_domain $user $multi_domain "hestia-multiphptest:$test_phpver" 'php-test.php'
  781. rm $HOMEDIR/$user/web/$multi_domain/public_html/php-test.php
  782. }
  783. @test "Multiphp: Cleanup" {
  784. multi_domain="multiphp.${domain}"
  785. run v-delete-web-domain $user $multi_domain 'yes'
  786. assert_success
  787. refute_output
  788. # No php-fpm pool config file must be present
  789. num_fpm_config_files="$(find -L /etc/php/ -name "${multi_domain}.conf" | wc -l)"
  790. assert_equal "$num_fpm_config_files" '0'
  791. }
  792. #----------------------------------------------------------#
  793. # CUSTOM DOCROOT #
  794. #----------------------------------------------------------#
  795. @test "Docroot: Self Subfolder" {
  796. docroot1_domain="docroot1.${domain}"
  797. run v-add-web-domain $user $docroot1_domain 198.18.0.125
  798. assert_success
  799. refute_output
  800. run v-add-fs-directory $user "$HOMEDIR/$user/web/$docroot1_domain/public_html/public/"
  801. assert_success
  802. refute_output
  803. run v-change-web-domain-docroot $user "$docroot1_domain" "$docroot1_domain" "/public"
  804. assert_success
  805. refute_output
  806. echo -e '<?php\necho "self-sub-".$_SERVER["HTTP_HOST"];' > "$HOMEDIR/$user/web/$docroot1_domain/public_html/public/php-test.php"
  807. validate_web_domain $user $docroot1_domain "self-sub-${docroot1_domain}" 'php-test.php'
  808. rm "$HOMEDIR/$user/web/$docroot1_domain/public_html/public/php-test.php"
  809. }
  810. @test "Docroot: Other domain subfolder" {
  811. docroot1_domain="docroot1.${domain}"
  812. docroot2_domain="docroot2.${domain}"
  813. run v-add-web-domain $user $docroot2_domain 198.18.0.125
  814. assert_success
  815. refute_output
  816. run v-add-fs-directory $user "$HOMEDIR/$user/web/$docroot2_domain/public_html/public/"
  817. assert_success
  818. refute_output
  819. run v-change-web-domain-docroot $user "$docroot1_domain" "$docroot2_domain" "/public"
  820. assert_success
  821. refute_output
  822. echo -e '<?php\necho "doc2-sub-".$_SERVER["HTTP_HOST"];' > "$HOMEDIR/$user/web/$docroot2_domain/public_html/public/php-test.php"
  823. validate_web_domain $user $docroot1_domain "doc2-sub-${docroot1_domain}" 'php-test.php'
  824. rm "$HOMEDIR/$user/web/$docroot2_domain/public_html/public/php-test.php"
  825. }
  826. @test "Docroot: Other domain root folder" {
  827. docroot1_domain="docroot1.${domain}"
  828. docroot2_domain="docroot2.${domain}"
  829. run v-change-web-domain-docroot $user "$docroot1_domain" "$docroot2_domain"
  830. assert_success
  831. refute_output
  832. echo -e '<?php\necho "doc2-root-".$_SERVER["HTTP_HOST"];' > "$HOMEDIR/$user/web/$docroot2_domain/public_html/php-test.php"
  833. validate_web_domain $user $docroot1_domain "doc2-root-${docroot1_domain}" 'php-test.php'
  834. rm "$HOMEDIR/$user/web/$docroot2_domain/public_html/php-test.php"
  835. }
  836. @test "Docroot: Reset" {
  837. docroot1_domain="docroot1.${domain}"
  838. run v-change-web-domain-docroot $user "$docroot1_domain" "default"
  839. assert_success
  840. refute_output
  841. echo -e '<?php\necho "doc1-root-".$_SERVER["HTTP_HOST"];' > "$HOMEDIR/$user/web/$docroot1_domain/public_html/php-test.php"
  842. validate_web_domain $user $docroot1_domain "doc1-root-${docroot1_domain}" 'php-test.php'
  843. rm "$HOMEDIR/$user/web/$docroot1_domain/public_html/php-test.php"
  844. }
  845. @test "Docroot: Cleanup" {
  846. docroot1_domain="docroot1.${domain}"
  847. docroot2_domain="docroot2.${domain}"
  848. run v-delete-web-domain $user $docroot1_domain
  849. assert_success
  850. refute_output
  851. run v-delete-web-domain $user $docroot2_domain
  852. assert_success
  853. refute_output
  854. }
  855. #----------------------------------------------------------#
  856. # DNS #
  857. #----------------------------------------------------------#
  858. @test "DNS: Add domain" {
  859. run v-add-dns-domain $user $domain 198.18.0.125
  860. assert_success
  861. refute_output
  862. }
  863. @test "DNS: Add domain (duplicate)" {
  864. run v-add-dns-domain $user $domain 198.18.0.125
  865. assert_failure $E_EXISTS
  866. }
  867. @test "DNS: Add domain record" {
  868. run v-add-dns-record $user $domain test A 198.18.0.125 20
  869. assert_success
  870. refute_output
  871. }
  872. @test "DNS: Change DNS record" {
  873. run v-change-dns-record $user $domain 20 test A 198.18.0.125 "" "" 1500
  874. assert_success
  875. refute_output
  876. }
  877. @test "DNS: Change DNS record (no update)" {
  878. run v-change-dns-record $user $domain 20 test A 198.18.0.125 "" "" 1500
  879. assert_failure $E_EXSIST
  880. }
  881. @test "DNS: Change DNS record id" {
  882. run v-change-dns-record-id $user $domain 20 21
  883. assert_success
  884. refute_output
  885. # Change back
  886. run v-change-dns-record-id $user $domain 21 20
  887. }
  888. @test "DNS: Change DNS record id (no update)" {
  889. run v-change-dns-record-id $user $domain 20 20
  890. assert_failure $E_EXSIST
  891. }
  892. @test "DNS: Delete domain record" {
  893. run v-delete-dns-record $user $domain 20
  894. assert_success
  895. refute_output
  896. }
  897. @test "DNS: Delete missing domain record" {
  898. run v-delete-dns-record $user $domain 20
  899. assert_failure $E_NOTEXIST
  900. }
  901. @test "DNS: Change domain expire date" {
  902. run v-change-dns-domain-exp $user $domain 2020-01-01
  903. assert_success
  904. refute_output
  905. }
  906. @test "DNS: Change domain ip" {
  907. run v-change-dns-domain-ip $user $domain 127.0.0.1
  908. assert_success
  909. refute_output
  910. }
  911. @test "DNS: Suspend domain" {
  912. run v-suspend-dns-domain $user $domain
  913. assert_success
  914. refute_output
  915. }
  916. @test "DNS: Unsuspend domain" {
  917. run v-unsuspend-dns-domain $user $domain
  918. assert_success
  919. refute_output
  920. }
  921. @test "DNS: Rebuild" {
  922. run v-rebuild-dns-domains $user
  923. assert_success
  924. refute_output
  925. }
  926. #----------------------------------------------------------#
  927. # MAIL #
  928. #----------------------------------------------------------#
  929. @test "MAIL: Add domain" {
  930. run v-add-mail-domain $user $domain
  931. assert_success
  932. refute_output
  933. validate_mail_domain $user $domain
  934. }
  935. @test "MAIL: Add mail domain webmail client (Roundcube)" {
  936. run v-add-mail-domain-webmail $user $domain "roundcube" "yes"
  937. assert_success
  938. refute_output
  939. # echo -e "<?php\necho 'Server: ' . \$_SERVER['SERVER_SOFTWARE'];" > /var/lib/roundcube/check_server.php
  940. validate_webmail_domain $user $domain 'Welcome to Roundcube Webmail'
  941. # rm /var/lib/roundcube/check_server.php
  942. }
  943. @test "Mail: Add SSL to mail domain" {
  944. # Use generated certificates during WEB Generate Self signed certificate
  945. run v-add-mail-domain-ssl $user $domain /tmp
  946. assert_success
  947. refute_output
  948. validate_webmail_domain $user $domain 'Welcome to Roundcube Webmail'
  949. }
  950. @test "MAIL: Add mail domain webmail client (Rainloop)" {
  951. if [ -z "$(echo $WEBMAIL_SYSTEM | grep -w "rainloop")" ]; then
  952. skip "Webmail client Rainloop not installed"
  953. fi
  954. run v-add-mail-domain-webmail $user $domain "rainloop" "yes"
  955. assert_success
  956. refute_output
  957. validate_mail_domain $user $domain
  958. validate_webmail_domain $user $domain 'RainLoop Webmail'
  959. }
  960. @test "MAIL: Disable webmail client" {
  961. run v-add-mail-domain-webmail $user $domain "disabled" "yes"
  962. assert_success
  963. refute_output
  964. validate_mail_domain $user $domain
  965. validate_webmail_domain $user $domain 'Success!'
  966. }
  967. @test "MAIL: Add domain (duplicate)" {
  968. run v-add-mail-domain $user $domain
  969. assert_failure $E_EXISTS
  970. }
  971. @test "MAIL: Add account" {
  972. run v-add-mail-account $user $domain test t3st-p4ssw0rd
  973. assert_success
  974. refute_output
  975. }
  976. @test "MAIL: Add account (duplicate)" {
  977. run v-add-mail-account $user $domain test t3st-p4ssw0rd
  978. assert_failure $E_EXISTS
  979. }
  980. @test "MAIL: Delete account" {
  981. run v-delete-mail-account $user $domain test
  982. assert_success
  983. refute_output
  984. }
  985. @test "MAIL: Delete missing account" {
  986. run v-delete-mail-account $user $domain test
  987. assert_failure $E_NOTEXIST
  988. }
  989. @test "MAIL: Rebuild mail domain" {
  990. run v-rebuild-mail-domains $user
  991. assert_success
  992. refute_output
  993. }
  994. #----------------------------------------------------------#
  995. # Limit possibilities adding different owner domain #
  996. #----------------------------------------------------------#
  997. @test "Allow Users: User can't add user.user2.com " {
  998. # Case: admin company.ltd
  999. # users should not be allowed to add user.company.ltd
  1000. run v-add-user $user2 $user2 $user@hestiacp.com default "Super Test"
  1001. assert_success
  1002. refute_output
  1003. run v-add-web-domain $user2 $rootdomain
  1004. assert_success
  1005. refute_output
  1006. run v-add-web-domain $user $subdomain
  1007. assert_failure $E_EXISTS
  1008. }
  1009. @test "Allow Users: User can't add user.user2.com as alias" {
  1010. run v-add-web-domain-alias $user $domain $subdomain
  1011. assert_failure $E_EXISTS
  1012. }
  1013. @test "Allow Users: User can't add user.user2.com as mail domain" {
  1014. run v-add-mail-domain $user $subdomain
  1015. assert_failure $E_EXISTS
  1016. }
  1017. @test "Allow Users: User can't add user.user2.com as dns domain" {
  1018. run v-add-dns-domain $user $subdomain 198.18.0.125
  1019. assert_failure $E_EXISTS
  1020. }
  1021. @test "Allow Users: Set Allow users" {
  1022. # Allow user to yes allows
  1023. # Case: admin company.ltd
  1024. # users are allowed to add user.company.ltd
  1025. run v-add-web-domain-allow-users $user2 $rootdomain
  1026. assert_success
  1027. refute_output
  1028. }
  1029. @test "Allow Users: User can add user.user2.com" {
  1030. run v-add-web-domain $user $subdomain
  1031. assert_success
  1032. refute_output
  1033. }
  1034. @test "Allow Users: User can add user.user2.com as alias" {
  1035. run v-delete-web-domain $user $subdomain
  1036. assert_success
  1037. refute_output
  1038. run v-add-web-domain-alias $user $domain $subdomain
  1039. assert_success
  1040. refute_output
  1041. }
  1042. @test "Allow Users: User can add user.user2.com as mail domain" {
  1043. run v-add-mail-domain $user $subdomain
  1044. assert_success
  1045. refute_output
  1046. }
  1047. @test "Allow Users: User can add user.user2.com as dns domain" {
  1048. run v-add-dns-domain $user $subdomain 198.18.0.125
  1049. assert_success
  1050. refute_output
  1051. }
  1052. @test "Allow Users: Cleanup tests" {
  1053. run v-delete-dns-domain $user $subdomain
  1054. assert_success
  1055. refute_output
  1056. run v-delete-mail-domain $user $subdomain
  1057. assert_success
  1058. refute_output
  1059. }
  1060. @test "Allow Users: Set Allow users no" {
  1061. run v-delete-web-domain-alias $user $domain $subdomain
  1062. assert_success
  1063. refute_output
  1064. run v-delete-web-domain-allow-users $user2 $rootdomain
  1065. assert_success
  1066. refute_output
  1067. }
  1068. @test "Allow Users: User can't add user.user2.com again" {
  1069. run v-add-web-domain $user $subdomain
  1070. assert_failure $E_EXISTS
  1071. }
  1072. @test "Allow Users: user2 can add user.user2.com again" {
  1073. run v-add-web-domain $user2 $subdomain
  1074. assert_success
  1075. refute_output
  1076. }
  1077. @test "Allow Users: Delete user2" {
  1078. run v-delete-user $user2
  1079. assert_success
  1080. refute_output
  1081. }
  1082. #----------------------------------------------------------#
  1083. # DB #
  1084. #----------------------------------------------------------#
  1085. @test "MYSQL: Add database" {
  1086. run v-add-database $user database dbuser 1234 mysql
  1087. assert_success
  1088. refute_output
  1089. # validate_database mysql database_name database_user password
  1090. validate_database mysql $database $dbuser 1234
  1091. }
  1092. @test "MYSQL: Add Database (Duplicate)" {
  1093. run v-add-database $user database dbuser 1234 mysql
  1094. assert_failure $E_EXISTS
  1095. }
  1096. @test "MYSQL: Rebuild Database" {
  1097. run v-rebuild-database $user $database
  1098. assert_success
  1099. refute_output
  1100. }
  1101. @test "MYSQL: Change database user password" {
  1102. run v-change-database-password $user $database 123456
  1103. assert_success
  1104. refute_output
  1105. validate_database mysql $database $dbuser 123456
  1106. }
  1107. @test "MYSQL: Change database user" {
  1108. run v-change-database-user $user $database database
  1109. assert_success
  1110. refute_output
  1111. validate_database mysql $database $database 123456
  1112. }
  1113. @test "MYSQL: Suspend database" {
  1114. run v-suspend-database $user $database
  1115. assert_success
  1116. refute_output
  1117. }
  1118. @test "MYSQL: Unsuspend database" {
  1119. run v-unsuspend-database $user $database
  1120. assert_success
  1121. refute_output
  1122. }
  1123. @test "MYSQL: Delete database" {
  1124. run v-delete-database $user $database
  1125. assert_success
  1126. refute_output
  1127. }
  1128. @test "MYSQL: Delete missing database" {
  1129. run v-delete-database $user $database
  1130. assert_failure $E_NOTEXIST
  1131. }
  1132. @test "PGSQL: Add database invalid user" {
  1133. if [ -z "$(echo $DB_SYSTEM | grep -w "pgsql")" ]; then
  1134. skip "PostGreSQL is not installed"
  1135. fi
  1136. run v-add-database "$user" "database" "dbuser" "1234ABCD" "pgsql"
  1137. assert_failure $E_INVALID
  1138. }
  1139. @test "PGSQL: Add database" {
  1140. if [ -z "$(echo $DB_SYSTEM | grep -w "pgsql")" ]; then
  1141. skip "PostGreSQL is not installed"
  1142. fi
  1143. run v-add-user $pguser $pguser $user@hestiacp.com default "Super Test"
  1144. run v-add-database "$pguser" "database" "dbuser" "1234ABCD" "pgsql"
  1145. assert_success
  1146. refute_output
  1147. validate_database pgsql $pgdatabase $pgdbuser "1234ABCD"
  1148. }
  1149. @test "PGSQL: Add Database (Duplicate)" {
  1150. if [ -z "$(echo $DB_SYSTEM | grep -w "pgsql")" ]; then
  1151. skip "PostGreSQL is not installed"
  1152. fi
  1153. run v-add-database "$pguser" "database" "dbuser" "1234ABCD" "pgsql"
  1154. assert_failure $E_EXISTS
  1155. }
  1156. @test "PGSQL: Rebuild Database" {
  1157. if [ -z "$(echo $DB_SYSTEM | grep -w "pgsql")" ]; then
  1158. skip "PostGreSQL is not installed"
  1159. fi
  1160. run v-rebuild-database $pguser $pgdatabase
  1161. assert_success
  1162. refute_output
  1163. }
  1164. @test "PGSQL: Change database user password" {
  1165. if [ -z "$(echo $DB_SYSTEM | grep -w "pgsql")" ]; then
  1166. skip "PostGreSQL is not installed"
  1167. fi
  1168. run v-change-database-password $pguser $pgdatabase "123456"
  1169. assert_success
  1170. refute_output
  1171. validate_database pgsql $pgdatabase $pgdbuser "123456"
  1172. }
  1173. @test "PGSQL: Suspend database" {
  1174. if [ -z "$(echo $DB_SYSTEM | grep -w "pgsql")" ]; then
  1175. skip "PostGreSQL is not installed"
  1176. fi
  1177. run v-suspend-database $pguser $pgdatabase
  1178. assert_success
  1179. refute_output
  1180. }
  1181. @test "PGSQL: Unsuspend database" {
  1182. if [ -z "$(echo $DB_SYSTEM | grep -w "pgsql")" ]; then
  1183. skip "PostGreSQL is not installed"
  1184. fi
  1185. run v-unsuspend-database $pguser $pgdatabase
  1186. assert_success
  1187. refute_output
  1188. }
  1189. @test "PGSQL: Change database user" {
  1190. if [ -z "$(echo $DB_SYSTEM | grep -w "pgsql")" ]; then
  1191. skip "PostGreSQL is not installed"
  1192. fi
  1193. skip
  1194. run v-change-database-user $pguser $pgdatabase database
  1195. assert_success
  1196. refute_output
  1197. validate_database pgsql $pgdatabase $pgdatabase 123456
  1198. }
  1199. @test "PGSQL: Delete database" {
  1200. if [ -z "$(echo $DB_SYSTEM | grep -w "pgsql")" ]; then
  1201. skip "PostGreSQL is not installed"
  1202. fi
  1203. run v-delete-database $pguser $pgdatabase
  1204. assert_success
  1205. refute_output
  1206. }
  1207. @test "PGSQL: Delete missing database" {
  1208. if [ -z "$(echo $DB_SYSTEM | grep -w "pgsql")" ]; then
  1209. skip "PostGreSQL is not installed"
  1210. fi
  1211. run v-delete-database $pguser $pgdatabase
  1212. assert_failure $E_NOTEXIST
  1213. run v-delete-user $pguser
  1214. }
  1215. #----------------------------------------------------------#
  1216. # System #
  1217. #----------------------------------------------------------#
  1218. @test "System: Set/Enable SMTP account for internal mail" {
  1219. run v-add-sys-smtp $domain 587 STARTTLS info@$domain 1234-test noreply@$domain
  1220. assert_success
  1221. refute_output
  1222. }
  1223. @test "System: Disable SMTP account for internal mail" {
  1224. run v-delete-sys-smtp
  1225. assert_success
  1226. refute_output
  1227. }
  1228. @test "System: Set/Enable SMTP relay" {
  1229. run v-add-sys-smtp-relay $domain info@$domain 1234-test 587
  1230. assert_success
  1231. refute_output
  1232. assert_file_exist /etc/exim4/smtp_relay.conf
  1233. }
  1234. @test "System: Delete SMTP relay" {
  1235. run v-delete-sys-smtp-relay
  1236. assert_success
  1237. refute_output
  1238. assert_file_not_exist /etc/exim4/smtp_relay.conf
  1239. }
  1240. #----------------------------------------------------------#
  1241. # Firewall #
  1242. #----------------------------------------------------------#
  1243. @test "Firewall: Add ip to banlist" {
  1244. run v-add-firewall-ban '1.2.3.4' 'HESTIA'
  1245. assert_success
  1246. refute_output
  1247. check_ip_banned '1.2.3.4' 'HESTIA'
  1248. }
  1249. @test "Firewall: Delete ip to banlist" {
  1250. run v-delete-firewall-ban '1.2.3.4' 'HESTIA'
  1251. assert_success
  1252. refute_output
  1253. check_ip_not_banned '1.2.3.4' 'HESTIA'
  1254. }
  1255. @test "Firewall: Add ip to banlist for ALL" {
  1256. run v-add-firewall-ban '1.2.3.4' 'HESTIA'
  1257. assert_success
  1258. refute_output
  1259. run v-add-firewall-ban '1.2.3.4' 'MAIL'
  1260. assert_success
  1261. refute_output
  1262. check_ip_banned '1.2.3.4' 'HESTIA'
  1263. }
  1264. @test "Firewall: Delete ip to banlist CHAIN = ALL" {
  1265. run v-delete-firewall-ban '1.2.3.4' 'ALL'
  1266. assert_success
  1267. refute_output
  1268. check_ip_not_banned '1.2.3.4' 'HESTIA'
  1269. }
  1270. @test "Test Whitelist Fail2ban" {
  1271. echo "1.2.3.4" >> $HESTIA/data/firewall/excludes.conf
  1272. run v-add-firewall-ban '1.2.3.4' 'HESTIA'
  1273. rm $HESTIA/data/firewall/excludes.conf
  1274. check_ip_not_banned '1.2.3.4' 'HESTIA'
  1275. }
  1276. #----------------------------------------------------------#
  1277. # PACKAGE #
  1278. #----------------------------------------------------------#
  1279. @test "Package: Create new Package" {
  1280. cp $HESTIA/data/packages/default.pkg /tmp/package
  1281. run v-add-user-package /tmp/package hestiatest
  1282. assert_success
  1283. refute_output
  1284. }
  1285. @test "Package: Assign user to new Package" {
  1286. run v-change-user-package $user hestiatest
  1287. assert_success
  1288. refute_output
  1289. }
  1290. @test "Package: Create new package (Duplicate)" {
  1291. sed -i "s/BANDWIDTH='unlimited'/BANDWIDTH='100'/g" /tmp/package
  1292. run v-add-user-package /tmp/package hestiatest
  1293. assert_failure $E_EXISTS
  1294. }
  1295. @test "Package: Update new Package" {
  1296. sed -i "s/BANDWIDTH='unlimited'/BANDWIDTH='100'/g" /tmp/package
  1297. run v-add-user-package /tmp/package hestiatest yes
  1298. assert_success
  1299. refute_output
  1300. }
  1301. @test "Package: Update package of user" {
  1302. run v-change-user-package $user hestiatest
  1303. assert_success
  1304. refute_output
  1305. run grep "BANDWIDTH='100'" $HESTIA/data/users/$user/user.conf
  1306. assert_success
  1307. assert_output --partial "100"
  1308. }
  1309. @test "Package: Copy package Not Exists" {
  1310. run v-copy-user-package hestiadoesnotexists hestiatest2
  1311. assert_failure $E_NOTEXIST
  1312. }
  1313. @test "Package: Copy package" {
  1314. run v-copy-user-package hestiatest hestiatest2
  1315. assert_success
  1316. refute_output
  1317. }
  1318. @test "Package: Copy package Exists" {
  1319. run v-copy-user-package hestiatest hestiatest2
  1320. assert_failure $E_EXISTS
  1321. }
  1322. @test "Package: Delete package" {
  1323. run v-delete-user-package hestiatest
  1324. run v-delete-user-package hestiatest2
  1325. rm /tmp/package
  1326. assert_success
  1327. refute_output
  1328. run grep "BANDWIDTH='unlimited'" $HESTIA/data/users/$user/user.conf
  1329. assert_success
  1330. assert_output --partial "unlimited"
  1331. }
  1332. #----------------------------------------------------------#
  1333. # Backup user #
  1334. #----------------------------------------------------------#
  1335. @test "Backup user" {
  1336. run v-backup-user $user
  1337. assert_success
  1338. }
  1339. @test "List Backups" {
  1340. run v-list-user-backups $user plain
  1341. assert_success
  1342. assert_output --partial "$user"
  1343. }
  1344. @test "Delete backups" {
  1345. run v-delete-user-backup $user $(v-list-user-backups $user plain | cut -f1)
  1346. assert_success
  1347. run rm /backup/$user.log
  1348. }
  1349. #----------------------------------------------------------#
  1350. # CLEANUP #
  1351. #----------------------------------------------------------#
  1352. @test "Mail: Delete domain" {
  1353. run v-delete-mail-domain $user $domain
  1354. assert_success
  1355. refute_output
  1356. }
  1357. @test "DNS: Delete domain" {
  1358. run v-delete-dns-domain $user $domain
  1359. assert_success
  1360. refute_output
  1361. }
  1362. @test "WEB: Delete domain" {
  1363. run v-delete-web-domain $user $domain
  1364. assert_success
  1365. refute_output
  1366. }
  1367. @test "Delete user" {
  1368. run v-delete-user $user
  1369. assert_success
  1370. refute_output
  1371. }
  1372. @test "Ip: Delete the test IP" {
  1373. run v-delete-sys-ip 198.18.0.125
  1374. assert_success
  1375. refute_output
  1376. }
  1377. @test 'assert()' {
  1378. touch '/var/log/test.log'
  1379. assert [ -e '/var/log/test.log' ]
  1380. }