test.bats 70 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326
  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=$(idn2 $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_web_domain() {
  74. local user=$1
  75. local domain=$2
  76. local webproof=$3
  77. local webpath=${4}
  78. refute [ -z "$user" ]
  79. refute [ -z "$domain" ]
  80. refute [ -z "$webproof" ]
  81. source $HESTIA/func/ip.sh
  82. run v-list-web-domain $user $domain
  83. assert_success
  84. USER_DATA=$HESTIA/data/users/$user
  85. local domain_ip=$(get_object_value 'web' 'DOMAIN' "$domain" '$IP')
  86. SSL=$(get_object_value 'web' 'DOMAIN' "$domain" '$SSL')
  87. domain_ip=$(get_real_ip "$domain_ip")
  88. if [ ! -z $webpath ]; then
  89. domain_docroot=$(get_object_value 'web' 'DOMAIN' "$domain" '$CUSTOM_DOCROOT')
  90. if [ -n "$domain_docroot" ] && [ -d "$domain_docroot" ]; then
  91. assert_file_exist "${domain_docroot}/${webpath}"
  92. else
  93. assert_file_exist "${HOMEDIR}/${user}/web/${domain}/public_html/${webpath}"
  94. fi
  95. fi
  96. # Test HTTP
  97. # Curl hates UTF domains so convert them to ascci.
  98. domain_idn=$(idn2 $domain)
  99. run curl --location --silent --show-error --insecure --resolve "${domain_idn}:80:${domain_ip}" "http://${domain_idn}/${webpath}"
  100. assert_success
  101. assert_output --partial "$webproof"
  102. # Test HTTPS
  103. if [ "$SSL" = "yes" ]; then
  104. run v-list-web-domain-ssl $user $domain
  105. assert_success
  106. run curl --location --silent --show-error --insecure --resolve "${domain_idn}:443:${domain_ip}" "https://${domain_idn}/${webpath}"
  107. assert_success
  108. assert_output --partial "$webproof"
  109. fi
  110. }
  111. function validate_headers_domain() {
  112. local user=$1
  113. local domain=$2
  114. local webproof=$3
  115. refute [ -z "$user" ]
  116. refute [ -z "$domain" ]
  117. refute [ -z "$webproof" ]
  118. source $HESTIA/func/ip.sh
  119. run v-list-web-domain $user $domain
  120. assert_success
  121. USER_DATA=$HESTIA/data/users/$user
  122. local domain_ip=$(get_object_value 'web' 'DOMAIN' "$domain" '$IP')
  123. SSL=$(get_object_value 'web' 'DOMAIN' "$domain" '$SSL')
  124. domain_ip=$(get_real_ip "$domain_ip")
  125. # Test HTTP with code redirect for some reasons due to 301 redirect it fails
  126. curl -i --resolve "${domain}:80:${domain_ip}" "http://${domain}"
  127. assert_success
  128. assert_output --partial "$webproof"
  129. }
  130. function validate_mail_domain() {
  131. local user=$1
  132. local domain=$2
  133. refute [ -z "$user" ]
  134. refute [ -z "$domain" ]
  135. run v-list-mail-domain $user $domain
  136. assert_success
  137. assert_dir_exist $HOMEDIR/$user/mail/$domain
  138. assert_dir_exist $HOMEDIR/$user/conf/mail/$domain
  139. assert_file_exist $HOMEDIR/$user/conf/mail/$domain/aliases
  140. if [ -n "$ANTISPAM_SYSTEM" ]; then
  141. assert_file_exist $HOMEDIR/$user/conf/mail/$domain/antispam
  142. fi
  143. if [ -n "$ANTIVIRUS_SYSTEM" ]; then
  144. assert_file_exist $HOMEDIR/$user/conf/mail/$domain/antivirus
  145. fi
  146. assert_file_exist $HOMEDIR/$user/conf/mail/$domain/fwd_only
  147. assert_file_exist $HOMEDIR/$user/conf/mail/$domain/ip
  148. assert_file_exist $HOMEDIR/$user/conf/mail/$domain/passwd
  149. }
  150. function validate_webmail_domain() {
  151. local user=$1
  152. local domain=$2
  153. local webproof=$3
  154. local webpath=${4}
  155. refute [ -z "$user" ]
  156. refute [ -z "$domain" ]
  157. refute [ -z "$webproof" ]
  158. source $HESTIA/func/ip.sh
  159. USER_DATA=$HESTIA/data/users/$user
  160. local domain_ip=$(get_object_value 'web' 'DOMAIN' "$domain" '$IP')
  161. SSL=$(get_object_value 'mail' 'DOMAIN' "$domain" '$SSL')
  162. domain_ip=$(get_real_ip "$domain_ip")
  163. if [ ! -z "$webpath" ]; then
  164. assert_file_exist /var/lib/roundcube/$webpath
  165. fi
  166. if [ "$SSL" = "no" ]; then
  167. # Test HTTP
  168. run curl --location --silent --show-error --insecure --resolve "webmail.${domain}:80:${domain_ip}" "http://webmail.${domain}/${webpath}"
  169. assert_success
  170. assert_output --partial "$webproof"
  171. # Test HTTP
  172. run curl --location --silent --show-error --insecure --resolve "mail.${domain}:80:${domain_ip}" "http://mail.${domain}/${webpath}"
  173. assert_success
  174. assert_output --partial "$webproof"
  175. fi
  176. # Test HTTPS
  177. if [ "$SSL" = "yes" ]; then
  178. # Test HTTP with 301 redirect for some reasons due to 301 redirect it fails
  179. run curl --silent --show-error --insecure --resolve "webmail.${domain}:80:${domain_ip}" "http://webmail.${domain}/${webpath}"
  180. assert_success
  181. assert_output --partial "301 Moved Permanently"
  182. # Test HTTP with 301 redirect for some reasons due to 301 redirect it fails
  183. run curl --silent --show-error --insecure --resolve "mail.${domain}:80:${domain_ip}" "http://mail.${domain}/${webpath}"
  184. assert_success
  185. assert_output --partial "301 Moved Permanently"
  186. run v-list-mail-domain-ssl $user $domain
  187. assert_success
  188. run curl --location --silent --show-error --insecure --resolve "webmail.${domain}:443:${domain_ip}" "https://webmail.${domain}/${webpath}"
  189. assert_success
  190. assert_output --partial "$webproof"
  191. run curl --location --silent --show-error --insecure --resolve "mail.${domain}:443:${domain_ip}" "https://mail.${domain}/${webpath}"
  192. assert_success
  193. assert_output --partial "$webproof"
  194. fi
  195. }
  196. function validate_database(){
  197. local type=$1
  198. local database=$2
  199. local dbuser=$3
  200. local password=$4
  201. host_str=$(grep "HOST='localhost'" $HESTIA/conf/$type.conf)
  202. parse_object_kv_list "$host_str"
  203. if [ -z $PORT ]; then PORT=3306; fi
  204. refute [ -z "$HOST" ]
  205. refute [ -z "$PORT" ]
  206. refute [ -z "$database" ]
  207. refute [ -z "$dbuser" ]
  208. refute [ -z "$password" ]
  209. if [ "$type" = "mysql" ]; then
  210. # Create an connection to verify correct username / password has been set correctly
  211. tmpfile=$(mktemp /tmp/mysql.XXXXXX)
  212. echo "[client]">$tmpfile
  213. echo "host='$HOST'" >> $tmpfile
  214. echo "user='$dbuser'" >> $tmpfile
  215. echo "password='$password'" >> $tmpfile
  216. echo "port='$PORT'" >> $tmpfile
  217. chmod 600 $tmpfile
  218. sql_tmp=$(mktemp /tmp/query.XXXXXX)
  219. echo "show databases;" > $sql_tmp
  220. run mysql --defaults-file=$tmpfile < "$sql_tmp"
  221. assert_success
  222. assert_output --partial "$database"
  223. rm -f "$sql_tmp"
  224. rm -f "$tmpfile"
  225. else
  226. echo "*:*:*:$dbuser:$password" > /root/.pgpass
  227. chmod 600 /root/.pgpass
  228. run export PGPASSWORD="$password" | psql -h $HOST -U "$dbuser" -p $PORT -d "$database" --no-password -c "\l"
  229. assert_success
  230. rm /root/.pgpass
  231. fi
  232. }
  233. function check_ip_banned(){
  234. local ip=$1
  235. local chain=$2
  236. run grep "IP='$ip' CHAIN='$chain'" $HESTIA/data/firewall/banlist.conf
  237. assert_success
  238. assert_output --partial "$ip"
  239. }
  240. function check_ip_not_banned(){
  241. local ip=$1
  242. local chain=$2
  243. run grep "IP='$ip' CHAIN='$chain'" $HESTIA/data/firewall/banlist.conf
  244. assert_failure E_ARGS
  245. refute_output
  246. }
  247. #----------------------------------------------------------#
  248. # IP #
  249. #----------------------------------------------------------#
  250. @test "RDNS: Check reverse Dns validation" {
  251. # 1. PTR record for a IP should return a hostname(reverse) which in turn must resolve to the same IP addr(forward). (Full circle)
  252. # `-> not implemented in `is_ip_rdns_valid` yet and also not tested here
  253. # 2. Reject rPTR records that match generic dynamic IP pool patterns
  254. local ip="54.200.1.22"
  255. local rdns="ec2-54-200-1-22.us-west-2.compute.amazonaws.com"
  256. run is_ip_rdns_valid "$ip"
  257. assert_failure
  258. refute_output
  259. local rdns="ec2.54.200.1.22.us-west-2.compute.amazonaws.com"
  260. run is_ip_rdns_valid "$ip"
  261. assert_failure
  262. refute_output
  263. local rdns="ec2-22-1-200-54.us-west-2.compute.amazonaws.com"
  264. run is_ip_rdns_valid "$ip"
  265. assert_failure
  266. refute_output
  267. local rdns="ec2.22.1.200.54.us-west-2.compute.amazonaws.com"
  268. run is_ip_rdns_valid "$ip"
  269. assert_failure
  270. refute_output
  271. local rdns="ec2-200-54-1-22.us-west-2.compute.amazonaws.com"
  272. run is_ip_rdns_valid "$ip"
  273. assert_failure
  274. refute_output
  275. local rdns="panel-22.mydomain.tld"
  276. run is_ip_rdns_valid "$ip"
  277. assert_success
  278. assert_output "$rdns"
  279. local rdns="mail.mydomain.tld"
  280. run is_ip_rdns_valid "$ip"
  281. assert_success
  282. assert_output "$rdns"
  283. local rdns="mydomain.tld"
  284. run is_ip_rdns_valid "$ip"
  285. assert_success
  286. assert_output "$rdns"
  287. }
  288. #----------------------------------------------------------#
  289. # User #
  290. #----------------------------------------------------------#
  291. @test "User: Add new user" {
  292. run v-add-user $user $user $user@hestiacp.com default "Super Test"
  293. assert_success
  294. refute_output
  295. }
  296. @test "User: Add new user Failed 1" {
  297. run v-add-user 'jäap' $user $user@hestiacp2.com default "Super Test"
  298. assert_failure $E_INVALID
  299. assert_output --partial 'Error: invalid user format'
  300. }
  301. @test "User: Add new user Failed 2" {
  302. run v-add-user 'ëaap' $user $user@hestiacp2.com default "Super Test"
  303. assert_failure $E_INVALID
  304. assert_output --partial 'Error: invalid user format'
  305. }
  306. @test "User: Add new user Failed 3" {
  307. run v-add-user 'jaaẞ' $user $user@hestiacp2.com default "Super Test"
  308. assert_failure $E_INVALID
  309. assert_output --partial 'Error: invalid user format'
  310. }
  311. @test "User: Add new user Failed 4" {
  312. run v-add-user '1234' $user $user@hestiacp2.com default "Super Test"
  313. assert_failure $E_INVALID
  314. assert_output --partial 'Error: invalid user format'
  315. }
  316. @test "User: Add new user Failed 5" {
  317. run v-add-user '1aap' $user $user@hestiacp2.com default "Super Test"
  318. assert_failure $E_INVALID
  319. assert_output --partial 'Error: invalid user format'
  320. }
  321. @test "User: Add new user Failed 6" {
  322. run v-add-user 'ib_Buffer' $user $user@hestiacp2.com default "Super Test"
  323. assert_failure $E_INVALID
  324. assert_output --partial 'Error: The user name'
  325. }
  326. @test "User: Add new user Success 1" {
  327. run v-add-user 'jaap01' $user $user@hestiacp2.com default "Super Test"
  328. assert_success
  329. refute_output
  330. }
  331. @test "User: Add new user Success 1 Delete" {
  332. run v-delete-user jaap01
  333. assert_success
  334. refute_output
  335. }
  336. @test "User: Add new user Success 2" {
  337. run v-add-user 'buffer' $user $user@hestiacp2.com default "Super Test"
  338. assert_success
  339. refute_output
  340. }
  341. @test "User: Add new user Success 2 Delete" {
  342. run v-delete-user buffer
  343. assert_success
  344. refute_output
  345. }
  346. @test "User: Change user password" {
  347. run v-change-user-password "$user" "$userpass2"
  348. assert_success
  349. refute_output
  350. }
  351. @test "User: Change user email" {
  352. run v-change-user-contact "$user" tester@hestiacp.com
  353. assert_success
  354. refute_output
  355. }
  356. @test "User: Change user contact invalid email " {
  357. run v-change-user-contact "$user" testerhestiacp.com
  358. assert_failure $E_INVALID
  359. assert_output --partial 'Error: invalid email format'
  360. }
  361. @test "User: Change user name" {
  362. run v-change-user-name "$user" "New name"
  363. assert_success
  364. refute_output
  365. }
  366. @test "User: Change user shell" {
  367. run v-change-user-shell $user bash no
  368. assert_success
  369. refute_output
  370. run stat -c '%U' /home/$user
  371. assert_output --partial "$user"
  372. mount_file=$(systemd-escape -p --suffix=mount "/srv/jail/$user/home")
  373. assert_file_not_exist /etc/systemd/system/$mount_file
  374. }
  375. @test "User: Change user invalid shell" {
  376. run v-change-user-shell $user bashinvalid no
  377. assert_failure $E_INVALID
  378. assert_output --partial 'shell bashinvalid is not valid'
  379. }
  380. @test "User: Change user nologin" {
  381. run v-change-user-shell $user nologin no
  382. assert_success
  383. refute_output
  384. run stat -c '%U' /home/$user
  385. assert_output --partial 'root'
  386. mount_file=$(systemd-escape -p --suffix=mount "/srv/jail/$user/home/$user")
  387. assert_file_exist /etc/systemd/system/$mount_file
  388. }
  389. @test "User: Change user bash with jail" {
  390. run v-change-user-shell $user bash yes
  391. assert_success
  392. refute_output
  393. run stat -c '%U' /home/$user
  394. assert_output --partial 'root'
  395. mount_file=$(systemd-escape -p --suffix=mount "/srv/jail/$user/home/$user")
  396. assert_file_exist /etc/systemd/system/$mount_file
  397. }
  398. @test "User: Change user default ns" {
  399. run v-change-user-ns $user ns0.com ns1.com ns2.com ns3.com
  400. assert_success
  401. refute_output
  402. run v-list-user-ns "$user" plain
  403. assert_success
  404. assert_output --partial 'ns0.com'
  405. }
  406. @test "User: Change user language" {
  407. run v-change-user-language $user "nl"
  408. assert_success
  409. refute_output
  410. }
  411. @test "User: Change user language (Does not exists)" {
  412. run v-change-user-language $user "aa"
  413. assert_failure $E_NOTEXIST
  414. }
  415. @test "User: Change user sort order" {
  416. run v-change-user-sort-order $user "name"
  417. assert_success
  418. refute_output
  419. }
  420. @test "User: Change user theme" {
  421. run v-change-user-theme $user "flat"
  422. assert_success
  423. refute_output
  424. }
  425. @test "User: Change user theme (Does not exists)" {
  426. run v-change-user-theme $user "aa"
  427. assert_failure $E_NOTEXIST
  428. }
  429. @test "User: Change user login ip" {
  430. run v-change-user-config-value $user "LOGIN_USE_IPLIST" "1.2.3.4,1.2.3.5"
  431. assert_success
  432. refute_output
  433. }
  434. @test "User: Change user login ip (Failed)" {
  435. run v-change-user-config-value $user "LOGIN_USE_IPLIST" "'; echo 'jaap'; echo '"
  436. assert_failure $E_INVALID
  437. }
  438. @test "User: Add user notification" {
  439. run v-add-user-notification $user "Test message" "Message"
  440. assert_success
  441. refute_output
  442. }
  443. @test "User: Acknowledge user notification" {
  444. run v-acknowledge-user-notification $user 1
  445. assert_success
  446. refute_output
  447. }
  448. @test "User: List user notification" {
  449. run v-list-user-notifications $user csv
  450. assert_success
  451. assert_output --partial "1,\"Test message\",\"Message\",yes"
  452. }
  453. @test "User: Delete user notification" {
  454. run v-delete-user-notification admin 1
  455. assert_success
  456. refute_output
  457. }
  458. @test "User: Get User salt ipv4" {
  459. run v-get-user-salt $user 192.168.2.10
  460. assert_success
  461. }
  462. @test "User: Get User salt ipv4 invalid" {
  463. run v-get-user-salt $user 192.168.992.10
  464. assert_failure $E_INVALID
  465. }
  466. @test "User: Get User salt ipv6" {
  467. run v-get-user-salt $user "21DA:D3:0:2F3B:2AA:FF:FE28:9C5A"
  468. assert_success
  469. }
  470. @test "User: Get User salt ipv6 not exists" {
  471. run v-get-user-salt "notexists" "21DA:D3:0:2F3B:2AA:FF:FE28:9C5B"
  472. assert_failure $E_PASSWORD
  473. }
  474. @test "User: Get User salt ipv6 invalid" {
  475. run v-get-user-salt "$user" "21DA:D3:0:2F3B:ZZZ:FF:FE28:9C5B"
  476. assert_failure $E_INVALID
  477. }
  478. @test "User: Check user password" {
  479. run v-check-user-password $user "$userpass2" 192.168.2.10 'no'
  480. assert_success
  481. }
  482. @test "User: Check user password Incorrect password" {
  483. run v-check-user-password $user "$userpass1" 192.168.2.10 'no'
  484. assert_failure $E_PASSWORD
  485. }
  486. @test "User: Check user hash ipv4" {
  487. hash=$(v-check-user-password $user "$userpass2" 192.168.2.10 'yes');
  488. run v-check-user-hash $user $hash 192.168.2.10
  489. assert_success
  490. }
  491. @test "User: Check user hash ipv6" {
  492. hash=$(v-check-user-password $user "$userpass2" 21DA:D3:0:2F3B:2AA:FF:FE28:9C5A 'yes');
  493. run v-check-user-hash $user $hash 21DA:D3:0:2F3B:2AA:FF:FE28:9C5A
  494. assert_success
  495. }
  496. @test "User: Check user hash ipv6 incorrect" {
  497. run v-check-user-hash $user 'jafawefaweijawe' 21DA:D3:0:2F3B:2AA:FF:FE28:9C5A
  498. assert_failure $E_PASSWORD
  499. }
  500. #----------------------------------------------------------#
  501. # Cron #
  502. #----------------------------------------------------------#
  503. @test "Cron: Add cron job" {
  504. run v-add-cron-job $user 1 1 1 1 1 echo
  505. assert_success
  506. refute_output
  507. }
  508. @test "Cron: Suspend cron job" {
  509. run v-suspend-cron-job $user 1
  510. assert_success
  511. refute_output
  512. }
  513. @test "Cron: Unsuspend cron job" {
  514. run v-unsuspend-cron-job $user 1
  515. assert_success
  516. refute_output
  517. }
  518. @test "Cron: Delete cron job" {
  519. run v-delete-cron-job $user 1
  520. assert_success
  521. refute_output
  522. }
  523. @test "Cron: Add cron job (duplicate)" {
  524. run v-add-cron-job $user 1 1 1 1 1 echo 1
  525. assert_success
  526. refute_output
  527. run v-add-cron-job $user 1 1 1 1 1 echo 1
  528. assert_failure $E_EXISTS
  529. assert_output --partial 'JOB=1 already exists'
  530. }
  531. @test "Cron: Second cron job" {
  532. run v-add-cron-job $user 2 2 2 2 2 echo 2
  533. assert_success
  534. refute_output
  535. }
  536. @test "Cron: Two cron jobs must be listed" {
  537. run v-list-cron-jobs $user csv
  538. assert_success
  539. assert_line --partial '1,1,1,1,1,"echo",no'
  540. assert_line --partial '2,2,2,2,2,"echo",no'
  541. }
  542. @test "Cron: rebuild" {
  543. run v-rebuild-cron-jobs $user
  544. assert_success
  545. refute_output
  546. }
  547. #----------------------------------------------------------#
  548. # IP #
  549. #----------------------------------------------------------#
  550. @test "Ip: Add new ip on first interface" {
  551. interface=$(v-list-sys-interfaces plain | head -n 1)
  552. run ip link show dev $interface
  553. assert_success
  554. local a2_rpaf="/etc/$WEB_SYSTEM/mods-enabled/rpaf.conf"
  555. local a2_remoteip="/etc/$WEB_SYSTEM/mods-enabled/remoteip.conf"
  556. # Save initial state
  557. echo "interface=${interface}" >> /tmp/hestia-test-env.sh
  558. [ -f "$a2_rpaf" ] && file_hash1=$(cat $a2_rpaf |md5sum |cut -d" " -f1) && echo "a2_rpaf_hash='${file_hash1}'" >> /tmp/hestia-test-env.sh
  559. [ -f "$a2_remoteip" ] && file_hash2=$(cat $a2_remoteip |md5sum |cut -d" " -f1) && echo "a2_remoteip_hash='${file_hash2}'" >> /tmp/hestia-test-env.sh
  560. local ip="198.18.0.12"
  561. run v-add-sys-ip $ip 255.255.255.255 $interface $user
  562. assert_success
  563. refute_output
  564. assert_file_exist /etc/$WEB_SYSTEM/conf.d/$ip.conf
  565. assert_file_exist $HESTIA/data/ips/$ip
  566. assert_file_contains $HESTIA/data/ips/$ip "OWNER='$user'"
  567. assert_file_contains $HESTIA/data/ips/$ip "INTERFACE='$interface'"
  568. if [ -n "$PROXY_SYSTEM" ]; then
  569. assert_file_exist /etc/$PROXY_SYSTEM/conf.d/$ip.conf
  570. [ -f "$a2_rpaf" ] && assert_file_contains "$a2_rpaf" "RPAFproxy_ips.*$ip\b"
  571. [ -f "$a2_remoteip" ] && assert_file_contains "$a2_remoteip" "RemoteIPInternalProxy $ip\$"
  572. fi
  573. }
  574. @test "Ip: [Ubuntu] Netplan file updated" {
  575. # Skip if Debian
  576. if [ $(lsb_release -s -i) != "Ubuntu" ]; then
  577. skip
  578. fi
  579. # Test will fail if systemd (For example Proxmox) is used for setting ip addresses. How ever there is no "decent" way to check if Netplan is used except via the method used in v-add-sys-ip and there for breaking the reason to test this. How ever if the test used in v-add-sys-ip fails it still should check if it exists!
  580. assert_file_exist /etc/netplan/60-hestia.yaml
  581. # also check if file contains the newly added ip
  582. assert_file_contains /etc/netplan/60-hestia.yaml "$ip"
  583. }
  584. @test "Ip: [Debian] Netplan file updated" {
  585. # Skip with netplan
  586. if [ $(lsb_release -s -i) = "Ubuntu" ]; then
  587. skip
  588. fi
  589. assert_file_exist /etc/network/interfaces
  590. assert_file_contains /etc/network/interfaces "$ip"
  591. }
  592. @test "Ip: Add ip (duplicate)" {
  593. run v-add-sys-ip 198.18.0.12 255.255.255.255 $interface $user
  594. assert_failure $E_EXISTS
  595. }
  596. @test "Ip: Add extra ip" {
  597. local ip="198.18.0.121"
  598. run v-add-sys-ip $ip 255.255.255.255 $interface $user
  599. assert_success
  600. refute_output
  601. assert_file_exist /etc/$WEB_SYSTEM/conf.d/$ip.conf
  602. assert_file_exist $HESTIA/data/ips/$ip
  603. assert_file_contains $HESTIA/data/ips/$ip "OWNER='$user'"
  604. assert_file_contains $HESTIA/data/ips/$ip "INTERFACE='$interface'"
  605. if [ -n "$PROXY_SYSTEM" ]; then
  606. assert_file_exist /etc/$PROXY_SYSTEM/conf.d/$ip.conf
  607. local a2_rpaf="/etc/$WEB_SYSTEM/mods-enabled/rpaf.conf"
  608. [ -f "$a2_rpaf" ] && assert_file_contains "$a2_rpaf" "RPAFproxy_ips.*$ip\b"
  609. local a2_remoteip="/etc/$WEB_SYSTEM/mods-enabled/remoteip.conf"
  610. [ -f "$a2_remoteip" ] && assert_file_contains "$a2_remoteip" "RemoteIPInternalProxy $ip\$"
  611. fi
  612. }
  613. @test "Ip: Delete ip 198.18.0.12" {
  614. local ip="198.18.0.12"
  615. run v-delete-sys-ip $ip
  616. assert_success
  617. refute_output
  618. assert_file_not_exist /etc/$WEB_SYSTEM/conf.d/$ip.conf
  619. assert_file_not_exist $HESTIA/data/ips/$ip
  620. }
  621. @test "Ip: [Ubuntu] Netplan file changed" {
  622. # Skip if Debian
  623. if [ $(lsb_release -s -i) != "Ubuntu" ]; then
  624. skip
  625. fi
  626. ip="198.18.0.121"
  627. assert_file_exist /etc/netplan/60-hestia.yaml
  628. assert_file_contains /etc/netplan/60-hestia.yaml "$ip"
  629. }
  630. @test "Ip: Delete ip 198.18.0.121" {
  631. ip="198.18.0.121"
  632. run v-delete-sys-ip $ip
  633. assert_success
  634. refute_output
  635. assert_file_not_exist /etc/$WEB_SYSTEM/conf.d/$ip.conf
  636. assert_file_not_exist $HESTIA/data/ips/$ip
  637. if [ -n "$PROXY_SYSTEM" ]; then
  638. assert_file_not_exist /etc/$PROXY_SYSTEM/conf.d/$ip.conf
  639. fi
  640. # remoteip and rpaf config hashes must match the initial one
  641. if [ ! -z "$a2_rpaf_hash" ]; then
  642. local a2_rpaf="/etc/$WEB_SYSTEM/mods-enabled/rpaf.conf"
  643. file_hash=$(cat $a2_rpaf |md5sum |cut -d" " -f1)
  644. assert_equal "$file_hash" "$a2_rpaf_hash"
  645. fi
  646. if [ ! -z "$a2_remoteip_hash" ]; then
  647. local a2_remoteip="/etc/$WEB_SYSTEM/mods-enabled/remoteip.conf"
  648. file_hash=$(cat $a2_remoteip |md5sum |cut -d" " -f1)
  649. assert_equal "$file_hash" "$a2_remoteip_hash"
  650. fi
  651. }
  652. @test "Ip: Add IP for rest of the test" {
  653. local ip="198.18.0.125"
  654. run v-add-sys-ip $ip 255.255.255.255 $interface $user
  655. assert_success
  656. refute_output
  657. assert_file_exist /etc/$WEB_SYSTEM/conf.d/$ip.conf
  658. assert_file_exist $HESTIA/data/ips/$ip
  659. assert_file_contains $HESTIA/data/ips/$ip "OWNER='$user'"
  660. assert_file_contains $HESTIA/data/ips/$ip "INTERFACE='$interface'"
  661. if [ -n "$PROXY_SYSTEM" ]; then
  662. assert_file_exist /etc/$PROXY_SYSTEM/conf.d/$ip.conf
  663. local a2_rpaf="/etc/$WEB_SYSTEM/mods-enabled/rpaf.conf"
  664. [ -f "$a2_rpaf" ] && assert_file_contains "$a2_rpaf" "RPAFproxy_ips.*$ip\b"
  665. local a2_remoteip="/etc/$WEB_SYSTEM/mods-enabled/remoteip.conf"
  666. [ -f "$a2_remoteip" ] && assert_file_contains "$a2_remoteip" "RemoteIPInternalProxy $ip\$"
  667. fi
  668. }
  669. #----------------------------------------------------------#
  670. # WEB #
  671. #----------------------------------------------------------#
  672. @test "WEB: Add web domain" {
  673. run v-add-web-domain $user $domain 198.18.0.125
  674. assert_success
  675. refute_output
  676. echo -e "<?php\necho 'Hestia Test:'.(4*3);" > $HOMEDIR/$user/web/$domain/public_html/php-test.php
  677. validate_web_domain $user $domain 'Hestia Test:12' 'php-test.php'
  678. rm $HOMEDIR/$user/web/$domain/public_html/php-test.php
  679. }
  680. @test "WEB: Add web domain (duplicate)" {
  681. run v-add-web-domain $user $domain 198.18.0.125
  682. assert_failure $E_EXISTS
  683. }
  684. @test "WEB: Add web domain alias" {
  685. run v-add-web-domain-alias $user $domain v3.$domain
  686. assert_success
  687. refute_output
  688. }
  689. @test "WEB: Add web domain alias (duplicate)" {
  690. run v-add-web-domain-alias $user $domain v3.$domain
  691. assert_failure $E_EXISTS
  692. }
  693. @test "WEB: Add web domain wildcard alias" {
  694. run v-add-web-domain-alias $user $domain "*.$domain"
  695. assert_success
  696. refute_output
  697. }
  698. @test "WEB: Delete web domain wildcard alias" {
  699. run v-delete-web-domain-alias $user $domain "*.$domain"
  700. assert_success
  701. refute_output
  702. }
  703. @test "WEB: Add web domain stats" {
  704. run v-add-web-domain-stats $user $domain awstats
  705. assert_success
  706. refute_output
  707. }
  708. @test "WEB: Add web domain stats user" {
  709. skip
  710. run v-add-web-domain-stats-user $user $domain test m3g4p4ssw0rd
  711. assert_success
  712. refute_output
  713. }
  714. @test "WEB: Suspend web domain" {
  715. run v-suspend-web-domain $user $domain
  716. assert_success
  717. refute_output
  718. echo -e "<?php\necho 'Hestia Test:'.(4*3);" > $HOMEDIR/$user/web/$domain/public_html/php-test.php
  719. validate_web_domain $user $domain 'This site is currently suspended'
  720. validate_web_domain $user $domain 'This site is currently suspended' 'php-test.php'
  721. rm $HOMEDIR/$user/web/$domain/public_html/php-test.php
  722. }
  723. @test "WEB: Unsuspend web domain" {
  724. run v-unsuspend-web-domain $user $domain
  725. assert_success
  726. refute_output
  727. echo -e "<?php\necho 'Hestia Test:'.(4*3);" > $HOMEDIR/$user/web/$domain/public_html/php-test.php
  728. validate_web_domain $user $domain 'Hestia Test:12' 'php-test.php'
  729. rm $HOMEDIR/$user/web/$domain/public_html/php-test.php
  730. }
  731. @test "WEB: Add redirect to www.domain.com" {
  732. run v-add-web-domain-redirect $user $domain www.$domain 301
  733. assert_success
  734. refute_output
  735. run validate_headers_domain $user $domain "301"
  736. }
  737. @test "WEB: Delete redirect to www.domain.com" {
  738. run v-delete-web-domain-redirect $user $domain
  739. assert_success
  740. refute_output
  741. }
  742. @test "WEB: Enable Fast CGI Cache" {
  743. if [ "$WEB_SYSTEM" != "nginx" ]; then
  744. skip "FastCGI cache is not supported"
  745. fi
  746. run v-add-fastcgi-cache $user $domain '1m' yes
  747. assert_success
  748. refute_output
  749. echo -e "<?php\necho 'Hestia Test:'.(4*3);" > $HOMEDIR/$user/web/$domain/public_html/php-test.php
  750. run validate_headers_domain $user $domain "Miss"
  751. run validate_headers_domain $user $domain "Hit"
  752. rm $HOMEDIR/$user/web/$domain/public_html/php-test.php
  753. }
  754. @test "WEB: Disable Fast CGI Cache" {
  755. if [ "$WEB_SYSTEM" != "nginx" ]; then
  756. skip "FastCGI cache is not supported"
  757. fi
  758. run v-delete-fastcgi-cache $user $domain yes
  759. assert_success
  760. refute_output
  761. }
  762. @test "WEB: Generate Self signed certificate" {
  763. ssl=$(v-generate-ssl-cert "$domain" "info@$domain" US CA "Orange County" HestiaCP IT "mail.$domain" | tail -n1 | awk '{print $2}')
  764. echo $ssl;
  765. mv $ssl/$domain.crt /tmp/$domain.crt
  766. mv $ssl/$domain.key /tmp/$domain.key
  767. }
  768. @test "WEB: Add ssl" {
  769. # Use self signed certificates during last test
  770. run v-add-web-domain-ssl $user $domain /tmp
  771. assert_success
  772. refute_output
  773. }
  774. @test "WEB: Rebuild web domain" {
  775. run v-rebuild-web-domains $user
  776. assert_success
  777. refute_output
  778. }
  779. #----------------------------------------------------------#
  780. # IDN #
  781. #----------------------------------------------------------#
  782. @test "WEB: Add IDN domain UTF idn-tést.eu" {
  783. run v-add-web-domain $user idn-tést.eu 198.18.0.125
  784. assert_success
  785. refute_output
  786. echo -e "<?php\necho 'Hestia Test:'.(4*3);" > $HOMEDIR/$user/web/idn-tést.eu/public_html/php-test.php
  787. validate_web_domain $user idn-tést.eu 'Hestia Test:12' 'php-test.php'
  788. rm $HOMEDIR/$user/web/idn-tést.eu/public_html/php-test.php
  789. }
  790. @test "WEB: Add IDN domain ASCII idn-tést.eu" {
  791. # Expected to fail due to utf exists
  792. run v-add-web-domain $user "xn--idn-tst-fya.eu" 198.18.0.125
  793. assert_failure $E_EXISTS
  794. }
  795. @test "WEB: Generate Self signed certificate ASCII idn-tést.eu" {
  796. run v-generate-ssl-cert "xn--idn-tst-fya.eu" "info@xn--idn-tst-fya.eu" US CA "Orange County" HestiaCP IT "mail.xn--idn-tst-fya.eu"
  797. assert_success
  798. }
  799. @test "WEB: Delete IDN domain idn-tést.eu" {
  800. run v-delete-web-domain $user idn-tést.eu
  801. assert_success
  802. refute_output
  803. }
  804. @test "WEB: Add IDN domain UTF bløst.рф" {
  805. run v-add-web-domain $user bløst.рф 198.18.0.125
  806. assert_success
  807. refute_output
  808. }
  809. @test "WEB: Generate Self signed certificate ASCII bløst.рф" {
  810. run v-generate-ssl-cert "xn--blst-hra.xn--p1ai" "info@xn--blst-hra.xn--p1ai" US CA "Orange County" HestiaCP IT "mail.xn--blst-hra.xn--p1ai"
  811. assert_success
  812. }
  813. @test "WEB: Delete IDN domain bløst.рф" {
  814. run v-delete-web-domain $user bløst.рф
  815. assert_success
  816. refute_output
  817. }
  818. #----------------------------------------------------------#
  819. # MULTIPHP #
  820. #----------------------------------------------------------#
  821. @test "Multiphp: Default php Backend version" {
  822. def_phpver=$(multiphp_default_version)
  823. multi_domain="multiphp.${domain}"
  824. run v-add-web-domain $user $multi_domain 198.18.0.125
  825. assert_success
  826. refute_output
  827. echo -e "<?php\necho PHP_MAJOR_VERSION.'.'.PHP_MINOR_VERSION;" > "$HOMEDIR/$user/web/$multi_domain/public_html/php-test.php"
  828. validate_web_domain $user $multi_domain "$def_phpver" 'php-test.php'
  829. rm "$HOMEDIR/$user/web/$multi_domain/public_html/php-test.php"
  830. }
  831. @test "Multiphp: Change backend version - PHP v5.6" {
  832. test_phpver='5.6'
  833. multi_domain="multiphp.${domain}"
  834. if [ ! -d "/etc/php/${test_phpver}/fpm/pool.d/" ]; then
  835. skip "PHP ${test_phpver} not installed"
  836. fi
  837. run v-change-web-domain-backend-tpl $user $multi_domain 'PHP-5_6' 'yes'
  838. assert_success
  839. refute_output
  840. # Changing web backend will create a php-fpm pool config in the corresponding php folder
  841. assert_file_exist "/etc/php/${test_phpver}/fpm/pool.d/${multi_domain}.conf"
  842. # A single php-fpm pool config file must be present
  843. num_fpm_config_files="$(find -L /etc/php/ -name "${multi_domain}.conf" | wc -l)"
  844. assert_equal "$num_fpm_config_files" '1'
  845. echo -e "<?php\necho 'hestia-multiphptest:'.PHP_MAJOR_VERSION.'.'.PHP_MINOR_VERSION;" > "$HOMEDIR/$user/web/$multi_domain/public_html/php-test.php"
  846. validate_web_domain $user $multi_domain "hestia-multiphptest:$test_phpver" 'php-test.php'
  847. rm "$HOMEDIR/$user/web/$multi_domain/public_html/php-test.php"
  848. }
  849. @test "Multiphp: Change backend version - PHP v7.0" {
  850. test_phpver='7.0'
  851. multi_domain="multiphp.${domain}"
  852. if [ ! -d "/etc/php/${test_phpver}/fpm/pool.d/" ]; then
  853. skip "PHP ${test_phpver} not installed"
  854. fi
  855. run v-change-web-domain-backend-tpl $user $multi_domain 'PHP-7_0' 'yes'
  856. assert_success
  857. refute_output
  858. # Changing web backend will create a php-fpm pool config in the corresponding php folder
  859. assert_file_exist "/etc/php/${test_phpver}/fpm/pool.d/${multi_domain}.conf"
  860. # A single php-fpm pool config file must be present
  861. num_fpm_config_files="$(find -L /etc/php/ -name "${multi_domain}.conf" | wc -l)"
  862. assert_equal "$num_fpm_config_files" '1'
  863. echo -e "<?php\necho 'hestia-multiphptest:'.PHP_MAJOR_VERSION.'.'.PHP_MINOR_VERSION;" > "$HOMEDIR/$user/web/$multi_domain/public_html/php-test.php"
  864. validate_web_domain $user $multi_domain "hestia-multiphptest:$test_phpver" 'php-test.php'
  865. rm "$HOMEDIR/$user/web/$multi_domain/public_html/php-test.php"
  866. }
  867. @test "Multiphp: Change backend version - PHP v7.1" {
  868. test_phpver='7.1'
  869. multi_domain="multiphp.${domain}"
  870. if [ ! -d "/etc/php/${test_phpver}/fpm/pool.d/" ]; then
  871. skip "PHP ${test_phpver} not installed"
  872. fi
  873. run v-change-web-domain-backend-tpl $user $multi_domain 'PHP-7_1' 'yes'
  874. assert_success
  875. refute_output
  876. # Changing web backend will create a php-fpm pool config in the corresponding php folder
  877. assert_file_exist "/etc/php/${test_phpver}/fpm/pool.d/${multi_domain}.conf"
  878. # A single php-fpm pool config file must be present
  879. num_fpm_config_files="$(find -L /etc/php/ -name "${multi_domain}.conf" | wc -l)"
  880. assert_equal "$num_fpm_config_files" '1'
  881. echo -e "<?php\necho 'hestia-multiphptest:'.PHP_MAJOR_VERSION.'.'.PHP_MINOR_VERSION;" > "$HOMEDIR/$user/web/$multi_domain/public_html/php-test.php"
  882. validate_web_domain $user $multi_domain "hestia-multiphptest:$test_phpver" 'php-test.php'
  883. rm "$HOMEDIR/$user/web/$multi_domain/public_html/php-test.php"
  884. }
  885. @test "Multiphp: Change backend version - PHP v7.2" {
  886. test_phpver='7.2'
  887. multi_domain="multiphp.${domain}"
  888. if [ ! -d "/etc/php/${test_phpver}/fpm/pool.d/" ]; then
  889. skip "PHP ${test_phpver} not installed"
  890. fi
  891. run v-change-web-domain-backend-tpl $user $multi_domain 'PHP-7_2' 'yes'
  892. assert_success
  893. refute_output
  894. # Changing web backend will create a php-fpm pool config in the corresponding php folder
  895. assert_file_exist "/etc/php/${test_phpver}/fpm/pool.d/${multi_domain}.conf"
  896. # A single php-fpm pool config file must be present
  897. num_fpm_config_files="$(find -L /etc/php/ -name "${multi_domain}.conf" | wc -l)"
  898. assert_equal "$num_fpm_config_files" '1'
  899. echo -e "<?php\necho 'hestia-multiphptest:'.PHP_MAJOR_VERSION.'.'.PHP_MINOR_VERSION;" > "$HOMEDIR/$user/web/$multi_domain/public_html/php-test.php"
  900. validate_web_domain $user $multi_domain "hestia-multiphptest:$test_phpver" 'php-test.php'
  901. rm "$HOMEDIR/$user/web/$multi_domain/public_html/php-test.php"
  902. }
  903. @test "Multiphp: Change backend version - PHP v7.3" {
  904. test_phpver='7.3'
  905. multi_domain="multiphp.${domain}"
  906. if [ ! -d "/etc/php/${test_phpver}/fpm/pool.d/" ]; then
  907. skip "PHP ${test_phpver} not installed"
  908. fi
  909. run v-change-web-domain-backend-tpl $user $multi_domain 'PHP-7_3' 'yes'
  910. assert_success
  911. refute_output
  912. # Changing web backend will create a php-fpm pool config in the corresponding php folder
  913. assert_file_exist "/etc/php/${test_phpver}/fpm/pool.d/${multi_domain}.conf"
  914. # A single php-fpm pool config file must be present
  915. num_fpm_config_files="$(find -L /etc/php/ -name "${multi_domain}.conf" | wc -l)"
  916. assert_equal "$num_fpm_config_files" '1'
  917. echo -e "<?php\necho 'hestia-multiphptest:'.PHP_MAJOR_VERSION.'.'.PHP_MINOR_VERSION;" > "$HOMEDIR/$user/web/$multi_domain/public_html/php-test.php"
  918. validate_web_domain $user $multi_domain "hestia-multiphptest:$test_phpver" 'php-test.php'
  919. rm "$HOMEDIR/$user/web/$multi_domain/public_html/php-test.php"
  920. }
  921. @test "Multiphp: Change backend version - PHP v7.4" {
  922. test_phpver='7.4'
  923. multi_domain="multiphp.${domain}"
  924. if [ ! -d "/etc/php/${test_phpver}/fpm/pool.d/" ]; then
  925. skip "PHP ${test_phpver} not installed"
  926. fi
  927. run v-change-web-domain-backend-tpl $user $multi_domain 'PHP-7_4' 'yes'
  928. assert_success
  929. refute_output
  930. # Changing web backend will create a php-fpm pool config in the corresponding php folder
  931. assert_file_exist "/etc/php/${test_phpver}/fpm/pool.d/${multi_domain}.conf"
  932. # A single php-fpm pool config file must be present
  933. num_fpm_config_files="$(find -L /etc/php/ -name "${multi_domain}.conf" | wc -l)"
  934. assert_equal "$num_fpm_config_files" '1'
  935. echo -e "<?php\necho 'hestia-multiphptest:'.PHP_MAJOR_VERSION.'.'.PHP_MINOR_VERSION;" > "$HOMEDIR/$user/web/$multi_domain/public_html/php-test.php"
  936. validate_web_domain $user $multi_domain "hestia-multiphptest:$test_phpver" 'php-test.php'
  937. rm "$HOMEDIR/$user/web/$multi_domain/public_html/php-test.php"
  938. }
  939. @test "Multiphp: Change backend version - PHP v8.0" {
  940. test_phpver='8.0'
  941. multi_domain="multiphp.${domain}"
  942. if [ ! -d "/etc/php/${test_phpver}/fpm/pool.d/" ]; then
  943. skip "PHP ${test_phpver} not installed"
  944. fi
  945. run v-change-web-domain-backend-tpl $user $multi_domain 'PHP-8_0' 'yes'
  946. assert_success
  947. refute_output
  948. # Changing web backend will create a php-fpm pool config in the corresponding php folder
  949. assert_file_exist "/etc/php/${test_phpver}/fpm/pool.d/${multi_domain}.conf"
  950. # A single php-fpm pool config file must be present
  951. num_fpm_config_files="$(find -L /etc/php/ -name "${multi_domain}.conf" | wc -l)"
  952. assert_equal "$num_fpm_config_files" '1'
  953. echo -e "<?php\necho 'hestia-multiphptest:'.PHP_MAJOR_VERSION.'.'.PHP_MINOR_VERSION;" > "$HOMEDIR/$user/web/$multi_domain/public_html/php-test.php"
  954. validate_web_domain $user $multi_domain "hestia-multiphptest:$test_phpver" 'php-test.php'
  955. rm $HOMEDIR/$user/web/$multi_domain/public_html/php-test.php
  956. }
  957. @test "Multiphp: Change backend version - PHP v8.1" {
  958. test_phpver='8.1'
  959. multi_domain="multiphp.${domain}"
  960. if [ ! -d "/etc/php/${test_phpver}/fpm/pool.d/" ]; then
  961. skip "PHP ${test_phpver} not installed"
  962. fi
  963. run v-change-web-domain-backend-tpl $user $multi_domain 'PHP-8_1' 'yes'
  964. assert_success
  965. refute_output
  966. # Changing web backend will create a php-fpm pool config in the corresponding php folder
  967. assert_file_exist "/etc/php/${test_phpver}/fpm/pool.d/${multi_domain}.conf"
  968. # A single php-fpm pool config file must be present
  969. num_fpm_config_files="$(find -L /etc/php/ -name "${multi_domain}.conf" | wc -l)"
  970. assert_equal "$num_fpm_config_files" '1'
  971. echo -e "<?php\necho 'hestia-multiphptest:'.PHP_MAJOR_VERSION.'.'.PHP_MINOR_VERSION;" > "$HOMEDIR/$user/web/$multi_domain/public_html/php-test.php"
  972. validate_web_domain $user $multi_domain "hestia-multiphptest:$test_phpver" 'php-test.php'
  973. rm $HOMEDIR/$user/web/$multi_domain/public_html/php-test.php
  974. }
  975. @test "Multiphp: Change backend version - PHP v8.2" {
  976. test_phpver='8.2'
  977. multi_domain="multiphp.${domain}"
  978. if [ ! -d "/etc/php/${test_phpver}/fpm/pool.d/" ]; then
  979. skip "PHP ${test_phpver} not installed"
  980. fi
  981. run v-change-web-domain-backend-tpl $user $multi_domain 'PHP-8_2' 'yes'
  982. assert_success
  983. refute_output
  984. # Changing web backend will create a php-fpm pool config in the corresponding php folder
  985. assert_file_exist "/etc/php/${test_phpver}/fpm/pool.d/${multi_domain}.conf"
  986. # A single php-fpm pool config file must be present
  987. num_fpm_config_files="$(find -L /etc/php/ -name "${multi_domain}.conf" | wc -l)"
  988. assert_equal "$num_fpm_config_files" '1'
  989. echo -e "<?php\necho 'hestia-multiphptest:'.PHP_MAJOR_VERSION.'.'.PHP_MINOR_VERSION;" > "$HOMEDIR/$user/web/$multi_domain/public_html/php-test.php"
  990. validate_web_domain $user $multi_domain "hestia-multiphptest:$test_phpver" 'php-test.php'
  991. rm $HOMEDIR/$user/web/$multi_domain/public_html/php-test.php
  992. }
  993. @test "Multiphp: Cleanup" {
  994. multi_domain="multiphp.${domain}"
  995. run v-delete-web-domain $user $multi_domain 'yes'
  996. assert_success
  997. refute_output
  998. # No php-fpm pool config file must be present
  999. num_fpm_config_files="$(find -L /etc/php/ -name "${multi_domain}.conf" | wc -l)"
  1000. assert_equal "$num_fpm_config_files" '0'
  1001. }
  1002. #----------------------------------------------------------#
  1003. # CUSTOM DOCROOT #
  1004. #----------------------------------------------------------#
  1005. @test "Docroot: Self Subfolder" {
  1006. docroot1_domain="docroot1.${domain}"
  1007. run v-add-web-domain $user $docroot1_domain 198.18.0.125
  1008. assert_success
  1009. refute_output
  1010. run v-add-fs-directory $user "$HOMEDIR/$user/web/$docroot1_domain/public_html/public/"
  1011. assert_success
  1012. refute_output
  1013. run v-change-web-domain-docroot $user "$docroot1_domain" "$docroot1_domain" "/public"
  1014. assert_success
  1015. refute_output
  1016. echo -e '<?php\necho "self-sub-".$_SERVER["HTTP_HOST"];' > "$HOMEDIR/$user/web/$docroot1_domain/public_html/public/php-test.php"
  1017. validate_web_domain $user $docroot1_domain "self-sub-${docroot1_domain}" 'php-test.php'
  1018. rm "$HOMEDIR/$user/web/$docroot1_domain/public_html/public/php-test.php"
  1019. }
  1020. @test "Docroot: Other domain subfolder" {
  1021. docroot1_domain="docroot1.${domain}"
  1022. docroot2_domain="docroot2.${domain}"
  1023. run v-add-web-domain $user $docroot2_domain 198.18.0.125
  1024. assert_success
  1025. refute_output
  1026. run v-add-fs-directory $user "$HOMEDIR/$user/web/$docroot2_domain/public_html/public/"
  1027. assert_success
  1028. refute_output
  1029. run v-change-web-domain-docroot $user "$docroot1_domain" "$docroot2_domain" "/public"
  1030. assert_success
  1031. refute_output
  1032. echo -e '<?php\necho "doc2-sub-".$_SERVER["HTTP_HOST"];' > "$HOMEDIR/$user/web/$docroot2_domain/public_html/public/php-test.php"
  1033. validate_web_domain $user $docroot1_domain "doc2-sub-${docroot1_domain}" 'php-test.php'
  1034. rm "$HOMEDIR/$user/web/$docroot2_domain/public_html/public/php-test.php"
  1035. }
  1036. @test "Docroot: Other domain root folder" {
  1037. docroot1_domain="docroot1.${domain}"
  1038. docroot2_domain="docroot2.${domain}"
  1039. run v-change-web-domain-docroot $user "$docroot1_domain" "$docroot2_domain"
  1040. assert_success
  1041. refute_output
  1042. echo -e '<?php\necho "doc2-root-".$_SERVER["HTTP_HOST"];' > "$HOMEDIR/$user/web/$docroot2_domain/public_html/php-test.php"
  1043. validate_web_domain $user $docroot1_domain "doc2-root-${docroot1_domain}" 'php-test.php'
  1044. rm "$HOMEDIR/$user/web/$docroot2_domain/public_html/php-test.php"
  1045. }
  1046. @test "Docroot: Reset" {
  1047. docroot1_domain="docroot1.${domain}"
  1048. run v-change-web-domain-docroot $user "$docroot1_domain" "default"
  1049. assert_success
  1050. refute_output
  1051. echo -e '<?php\necho "doc1-root-".$_SERVER["HTTP_HOST"];' > "$HOMEDIR/$user/web/$docroot1_domain/public_html/php-test.php"
  1052. validate_web_domain $user $docroot1_domain "doc1-root-${docroot1_domain}" 'php-test.php'
  1053. rm "$HOMEDIR/$user/web/$docroot1_domain/public_html/php-test.php"
  1054. }
  1055. @test "Docroot: Cleanup" {
  1056. docroot1_domain="docroot1.${domain}"
  1057. docroot2_domain="docroot2.${domain}"
  1058. run v-delete-web-domain $user $docroot1_domain
  1059. assert_success
  1060. refute_output
  1061. run v-delete-web-domain $user $docroot2_domain
  1062. assert_success
  1063. refute_output
  1064. }
  1065. #----------------------------------------------------------#
  1066. # DNS #
  1067. #----------------------------------------------------------#
  1068. @test "DNS: Add domain" {
  1069. run v-add-dns-domain $user $domain 198.18.0.125
  1070. assert_success
  1071. refute_output
  1072. }
  1073. @test "DNS: Add domain (duplicate)" {
  1074. run v-add-dns-domain $user $domain 198.18.0.125
  1075. assert_failure $E_EXISTS
  1076. }
  1077. @test "DNS: Add domain record" {
  1078. run v-add-dns-record $user $domain test A 198.18.0.125 '' 20
  1079. assert_success
  1080. refute_output
  1081. }
  1082. @test "DNS: Add domain record *.domain.com" {
  1083. run v-add-dns-record $user $domain '*' A 198.18.0.125 '' 30
  1084. assert_success
  1085. refute_output
  1086. }
  1087. @test "DNS: Add domain record *.domain.com with ID 0" {
  1088. run v-add-dns-record $user $domain '*' A 198.18.0.125 '' 0
  1089. assert_failure $E_INVALID
  1090. }
  1091. @test "DNS: Change DNS record" {
  1092. run v-change-dns-record $user $domain 20 test A 198.18.0.125 "" "" 1500
  1093. assert_success
  1094. refute_output
  1095. }
  1096. @test "DNS: Change DNS record (no update)" {
  1097. run v-change-dns-record $user $domain 20 test A 198.18.0.125 "" "" 1500
  1098. assert_failure $E_EXSIST
  1099. }
  1100. @test "DNS: Change DNS record id" {
  1101. run v-change-dns-record-id $user $domain 20 21
  1102. assert_success
  1103. refute_output
  1104. # Change back
  1105. run v-change-dns-record-id $user $domain 21 20
  1106. }
  1107. @test "DNS: Change DNS record id (no update)" {
  1108. run v-change-dns-record-id $user $domain 20 20
  1109. assert_failure $E_EXSIST
  1110. }
  1111. @test "DNS: Delete domain record" {
  1112. run v-delete-dns-record $user $domain 20
  1113. assert_success
  1114. refute_output
  1115. }
  1116. @test "DNS: Delete missing domain record" {
  1117. run v-delete-dns-record $user $domain 20
  1118. assert_failure $E_NOTEXIST
  1119. }
  1120. @test "DNS: Change domain expire date" {
  1121. run v-change-dns-domain-exp $user $domain 2020-01-01
  1122. assert_success
  1123. refute_output
  1124. }
  1125. @test "DNS: Add domain record MX" {
  1126. run v-add-dns-record $user $domain '@' MX mx.hestiacp.com '' 50
  1127. assert_success
  1128. refute_output
  1129. assert_file_contains "$HOMEDIR/$user/conf/dns/${domain}.db" "mx.hestiacp.com."
  1130. run v-change-dns-record $user $domain 50 '@' MX mx.hestia.com
  1131. assert_success
  1132. refute_output
  1133. assert_file_contains "$HOMEDIR/$user/conf/dns/${domain}.db" "mx.hestia.com."
  1134. run v-delete-dns-record $user $domain 50
  1135. assert_success
  1136. refute_output
  1137. }
  1138. @test "DNS: Add domain record NS" {
  1139. run v-delete-dns-record $user $domain 50
  1140. run v-add-dns-record $user $domain '@' NS mx.hestiacp.com '' 50
  1141. assert_success
  1142. refute_output
  1143. assert_file_contains "$HOMEDIR/$user/conf/dns/${domain}.db" "mx.hestiacp.com."
  1144. run v-change-dns-record $user $domain 50 '@' NS mx.hestia.com
  1145. assert_success
  1146. refute_output
  1147. assert_file_contains "$HOMEDIR/$user/conf/dns/${domain}.db" "mx.hestia.com."
  1148. run v-delete-dns-record $user $domain 50
  1149. assert_success
  1150. refute_output
  1151. }
  1152. @test "DNS: Add domain record SRV" {
  1153. run v-delete-dns-record $user $domain 50
  1154. run v-add-dns-record $user $domain '_test_domain' SRV mx.hestiacp.com '' 50
  1155. assert_success
  1156. refute_output
  1157. assert_file_contains "$HOMEDIR/$user/conf/dns/${domain}.db" "mx.hestiacp.com."
  1158. run v-change-dns-record $user $domain 50 '_test.domain' SRV mx.hestia.com
  1159. assert_success
  1160. refute_output
  1161. assert_file_contains "$HOMEDIR/$user/conf/dns/${domain}.db" "mx.hestia.com."
  1162. run v-delete-dns-record $user $domain 50
  1163. assert_success
  1164. refute_output
  1165. }
  1166. @test "DNS: Add domain record CNAME" {
  1167. run v-delete-dns-record $user $domain 50
  1168. run v-add-dns-record $user $domain 'mail' CNAME mx.hestiacp.com '' 50
  1169. assert_success
  1170. refute_output
  1171. assert_file_contains "$HOMEDIR/$user/conf/dns/${domain}.db" "mx.hestiacp.com."
  1172. run v-change-dns-record $user $domain 50 'mail' CNAME mx.hestia.com
  1173. assert_success
  1174. refute_output
  1175. assert_file_contains "$HOMEDIR/$user/conf/dns/${domain}.db" "mx.hestia.com."
  1176. run v-delete-dns-record $user $domain 50
  1177. assert_success
  1178. refute_output
  1179. }
  1180. @test "DNS: Check txt dns records type1" {
  1181. [ -z "$DNS_SYSTEM" ] && skip
  1182. run v-delete-dns-record $user $domain 50
  1183. record1_in='v=DMARC1; p=quarantine; pct=100'
  1184. record2_in='v=DMARC1; p=quarantine; pct=90'
  1185. record1_out='"v=DMARC1; p=quarantine; pct=100"'
  1186. record2_in='"v=DMARC1; p=quarantine; pct=90"'
  1187. # Test Create
  1188. run v-add-dns-record $user $domain 'test-long-txt' 'TXT' "$record1_in" '' 50
  1189. assert_success
  1190. refute_output
  1191. assert_file_contains "$HOMEDIR/$user/conf/dns/${domain}.db" "$record1_out"
  1192. # Test Edit
  1193. run v-change-dns-record $user $domain 50 'test-long-txt' 'TXT' "$record2_in"
  1194. assert_success
  1195. refute_output
  1196. assert_file_contains "$HOMEDIR/$user/conf/dns/${domain}.db" "$record2_out"
  1197. # Test Cleanup
  1198. run v-delete-dns-record $user $domain 50
  1199. assert_success
  1200. refute_output
  1201. }
  1202. @test "DNS: Check txt dns records type2" {
  1203. [ -z "$DNS_SYSTEM" ] && skip
  1204. run v-delete-dns-record $user $domain 50
  1205. record3_in='k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4+VEVsoTbl6tYLJlhozqAGju3IgpSVdBAS5LMyzpHP8/L0/PlyVRJnm2xECjVk3DRqCmelyIvmraw1VtFz2aH6DRlDhHsZghj1DmGhwN+7NkwIb4hEvmytMVAz1WyiLH6Rm6Iemm/ZCt1RhrAMUYLxHA9mJgky76YCcf8/cX35xC+1vd4a5U6YofAZeVP9DBvVgQ8ung4gVrOrQrXkU8QfVNAoXz5pfJo74GB7woIBFhZXsU6SKho7KnzT5inVCIOtWp7L5hyEnbySWQPHT2vAMCCAe2AY/Vv0N3HW14o8P3b4A6OU920wFB2kA7pkQNzO5OwH+HSttwG0PaIiQxYQIDAQAB'
  1206. record3_out='"k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4+VEVsoTbl6tYLJlhozqAGju3IgpSVdBAS5LMyzpHP8/L0/PlyVRJnm2xECjVk3DRqCmelyIvmraw1VtFz2aH6DRlDhHsZghj1DmGhwN+7NkwIb4hEvmytMVAz1WyiLH6Rm6Iemm/ZCt1RhrAMUYLxHA9mJgky76YCcf8/cX35xC+1vd4a5U6YofAZeVP9DBvVgQ8ung4g""VrOrQrXkU8QfVNAoXz5pfJo74GB7woIBFhZXsU6SKho7KnzT5inVCIOtWp7L5hyEnbySWQPHT2vAMCCAe2AY/Vv0N3HW14o8P3b4A6OU920wFB2kA7pkQNzO5OwH+HSttwG0PaIiQxYQIDAQAB"'
  1207. record4_in='k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4+VEVsoTbl6tYLJlhozqAGju3IgpSVdBAS5LMyzpHP8/L0/PlyVRJnm2xECjVk3DRqCmelyIvmraw1VtFz2aH6DRlDhHsZghj1DmGhwN+7NkwIb4hEvmytMVAz1WyiLH6Rm6Iemm/ZCt1RhrAMUYLxHA9mJgky76YCcf8/cX35xC+1vd4a5U6YofAZeVP9DBvVgQ8ung4gVrOrQrXkU8QfVNAoXz5pfJo74GB7woIBFhZXsU6SKho7KnzT5inVCIOtWp7L5hyEnbySWQPHT2vAMCCAe2AY/Vv0N3HW14o8P3b4A6OU920wFB2kA7pkQNzO5OwH+HSttwG0PaIiQxYQIDAQA4'
  1208. record4_out='"k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4+VEVsoTbl6tYLJlhozqAGju3IgpSVdBAS5LMyzpHP8/L0/PlyVRJnm2xECjVk3DRqCmelyIvmraw1VtFz2aH6DRlDhHsZghj1DmGhwN+7NkwIb4hEvmytMVAz1WyiLH6Rm6Iemm/ZCt1RhrAMUYLxHA9mJgky76YCcf8/cX35xC+1vd4a5U6YofAZeVP9DBvVgQ8ung4g""VrOrQrXkU8QfVNAoXz5pfJo74GB7woIBFhZXsU6SKho7KnzT5inVCIOtWp7L5hyEnbySWQPHT2vAMCCAe2AY/Vv0N3HW14o8P3b4A6OU920wFB2kA7pkQNzO5OwH+HSttwG0PaIiQxYQIDAQA4"'
  1209. # Test Create
  1210. run v-add-dns-record $user $domain 'test-long-txt' 'TXT' "$record3_in" '' 50
  1211. assert_success
  1212. refute_output
  1213. assert_file_contains "$HOMEDIR/$user/conf/dns/${domain}.db" "$record3_out"
  1214. # Test Edit
  1215. run v-change-dns-record $user $domain 50 'test-long-txt' 'TXT' "$record4_in"
  1216. assert_success
  1217. refute_output
  1218. assert_file_contains "$HOMEDIR/$user/conf/dns/${domain}.db" "$record4_out"
  1219. # Test Cleanup
  1220. run v-delete-dns-record $user $domain 50
  1221. assert_success
  1222. refute_output
  1223. }
  1224. @test "DNS: Change domain ip" {
  1225. run v-change-dns-domain-ip $user $domain 127.0.0.1
  1226. assert_success
  1227. refute_output
  1228. }
  1229. @test "DNS: Suspend domain" {
  1230. run v-suspend-dns-domain $user $domain
  1231. assert_success
  1232. refute_output
  1233. }
  1234. @test "DNS: Unsuspend domain" {
  1235. run v-unsuspend-dns-domain $user $domain
  1236. assert_success
  1237. refute_output
  1238. }
  1239. @test "DNS: Rebuild" {
  1240. run v-rebuild-dns-domains $user
  1241. assert_success
  1242. refute_output
  1243. }
  1244. #----------------------------------------------------------#
  1245. # MAIL #
  1246. #----------------------------------------------------------#
  1247. @test "MAIL: Add domain" {
  1248. run v-add-mail-domain $user $domain
  1249. assert_success
  1250. refute_output
  1251. validate_mail_domain $user $domain
  1252. }
  1253. @test "MAIL: Add mail domain webmail client (Roundcube)" {
  1254. run v-add-mail-domain-webmail $user $domain "roundcube" "yes"
  1255. assert_success
  1256. refute_output
  1257. # echo -e "<?php\necho 'Server: ' . \$_SERVER['SERVER_SOFTWARE'];" > /var/lib/roundcube/check_server.php
  1258. validate_webmail_domain $user $domain 'Welcome to Roundcube Webmail'
  1259. # rm /var/lib/roundcube/check_server.php
  1260. }
  1261. @test "Mail: Add SSL to mail domain" {
  1262. # Use generated certificates during WEB Generate Self signed certificate
  1263. run v-add-mail-domain-ssl $user $domain /tmp
  1264. assert_success
  1265. refute_output
  1266. validate_webmail_domain $user $domain 'Welcome to Roundcube Webmail'
  1267. }
  1268. @test "MAIL: Add mail domain webmail client (SnappyMail)" {
  1269. if [ -z "$(echo $WEBMAIL_SYSTEM | grep -w "snappymail")" ]; then
  1270. skip "Webmail client SnappyMail not installed"
  1271. fi
  1272. run v-add-mail-domain-webmail $user $domain "snappymail" "yes"
  1273. assert_success
  1274. refute_output
  1275. validate_mail_domain $user $domain
  1276. validate_webmail_domain $user $domain 'SnappyMail Webmail'
  1277. }
  1278. @test "MAIL: Disable webmail client" {
  1279. run v-add-mail-domain-webmail $user $domain "disabled" "yes"
  1280. assert_success
  1281. refute_output
  1282. validate_mail_domain $user $domain
  1283. validate_webmail_domain $user $domain 'Success!'
  1284. run v-add-mail-domain-webmail $user $domain "roundcube" "yes"
  1285. assert_success
  1286. refute_output
  1287. }
  1288. @test "MAIL: Add domain (duplicate)" {
  1289. run v-add-mail-domain $user $domain
  1290. assert_failure $E_EXISTS
  1291. }
  1292. @test "MAIL: Add account" {
  1293. run v-add-mail-account $user $domain test "$userpass2"
  1294. assert_success
  1295. assert_file_contains /etc/exim4/domains/$domain/limits "test@$domain"
  1296. refute_output
  1297. }
  1298. @test "MAIL: Add account (duplicate)" {
  1299. run v-add-mail-account $user $domain test "$userpass2"
  1300. assert_failure $E_EXISTS
  1301. }
  1302. @test "MAIL: Add account 2" {
  1303. run v-add-mail-account $user $domain random "$userpass2"
  1304. assert_success
  1305. assert_file_contains /etc/exim4/domains/$domain/limits "random@$domain"
  1306. refute_output
  1307. }
  1308. @test "MAIL: Add account alias" {
  1309. run v-add-mail-account-alias $user $domain test hestiacprocks
  1310. assert_success
  1311. assert_file_contains /etc/exim4/domains/$domain/aliases "hestiacprocks@$domain"
  1312. refute_output
  1313. }
  1314. @test "MAIL: Add account alias 2" {
  1315. run v-add-mail-account-alias $user $domain test hestiacprocks2
  1316. assert_success
  1317. assert_file_contains /etc/exim4/domains/$domain/aliases "hestiacprocks2@$domain"
  1318. refute_output
  1319. }
  1320. @test "MAIL: Add account alias 3" {
  1321. run v-add-mail-account-alias $user $domain test hestiacp
  1322. assert_success
  1323. assert_file_contains /etc/exim4/domains/$domain/aliases "hestiacp@$domain"
  1324. refute_output
  1325. }
  1326. @test "MAIL: Add account 3" {
  1327. run v-add-mail-account $user $domain hestia "$userpass2"
  1328. assert_success
  1329. assert_file_contains /etc/exim4/domains/$domain/limits "hestia@$domain"
  1330. refute_output
  1331. }
  1332. @test "MAIL: Add account 4" {
  1333. run v-add-mail-account $user $domain hestiarocks3 "$userpass2"
  1334. assert_success
  1335. assert_file_contains /etc/exim4/domains/$domain/limits "hestiarocks3@$domain"
  1336. refute_output
  1337. }
  1338. @test "MAIL: Add account 5" {
  1339. run v-add-mail-account $user $domain 01 "$userpass2"
  1340. assert_success
  1341. assert_file_contains /etc/exim4/domains/$domain/limits "01@$domain"
  1342. refute_output
  1343. }
  1344. @test "MAIL: Add account 6" {
  1345. run v-add-mail-account $user $domain "0aa" "$userpass2"
  1346. assert_success
  1347. assert_file_contains /etc/exim4/domains/$domain/limits "0aa@$domain"
  1348. refute_output
  1349. }
  1350. @test "MAIL: Add account alias Invalid length" {
  1351. run v-add-mail-account-alias $user $domain test 'hestiacp-realy-rocks-but-i-want-to-have-feature-xyz-and-i-want-it-now'
  1352. assert_failure $E_INVALID
  1353. }
  1354. @test "MAIL: Add account alias Invalid" {
  1355. run v-add-mail-account-alias $user $domain test '-test'
  1356. assert_failure $E_INVALID
  1357. }
  1358. @test "MAIL: Add account alias Invalid 2" {
  1359. run v-add-mail-account-alias $user $domain test 'hestia@test'
  1360. assert_failure $E_INVALID
  1361. }
  1362. @test "MAIL: Add account alias (duplicate)" {
  1363. run v-add-mail-account-alias $user $domain test hestiacprocks
  1364. assert_failure $E_EXISTS
  1365. }
  1366. @test "MAIL: change mail account password" {
  1367. run curl -k -X POST -d "email=test@$domain&password=$userpass2&new=123456" https://localhost:8083/reset/mail/
  1368. assert_success
  1369. assert_output --partial "==ok=="
  1370. }
  1371. @test "MAIL: change mail account password (Incorrect PW)" {
  1372. run curl -k -X POST -d "email=test@$domain&password=$userpass2&new=123456" https://localhost:8083/reset/mail/
  1373. assert_success
  1374. assert_output --partial "error"
  1375. }
  1376. @test "MAIL: Change rate limit" {
  1377. run v-change-mail-account-rate-limit $user $domain test 10
  1378. assert_file_contains /etc/exim4/domains/$domain/limits "test@$domain:10"
  1379. }
  1380. @test "MAIL: Delete account" {
  1381. run v-delete-mail-account $user $domain test
  1382. assert_success
  1383. refute_output
  1384. }
  1385. @test "MAIL: Delete missing account" {
  1386. run v-delete-mail-account $user $domain test
  1387. assert_failure $E_NOTEXIST
  1388. }
  1389. @test "MAIL: Rebuild mail domain" {
  1390. run v-rebuild-mail-domains $user
  1391. assert_success
  1392. refute_output
  1393. }
  1394. @test "MAIL: Delete DKIM" {
  1395. run v-delete-mail-domain-dkim $user $domain
  1396. assert_success
  1397. refute_output
  1398. run grep "RECORD='_domainkey'" "${HESTIA}/data/users/${user}/dns/${domain}.conf"
  1399. assert_failure
  1400. refute_output
  1401. run grep "RECORD='mail._domainkey'" "${HESTIA}/data/users/${user}/dns/${domain}.conf"
  1402. assert_failure
  1403. refute_output
  1404. }
  1405. @test "MAIL: Add DKIM" {
  1406. run v-add-mail-domain-dkim $user $domain
  1407. assert_success
  1408. refute_output
  1409. run grep "RECORD='_domainkey'" "${HESTIA}/data/users/${user}/dns/${domain}.conf"
  1410. assert_success
  1411. assert_output --partial "RECORD='_domainkey' TYPE='TXT'"
  1412. run grep "RECORD='mail._domainkey'" "${HESTIA}/data/users/${user}/dns/${domain}.conf"
  1413. assert_success
  1414. assert_output --partial "RECORD='mail._domainkey' TYPE='TXT'"
  1415. }
  1416. @test "MAIL: Delete DKIM but preserve custom dkim records" {
  1417. run v-add-dns-record $user $domain 'k2._domainkey' 'TXT' 'v=DKIM1; k=rsa; p=123456'
  1418. assert_success
  1419. refute_output
  1420. run v-delete-mail-domain-dkim $user $domain
  1421. assert_success
  1422. refute_output
  1423. run grep "RECORD='k2._domainkey'" "${HESTIA}/data/users/${user}/dns/${domain}.conf"
  1424. assert_success
  1425. assert_output --partial "RECORD='k2._domainkey' TYPE='TXT'"
  1426. }
  1427. #----------------------------------------------------------#
  1428. # Limit possibilities adding different owner domain #
  1429. #----------------------------------------------------------#
  1430. @test "Allow Users: User can't add user.user2.com " {
  1431. # Case: admin company.tld
  1432. # users should not be allowed to add user.company.tld
  1433. run v-add-user $user2 $user2 $user@hestiacp.com default "Super Test"
  1434. assert_success
  1435. refute_output
  1436. run v-add-web-domain $user2 $rootdomain
  1437. assert_success
  1438. refute_output
  1439. run v-add-web-domain $user $subdomain
  1440. assert_failure $E_EXISTS
  1441. }
  1442. @test "Allow Users: User can't add user.user2.com as alias" {
  1443. run v-add-web-domain-alias $user $domain $subdomain
  1444. assert_failure $E_EXISTS
  1445. }
  1446. @test "Allow Users: User can't add user.user2.com as mail domain" {
  1447. run v-add-mail-domain $user $subdomain
  1448. assert_failure $E_EXISTS
  1449. }
  1450. @test "Allow Users: User can't add user.user2.com as dns domain" {
  1451. run v-add-dns-domain $user $subdomain 198.18.0.125
  1452. assert_failure $E_EXISTS
  1453. }
  1454. @test "Allow Users: Set Allow users" {
  1455. # Allow user to yes allows
  1456. # Case: admin company.tld
  1457. # users are allowed to add user.company.tld
  1458. run v-add-web-domain-allow-users $user2 $rootdomain
  1459. assert_success
  1460. refute_output
  1461. }
  1462. @test "Allow Users: User can add user.user2.com" {
  1463. run v-add-web-domain $user $subdomain
  1464. assert_success
  1465. refute_output
  1466. }
  1467. @test "Allow Users: User can add user.user2.com as alias" {
  1468. run v-delete-web-domain $user $subdomain
  1469. assert_success
  1470. refute_output
  1471. run v-add-web-domain-alias $user $domain $subdomain
  1472. assert_success
  1473. refute_output
  1474. }
  1475. @test "Allow Users: User can add user.user2.com as mail domain" {
  1476. run v-add-mail-domain $user $subdomain
  1477. assert_success
  1478. refute_output
  1479. }
  1480. @test "Allow Users: User can add user.user2.com as dns domain" {
  1481. run v-add-dns-domain $user $subdomain 198.18.0.125
  1482. assert_success
  1483. refute_output
  1484. }
  1485. @test "Allow Users: Cleanup tests" {
  1486. run v-delete-dns-domain $user $subdomain
  1487. assert_success
  1488. refute_output
  1489. run v-delete-mail-domain $user $subdomain
  1490. assert_success
  1491. refute_output
  1492. }
  1493. @test "Allow Users: Set Allow users no" {
  1494. run v-delete-web-domain-alias $user $domain $subdomain
  1495. assert_success
  1496. refute_output
  1497. run v-delete-web-domain-allow-users $user2 $rootdomain
  1498. assert_success
  1499. refute_output
  1500. }
  1501. @test "Allow Users: User can't add user.user2.com again" {
  1502. run v-add-web-domain $user $subdomain
  1503. assert_failure $E_EXISTS
  1504. }
  1505. @test "Allow Users: user2 can add user.user2.com again" {
  1506. run v-add-web-domain $user2 $subdomain
  1507. assert_success
  1508. refute_output
  1509. }
  1510. #----------------------------------------------------------#
  1511. # DB #
  1512. #----------------------------------------------------------#
  1513. @test "MYSQL: Add database" {
  1514. run v-add-database $user database dbuser 1234 mysql
  1515. assert_success
  1516. refute_output
  1517. # validate_database mysql database_name database_user password
  1518. validate_database mysql $database $dbuser 1234
  1519. }
  1520. @test "MYSQL: Add Database (Duplicate)" {
  1521. run v-add-database $user database dbuser 1234 mysql
  1522. assert_failure $E_EXISTS
  1523. }
  1524. @test "MYSQL: Rebuild Database" {
  1525. run v-rebuild-database $user $database
  1526. assert_success
  1527. refute_output
  1528. }
  1529. @test "MYSQL: Change database user password" {
  1530. run v-change-database-password $user $database 123456
  1531. assert_success
  1532. refute_output
  1533. validate_database mysql $database $dbuser 123456
  1534. }
  1535. @test "MYSQL: Change database user" {
  1536. run v-change-database-user $user $database database
  1537. assert_success
  1538. refute_output
  1539. validate_database mysql $database $database 123456
  1540. }
  1541. @test "MYSQL: Suspend database" {
  1542. run v-suspend-database $user $database
  1543. assert_success
  1544. refute_output
  1545. }
  1546. @test "MYSQL: Unsuspend database" {
  1547. run v-unsuspend-database $user $database
  1548. assert_success
  1549. refute_output
  1550. }
  1551. @test "MYSQL: Delete database" {
  1552. run v-delete-database $user $database
  1553. assert_success
  1554. refute_output
  1555. }
  1556. @test "MYSQL: Delete missing database" {
  1557. run v-delete-database $user $database
  1558. assert_failure $E_NOTEXIST
  1559. }
  1560. @test "PGSQL: Add database invalid user" {
  1561. if [ -z "$(echo $DB_SYSTEM | grep -w "pgsql")" ]; then
  1562. skip "PostGreSQL is not installed"
  1563. fi
  1564. run v-add-database "$user" "database" "dbuser" "1234ABCD" "pgsql"
  1565. assert_failure $E_INVALID
  1566. }
  1567. @test "PGSQL: Add database" {
  1568. if [ -z "$(echo $DB_SYSTEM | grep -w "pgsql")" ]; then
  1569. skip "PostGreSQL is not installed"
  1570. fi
  1571. run v-add-user $pguser $pguser $user@hestiacp.com default "Super Test"
  1572. run v-add-database "$pguser" "database" "dbuser" "1234ABCD" "pgsql"
  1573. assert_success
  1574. refute_output
  1575. # validate_database pgsql $pgdatabase $pgdbuser "1234ABCD"
  1576. }
  1577. @test "PGSQL: Add Database (Duplicate)" {
  1578. if [ -z "$(echo $DB_SYSTEM | grep -w "pgsql")" ]; then
  1579. skip "PostGreSQL is not installed"
  1580. fi
  1581. run v-add-database "$pguser" "database" "dbuser" "1234ABCD" "pgsql"
  1582. assert_failure $E_EXISTS
  1583. }
  1584. @test "PGSQL: Rebuild Database" {
  1585. if [ -z "$(echo $DB_SYSTEM | grep -w "pgsql")" ]; then
  1586. skip "PostGreSQL is not installed"
  1587. fi
  1588. run v-rebuild-database $pguser $pgdatabase
  1589. assert_success
  1590. refute_output
  1591. }
  1592. @test "PGSQL: Change database user password" {
  1593. if [ -z "$(echo $DB_SYSTEM | grep -w "pgsql")" ]; then
  1594. skip "PostGreSQL is not installed"
  1595. fi
  1596. run v-change-database-password $pguser $pgdatabase "123456"
  1597. assert_success
  1598. refute_output
  1599. # validate_database pgsql $pgdatabase $pgdbuser "123456"
  1600. }
  1601. @test "PGSQL: Suspend database" {
  1602. if [ -z "$(echo $DB_SYSTEM | grep -w "pgsql")" ]; then
  1603. skip "PostGreSQL is not installed"
  1604. fi
  1605. run v-suspend-database $pguser $pgdatabase
  1606. assert_success
  1607. refute_output
  1608. }
  1609. @test "PGSQL: Unsuspend database" {
  1610. if [ -z "$(echo $DB_SYSTEM | grep -w "pgsql")" ]; then
  1611. skip "PostGreSQL is not installed"
  1612. fi
  1613. run v-unsuspend-database $pguser $pgdatabase
  1614. assert_success
  1615. refute_output
  1616. }
  1617. @test "PGSQL: Change database user" {
  1618. if [ -z "$(echo $DB_SYSTEM | grep -w "pgsql")" ]; then
  1619. skip "PostGreSQL is not installed"
  1620. fi
  1621. skip
  1622. run v-change-database-user $pguser $pgdatabase database
  1623. assert_success
  1624. refute_output
  1625. validate_database pgsql $pgdatabase $pgdatabase 123456
  1626. }
  1627. @test "PGSQL: Delete database" {
  1628. if [ -z "$(echo $DB_SYSTEM | grep -w "pgsql")" ]; then
  1629. skip "PostGreSQL is not installed"
  1630. fi
  1631. run v-delete-database $pguser $pgdatabase
  1632. assert_success
  1633. refute_output
  1634. }
  1635. @test "PGSQL: Delete missing database" {
  1636. if [ -z "$(echo $DB_SYSTEM | grep -w "pgsql")" ]; then
  1637. skip "PostGreSQL is not installed"
  1638. fi
  1639. run v-delete-database $pguser $pgdatabase
  1640. assert_failure $E_NOTEXIST
  1641. run v-delete-user $pguser
  1642. }
  1643. #----------------------------------------------------------#
  1644. # System #
  1645. #----------------------------------------------------------#
  1646. @test "System: Set/Enable SMTP account for internal mail" {
  1647. run v-add-sys-smtp $domain 587 STARTTLS info@$domain 1234-test noreply@$domain
  1648. assert_success
  1649. refute_output
  1650. }
  1651. @test "System: Disable SMTP account for internal mail" {
  1652. run v-delete-sys-smtp
  1653. assert_success
  1654. refute_output
  1655. }
  1656. @test "System: Set/Enable SMTP relay" {
  1657. run v-add-sys-smtp-relay $domain info@$domain 1234-test 587
  1658. assert_success
  1659. refute_output
  1660. assert_file_exist /etc/exim4/smtp_relay.conf
  1661. }
  1662. @test "System: Delete SMTP relay" {
  1663. run v-delete-sys-smtp-relay
  1664. assert_success
  1665. refute_output
  1666. assert_file_not_exist /etc/exim4/smtp_relay.conf
  1667. }
  1668. #----------------------------------------------------------#
  1669. # Firewall #
  1670. #----------------------------------------------------------#
  1671. @test "Firewall: Add ip to banlist" {
  1672. run v-add-firewall-ban '1.2.3.4' 'HESTIA'
  1673. assert_success
  1674. refute_output
  1675. check_ip_banned '1.2.3.4' 'HESTIA'
  1676. }
  1677. @test "Firewall: Delete ip to banlist" {
  1678. run v-delete-firewall-ban '1.2.3.4' 'HESTIA'
  1679. assert_success
  1680. refute_output
  1681. check_ip_not_banned '1.2.3.4' 'HESTIA'
  1682. }
  1683. @test "Firewall: Add ip to banlist for ALL" {
  1684. run v-add-firewall-ban '1.2.3.4' 'HESTIA'
  1685. assert_success
  1686. refute_output
  1687. run v-add-firewall-ban '1.2.3.4' 'MAIL'
  1688. assert_success
  1689. refute_output
  1690. check_ip_banned '1.2.3.4' 'HESTIA'
  1691. }
  1692. @test "Firewall: Delete ip to banlist CHAIN = ALL" {
  1693. run v-delete-firewall-ban '1.2.3.4' 'ALL'
  1694. assert_success
  1695. refute_output
  1696. check_ip_not_banned '1.2.3.4' 'HESTIA'
  1697. }
  1698. @test "Test Whitelist Fail2ban" {
  1699. echo "1.2.3.4" >> $HESTIA/data/firewall/excludes.conf
  1700. run v-add-firewall-ban '1.2.3.4' 'HESTIA'
  1701. rm $HESTIA/data/firewall/excludes.conf
  1702. check_ip_not_banned '1.2.3.4' 'HESTIA'
  1703. }
  1704. @test "Test create ipset" {
  1705. run v-add-firewall-ipset "country-nl" "https://raw.githubusercontent.com/ipverse/rir-ip/master/country/nl/ipv4-aggregated.txt" v4 yes
  1706. assert_success
  1707. refute_output
  1708. }
  1709. @test "Create firewall with Ipset" {
  1710. run v-add-firewall-rule 'DROP' 'ipset:country-nl' '8083,22' 'TCP' 'Test'
  1711. assert_success
  1712. refute_output
  1713. }
  1714. @test "List firewall rules" {
  1715. run v-list-firewall csv
  1716. assert_success
  1717. assert_line --partial '11,DROP,TCP,8083,22,ipset:country-nl'
  1718. }
  1719. @test "Delete firewall with Ipset" {
  1720. run v-delete-firewall-rule '11'
  1721. assert_success
  1722. refute_output
  1723. }
  1724. @test "Test delete ipset" {
  1725. run v-delete-firewall-ipset "country-nl"
  1726. assert_success
  1727. refute_output
  1728. }
  1729. #----------------------------------------------------------#
  1730. # PACKAGE #
  1731. #----------------------------------------------------------#
  1732. @test "Package: Create new Package" {
  1733. cp $HESTIA/data/packages/default.pkg /tmp/package
  1734. run v-add-user-package /tmp/package hestiatest
  1735. assert_success
  1736. refute_output
  1737. }
  1738. @test "Package: Assign user to new Package" {
  1739. run v-change-user-package $user hestiatest
  1740. assert_success
  1741. refute_output
  1742. }
  1743. @test "Package: Create new package (Duplicate)" {
  1744. sed -i "s/BANDWIDTH='unlimited'/BANDWIDTH='100'/g" /tmp/package
  1745. run v-add-user-package /tmp/package hestiatest
  1746. assert_failure $E_EXISTS
  1747. }
  1748. @test "Package: Update new Package" {
  1749. sed -i "s/BANDWIDTH='unlimited'/BANDWIDTH='100'/g" /tmp/package
  1750. run v-add-user-package /tmp/package hestiatest yes
  1751. assert_success
  1752. refute_output
  1753. }
  1754. @test "Package: Update package of user" {
  1755. run v-change-user-package $user hestiatest
  1756. assert_success
  1757. refute_output
  1758. run grep "BANDWIDTH='100'" $HESTIA/data/users/$user/user.conf
  1759. assert_success
  1760. assert_output --partial "100"
  1761. }
  1762. @test "Package: Copy package Not Exists" {
  1763. run v-copy-user-package hestiadoesnotexists hestiatest2
  1764. assert_failure $E_NOTEXIST
  1765. }
  1766. @test "Package: Copy package" {
  1767. run v-copy-user-package hestiatest hestiatest2
  1768. assert_success
  1769. refute_output
  1770. }
  1771. @test "Package: Copy package Exists" {
  1772. run v-copy-user-package hestiatest hestiatest2
  1773. assert_failure $E_EXISTS
  1774. }
  1775. @test "Package: Delete package" {
  1776. run v-delete-user-package hestiatest
  1777. run v-delete-user-package hestiatest2
  1778. rm /tmp/package
  1779. assert_success
  1780. refute_output
  1781. run grep "BANDWIDTH='unlimited'" $HESTIA/data/users/$user/user.conf
  1782. assert_success
  1783. assert_output --partial "unlimited"
  1784. }
  1785. #----------------------------------------------------------#
  1786. # Backup user #
  1787. #----------------------------------------------------------#
  1788. @test "Backup: Backup user" {
  1789. run v-backup-user $user
  1790. assert_success
  1791. }
  1792. @test "Backup: List Backups" {
  1793. run v-list-user-backups $user plain
  1794. assert_success
  1795. assert_output --partial "$user"
  1796. }
  1797. @test "Backup: Delete backups" {
  1798. run v-delete-user-backup $user $(v-list-user-backups $user plain | cut -f1)
  1799. assert_success
  1800. run rm /backup/$user.log
  1801. }
  1802. #----------------------------------------------------------#
  1803. # Change owner scripts #
  1804. #----------------------------------------------------------#
  1805. @test "Change: Change domain owner" {
  1806. run v-change-domain-owner $domain $user2
  1807. assert_success
  1808. run v-restart-web
  1809. run v-restart-proxy
  1810. }
  1811. @test "Change: Add database" {
  1812. run v-add-database $user database dbuser 1234 mysql
  1813. assert_success
  1814. refute_output
  1815. # validate_database mysql database_name database_user password
  1816. validate_database mysql $database $dbuser 1234
  1817. }
  1818. @test "Change: Change database owner" {
  1819. run v-change-database-owner $database $user2
  1820. assert_success
  1821. validate_database mysql test-5286_database test-5286_dbuser 1234
  1822. }
  1823. @test "Change: Delete database" {
  1824. run v-delete-database $user2 test-5286_database
  1825. assert_success
  1826. refute_output
  1827. }
  1828. #----------------------------------------------------------#
  1829. # CLEANUP #
  1830. #----------------------------------------------------------#
  1831. @test "Mail: Delete domain" {
  1832. run v-delete-mail-domain $user2 $domain
  1833. assert_success
  1834. refute_output
  1835. }
  1836. @test "DNS: Delete domain" {
  1837. run v-delete-dns-domain $user2 $domain
  1838. assert_success
  1839. refute_output
  1840. }
  1841. @test "WEB: Delete domain" {
  1842. run v-delete-web-domain $user2 $domain
  1843. assert_success
  1844. refute_output
  1845. }
  1846. @test "Delete user" {
  1847. run v-delete-user $user
  1848. assert_success
  1849. refute_output
  1850. }
  1851. @test "Delete user2" {
  1852. run v-delete-user $user2
  1853. assert_success
  1854. refute_output
  1855. }
  1856. @test "Ip: Delete the test IP" {
  1857. run v-delete-sys-ip 198.18.0.125
  1858. assert_success
  1859. refute_output
  1860. }
  1861. @test 'assert()' {
  1862. touch '/var/log/test.log'
  1863. assert [ -e '/var/log/test.log' ]
  1864. }