test.bats 42 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399
  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. run curl --location --silent --show-error --insecure --resolve "${domain}:80:${domain_ip}" "http://${domain}/${webpath}"
  60. assert_success
  61. assert_output --partial "$webproof"
  62. # Test HTTPS
  63. if [ "$SSL" = "yes" ]; then
  64. run v-list-web-domain-ssl $user $domain
  65. assert_success
  66. run curl --location --silent --show-error --insecure --resolve "${domain}:443:${domain_ip}" "https://${domain}/${webpath}"
  67. assert_success
  68. assert_output --partial "$webproof"
  69. fi
  70. }
  71. function validate_headers_domain() {
  72. local user=$1
  73. local domain=$2
  74. local webproof=$3
  75. refute [ -z "$user" ]
  76. refute [ -z "$domain" ]
  77. refute [ -z "$webproof" ]
  78. source $HESTIA/func/ip.sh
  79. run v-list-web-domain $user $domain
  80. assert_success
  81. USER_DATA=$HESTIA/data/users/$user
  82. local domain_ip=$(get_object_value 'web' 'DOMAIN' "$domain" '$IP')
  83. SSL=$(get_object_value 'web' 'DOMAIN' "$domain" '$SSL')
  84. domain_ip=$(get_real_ip "$domain_ip")
  85. # Test HTTP with code redirect for some reasons due to 301 redirect it fails
  86. curl -i --resolve "${domain}:80:${domain_ip}" "http://${domain}"
  87. assert_success
  88. assert_output --partial "$webproof"
  89. }
  90. function validate_mail_domain() {
  91. local user=$1
  92. local domain=$2
  93. refute [ -z "$user" ]
  94. refute [ -z "$domain" ]
  95. run v-list-mail-domain $user $domain
  96. assert_success
  97. assert_dir_exist $HOMEDIR/$user/mail/$domain
  98. assert_dir_exist $HOMEDIR/$user/conf/mail/$domain
  99. assert_file_exist $HOMEDIR/$user/conf/mail/$domain/aliases
  100. assert_file_exist $HOMEDIR/$user/conf/mail/$domain/antispam
  101. assert_file_exist $HOMEDIR/$user/conf/mail/$domain/antivirus
  102. assert_file_exist $HOMEDIR/$user/conf/mail/$domain/fwd_only
  103. assert_file_exist $HOMEDIR/$user/conf/mail/$domain/ip
  104. assert_file_exist $HOMEDIR/$user/conf/mail/$domain/passwd
  105. }
  106. function validate_webmail_domain() {
  107. local user=$1
  108. local domain=$2
  109. local webproof=$3
  110. local webpath=${4}
  111. refute [ -z "$user" ]
  112. refute [ -z "$domain" ]
  113. refute [ -z "$webproof" ]
  114. source $HESTIA/func/ip.sh
  115. USER_DATA=$HESTIA/data/users/$user
  116. local domain_ip=$(get_object_value 'web' 'DOMAIN' "$domain" '$IP')
  117. SSL=$(get_object_value 'mail' 'DOMAIN' "$domain" '$SSL')
  118. domain_ip=$(get_real_ip "$domain_ip")
  119. if [ ! -z "$webpath" ]; then
  120. assert_file_exist /var/lib/roundcube/$webpath
  121. fi
  122. if [ "$SSL" = "no" ]; then
  123. # Test HTTP
  124. run curl --location --silent --show-error --insecure --resolve "webmail.${domain}:80:${domain_ip}" "http://webmail.${domain}/${webpath}"
  125. assert_success
  126. assert_output --partial "$webproof"
  127. # Test HTTP
  128. run curl --location --silent --show-error --insecure --resolve "mail.${domain}:80:${domain_ip}" "http://mail.${domain}/${webpath}"
  129. assert_success
  130. assert_output --partial "$webproof"
  131. fi
  132. # Test HTTPS
  133. if [ "$SSL" = "yes" ]; then
  134. # Test HTTP with 301 redirect for some reasons due to 301 redirect it fails
  135. run curl --silent --show-error --insecure --resolve "webmail.${domain}:80:${domain_ip}" "http://webmail.${domain}/${webpath}"
  136. assert_success
  137. assert_output --partial "301 Moved Permanently"
  138. # Test HTTP with 301 redirect for some reasons due to 301 redirect it fails
  139. run curl --silent --show-error --insecure --resolve "mail.${domain}:80:${domain_ip}" "http://mail.${domain}/${webpath}"
  140. assert_success
  141. assert_output --partial "301 Moved Permanently"
  142. run v-list-mail-domain-ssl $user $domain
  143. assert_success
  144. run curl --location --silent --show-error --insecure --resolve "webmail.${domain}:443:${domain_ip}" "https://webmail.${domain}/${webpath}"
  145. assert_success
  146. assert_output --partial "$webproof"
  147. run curl --location --silent --show-error --insecure --resolve "mail.${domain}:443:${domain_ip}" "https://mail.${domain}/${webpath}"
  148. assert_success
  149. assert_output --partial "$webproof"
  150. fi
  151. }
  152. function validate_database(){
  153. local type=$1
  154. local database=$2
  155. local dbuser=$3
  156. local password=$4
  157. host_str=$(grep "HOST='localhost'" $HESTIA/conf/$type.conf)
  158. parse_object_kv_list "$host_str"
  159. if [ -z $PORT ]; then PORT=3306; fi
  160. refute [ -z "$HOST" ]
  161. refute [ -z "$PORT" ]
  162. refute [ -z "$database" ]
  163. refute [ -z "$dbuser" ]
  164. refute [ -z "$password" ]
  165. if [ "$type" = "mysql" ]; then
  166. # Create an connection to verify correct username / password has been set correctly
  167. tmpfile=$(mktemp /tmp/mysql.XXXXXX)
  168. echo "[client]">$tmpfile
  169. echo "host='$HOST'" >> $tmpfile
  170. echo "user='$dbuser'" >> $tmpfile
  171. echo "password='$password'" >> $tmpfile
  172. echo "port='$PORT'" >> $tmpfile
  173. chmod 600 $tmpfile
  174. sql_tmp=$(mktemp /tmp/query.XXXXXX)
  175. echo "show databases;" > $sql_tmp
  176. run mysql --defaults-file=$tmpfile < "$sql_tmp"
  177. assert_success
  178. assert_output --partial "$database"
  179. rm -f "$sql_tmp"
  180. rm -f "$tmpfile"
  181. else
  182. echo "*:*:*:$dbuser:$password" > /root/.pgpass
  183. chmod 600 /root/.pgpass
  184. run export PGPASSWORD="$password" | psql -h $HOST -U "$dbuser" -p $PORT -d "$database" --no-password -c "\l"
  185. assert_success
  186. rm /root/.pgpass
  187. fi
  188. }
  189. #----------------------------------------------------------#
  190. # IP #
  191. #----------------------------------------------------------#
  192. @test "Check reverse Dns validation" {
  193. # 1. PTR record for a IP should return a hostname(reverse) which in turn must resolve to the same IP addr(forward). (Full circle)
  194. # `-> not implemented in `is_ip_rdns_valid` yet and also not tested here
  195. # 2. Reject rPTR records that match generic dynamic IP pool patterns
  196. local ip="54.200.1.22"
  197. local rdns="ec2-54-200-1-22.us-west-2.compute.amazonaws.com"
  198. run is_ip_rdns_valid "$ip"
  199. assert_failure
  200. refute_output
  201. local rdns="ec2.54.200.1.22.us-west-2.compute.amazonaws.com"
  202. run is_ip_rdns_valid "$ip"
  203. assert_failure
  204. refute_output
  205. local rdns="ec2-22-1-200-54.us-west-2.compute.amazonaws.com"
  206. run is_ip_rdns_valid "$ip"
  207. assert_failure
  208. refute_output
  209. local rdns="ec2.22.1.200.54.us-west-2.compute.amazonaws.com"
  210. run is_ip_rdns_valid "$ip"
  211. assert_failure
  212. refute_output
  213. local rdns="ec2-200-54-1-22.us-west-2.compute.amazonaws.com"
  214. run is_ip_rdns_valid "$ip"
  215. assert_failure
  216. refute_output
  217. local rdns="panel-22.mydomain.tld"
  218. run is_ip_rdns_valid "$ip"
  219. assert_success
  220. assert_output "$rdns"
  221. local rdns="mail.mydomain.tld"
  222. run is_ip_rdns_valid "$ip"
  223. assert_success
  224. assert_output "$rdns"
  225. local rdns="mydomain.tld"
  226. run is_ip_rdns_valid "$ip"
  227. assert_success
  228. assert_output "$rdns"
  229. }
  230. #----------------------------------------------------------#
  231. # User #
  232. #----------------------------------------------------------#
  233. @test "Add new user" {
  234. run v-add-user $user $user $user@hestiacp.com default "Super Test"
  235. assert_success
  236. refute_output
  237. }
  238. @test "Change user password" {
  239. run v-change-user-password "$user" t3st-p4ssw0rd
  240. assert_success
  241. refute_output
  242. }
  243. @test "Change user email" {
  244. run v-change-user-contact "$user" tester@hestiacp.com
  245. assert_success
  246. refute_output
  247. }
  248. @test "Change user contact invalid email " {
  249. run v-change-user-contact "$user" testerhestiacp.com
  250. assert_failure $E_INVALID
  251. assert_output --partial 'Error: invalid email format'
  252. }
  253. @test "Change user name" {
  254. run v-change-user-name "$user" "New name"
  255. assert_success
  256. refute_output
  257. }
  258. @test "Change user shell" {
  259. run v-change-user-shell $user bash
  260. assert_success
  261. refute_output
  262. }
  263. @test "Change user invalid shell" {
  264. run v-change-user-shell $user bashinvalid
  265. assert_failure $E_INVALID
  266. assert_output --partial 'shell bashinvalid is not valid'
  267. }
  268. @test "Change user default ns" {
  269. run v-change-user-ns $user ns0.com ns1.com ns2.com ns3.com
  270. assert_success
  271. refute_output
  272. run v-list-user-ns "$user" plain
  273. assert_success
  274. assert_output --partial 'ns0.com'
  275. }
  276. #----------------------------------------------------------#
  277. # Cron #
  278. #----------------------------------------------------------#
  279. @test "Cron: Add cron job" {
  280. run v-add-cron-job $user 1 1 1 1 1 echo
  281. assert_success
  282. refute_output
  283. }
  284. @test "Cron: Suspend cron job" {
  285. run v-suspend-cron-job $user 1
  286. assert_success
  287. refute_output
  288. }
  289. @test "Cron: Unsuspend cron job" {
  290. run v-unsuspend-cron-job $user 1
  291. assert_success
  292. refute_output
  293. }
  294. @test "Cron: Delete cron job" {
  295. run v-delete-cron-job $user 1
  296. assert_success
  297. refute_output
  298. }
  299. @test "Cron: Add cron job (duplicate)" {
  300. run v-add-cron-job $user 1 1 1 1 1 echo 1
  301. assert_success
  302. refute_output
  303. run v-add-cron-job $user 1 1 1 1 1 echo 1
  304. assert_failure $E_EXISTS
  305. assert_output --partial 'JOB=1 already exists'
  306. }
  307. @test "Cron: Second cron job" {
  308. run v-add-cron-job $user 2 2 2 2 2 echo 2
  309. assert_success
  310. refute_output
  311. }
  312. @test "Cron: Two cron jobs must be listed" {
  313. run v-list-cron-jobs $user csv
  314. assert_success
  315. assert_line --partial '1,1,1,1,1,"echo",no'
  316. assert_line --partial '2,2,2,2,2,"echo",no'
  317. }
  318. @test "Cron: rebuild" {
  319. run v-rebuild-cron-jobs $user
  320. assert_success
  321. refute_output
  322. }
  323. #----------------------------------------------------------#
  324. # IP #
  325. #----------------------------------------------------------#
  326. @test "Ip: Add new ip on first interface" {
  327. interface=$(v-list-sys-interfaces plain | head -n 1)
  328. run ip link show dev $interface
  329. assert_success
  330. local a2_rpaf="/etc/$WEB_SYSTEM/mods-enabled/rpaf.conf"
  331. local a2_remoteip="/etc/$WEB_SYSTEM/mods-enabled/remoteip.conf"
  332. # Save initial state
  333. echo "interface=${interface}" >> /tmp/hestia-test-env.sh
  334. [ -f "$a2_rpaf" ] && file_hash1=$(cat $a2_rpaf |md5sum |cut -d" " -f1) && echo "a2_rpaf_hash='${file_hash1}'" >> /tmp/hestia-test-env.sh
  335. [ -f "$a2_remoteip" ] && file_hash2=$(cat $a2_remoteip |md5sum |cut -d" " -f1) && echo "a2_remoteip_hash='${file_hash2}'" >> /tmp/hestia-test-env.sh
  336. local ip="198.18.0.12"
  337. run v-add-sys-ip $ip 255.255.255.255 $interface $user
  338. assert_success
  339. refute_output
  340. assert_file_exist /etc/$WEB_SYSTEM/conf.d/$ip.conf
  341. assert_file_exist $HESTIA/data/ips/$ip
  342. assert_file_contains $HESTIA/data/ips/$ip "OWNER='$user'"
  343. assert_file_contains $HESTIA/data/ips/$ip "INTERFACE='$interface'"
  344. if [ -n "$PROXY_SYSTEM" ]; then
  345. assert_file_exist /etc/$PROXY_SYSTEM/conf.d/$ip.conf
  346. [ -f "$a2_rpaf" ] && assert_file_contains "$a2_rpaf" "RPAFproxy_ips.*$ip\b"
  347. [ -f "$a2_remoteip" ] && assert_file_contains "$a2_remoteip" "RemoteIPInternalProxy $ip\$"
  348. fi
  349. }
  350. @test "Ip: Add ip (duplicate)" {
  351. run v-add-sys-ip 198.18.0.12 255.255.255.255 $interface $user
  352. assert_failure $E_EXISTS
  353. }
  354. @test "Ip: Add extra ip" {
  355. local ip="198.18.0.121"
  356. run v-add-sys-ip $ip 255.255.255.255 $interface $user
  357. assert_success
  358. refute_output
  359. assert_file_exist /etc/$WEB_SYSTEM/conf.d/$ip.conf
  360. assert_file_exist $HESTIA/data/ips/$ip
  361. assert_file_contains $HESTIA/data/ips/$ip "OWNER='$user'"
  362. assert_file_contains $HESTIA/data/ips/$ip "INTERFACE='$interface'"
  363. if [ -n "$PROXY_SYSTEM" ]; then
  364. assert_file_exist /etc/$PROXY_SYSTEM/conf.d/$ip.conf
  365. local a2_rpaf="/etc/$WEB_SYSTEM/mods-enabled/rpaf.conf"
  366. [ -f "$a2_rpaf" ] && assert_file_contains "$a2_rpaf" "RPAFproxy_ips.*$ip\b"
  367. local a2_remoteip="/etc/$WEB_SYSTEM/mods-enabled/remoteip.conf"
  368. [ -f "$a2_remoteip" ] && assert_file_contains "$a2_remoteip" "RemoteIPInternalProxy $ip\$"
  369. fi
  370. }
  371. @test "Ip: Delete ips" {
  372. local ip="198.18.0.12"
  373. run v-delete-sys-ip $ip
  374. assert_success
  375. refute_output
  376. assert_file_not_exist /etc/$WEB_SYSTEM/conf.d/$ip.conf
  377. assert_file_not_exist $HESTIA/data/ips/$ip
  378. ip="198.18.0.121"
  379. run v-delete-sys-ip $ip
  380. assert_success
  381. refute_output
  382. assert_file_not_exist /etc/$WEB_SYSTEM/conf.d/$ip.conf
  383. assert_file_not_exist $HESTIA/data/ips/$ip
  384. if [ -n "$PROXY_SYSTEM" ]; then
  385. assert_file_not_exist /etc/$PROXY_SYSTEM/conf.d/$ip.conf
  386. fi
  387. # remoteip and rpaf config hashes must match the initial one
  388. if [ ! -z "$a2_rpaf_hash" ]; then
  389. local a2_rpaf="/etc/$WEB_SYSTEM/mods-enabled/rpaf.conf"
  390. file_hash=$(cat $a2_rpaf |md5sum |cut -d" " -f1)
  391. assert_equal "$file_hash" "$a2_rpaf_hash"
  392. fi
  393. if [ ! -z "$a2_remoteip_hash" ]; then
  394. local a2_remoteip="/etc/$WEB_SYSTEM/mods-enabled/remoteip.conf"
  395. file_hash=$(cat $a2_remoteip |md5sum |cut -d" " -f1)
  396. assert_equal "$file_hash" "$a2_remoteip_hash"
  397. fi
  398. }
  399. @test "Ip: Add IP for rest of the test" {
  400. local ip="198.18.0.125"
  401. run v-add-sys-ip $ip 255.255.255.255 $interface $user
  402. assert_success
  403. refute_output
  404. assert_file_exist /etc/$WEB_SYSTEM/conf.d/$ip.conf
  405. assert_file_exist $HESTIA/data/ips/$ip
  406. assert_file_contains $HESTIA/data/ips/$ip "OWNER='$user'"
  407. assert_file_contains $HESTIA/data/ips/$ip "INTERFACE='$interface'"
  408. if [ -n "$PROXY_SYSTEM" ]; then
  409. assert_file_exist /etc/$PROXY_SYSTEM/conf.d/$ip.conf
  410. local a2_rpaf="/etc/$WEB_SYSTEM/mods-enabled/rpaf.conf"
  411. [ -f "$a2_rpaf" ] && assert_file_contains "$a2_rpaf" "RPAFproxy_ips.*$ip\b"
  412. local a2_remoteip="/etc/$WEB_SYSTEM/mods-enabled/remoteip.conf"
  413. [ -f "$a2_remoteip" ] && assert_file_contains "$a2_remoteip" "RemoteIPInternalProxy $ip\$"
  414. fi
  415. }
  416. #----------------------------------------------------------#
  417. # WEB #
  418. #----------------------------------------------------------#
  419. @test "WEB: Add web domain" {
  420. run v-add-web-domain $user $domain 198.18.0.125
  421. assert_success
  422. refute_output
  423. echo -e "<?php\necho 'Hestia Test:'.(4*3);" > $HOMEDIR/$user/web/$domain/public_html/php-test.php
  424. validate_web_domain $user $domain 'Hestia Test:12' 'php-test.php'
  425. rm $HOMEDIR/$user/web/$domain/public_html/php-test.php
  426. }
  427. @test "WEB: Add web domain (duplicate)" {
  428. run v-add-web-domain $user $domain 198.18.0.125
  429. assert_failure $E_EXISTS
  430. }
  431. @test "WEB: Add web domain alias" {
  432. run v-add-web-domain-alias $user $domain v3.$domain
  433. assert_success
  434. refute_output
  435. }
  436. @test "WEB: Add web domain alias (duplicate)" {
  437. run v-add-web-domain-alias $user $domain v3.$domain
  438. assert_failure $E_EXISTS
  439. }
  440. @test "WEB: Add web domain wildcard alias" {
  441. run v-add-web-domain-alias $user $domain "*.$domain"
  442. assert_success
  443. refute_output
  444. }
  445. @test "WEB: Delete web domain wildcard alias" {
  446. run v-delete-web-domain-alias $user $domain "*.$domain"
  447. assert_success
  448. refute_output
  449. }
  450. @test "WEB: Add web domain stats" {
  451. run v-add-web-domain-stats $user $domain awstats
  452. assert_success
  453. refute_output
  454. }
  455. @test "WEB: Add web domain stats user" {
  456. skip
  457. run v-add-web-domain-stats-user $user $domain test m3g4p4ssw0rd
  458. assert_success
  459. refute_output
  460. }
  461. @test "WEB: Suspend web domain" {
  462. run v-suspend-web-domain $user $domain
  463. assert_success
  464. refute_output
  465. validate_web_domain $user $domain 'This site is currently suspended'
  466. }
  467. @test "WEB: Unsuspend web domain" {
  468. run v-unsuspend-web-domain $user $domain
  469. assert_success
  470. refute_output
  471. echo -e "<?php\necho 'Hestia Test:'.(4*3);" > $HOMEDIR/$user/web/$domain/public_html/php-test.php
  472. validate_web_domain $user $domain 'Hestia Test:12' 'php-test.php'
  473. rm $HOMEDIR/$user/web/$domain/public_html/php-test.php
  474. }
  475. @test "WEB: Add redirect to www.domain.com" {
  476. run v-add-web-domain-redirect $user $domain www.$domain 301
  477. assert_success
  478. refute_output
  479. run validate_headers_domain $user $domain "301"
  480. }
  481. @test "WEB: Delete redirect to www.domain.com" {
  482. run v-delete-web-domain-redirect $user $domain
  483. assert_success
  484. refute_output
  485. }
  486. @test "WEB: Enable Fast CGI Cache" {
  487. if [ "$WEB_SYSTEM" != "nginx" ]; then
  488. skip "FastCGI cache is not supported"
  489. fi
  490. run v-add-fastcgi-cache $user $domain '1m' yes
  491. assert_success
  492. refute_output
  493. echo -e "<?php\necho 'Hestia Test:'.(4*3);" > $HOMEDIR/$user/web/$domain/public_html/php-test.php
  494. run validate_headers_domain $user $domain "Miss"
  495. run validate_headers_domain $user $domain "Hit"
  496. rm $HOMEDIR/$user/web/$domain/public_html/php-test.php
  497. }
  498. @test "WEB: Disable Fast CGI Cache" {
  499. if [ "$WEB_SYSTEM" != "nginx" ]; then
  500. skip "FastCGI cache is not supported"
  501. fi
  502. run v-delete-fastcgi-cache $user $domain '1m' yes
  503. assert_success
  504. refute_output
  505. }
  506. @test "WEB: Generate Self signed certificate" {
  507. ssl=$(v-generate-ssl-cert "$domain" "info@$domain" US CA "Orange County" HestiaCP IT "mail.$domain" | tail -n1 | awk '{print $2}')
  508. mv $ssl/$domain.crt /tmp/$domain.crt
  509. mv $ssl/$domain.key /tmp/$domain.key
  510. }
  511. @test "WEB: Add ssl" {
  512. # Use self signed certificates during last test
  513. run v-add-web-domain-ssl $user $domain /tmp
  514. assert_success
  515. refute_output
  516. }
  517. @test "WEB: Rebuild web domain" {
  518. run v-rebuild-web-domains $user
  519. assert_success
  520. refute_output
  521. }
  522. #----------------------------------------------------------#
  523. # MULTIPHP #
  524. #----------------------------------------------------------#
  525. @test "Multiphp: Default php Backend version" {
  526. def_phpver=$(multiphp_default_version)
  527. multi_domain="multiphp.${domain}"
  528. run v-add-web-domain $user $multi_domain 198.18.0.125
  529. assert_success
  530. refute_output
  531. echo -e "<?php\necho PHP_MAJOR_VERSION.'.'.PHP_MINOR_VERSION;" > "$HOMEDIR/$user/web/$multi_domain/public_html/php-test.php"
  532. validate_web_domain $user $multi_domain "$def_phpver" 'php-test.php'
  533. rm "$HOMEDIR/$user/web/$multi_domain/public_html/php-test.php"
  534. }
  535. @test "Multiphp: Change backend version - PHP v5.6" {
  536. test_phpver='5.6'
  537. multi_domain="multiphp.${domain}"
  538. if [ ! -d "/etc/php/${test_phpver}/fpm/pool.d/" ]; then
  539. skip "PHP ${test_phpver} not installed"
  540. fi
  541. run v-change-web-domain-backend-tpl $user $multi_domain 'PHP-5_6' 'yes'
  542. assert_success
  543. refute_output
  544. # Changing web backend will create a php-fpm pool config in the corresponding php folder
  545. assert_file_exist "/etc/php/${test_phpver}/fpm/pool.d/${multi_domain}.conf"
  546. # A single php-fpm pool config file must be present
  547. num_fpm_config_files="$(find -L /etc/php/ -name "${multi_domain}.conf" | wc -l)"
  548. assert_equal "$num_fpm_config_files" '1'
  549. echo -e "<?php\necho 'hestia-multiphptest:'.PHP_MAJOR_VERSION.'.'.PHP_MINOR_VERSION;" > "$HOMEDIR/$user/web/$multi_domain/public_html/php-test.php"
  550. validate_web_domain $user $multi_domain "hestia-multiphptest:$test_phpver" 'php-test.php'
  551. rm "$HOMEDIR/$user/web/$multi_domain/public_html/php-test.php"
  552. }
  553. @test "Multiphp: Change backend version - PHP v7.0" {
  554. test_phpver='7.0'
  555. multi_domain="multiphp.${domain}"
  556. if [ ! -d "/etc/php/${test_phpver}/fpm/pool.d/" ]; then
  557. skip "PHP ${test_phpver} not installed"
  558. fi
  559. run v-change-web-domain-backend-tpl $user $multi_domain 'PHP-7_0' 'yes'
  560. assert_success
  561. refute_output
  562. # Changing web backend will create a php-fpm pool config in the corresponding php folder
  563. assert_file_exist "/etc/php/${test_phpver}/fpm/pool.d/${multi_domain}.conf"
  564. # A single php-fpm pool config file must be present
  565. num_fpm_config_files="$(find -L /etc/php/ -name "${multi_domain}.conf" | wc -l)"
  566. assert_equal "$num_fpm_config_files" '1'
  567. echo -e "<?php\necho 'hestia-multiphptest:'.PHP_MAJOR_VERSION.'.'.PHP_MINOR_VERSION;" > "$HOMEDIR/$user/web/$multi_domain/public_html/php-test.php"
  568. validate_web_domain $user $multi_domain "hestia-multiphptest:$test_phpver" 'php-test.php'
  569. rm "$HOMEDIR/$user/web/$multi_domain/public_html/php-test.php"
  570. }
  571. @test "Multiphp: Change backend version - PHP v7.1" {
  572. test_phpver='7.1'
  573. multi_domain="multiphp.${domain}"
  574. if [ ! -d "/etc/php/${test_phpver}/fpm/pool.d/" ]; then
  575. skip "PHP ${test_phpver} not installed"
  576. fi
  577. run v-change-web-domain-backend-tpl $user $multi_domain 'PHP-7_1' 'yes'
  578. assert_success
  579. refute_output
  580. # Changing web backend will create a php-fpm pool config in the corresponding php folder
  581. assert_file_exist "/etc/php/${test_phpver}/fpm/pool.d/${multi_domain}.conf"
  582. # A single php-fpm pool config file must be present
  583. num_fpm_config_files="$(find -L /etc/php/ -name "${multi_domain}.conf" | wc -l)"
  584. assert_equal "$num_fpm_config_files" '1'
  585. echo -e "<?php\necho 'hestia-multiphptest:'.PHP_MAJOR_VERSION.'.'.PHP_MINOR_VERSION;" > "$HOMEDIR/$user/web/$multi_domain/public_html/php-test.php"
  586. validate_web_domain $user $multi_domain "hestia-multiphptest:$test_phpver" 'php-test.php'
  587. rm "$HOMEDIR/$user/web/$multi_domain/public_html/php-test.php"
  588. }
  589. @test "Multiphp: Change backend version - PHP v7.2" {
  590. test_phpver='7.2'
  591. multi_domain="multiphp.${domain}"
  592. if [ ! -d "/etc/php/${test_phpver}/fpm/pool.d/" ]; then
  593. skip "PHP ${test_phpver} not installed"
  594. fi
  595. run v-change-web-domain-backend-tpl $user $multi_domain 'PHP-7_2' 'yes'
  596. assert_success
  597. refute_output
  598. # Changing web backend will create a php-fpm pool config in the corresponding php folder
  599. assert_file_exist "/etc/php/${test_phpver}/fpm/pool.d/${multi_domain}.conf"
  600. # A single php-fpm pool config file must be present
  601. num_fpm_config_files="$(find -L /etc/php/ -name "${multi_domain}.conf" | wc -l)"
  602. assert_equal "$num_fpm_config_files" '1'
  603. echo -e "<?php\necho 'hestia-multiphptest:'.PHP_MAJOR_VERSION.'.'.PHP_MINOR_VERSION;" > "$HOMEDIR/$user/web/$multi_domain/public_html/php-test.php"
  604. validate_web_domain $user $multi_domain "hestia-multiphptest:$test_phpver" 'php-test.php'
  605. rm "$HOMEDIR/$user/web/$multi_domain/public_html/php-test.php"
  606. }
  607. @test "Multiphp: Change backend version - PHP v7.3" {
  608. test_phpver='7.3'
  609. multi_domain="multiphp.${domain}"
  610. if [ ! -d "/etc/php/${test_phpver}/fpm/pool.d/" ]; then
  611. skip "PHP ${test_phpver} not installed"
  612. fi
  613. run v-change-web-domain-backend-tpl $user $multi_domain 'PHP-7_3' 'yes'
  614. assert_success
  615. refute_output
  616. # Changing web backend will create a php-fpm pool config in the corresponding php folder
  617. assert_file_exist "/etc/php/${test_phpver}/fpm/pool.d/${multi_domain}.conf"
  618. # A single php-fpm pool config file must be present
  619. num_fpm_config_files="$(find -L /etc/php/ -name "${multi_domain}.conf" | wc -l)"
  620. assert_equal "$num_fpm_config_files" '1'
  621. echo -e "<?php\necho 'hestia-multiphptest:'.PHP_MAJOR_VERSION.'.'.PHP_MINOR_VERSION;" > "$HOMEDIR/$user/web/$multi_domain/public_html/php-test.php"
  622. validate_web_domain $user $multi_domain "hestia-multiphptest:$test_phpver" 'php-test.php'
  623. rm "$HOMEDIR/$user/web/$multi_domain/public_html/php-test.php"
  624. }
  625. @test "Multiphp: Change backend version - PHP v7.4" {
  626. test_phpver='7.4'
  627. multi_domain="multiphp.${domain}"
  628. if [ ! -d "/etc/php/${test_phpver}/fpm/pool.d/" ]; then
  629. skip "PHP ${test_phpver} not installed"
  630. fi
  631. run v-change-web-domain-backend-tpl $user $multi_domain 'PHP-7_4' 'yes'
  632. assert_success
  633. refute_output
  634. # Changing web backend will create a php-fpm pool config in the corresponding php folder
  635. assert_file_exist "/etc/php/${test_phpver}/fpm/pool.d/${multi_domain}.conf"
  636. # A single php-fpm pool config file must be present
  637. num_fpm_config_files="$(find -L /etc/php/ -name "${multi_domain}.conf" | wc -l)"
  638. assert_equal "$num_fpm_config_files" '1'
  639. echo -e "<?php\necho 'hestia-multiphptest:'.PHP_MAJOR_VERSION.'.'.PHP_MINOR_VERSION;" > "$HOMEDIR/$user/web/$multi_domain/public_html/php-test.php"
  640. validate_web_domain $user $multi_domain "hestia-multiphptest:$test_phpver" 'php-test.php'
  641. rm "$HOMEDIR/$user/web/$multi_domain/public_html/php-test.php"
  642. }
  643. @test "Multiphp: Change backend version - PHP v8.0" {
  644. test_phpver='8.0'
  645. multi_domain="multiphp.${domain}"
  646. if [ ! -d "/etc/php/${test_phpver}/fpm/pool.d/" ]; then
  647. skip "PHP ${test_phpver} not installed"
  648. fi
  649. run v-change-web-domain-backend-tpl $user $multi_domain 'PHP-8_0' 'yes'
  650. assert_success
  651. refute_output
  652. # Changing web backend will create a php-fpm pool config in the corresponding php folder
  653. assert_file_exist "/etc/php/${test_phpver}/fpm/pool.d/${multi_domain}.conf"
  654. # A single php-fpm pool config file must be present
  655. num_fpm_config_files="$(find -L /etc/php/ -name "${multi_domain}.conf" | wc -l)"
  656. assert_equal "$num_fpm_config_files" '1'
  657. echo -e "<?php\necho 'hestia-multiphptest:'.PHP_MAJOR_VERSION.'.'.PHP_MINOR_VERSION;" > "$HOMEDIR/$user/web/$multi_domain/public_html/php-test.php"
  658. validate_web_domain $user $multi_domain "hestia-multiphptest:$test_phpver" 'php-test.php'
  659. rm $HOMEDIR/$user/web/$multi_domain/public_html/php-test.php
  660. }
  661. @test "Multiphp: Cleanup" {
  662. multi_domain="multiphp.${domain}"
  663. run v-delete-web-domain $user $multi_domain 'yes'
  664. assert_success
  665. refute_output
  666. # No php-fpm pool config file must be present
  667. num_fpm_config_files="$(find -L /etc/php/ -name "${multi_domain}.conf" | wc -l)"
  668. assert_equal "$num_fpm_config_files" '0'
  669. }
  670. #----------------------------------------------------------#
  671. # CUSTOM DOCROOT #
  672. #----------------------------------------------------------#
  673. @test "Docroot: Self Subfolder" {
  674. docroot1_domain="docroot1.${domain}"
  675. run v-add-web-domain $user $docroot1_domain 198.18.0.125
  676. assert_success
  677. refute_output
  678. run v-add-fs-directory $user "$HOMEDIR/$user/web/$docroot1_domain/public_html/public/"
  679. assert_success
  680. refute_output
  681. run v-change-web-domain-docroot $user "$docroot1_domain" "$docroot1_domain" "/public"
  682. assert_success
  683. refute_output
  684. echo -e '<?php\necho "self-sub-".$_SERVER["HTTP_HOST"];' > "$HOMEDIR/$user/web/$docroot1_domain/public_html/public/php-test.php"
  685. validate_web_domain $user $docroot1_domain "self-sub-${docroot1_domain}" 'php-test.php'
  686. rm "$HOMEDIR/$user/web/$docroot1_domain/public_html/public/php-test.php"
  687. }
  688. @test "Docroot: Other domain subfolder" {
  689. docroot1_domain="docroot1.${domain}"
  690. docroot2_domain="docroot2.${domain}"
  691. run v-add-web-domain $user $docroot2_domain 198.18.0.125
  692. assert_success
  693. refute_output
  694. run v-add-fs-directory $user "$HOMEDIR/$user/web/$docroot2_domain/public_html/public/"
  695. assert_success
  696. refute_output
  697. run v-change-web-domain-docroot $user "$docroot1_domain" "$docroot2_domain" "/public"
  698. assert_success
  699. refute_output
  700. echo -e '<?php\necho "doc2-sub-".$_SERVER["HTTP_HOST"];' > "$HOMEDIR/$user/web/$docroot2_domain/public_html/public/php-test.php"
  701. validate_web_domain $user $docroot1_domain "doc2-sub-${docroot1_domain}" 'php-test.php'
  702. rm "$HOMEDIR/$user/web/$docroot2_domain/public_html/public/php-test.php"
  703. }
  704. @test "Docroot: Other domain root folder" {
  705. docroot1_domain="docroot1.${domain}"
  706. docroot2_domain="docroot2.${domain}"
  707. run v-change-web-domain-docroot $user "$docroot1_domain" "$docroot2_domain"
  708. assert_success
  709. refute_output
  710. echo -e '<?php\necho "doc2-root-".$_SERVER["HTTP_HOST"];' > "$HOMEDIR/$user/web/$docroot2_domain/public_html/php-test.php"
  711. validate_web_domain $user $docroot1_domain "doc2-root-${docroot1_domain}" 'php-test.php'
  712. rm "$HOMEDIR/$user/web/$docroot2_domain/public_html/php-test.php"
  713. }
  714. @test "Docroot: Reset" {
  715. docroot1_domain="docroot1.${domain}"
  716. run v-change-web-domain-docroot $user "$docroot1_domain" "default"
  717. assert_success
  718. refute_output
  719. echo -e '<?php\necho "doc1-root-".$_SERVER["HTTP_HOST"];' > "$HOMEDIR/$user/web/$docroot1_domain/public_html/php-test.php"
  720. validate_web_domain $user $docroot1_domain "doc1-root-${docroot1_domain}" 'php-test.php'
  721. rm "$HOMEDIR/$user/web/$docroot1_domain/public_html/php-test.php"
  722. }
  723. @test "Docroot: Cleanup" {
  724. docroot1_domain="docroot1.${domain}"
  725. docroot2_domain="docroot2.${domain}"
  726. run v-delete-web-domain $user $docroot1_domain
  727. assert_success
  728. refute_output
  729. run v-delete-web-domain $user $docroot2_domain
  730. assert_success
  731. refute_output
  732. }
  733. #----------------------------------------------------------#
  734. # DNS #
  735. #----------------------------------------------------------#
  736. @test "DNS: Add domain" {
  737. run v-add-dns-domain $user $domain 198.18.0.125
  738. assert_success
  739. refute_output
  740. }
  741. @test "DNS: Add domain (duplicate)" {
  742. run v-add-dns-domain $user $domain 198.18.0.125
  743. assert_failure $E_EXISTS
  744. }
  745. @test "DNS: Add domain record" {
  746. run v-add-dns-record $user $domain test A 198.18.0.125 20
  747. assert_success
  748. refute_output
  749. }
  750. @test "DNS: Delete domain record" {
  751. run v-delete-dns-record $user $domain 20
  752. assert_success
  753. refute_output
  754. }
  755. @test "DNS: Delete missing domain record" {
  756. run v-delete-dns-record $user $domain 20
  757. assert_failure $E_NOTEXIST
  758. }
  759. @test "DNS: Change domain expire date" {
  760. run v-change-dns-domain-exp $user $domain 2020-01-01
  761. assert_success
  762. refute_output
  763. }
  764. @test "DNS: Change domain ip" {
  765. run v-change-dns-domain-ip $user $domain 127.0.0.1
  766. assert_success
  767. refute_output
  768. }
  769. @test "DNS: Suspend domain" {
  770. run v-suspend-dns-domain $user $domain
  771. assert_success
  772. refute_output
  773. }
  774. @test "DNS: Unsuspend domain" {
  775. run v-unsuspend-dns-domain $user $domain
  776. assert_success
  777. refute_output
  778. }
  779. @test "DNS: Rebuild" {
  780. run v-rebuild-dns-domains $user
  781. assert_success
  782. refute_output
  783. }
  784. #----------------------------------------------------------#
  785. # MAIL #
  786. #----------------------------------------------------------#
  787. @test "MAIL: Add domain" {
  788. run v-add-mail-domain $user $domain
  789. assert_success
  790. refute_output
  791. validate_mail_domain $user $domain
  792. }
  793. @test "MAIL: Add mail domain webmail client (Roundcube)" {
  794. run v-add-mail-domain-webmail $user $domain "roundcube" "yes"
  795. assert_success
  796. refute_output
  797. # echo -e "<?php\necho 'Server: ' . \$_SERVER['SERVER_SOFTWARE'];" > /var/lib/roundcube/check_server.php
  798. validate_webmail_domain $user $domain 'Welcome to Roundcube Webmail'
  799. # rm /var/lib/roundcube/check_server.php
  800. }
  801. @test "Mail: Add SSL to mail domain" {
  802. # Use generated certificates during WEB Generate Self signed certificate
  803. run v-add-mail-domain-ssl $user $domain /tmp
  804. assert_success
  805. refute_output
  806. validate_webmail_domain $user $domain 'Welcome to Roundcube Webmail'
  807. }
  808. @test "MAIL: Add mail domain webmail client (Rainloop)" {
  809. if [ -z "$(echo $WEBMAIL_SYSTEM | grep -w "rainloop")" ]; then
  810. skip "Webmail client Rainloop not installed"
  811. fi
  812. run v-add-mail-domain-webmail $user $domain "rainloop" "yes"
  813. assert_success
  814. refute_output
  815. validate_mail_domain $user $domain
  816. validate_webmail_domain $user $domain 'RainLoop Webmail'
  817. }
  818. @test "MAIL: Disable webmail client" {
  819. run v-add-mail-domain-webmail $user $domain "disabled" "yes"
  820. assert_success
  821. refute_output
  822. validate_mail_domain $user $domain
  823. validate_webmail_domain $user $domain 'Success!'
  824. }
  825. @test "MAIL: Add domain (duplicate)" {
  826. run v-add-mail-domain $user $domain
  827. assert_failure $E_EXISTS
  828. }
  829. @test "MAIL: Add account" {
  830. run v-add-mail-account $user $domain test t3st-p4ssw0rd
  831. assert_success
  832. refute_output
  833. }
  834. @test "MAIL: Add account (duplicate)" {
  835. run v-add-mail-account $user $domain test t3st-p4ssw0rd
  836. assert_failure $E_EXISTS
  837. }
  838. @test "MAIL: Delete account" {
  839. run v-delete-mail-account $user $domain test
  840. assert_success
  841. refute_output
  842. }
  843. @test "MAIL: Delete missing account" {
  844. run v-delete-mail-account $user $domain test
  845. assert_failure $E_NOTEXIST
  846. }
  847. @test "MAIL: Rebuild mail domain" {
  848. run v-rebuild-mail-domains $user
  849. assert_success
  850. refute_output
  851. }
  852. #----------------------------------------------------------#
  853. # Limit possibilities adding different owner domain #
  854. #----------------------------------------------------------#
  855. @test "Allow Users: User can't add user.user2.com " {
  856. # Case: admin company.ltd
  857. # users should not be allowed to add user.company.ltd
  858. run v-add-user $user2 $user2 $user@hestiacp.com default "Super Test"
  859. assert_success
  860. refute_output
  861. run v-add-web-domain $user2 $rootdomain
  862. assert_success
  863. refute_output
  864. run v-add-web-domain $user $subdomain
  865. assert_failure $E_EXISTS
  866. }
  867. @test "Allow Users: User can't add user.user2.com as alias" {
  868. run v-add-web-domain-alias $user $domain $subdomain
  869. assert_failure $E_EXISTS
  870. }
  871. @test "Allow Users: User can't add user.user2.com as mail domain" {
  872. run v-add-mail-domain $user $subdomain
  873. assert_failure $E_EXISTS
  874. }
  875. @test "Allow Users: User can't add user.user2.com as dns domain" {
  876. run v-add-dns-domain $user $subdomain 198.18.0.125
  877. assert_failure $E_EXISTS
  878. }
  879. @test "Allow Users: Set Allow users" {
  880. # Allow user to yes allows
  881. # Case: admin company.ltd
  882. # users are allowed to add user.company.ltd
  883. run v-add-web-domain-allow-users $user2 $rootdomain
  884. assert_success
  885. refute_output
  886. }
  887. @test "Allow Users: User can add user.user2.com" {
  888. run v-add-web-domain $user $subdomain
  889. assert_success
  890. refute_output
  891. }
  892. @test "Allow Users: User can add user.user2.com as alias" {
  893. run v-delete-web-domain $user $subdomain
  894. assert_success
  895. refute_output
  896. run v-add-web-domain-alias $user $domain $subdomain
  897. assert_success
  898. refute_output
  899. }
  900. @test "Allow Users: User can add user.user2.com as mail domain" {
  901. run v-add-mail-domain $user $subdomain
  902. assert_success
  903. refute_output
  904. }
  905. @test "Allow Users: User can add user.user2.com as dns domain" {
  906. run v-add-dns-domain $user $subdomain 198.18.0.125
  907. assert_success
  908. refute_output
  909. }
  910. @test "Allow Users: Cleanup tests" {
  911. run v-delete-dns-domain $user $subdomain
  912. assert_success
  913. refute_output
  914. run v-delete-mail-domain $user $subdomain
  915. assert_success
  916. refute_output
  917. }
  918. @test "Allow Users: Set Allow users no" {
  919. run v-delete-web-domain-alias $user $domain $subdomain
  920. assert_success
  921. refute_output
  922. run v-delete-web-domain-allow-users $user2 $rootdomain
  923. assert_success
  924. refute_output
  925. }
  926. @test "Allow Users: User can't add user.user2.com again" {
  927. run v-add-web-domain $user $subdomain
  928. assert_failure $E_EXISTS
  929. }
  930. @test "Allow Users: user2 can add user.user2.com again" {
  931. run v-add-web-domain $user2 $subdomain
  932. assert_success
  933. refute_output
  934. run v-delete-user $user2
  935. assert_success
  936. refute_output
  937. }
  938. #----------------------------------------------------------#
  939. # DB #
  940. #----------------------------------------------------------#
  941. @test "MYSQL: Add database" {
  942. run v-add-database $user database dbuser 1234 mysql
  943. assert_success
  944. refute_output
  945. # validate_database mysql database_name database_user password
  946. validate_database mysql $database $dbuser 1234
  947. }
  948. @test "MYSQL: Add Database (Duplicate)" {
  949. run v-add-database $user database dbuser 1234 mysql
  950. assert_failure $E_EXISTS
  951. }
  952. @test "MYSQL: Rebuild Database" {
  953. run v-rebuild-database $user $database
  954. assert_success
  955. refute_output
  956. }
  957. @test "MYSQL: Change database user password" {
  958. run v-change-database-password $user $database 123456
  959. assert_success
  960. refute_output
  961. validate_database mysql $database $dbuser 123456
  962. }
  963. @test "MYSQL: Change database user" {
  964. run v-change-database-user $user $database database
  965. assert_success
  966. refute_output
  967. validate_database mysql $database $database 123456
  968. }
  969. @test "MYSQL: Suspend database" {
  970. run v-suspend-database $user $database
  971. assert_success
  972. refute_output
  973. }
  974. @test "MYSQL: Unsuspend database" {
  975. run v-unsuspend-database $user $database
  976. assert_success
  977. refute_output
  978. }
  979. @test "MYSQL: Delete database" {
  980. run v-delete-database $user $database
  981. assert_success
  982. refute_output
  983. }
  984. @test "MYSQL: Delete missing database" {
  985. run v-delete-database $user $database
  986. assert_failure $E_NOTEXIST
  987. }
  988. @test "PGSQL: Add database invalid user" {
  989. if [ -z "$(echo $DB_SYSTEM | grep -w "pgsql")" ]; then
  990. skip "PostGreSQL is not installed"
  991. fi
  992. run v-add-database "$user" "database" "dbuser" "1234ABCD" "pgsql"
  993. assert_failure $E_INVALID
  994. }
  995. @test "PGSQL: Add database" {
  996. if [ -z "$(echo $DB_SYSTEM | grep -w "pgsql")" ]; then
  997. skip "PostGreSQL is not installed"
  998. fi
  999. run v-add-user $pguser $pguser $user@hestiacp.com default "Super Test"
  1000. run v-add-database "$pguser" "database" "dbuser" "1234ABCD" "pgsql"
  1001. assert_success
  1002. refute_output
  1003. validate_database pgsql $pgdatabase $pgdbuser "1234ABCD"
  1004. }
  1005. @test "PGSQL: Add Database (Duplicate)" {
  1006. if [ -z "$(echo $DB_SYSTEM | grep -w "pgsql")" ]; then
  1007. skip "PostGreSQL is not installed"
  1008. fi
  1009. run v-add-database "$pguser" "database" "dbuser" "1234ABCD" "pgsql"
  1010. assert_failure $E_EXISTS
  1011. }
  1012. @test "PGSQL: Rebuild Database" {
  1013. if [ -z "$(echo $DB_SYSTEM | grep -w "pgsql")" ]; then
  1014. skip "PostGreSQL is not installed"
  1015. fi
  1016. run v-rebuild-database $pguser $pgdatabase
  1017. assert_success
  1018. refute_output
  1019. }
  1020. @test "PGSQL: Change database user password" {
  1021. if [ -z "$(echo $DB_SYSTEM | grep -w "pgsql")" ]; then
  1022. skip "PostGreSQL is not installed"
  1023. fi
  1024. run v-change-database-password $pguser $pgdatabase "123456"
  1025. assert_success
  1026. refute_output
  1027. validate_database pgsql $pgdatabase $pgdbuser "123456"
  1028. }
  1029. @test "PGSQL: Suspend database" {
  1030. if [ -z "$(echo $DB_SYSTEM | grep -w "pgsql")" ]; then
  1031. skip "PostGreSQL is not installed"
  1032. fi
  1033. run v-suspend-database $pguser $pgdatabase
  1034. assert_success
  1035. refute_output
  1036. }
  1037. @test "PGSQL: Unsuspend database" {
  1038. if [ -z "$(echo $DB_SYSTEM | grep -w "pgsql")" ]; then
  1039. skip "PostGreSQL is not installed"
  1040. fi
  1041. run v-unsuspend-database $pguser $pgdatabase
  1042. assert_success
  1043. refute_output
  1044. }
  1045. @test "PGSQL: Change database user" {
  1046. if [ -z "$(echo $DB_SYSTEM | grep -w "pgsql")" ]; then
  1047. skip "PostGreSQL is not installed"
  1048. fi
  1049. skip
  1050. run v-change-database-user $pguser $pgdatabase database
  1051. assert_success
  1052. refute_output
  1053. validate_database pgsql $pgdatabase $pgdatabase 123456
  1054. }
  1055. @test "PGSQL: Delete database" {
  1056. if [ -z "$(echo $DB_SYSTEM | grep -w "pgsql")" ]; then
  1057. skip "PostGreSQL is not installed"
  1058. fi
  1059. run v-delete-database $pguser $pgdatabase
  1060. assert_success
  1061. refute_output
  1062. }
  1063. @test "PGSQL: Delete missing database" {
  1064. if [ -z "$(echo $DB_SYSTEM | grep -w "pgsql")" ]; then
  1065. skip "PostGreSQL is not installed"
  1066. fi
  1067. run v-delete-database $pguser $pgdatabase
  1068. assert_failure $E_NOTEXIST
  1069. run v-delete-user $pguser
  1070. }
  1071. #----------------------------------------------------------#
  1072. # System #
  1073. #----------------------------------------------------------#
  1074. @test "System: Set/Enable SMTP account for internal mail" {
  1075. run v-add-sys-smtp $domain 587 STARTTLS info@$domain 1234-test noreply@$domain
  1076. assert_success
  1077. refute_output
  1078. }
  1079. @test "System: Disable SMTP account for internal mail" {
  1080. run v-delete-sys-smtp
  1081. assert_success
  1082. refute_output
  1083. }
  1084. #----------------------------------------------------------#
  1085. # CLEANUP #
  1086. #----------------------------------------------------------#
  1087. @test "Mail: Delete domain" {
  1088. # skip
  1089. run v-delete-mail-domain $user $domain
  1090. assert_success
  1091. refute_output
  1092. }
  1093. @test "DNS: Delete domain" {
  1094. # skip
  1095. run v-delete-dns-domain $user $domain
  1096. assert_success
  1097. refute_output
  1098. }
  1099. @test "WEB: Delete domain" {
  1100. # skip
  1101. run v-delete-web-domain $user $domain
  1102. assert_success
  1103. refute_output
  1104. }
  1105. @test "Delete user" {
  1106. run v-delete-user $user
  1107. assert_success
  1108. refute_output
  1109. }
  1110. @test "Ip: Delete the test IP" {
  1111. run v-delete-sys-ip 198.18.0.125
  1112. assert_success
  1113. refute_output
  1114. }
  1115. @test 'assert()' {
  1116. touch '/var/log/test.log'
  1117. assert [ -e '/var/log/test.log' ]
  1118. }