test.bats 69 KB

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