test.bats 68 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260
  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: Change user password" {
  312. run v-change-user-password "$user" "$userpass2"
  313. assert_success
  314. refute_output
  315. }
  316. @test "User: Change user email" {
  317. run v-change-user-contact "$user" tester@hestiacp.com
  318. assert_success
  319. refute_output
  320. }
  321. @test "User: Change user contact invalid email " {
  322. run v-change-user-contact "$user" testerhestiacp.com
  323. assert_failure $E_INVALID
  324. assert_output --partial 'Error: invalid email format'
  325. }
  326. @test "User: Change user name" {
  327. run v-change-user-name "$user" "New name"
  328. assert_success
  329. refute_output
  330. }
  331. @test "User: Change user shell" {
  332. run v-change-user-shell $user bash
  333. assert_success
  334. refute_output
  335. run stat -c '%U' /home/$user
  336. assert_output --partial "$user"
  337. mount_file=$(systemd-escape -p --suffix=mount "/srv/jail/$user/home")
  338. assert_file_not_exist /etc/systemd/system/$mount_file
  339. }
  340. @test "User: Change user invalid shell" {
  341. run v-change-user-shell $user bashinvalid
  342. assert_failure $E_INVALID
  343. assert_output --partial 'shell bashinvalid is not valid'
  344. }
  345. @test "User: Change user nologin" {
  346. run v-change-user-shell $user nologin
  347. assert_success
  348. refute_output
  349. run stat -c '%U' /home/$user
  350. assert_output --partial 'root'
  351. mount_file=$(systemd-escape -p --suffix=mount "/srv/jail/$user/home")
  352. assert_file_exist /etc/systemd/system/$mount_file
  353. }
  354. @test "User: Change user default ns" {
  355. run v-change-user-ns $user ns0.com ns1.com ns2.com ns3.com
  356. assert_success
  357. refute_output
  358. run v-list-user-ns "$user" plain
  359. assert_success
  360. assert_output --partial 'ns0.com'
  361. }
  362. @test "User: Change user language" {
  363. run v-change-user-language $user "nl"
  364. assert_success
  365. refute_output
  366. }
  367. @test "User: Change user language (Does not exists)" {
  368. run v-change-user-language $user "aa"
  369. assert_failure $E_NOTEXIST
  370. }
  371. @test "User: Change user sort order" {
  372. run v-change-user-sort-order $user "name"
  373. assert_success
  374. refute_output
  375. }
  376. @test "User: Change user theme" {
  377. run v-change-user-theme $user "flat"
  378. assert_success
  379. refute_output
  380. }
  381. @test "User: Change user theme (Does not exists)" {
  382. run v-change-user-theme $user "aa"
  383. assert_failure $E_NOTEXIST
  384. }
  385. @test "User: Change user login ip" {
  386. run v-change-user-config-value $user "LOGIN_USE_IPLIST" "1.2.3.4,1.2.3.5"
  387. assert_success
  388. refute_output
  389. }
  390. @test "User: Change user login ip (Failed)" {
  391. run v-change-user-config-value $user "LOGIN_USE_IPLIST" "'; echo 'jaap'; echo '"
  392. assert_failure $E_INVALID
  393. }
  394. @test "User: Add user notification" {
  395. run v-add-user-notification $user "Test message" "Message"
  396. assert_success
  397. refute_output
  398. }
  399. @test "User: Acknowledge user notification" {
  400. run v-acknowledge-user-notification $user 1
  401. assert_success
  402. refute_output
  403. }
  404. @test "User: List user notification" {
  405. run v-list-user-notifications $user csv
  406. assert_success
  407. assert_output --partial "1,\"Test message\",\"Message\",yes"
  408. }
  409. @test "User: Delete user notification" {
  410. run v-delete-user-notification admin 1
  411. assert_success
  412. refute_output
  413. }
  414. @test "User: Get User salt ipv4" {
  415. run v-get-user-salt $user 192.168.2.10
  416. assert_success
  417. }
  418. @test "User: Get User salt ipv4 invalid" {
  419. run v-get-user-salt $user 192.168.992.10
  420. assert_failure $E_INVALID
  421. }
  422. @test "User: Get User salt ipv6" {
  423. run v-get-user-salt $user "21DA:D3:0:2F3B:2AA:FF:FE28:9C5A"
  424. assert_success
  425. }
  426. @test "User: Get User salt ipv6 not exists" {
  427. run v-get-user-salt "notexists" "21DA:D3:0:2F3B:2AA:FF:FE28:9C5B"
  428. assert_failure $E_PASSWORD
  429. }
  430. @test "User: Get User salt ipv6 invalid" {
  431. run v-get-user-salt "$user" "21DA:D3:0:2F3B:ZZZ:FF:FE28:9C5B"
  432. assert_failure $E_INVALID
  433. }
  434. @test "User: Check user password" {
  435. run v-check-user-password $user "$userpass2" 192.168.2.10 'no'
  436. assert_success
  437. }
  438. @test "User: Check user password Incorrect password" {
  439. run v-check-user-password $user "$userpass1" 192.168.2.10 'no'
  440. assert_failure $E_PASSWORD
  441. }
  442. @test "User: Check user hash ipv4" {
  443. hash=$(v-check-user-password $user "$userpass2" 192.168.2.10 'yes');
  444. run v-check-user-hash $user $hash 192.168.2.10
  445. assert_success
  446. }
  447. @test "User: Check user hash ipv6" {
  448. hash=$(v-check-user-password $user "$userpass2" 21DA:D3:0:2F3B:2AA:FF:FE28:9C5A 'yes');
  449. run v-check-user-hash $user $hash 21DA:D3:0:2F3B:2AA:FF:FE28:9C5A
  450. assert_success
  451. }
  452. @test "User: Check user hash ipv6 incorrect" {
  453. run v-check-user-hash $user 'jafawefaweijawe' 21DA:D3:0:2F3B:2AA:FF:FE28:9C5A
  454. assert_failure $E_PASSWORD
  455. }
  456. #----------------------------------------------------------#
  457. # Cron #
  458. #----------------------------------------------------------#
  459. @test "Cron: Add cron job" {
  460. run v-add-cron-job $user 1 1 1 1 1 echo
  461. assert_success
  462. refute_output
  463. }
  464. @test "Cron: Suspend cron job" {
  465. run v-suspend-cron-job $user 1
  466. assert_success
  467. refute_output
  468. }
  469. @test "Cron: Unsuspend cron job" {
  470. run v-unsuspend-cron-job $user 1
  471. assert_success
  472. refute_output
  473. }
  474. @test "Cron: Delete cron job" {
  475. run v-delete-cron-job $user 1
  476. assert_success
  477. refute_output
  478. }
  479. @test "Cron: Add cron job (duplicate)" {
  480. run v-add-cron-job $user 1 1 1 1 1 echo 1
  481. assert_success
  482. refute_output
  483. run v-add-cron-job $user 1 1 1 1 1 echo 1
  484. assert_failure $E_EXISTS
  485. assert_output --partial 'JOB=1 already exists'
  486. }
  487. @test "Cron: Second cron job" {
  488. run v-add-cron-job $user 2 2 2 2 2 echo 2
  489. assert_success
  490. refute_output
  491. }
  492. @test "Cron: Two cron jobs must be listed" {
  493. run v-list-cron-jobs $user csv
  494. assert_success
  495. assert_line --partial '1,1,1,1,1,"echo",no'
  496. assert_line --partial '2,2,2,2,2,"echo",no'
  497. }
  498. @test "Cron: rebuild" {
  499. run v-rebuild-cron-jobs $user
  500. assert_success
  501. refute_output
  502. }
  503. #----------------------------------------------------------#
  504. # IP #
  505. #----------------------------------------------------------#
  506. @test "Ip: Add new ip on first interface" {
  507. interface=$(v-list-sys-interfaces plain | head -n 1)
  508. run ip link show dev $interface
  509. assert_success
  510. local a2_rpaf="/etc/$WEB_SYSTEM/mods-enabled/rpaf.conf"
  511. local a2_remoteip="/etc/$WEB_SYSTEM/mods-enabled/remoteip.conf"
  512. # Save initial state
  513. echo "interface=${interface}" >> /tmp/hestia-test-env.sh
  514. [ -f "$a2_rpaf" ] && file_hash1=$(cat $a2_rpaf |md5sum |cut -d" " -f1) && echo "a2_rpaf_hash='${file_hash1}'" >> /tmp/hestia-test-env.sh
  515. [ -f "$a2_remoteip" ] && file_hash2=$(cat $a2_remoteip |md5sum |cut -d" " -f1) && echo "a2_remoteip_hash='${file_hash2}'" >> /tmp/hestia-test-env.sh
  516. local ip="198.18.0.12"
  517. run v-add-sys-ip $ip 255.255.255.255 $interface $user
  518. assert_success
  519. refute_output
  520. assert_file_exist /etc/$WEB_SYSTEM/conf.d/$ip.conf
  521. assert_file_exist $HESTIA/data/ips/$ip
  522. assert_file_contains $HESTIA/data/ips/$ip "OWNER='$user'"
  523. assert_file_contains $HESTIA/data/ips/$ip "INTERFACE='$interface'"
  524. if [ -n "$PROXY_SYSTEM" ]; then
  525. assert_file_exist /etc/$PROXY_SYSTEM/conf.d/$ip.conf
  526. [ -f "$a2_rpaf" ] && assert_file_contains "$a2_rpaf" "RPAFproxy_ips.*$ip\b"
  527. [ -f "$a2_remoteip" ] && assert_file_contains "$a2_remoteip" "RemoteIPInternalProxy $ip\$"
  528. fi
  529. }
  530. @test "Ip: [Ubuntu] Netplan file updated" {
  531. # Skip if Debian
  532. if [ $(lsb_release -s -i) != "Ubuntu" ]; then
  533. skip
  534. fi
  535. # 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!
  536. assert_file_exist /etc/netplan/60-hestia.yaml
  537. # also check if file contains the newly added ip
  538. assert_file_contains /etc/netplan/60-hestia.yaml "$ip"
  539. }
  540. @test "Ip: [Debian] Netplan file updated" {
  541. # Skip with netplan
  542. if [ $(lsb_release -s -i) = "Ubuntu" ]; then
  543. skip
  544. fi
  545. assert_file_exist /etc/network/interfaces
  546. assert_file_contains /etc/network/interfaces "$ip"
  547. }
  548. @test "Ip: Add ip (duplicate)" {
  549. run v-add-sys-ip 198.18.0.12 255.255.255.255 $interface $user
  550. assert_failure $E_EXISTS
  551. }
  552. @test "Ip: Add extra ip" {
  553. local ip="198.18.0.121"
  554. run v-add-sys-ip $ip 255.255.255.255 $interface $user
  555. assert_success
  556. refute_output
  557. assert_file_exist /etc/$WEB_SYSTEM/conf.d/$ip.conf
  558. assert_file_exist $HESTIA/data/ips/$ip
  559. assert_file_contains $HESTIA/data/ips/$ip "OWNER='$user'"
  560. assert_file_contains $HESTIA/data/ips/$ip "INTERFACE='$interface'"
  561. if [ -n "$PROXY_SYSTEM" ]; then
  562. assert_file_exist /etc/$PROXY_SYSTEM/conf.d/$ip.conf
  563. local a2_rpaf="/etc/$WEB_SYSTEM/mods-enabled/rpaf.conf"
  564. [ -f "$a2_rpaf" ] && assert_file_contains "$a2_rpaf" "RPAFproxy_ips.*$ip\b"
  565. local a2_remoteip="/etc/$WEB_SYSTEM/mods-enabled/remoteip.conf"
  566. [ -f "$a2_remoteip" ] && assert_file_contains "$a2_remoteip" "RemoteIPInternalProxy $ip\$"
  567. fi
  568. }
  569. @test "Ip: Delete ip 198.18.0.12" {
  570. local ip="198.18.0.12"
  571. run v-delete-sys-ip $ip
  572. assert_success
  573. refute_output
  574. assert_file_not_exist /etc/$WEB_SYSTEM/conf.d/$ip.conf
  575. assert_file_not_exist $HESTIA/data/ips/$ip
  576. }
  577. @test "Ip: [Ubuntu] Netplan file changed" {
  578. # Skip if Debian
  579. if [ $(lsb_release -s -i) != "Ubuntu" ]; then
  580. skip
  581. fi
  582. ip="198.18.0.121"
  583. assert_file_exist /etc/netplan/60-hestia.yaml
  584. assert_file_contains /etc/netplan/60-hestia.yaml "$ip"
  585. }
  586. @test "Ip: Delete ip 198.18.0.121" {
  587. ip="198.18.0.121"
  588. run v-delete-sys-ip $ip
  589. assert_success
  590. refute_output
  591. assert_file_not_exist /etc/$WEB_SYSTEM/conf.d/$ip.conf
  592. assert_file_not_exist $HESTIA/data/ips/$ip
  593. if [ -n "$PROXY_SYSTEM" ]; then
  594. assert_file_not_exist /etc/$PROXY_SYSTEM/conf.d/$ip.conf
  595. fi
  596. # remoteip and rpaf config hashes must match the initial one
  597. if [ ! -z "$a2_rpaf_hash" ]; then
  598. local a2_rpaf="/etc/$WEB_SYSTEM/mods-enabled/rpaf.conf"
  599. file_hash=$(cat $a2_rpaf |md5sum |cut -d" " -f1)
  600. assert_equal "$file_hash" "$a2_rpaf_hash"
  601. fi
  602. if [ ! -z "$a2_remoteip_hash" ]; then
  603. local a2_remoteip="/etc/$WEB_SYSTEM/mods-enabled/remoteip.conf"
  604. file_hash=$(cat $a2_remoteip |md5sum |cut -d" " -f1)
  605. assert_equal "$file_hash" "$a2_remoteip_hash"
  606. fi
  607. }
  608. @test "Ip: Add IP for rest of the test" {
  609. local ip="198.18.0.125"
  610. run v-add-sys-ip $ip 255.255.255.255 $interface $user
  611. assert_success
  612. refute_output
  613. assert_file_exist /etc/$WEB_SYSTEM/conf.d/$ip.conf
  614. assert_file_exist $HESTIA/data/ips/$ip
  615. assert_file_contains $HESTIA/data/ips/$ip "OWNER='$user'"
  616. assert_file_contains $HESTIA/data/ips/$ip "INTERFACE='$interface'"
  617. if [ -n "$PROXY_SYSTEM" ]; then
  618. assert_file_exist /etc/$PROXY_SYSTEM/conf.d/$ip.conf
  619. local a2_rpaf="/etc/$WEB_SYSTEM/mods-enabled/rpaf.conf"
  620. [ -f "$a2_rpaf" ] && assert_file_contains "$a2_rpaf" "RPAFproxy_ips.*$ip\b"
  621. local a2_remoteip="/etc/$WEB_SYSTEM/mods-enabled/remoteip.conf"
  622. [ -f "$a2_remoteip" ] && assert_file_contains "$a2_remoteip" "RemoteIPInternalProxy $ip\$"
  623. fi
  624. }
  625. #----------------------------------------------------------#
  626. # WEB #
  627. #----------------------------------------------------------#
  628. @test "WEB: Add web domain" {
  629. run v-add-web-domain $user $domain 198.18.0.125
  630. assert_success
  631. refute_output
  632. echo -e "<?php\necho 'Hestia Test:'.(4*3);" > $HOMEDIR/$user/web/$domain/public_html/php-test.php
  633. validate_web_domain $user $domain 'Hestia Test:12' 'php-test.php'
  634. rm $HOMEDIR/$user/web/$domain/public_html/php-test.php
  635. }
  636. @test "WEB: Add web domain (duplicate)" {
  637. run v-add-web-domain $user $domain 198.18.0.125
  638. assert_failure $E_EXISTS
  639. }
  640. @test "WEB: Add web domain alias" {
  641. run v-add-web-domain-alias $user $domain v3.$domain
  642. assert_success
  643. refute_output
  644. }
  645. @test "WEB: Add web domain alias (duplicate)" {
  646. run v-add-web-domain-alias $user $domain v3.$domain
  647. assert_failure $E_EXISTS
  648. }
  649. @test "WEB: Add web domain wildcard alias" {
  650. run v-add-web-domain-alias $user $domain "*.$domain"
  651. assert_success
  652. refute_output
  653. }
  654. @test "WEB: Delete web domain wildcard alias" {
  655. run v-delete-web-domain-alias $user $domain "*.$domain"
  656. assert_success
  657. refute_output
  658. }
  659. @test "WEB: Add web domain stats" {
  660. run v-add-web-domain-stats $user $domain awstats
  661. assert_success
  662. refute_output
  663. }
  664. @test "WEB: Add web domain stats user" {
  665. skip
  666. run v-add-web-domain-stats-user $user $domain test m3g4p4ssw0rd
  667. assert_success
  668. refute_output
  669. }
  670. @test "WEB: Suspend web domain" {
  671. run v-suspend-web-domain $user $domain
  672. assert_success
  673. refute_output
  674. echo -e "<?php\necho 'Hestia Test:'.(4*3);" > $HOMEDIR/$user/web/$domain/public_html/php-test.php
  675. validate_web_domain $user $domain 'This site is currently suspended'
  676. validate_web_domain $user $domain 'This site is currently suspended' 'php-test.php'
  677. rm $HOMEDIR/$user/web/$domain/public_html/php-test.php
  678. }
  679. @test "WEB: Unsuspend web domain" {
  680. run v-unsuspend-web-domain $user $domain
  681. assert_success
  682. refute_output
  683. echo -e "<?php\necho 'Hestia Test:'.(4*3);" > $HOMEDIR/$user/web/$domain/public_html/php-test.php
  684. validate_web_domain $user $domain 'Hestia Test:12' 'php-test.php'
  685. rm $HOMEDIR/$user/web/$domain/public_html/php-test.php
  686. }
  687. @test "WEB: Add redirect to www.domain.com" {
  688. run v-add-web-domain-redirect $user $domain www.$domain 301
  689. assert_success
  690. refute_output
  691. run validate_headers_domain $user $domain "301"
  692. }
  693. @test "WEB: Delete redirect to www.domain.com" {
  694. run v-delete-web-domain-redirect $user $domain
  695. assert_success
  696. refute_output
  697. }
  698. @test "WEB: Enable Fast CGI Cache" {
  699. if [ "$WEB_SYSTEM" != "nginx" ]; then
  700. skip "FastCGI cache is not supported"
  701. fi
  702. run v-add-fastcgi-cache $user $domain '1m' yes
  703. assert_success
  704. refute_output
  705. echo -e "<?php\necho 'Hestia Test:'.(4*3);" > $HOMEDIR/$user/web/$domain/public_html/php-test.php
  706. run validate_headers_domain $user $domain "Miss"
  707. run validate_headers_domain $user $domain "Hit"
  708. rm $HOMEDIR/$user/web/$domain/public_html/php-test.php
  709. }
  710. @test "WEB: Disable Fast CGI Cache" {
  711. if [ "$WEB_SYSTEM" != "nginx" ]; then
  712. skip "FastCGI cache is not supported"
  713. fi
  714. run v-delete-fastcgi-cache $user $domain yes
  715. assert_success
  716. refute_output
  717. }
  718. @test "WEB: Generate Self signed certificate" {
  719. ssl=$(v-generate-ssl-cert "$domain" "info@$domain" US CA "Orange County" HestiaCP IT "mail.$domain" | tail -n1 | awk '{print $2}')
  720. echo $ssl;
  721. mv $ssl/$domain.crt /tmp/$domain.crt
  722. mv $ssl/$domain.key /tmp/$domain.key
  723. }
  724. @test "WEB: Add ssl" {
  725. # Use self signed certificates during last test
  726. run v-add-web-domain-ssl $user $domain /tmp
  727. assert_success
  728. refute_output
  729. }
  730. @test "WEB: Rebuild web domain" {
  731. run v-rebuild-web-domains $user
  732. assert_success
  733. refute_output
  734. }
  735. #----------------------------------------------------------#
  736. # IDN #
  737. #----------------------------------------------------------#
  738. @test "WEB: Add IDN domain UTF idn-tést.eu" {
  739. run v-add-web-domain $user idn-tést.eu 198.18.0.125
  740. assert_success
  741. refute_output
  742. echo -e "<?php\necho 'Hestia Test:'.(4*3);" > $HOMEDIR/$user/web/idn-tést.eu/public_html/php-test.php
  743. validate_web_domain $user idn-tést.eu 'Hestia Test:12' 'php-test.php'
  744. rm $HOMEDIR/$user/web/idn-tést.eu/public_html/php-test.php
  745. }
  746. @test "WEB: Add IDN domain ASCII idn-tést.eu" {
  747. # Expected to fail due to utf exists
  748. run v-add-web-domain $user "xn--idn-tst-fya.eu" 198.18.0.125
  749. assert_failure $E_EXISTS
  750. }
  751. @test "WEB: Generate Self signed certificate ASCII idn-tést.eu" {
  752. 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"
  753. assert_success
  754. }
  755. @test "WEB: Delete IDN domain idn-tést.eu" {
  756. run v-delete-web-domain $user idn-tést.eu
  757. assert_success
  758. refute_output
  759. }
  760. @test "WEB: Add IDN domain UTF bløst.рф" {
  761. run v-add-web-domain $user bløst.рф 198.18.0.125
  762. assert_success
  763. refute_output
  764. }
  765. @test "WEB: Generate Self signed certificate ASCII bløst.рф" {
  766. 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"
  767. assert_success
  768. }
  769. @test "WEB: Delete IDN domain bløst.рф" {
  770. run v-delete-web-domain $user bløst.рф
  771. assert_success
  772. refute_output
  773. }
  774. #----------------------------------------------------------#
  775. # MULTIPHP #
  776. #----------------------------------------------------------#
  777. @test "Multiphp: Default php Backend version" {
  778. def_phpver=$(multiphp_default_version)
  779. multi_domain="multiphp.${domain}"
  780. run v-add-web-domain $user $multi_domain 198.18.0.125
  781. assert_success
  782. refute_output
  783. echo -e "<?php\necho PHP_MAJOR_VERSION.'.'.PHP_MINOR_VERSION;" > "$HOMEDIR/$user/web/$multi_domain/public_html/php-test.php"
  784. validate_web_domain $user $multi_domain "$def_phpver" 'php-test.php'
  785. rm "$HOMEDIR/$user/web/$multi_domain/public_html/php-test.php"
  786. }
  787. @test "Multiphp: Change backend version - PHP v5.6" {
  788. test_phpver='5.6'
  789. multi_domain="multiphp.${domain}"
  790. if [ ! -d "/etc/php/${test_phpver}/fpm/pool.d/" ]; then
  791. skip "PHP ${test_phpver} not installed"
  792. fi
  793. run v-change-web-domain-backend-tpl $user $multi_domain 'PHP-5_6' 'yes'
  794. assert_success
  795. refute_output
  796. # Changing web backend will create a php-fpm pool config in the corresponding php folder
  797. assert_file_exist "/etc/php/${test_phpver}/fpm/pool.d/${multi_domain}.conf"
  798. # A single php-fpm pool config file must be present
  799. num_fpm_config_files="$(find -L /etc/php/ -name "${multi_domain}.conf" | wc -l)"
  800. assert_equal "$num_fpm_config_files" '1'
  801. echo -e "<?php\necho 'hestia-multiphptest:'.PHP_MAJOR_VERSION.'.'.PHP_MINOR_VERSION;" > "$HOMEDIR/$user/web/$multi_domain/public_html/php-test.php"
  802. validate_web_domain $user $multi_domain "hestia-multiphptest:$test_phpver" 'php-test.php'
  803. rm "$HOMEDIR/$user/web/$multi_domain/public_html/php-test.php"
  804. }
  805. @test "Multiphp: Change backend version - PHP v7.0" {
  806. test_phpver='7.0'
  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-7_0' '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.1" {
  824. test_phpver='7.1'
  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_1' '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.2" {
  842. test_phpver='7.2'
  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_2' '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.3" {
  860. test_phpver='7.3'
  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_3' '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.4" {
  878. test_phpver='7.4'
  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_4' '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 v8.0" {
  896. test_phpver='8.0'
  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-8_0' '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.1" {
  914. test_phpver='8.1'
  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_1' '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.2" {
  932. test_phpver='8.2'
  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_2' '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: Cleanup" {
  950. multi_domain="multiphp.${domain}"
  951. run v-delete-web-domain $user $multi_domain 'yes'
  952. assert_success
  953. refute_output
  954. # No php-fpm pool config file must be present
  955. num_fpm_config_files="$(find -L /etc/php/ -name "${multi_domain}.conf" | wc -l)"
  956. assert_equal "$num_fpm_config_files" '0'
  957. }
  958. #----------------------------------------------------------#
  959. # CUSTOM DOCROOT #
  960. #----------------------------------------------------------#
  961. @test "Docroot: Self Subfolder" {
  962. docroot1_domain="docroot1.${domain}"
  963. run v-add-web-domain $user $docroot1_domain 198.18.0.125
  964. assert_success
  965. refute_output
  966. run v-add-fs-directory $user "$HOMEDIR/$user/web/$docroot1_domain/public_html/public/"
  967. assert_success
  968. refute_output
  969. run v-change-web-domain-docroot $user "$docroot1_domain" "$docroot1_domain" "/public"
  970. assert_success
  971. refute_output
  972. echo -e '<?php\necho "self-sub-".$_SERVER["HTTP_HOST"];' > "$HOMEDIR/$user/web/$docroot1_domain/public_html/public/php-test.php"
  973. validate_web_domain $user $docroot1_domain "self-sub-${docroot1_domain}" 'php-test.php'
  974. rm "$HOMEDIR/$user/web/$docroot1_domain/public_html/public/php-test.php"
  975. }
  976. @test "Docroot: Other domain subfolder" {
  977. docroot1_domain="docroot1.${domain}"
  978. docroot2_domain="docroot2.${domain}"
  979. run v-add-web-domain $user $docroot2_domain 198.18.0.125
  980. assert_success
  981. refute_output
  982. run v-add-fs-directory $user "$HOMEDIR/$user/web/$docroot2_domain/public_html/public/"
  983. assert_success
  984. refute_output
  985. run v-change-web-domain-docroot $user "$docroot1_domain" "$docroot2_domain" "/public"
  986. assert_success
  987. refute_output
  988. echo -e '<?php\necho "doc2-sub-".$_SERVER["HTTP_HOST"];' > "$HOMEDIR/$user/web/$docroot2_domain/public_html/public/php-test.php"
  989. validate_web_domain $user $docroot1_domain "doc2-sub-${docroot1_domain}" 'php-test.php'
  990. rm "$HOMEDIR/$user/web/$docroot2_domain/public_html/public/php-test.php"
  991. }
  992. @test "Docroot: Other domain root folder" {
  993. docroot1_domain="docroot1.${domain}"
  994. docroot2_domain="docroot2.${domain}"
  995. run v-change-web-domain-docroot $user "$docroot1_domain" "$docroot2_domain"
  996. assert_success
  997. refute_output
  998. echo -e '<?php\necho "doc2-root-".$_SERVER["HTTP_HOST"];' > "$HOMEDIR/$user/web/$docroot2_domain/public_html/php-test.php"
  999. validate_web_domain $user $docroot1_domain "doc2-root-${docroot1_domain}" 'php-test.php'
  1000. rm "$HOMEDIR/$user/web/$docroot2_domain/public_html/php-test.php"
  1001. }
  1002. @test "Docroot: Reset" {
  1003. docroot1_domain="docroot1.${domain}"
  1004. run v-change-web-domain-docroot $user "$docroot1_domain" "default"
  1005. assert_success
  1006. refute_output
  1007. echo -e '<?php\necho "doc1-root-".$_SERVER["HTTP_HOST"];' > "$HOMEDIR/$user/web/$docroot1_domain/public_html/php-test.php"
  1008. validate_web_domain $user $docroot1_domain "doc1-root-${docroot1_domain}" 'php-test.php'
  1009. rm "$HOMEDIR/$user/web/$docroot1_domain/public_html/php-test.php"
  1010. }
  1011. @test "Docroot: Cleanup" {
  1012. docroot1_domain="docroot1.${domain}"
  1013. docroot2_domain="docroot2.${domain}"
  1014. run v-delete-web-domain $user $docroot1_domain
  1015. assert_success
  1016. refute_output
  1017. run v-delete-web-domain $user $docroot2_domain
  1018. assert_success
  1019. refute_output
  1020. }
  1021. #----------------------------------------------------------#
  1022. # DNS #
  1023. #----------------------------------------------------------#
  1024. @test "DNS: Add domain" {
  1025. run v-add-dns-domain $user $domain 198.18.0.125
  1026. assert_success
  1027. refute_output
  1028. }
  1029. @test "DNS: Add domain (duplicate)" {
  1030. run v-add-dns-domain $user $domain 198.18.0.125
  1031. assert_failure $E_EXISTS
  1032. }
  1033. @test "DNS: Add domain record" {
  1034. run v-add-dns-record $user $domain test A 198.18.0.125 '' 20
  1035. assert_success
  1036. refute_output
  1037. }
  1038. @test "DNS: Add domain record *.domain.com" {
  1039. run v-add-dns-record $user $domain '*' A 198.18.0.125 '' 30
  1040. assert_success
  1041. refute_output
  1042. }
  1043. @test "DNS: Add domain record *.domain.com with ID 0" {
  1044. run v-add-dns-record $user $domain '*' A 198.18.0.125 '' 0
  1045. assert_failure $E_INVALID
  1046. }
  1047. @test "DNS: Change DNS record" {
  1048. run v-change-dns-record $user $domain 20 test A 198.18.0.125 "" "" 1500
  1049. assert_success
  1050. refute_output
  1051. }
  1052. @test "DNS: Change DNS record (no update)" {
  1053. run v-change-dns-record $user $domain 20 test A 198.18.0.125 "" "" 1500
  1054. assert_failure $E_EXSIST
  1055. }
  1056. @test "DNS: Change DNS record id" {
  1057. run v-change-dns-record-id $user $domain 20 21
  1058. assert_success
  1059. refute_output
  1060. # Change back
  1061. run v-change-dns-record-id $user $domain 21 20
  1062. }
  1063. @test "DNS: Change DNS record id (no update)" {
  1064. run v-change-dns-record-id $user $domain 20 20
  1065. assert_failure $E_EXSIST
  1066. }
  1067. @test "DNS: Delete domain record" {
  1068. run v-delete-dns-record $user $domain 20
  1069. assert_success
  1070. refute_output
  1071. }
  1072. @test "DNS: Delete missing domain record" {
  1073. run v-delete-dns-record $user $domain 20
  1074. assert_failure $E_NOTEXIST
  1075. }
  1076. @test "DNS: Change domain expire date" {
  1077. run v-change-dns-domain-exp $user $domain 2020-01-01
  1078. assert_success
  1079. refute_output
  1080. }
  1081. @test "DNS: Add domain record MX" {
  1082. run v-add-dns-record $user $domain '@' MX mx.hestiacp.com '' 50
  1083. assert_success
  1084. refute_output
  1085. assert_file_contains "$HOMEDIR/$user/conf/dns/${domain}.db" "mx.hestiacp.com."
  1086. run v-change-dns-record $user $domain 50 '@' MX mx.hestia.com
  1087. assert_success
  1088. refute_output
  1089. assert_file_contains "$HOMEDIR/$user/conf/dns/${domain}.db" "mx.hestia.com."
  1090. run v-delete-dns-record $user $domain 50
  1091. assert_success
  1092. refute_output
  1093. }
  1094. @test "DNS: Add domain record NS" {
  1095. run v-delete-dns-record $user $domain 50
  1096. run v-add-dns-record $user $domain '@' NS mx.hestiacp.com '' 50
  1097. assert_success
  1098. refute_output
  1099. assert_file_contains "$HOMEDIR/$user/conf/dns/${domain}.db" "mx.hestiacp.com."
  1100. run v-change-dns-record $user $domain 50 '@' NS mx.hestia.com
  1101. assert_success
  1102. refute_output
  1103. assert_file_contains "$HOMEDIR/$user/conf/dns/${domain}.db" "mx.hestia.com."
  1104. run v-delete-dns-record $user $domain 50
  1105. assert_success
  1106. refute_output
  1107. }
  1108. @test "DNS: Add domain record SRV" {
  1109. run v-delete-dns-record $user $domain 50
  1110. run v-add-dns-record $user $domain '_test_domain' SRV mx.hestiacp.com '' 50
  1111. assert_success
  1112. refute_output
  1113. assert_file_contains "$HOMEDIR/$user/conf/dns/${domain}.db" "mx.hestiacp.com."
  1114. run v-change-dns-record $user $domain 50 '_test.domain' SRV mx.hestia.com
  1115. assert_success
  1116. refute_output
  1117. assert_file_contains "$HOMEDIR/$user/conf/dns/${domain}.db" "mx.hestia.com."
  1118. run v-delete-dns-record $user $domain 50
  1119. assert_success
  1120. refute_output
  1121. }
  1122. @test "DNS: Add domain record CNAME" {
  1123. run v-delete-dns-record $user $domain 50
  1124. run v-add-dns-record $user $domain 'mail' CNAME mx.hestiacp.com '' 50
  1125. assert_success
  1126. refute_output
  1127. assert_file_contains "$HOMEDIR/$user/conf/dns/${domain}.db" "mx.hestiacp.com."
  1128. run v-change-dns-record $user $domain 50 'mail' CNAME mx.hestia.com
  1129. assert_success
  1130. refute_output
  1131. assert_file_contains "$HOMEDIR/$user/conf/dns/${domain}.db" "mx.hestia.com."
  1132. run v-delete-dns-record $user $domain 50
  1133. assert_success
  1134. refute_output
  1135. }
  1136. @test "DNS: Check txt dns records type1" {
  1137. [ -z "$DNS_SYSTEM" ] && skip
  1138. run v-delete-dns-record $user $domain 50
  1139. record1_in='v=DMARC1; p=quarantine; pct=100'
  1140. record2_in='v=DMARC1; p=quarantine; pct=90'
  1141. record1_out='"v=DMARC1; p=quarantine; pct=100"'
  1142. record2_in='"v=DMARC1; p=quarantine; pct=90"'
  1143. # Test Create
  1144. run v-add-dns-record $user $domain 'test-long-txt' 'TXT' "$record1_in" '' 50
  1145. assert_success
  1146. refute_output
  1147. assert_file_contains "$HOMEDIR/$user/conf/dns/${domain}.db" "$record1_out"
  1148. # Test Edit
  1149. run v-change-dns-record $user $domain 50 'test-long-txt' 'TXT' "$record2_in"
  1150. assert_success
  1151. refute_output
  1152. assert_file_contains "$HOMEDIR/$user/conf/dns/${domain}.db" "$record2_out"
  1153. # Test Cleanup
  1154. run v-delete-dns-record $user $domain 50
  1155. assert_success
  1156. refute_output
  1157. }
  1158. @test "DNS: Check txt dns records type2" {
  1159. [ -z "$DNS_SYSTEM" ] && skip
  1160. run v-delete-dns-record $user $domain 50
  1161. record3_in='k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4+VEVsoTbl6tYLJlhozqAGju3IgpSVdBAS5LMyzpHP8/L0/PlyVRJnm2xECjVk3DRqCmelyIvmraw1VtFz2aH6DRlDhHsZghj1DmGhwN+7NkwIb4hEvmytMVAz1WyiLH6Rm6Iemm/ZCt1RhrAMUYLxHA9mJgky76YCcf8/cX35xC+1vd4a5U6YofAZeVP9DBvVgQ8ung4gVrOrQrXkU8QfVNAoXz5pfJo74GB7woIBFhZXsU6SKho7KnzT5inVCIOtWp7L5hyEnbySWQPHT2vAMCCAe2AY/Vv0N3HW14o8P3b4A6OU920wFB2kA7pkQNzO5OwH+HSttwG0PaIiQxYQIDAQAB'
  1162. record3_out='"k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4+VEVsoTbl6tYLJlhozqAGju3IgpSVdBAS5LMyzpHP8/L0/PlyVRJnm2xECjVk3DRqCmelyIvmraw1VtFz2aH6DRlDhHsZghj1DmGhwN+7NkwIb4hEvmytMVAz1WyiLH6Rm6Iemm/ZCt1RhrAMUYLxHA9mJgky76YCcf8/cX35xC+1vd4a5U6YofAZeVP9DBvVgQ8ung4g""VrOrQrXkU8QfVNAoXz5pfJo74GB7woIBFhZXsU6SKho7KnzT5inVCIOtWp7L5hyEnbySWQPHT2vAMCCAe2AY/Vv0N3HW14o8P3b4A6OU920wFB2kA7pkQNzO5OwH+HSttwG0PaIiQxYQIDAQAB"'
  1163. record4_in='k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4+VEVsoTbl6tYLJlhozqAGju3IgpSVdBAS5LMyzpHP8/L0/PlyVRJnm2xECjVk3DRqCmelyIvmraw1VtFz2aH6DRlDhHsZghj1DmGhwN+7NkwIb4hEvmytMVAz1WyiLH6Rm6Iemm/ZCt1RhrAMUYLxHA9mJgky76YCcf8/cX35xC+1vd4a5U6YofAZeVP9DBvVgQ8ung4gVrOrQrXkU8QfVNAoXz5pfJo74GB7woIBFhZXsU6SKho7KnzT5inVCIOtWp7L5hyEnbySWQPHT2vAMCCAe2AY/Vv0N3HW14o8P3b4A6OU920wFB2kA7pkQNzO5OwH+HSttwG0PaIiQxYQIDAQA4'
  1164. record4_out='"k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4+VEVsoTbl6tYLJlhozqAGju3IgpSVdBAS5LMyzpHP8/L0/PlyVRJnm2xECjVk3DRqCmelyIvmraw1VtFz2aH6DRlDhHsZghj1DmGhwN+7NkwIb4hEvmytMVAz1WyiLH6Rm6Iemm/ZCt1RhrAMUYLxHA9mJgky76YCcf8/cX35xC+1vd4a5U6YofAZeVP9DBvVgQ8ung4g""VrOrQrXkU8QfVNAoXz5pfJo74GB7woIBFhZXsU6SKho7KnzT5inVCIOtWp7L5hyEnbySWQPHT2vAMCCAe2AY/Vv0N3HW14o8P3b4A6OU920wFB2kA7pkQNzO5OwH+HSttwG0PaIiQxYQIDAQA4"'
  1165. # Test Create
  1166. run v-add-dns-record $user $domain 'test-long-txt' 'TXT' "$record3_in" '' 50
  1167. assert_success
  1168. refute_output
  1169. assert_file_contains "$HOMEDIR/$user/conf/dns/${domain}.db" "$record3_out"
  1170. # Test Edit
  1171. run v-change-dns-record $user $domain 50 'test-long-txt' 'TXT' "$record4_in"
  1172. assert_success
  1173. refute_output
  1174. assert_file_contains "$HOMEDIR/$user/conf/dns/${domain}.db" "$record4_out"
  1175. # Test Cleanup
  1176. run v-delete-dns-record $user $domain 50
  1177. assert_success
  1178. refute_output
  1179. }
  1180. @test "DNS: Change domain ip" {
  1181. run v-change-dns-domain-ip $user $domain 127.0.0.1
  1182. assert_success
  1183. refute_output
  1184. }
  1185. @test "DNS: Suspend domain" {
  1186. run v-suspend-dns-domain $user $domain
  1187. assert_success
  1188. refute_output
  1189. }
  1190. @test "DNS: Unsuspend domain" {
  1191. run v-unsuspend-dns-domain $user $domain
  1192. assert_success
  1193. refute_output
  1194. }
  1195. @test "DNS: Rebuild" {
  1196. run v-rebuild-dns-domains $user
  1197. assert_success
  1198. refute_output
  1199. }
  1200. #----------------------------------------------------------#
  1201. # MAIL #
  1202. #----------------------------------------------------------#
  1203. @test "MAIL: Add domain" {
  1204. run v-add-mail-domain $user $domain
  1205. assert_success
  1206. refute_output
  1207. validate_mail_domain $user $domain
  1208. }
  1209. @test "MAIL: Add mail domain webmail client (Roundcube)" {
  1210. run v-add-mail-domain-webmail $user $domain "roundcube" "yes"
  1211. assert_success
  1212. refute_output
  1213. # echo -e "<?php\necho 'Server: ' . \$_SERVER['SERVER_SOFTWARE'];" > /var/lib/roundcube/check_server.php
  1214. validate_webmail_domain $user $domain 'Welcome to Roundcube Webmail'
  1215. # rm /var/lib/roundcube/check_server.php
  1216. }
  1217. @test "Mail: Add SSL to mail domain" {
  1218. # Use generated certificates during WEB Generate Self signed certificate
  1219. run v-add-mail-domain-ssl $user $domain /tmp
  1220. assert_success
  1221. refute_output
  1222. validate_webmail_domain $user $domain 'Welcome to Roundcube Webmail'
  1223. }
  1224. @test "MAIL: Add mail domain webmail client (SnappyMail)" {
  1225. if [ -z "$(echo $WEBMAIL_SYSTEM | grep -w "snappymail")" ]; then
  1226. skip "Webmail client SnappyMail not installed"
  1227. fi
  1228. run v-add-mail-domain-webmail $user $domain "snappymail" "yes"
  1229. assert_success
  1230. refute_output
  1231. validate_mail_domain $user $domain
  1232. validate_webmail_domain $user $domain 'SnappyMail Webmail'
  1233. }
  1234. @test "MAIL: Disable webmail client" {
  1235. run v-add-mail-domain-webmail $user $domain "disabled" "yes"
  1236. assert_success
  1237. refute_output
  1238. validate_mail_domain $user $domain
  1239. validate_webmail_domain $user $domain 'Success!'
  1240. run v-add-mail-domain-webmail $user $domain "roundcube" "yes"
  1241. assert_success
  1242. refute_output
  1243. }
  1244. @test "MAIL: Add domain (duplicate)" {
  1245. run v-add-mail-domain $user $domain
  1246. assert_failure $E_EXISTS
  1247. }
  1248. @test "MAIL: Add account" {
  1249. run v-add-mail-account $user $domain test "$userpass2"
  1250. assert_success
  1251. assert_file_contains /etc/exim4/domains/$domain/limits "test@$domain"
  1252. refute_output
  1253. }
  1254. @test "MAIL: Add account (duplicate)" {
  1255. run v-add-mail-account $user $domain test "$userpass2"
  1256. assert_failure $E_EXISTS
  1257. }
  1258. @test "MAIL: Add account 2" {
  1259. run v-add-mail-account $user $domain random "$userpass2"
  1260. assert_success
  1261. assert_file_contains /etc/exim4/domains/$domain/limits "random@$domain"
  1262. refute_output
  1263. }
  1264. @test "MAIL: Add account alias" {
  1265. run v-add-mail-account-alias $user $domain test hestiacprocks
  1266. assert_success
  1267. assert_file_contains /etc/exim4/domains/$domain/aliases "hestiacprocks@$domain"
  1268. refute_output
  1269. }
  1270. @test "MAIL: Add account alias 2" {
  1271. run v-add-mail-account-alias $user $domain test hestiacprocks2
  1272. assert_success
  1273. assert_file_contains /etc/exim4/domains/$domain/aliases "hestiacprocks2@$domain"
  1274. refute_output
  1275. }
  1276. @test "MAIL: Add account alias 3" {
  1277. run v-add-mail-account-alias $user $domain test hestiacp
  1278. assert_success
  1279. assert_file_contains /etc/exim4/domains/$domain/aliases "hestiacp@$domain"
  1280. refute_output
  1281. }
  1282. @test "MAIL: Add account 3" {
  1283. run v-add-mail-account $user $domain hestia "$userpass2"
  1284. assert_success
  1285. assert_file_contains /etc/exim4/domains/$domain/limits "hestia@$domain"
  1286. refute_output
  1287. }
  1288. @test "MAIL: Add account 4" {
  1289. run v-add-mail-account $user $domain hestiarocks3 "$userpass2"
  1290. assert_success
  1291. assert_file_contains /etc/exim4/domains/$domain/limits "hestiarocks3@$domain"
  1292. refute_output
  1293. }
  1294. @test "MAIL: Add account alias Invalid length" {
  1295. run v-add-mail-account-alias $user $domain test 'hestiacp-realy-rocks-but-i-want-to-have-feature-xyz-and-i-want-it-now'
  1296. assert_failure $E_INVALID
  1297. }
  1298. @test "MAIL: Add account alias Invalid" {
  1299. run v-add-mail-account-alias $user $domain test '-test'
  1300. assert_failure $E_INVALID
  1301. }
  1302. @test "MAIL: Add account alias Invalid 2" {
  1303. run v-add-mail-account-alias $user $domain test 'hestia@test'
  1304. assert_failure $E_INVALID
  1305. }
  1306. @test "MAIL: Add account alias (duplicate)" {
  1307. run v-add-mail-account-alias $user $domain test hestiacprocks
  1308. assert_failure $E_EXISTS
  1309. }
  1310. @test "MAIL: change mail account password" {
  1311. run curl -k -X POST -d "email=test@$domain&password=$userpass2&new=123456" https://localhost:8083/reset/mail/
  1312. assert_success
  1313. assert_output --partial "==ok=="
  1314. }
  1315. @test "MAIL: change mail account password (Incorrect PW)" {
  1316. run curl -k -X POST -d "email=test@$domain&password=$userpass2&new=123456" https://localhost:8083/reset/mail/
  1317. assert_success
  1318. assert_output --partial "error"
  1319. }
  1320. @test "MAIL: Change rate limit" {
  1321. run v-change-mail-account-rate-limit $user $domain test 10
  1322. assert_file_contains /etc/exim4/domains/$domain/limits "test@$domain:10"
  1323. }
  1324. @test "MAIL: Delete account" {
  1325. run v-delete-mail-account $user $domain test
  1326. assert_success
  1327. refute_output
  1328. }
  1329. @test "MAIL: Delete missing account" {
  1330. run v-delete-mail-account $user $domain test
  1331. assert_failure $E_NOTEXIST
  1332. }
  1333. @test "MAIL: Rebuild mail domain" {
  1334. run v-rebuild-mail-domains $user
  1335. assert_success
  1336. refute_output
  1337. }
  1338. @test "MAIL: Delete DKIM" {
  1339. run v-delete-mail-domain-dkim $user $domain
  1340. assert_success
  1341. refute_output
  1342. run grep "RECORD='_domainkey'" "${HESTIA}/data/users/${user}/dns/${domain}.conf"
  1343. assert_failure
  1344. refute_output
  1345. run grep "RECORD='mail._domainkey'" "${HESTIA}/data/users/${user}/dns/${domain}.conf"
  1346. assert_failure
  1347. refute_output
  1348. }
  1349. @test "MAIL: Add DKIM" {
  1350. run v-add-mail-domain-dkim $user $domain
  1351. assert_success
  1352. refute_output
  1353. run grep "RECORD='_domainkey'" "${HESTIA}/data/users/${user}/dns/${domain}.conf"
  1354. assert_success
  1355. assert_output --partial "RECORD='_domainkey' TYPE='TXT'"
  1356. run grep "RECORD='mail._domainkey'" "${HESTIA}/data/users/${user}/dns/${domain}.conf"
  1357. assert_success
  1358. assert_output --partial "RECORD='mail._domainkey' TYPE='TXT'"
  1359. }
  1360. @test "MAIL: Delete DKIM but preserve custom dkim records" {
  1361. run v-add-dns-record $user $domain 'k2._domainkey' 'TXT' 'v=DKIM1; k=rsa; p=123456'
  1362. assert_success
  1363. refute_output
  1364. run v-delete-mail-domain-dkim $user $domain
  1365. assert_success
  1366. refute_output
  1367. run grep "RECORD='k2._domainkey'" "${HESTIA}/data/users/${user}/dns/${domain}.conf"
  1368. assert_success
  1369. assert_output --partial "RECORD='k2._domainkey' TYPE='TXT'"
  1370. }
  1371. #----------------------------------------------------------#
  1372. # Limit possibilities adding different owner domain #
  1373. #----------------------------------------------------------#
  1374. @test "Allow Users: User can't add user.user2.com " {
  1375. # Case: admin company.tld
  1376. # users should not be allowed to add user.company.tld
  1377. run v-add-user $user2 $user2 $user@hestiacp.com default "Super Test"
  1378. assert_success
  1379. refute_output
  1380. run v-add-web-domain $user2 $rootdomain
  1381. assert_success
  1382. refute_output
  1383. run v-add-web-domain $user $subdomain
  1384. assert_failure $E_EXISTS
  1385. }
  1386. @test "Allow Users: User can't add user.user2.com as alias" {
  1387. run v-add-web-domain-alias $user $domain $subdomain
  1388. assert_failure $E_EXISTS
  1389. }
  1390. @test "Allow Users: User can't add user.user2.com as mail domain" {
  1391. run v-add-mail-domain $user $subdomain
  1392. assert_failure $E_EXISTS
  1393. }
  1394. @test "Allow Users: User can't add user.user2.com as dns domain" {
  1395. run v-add-dns-domain $user $subdomain 198.18.0.125
  1396. assert_failure $E_EXISTS
  1397. }
  1398. @test "Allow Users: Set Allow users" {
  1399. # Allow user to yes allows
  1400. # Case: admin company.tld
  1401. # users are allowed to add user.company.tld
  1402. run v-add-web-domain-allow-users $user2 $rootdomain
  1403. assert_success
  1404. refute_output
  1405. }
  1406. @test "Allow Users: User can add user.user2.com" {
  1407. run v-add-web-domain $user $subdomain
  1408. assert_success
  1409. refute_output
  1410. }
  1411. @test "Allow Users: User can add user.user2.com as alias" {
  1412. run v-delete-web-domain $user $subdomain
  1413. assert_success
  1414. refute_output
  1415. run v-add-web-domain-alias $user $domain $subdomain
  1416. assert_success
  1417. refute_output
  1418. }
  1419. @test "Allow Users: User can add user.user2.com as mail domain" {
  1420. run v-add-mail-domain $user $subdomain
  1421. assert_success
  1422. refute_output
  1423. }
  1424. @test "Allow Users: User can add user.user2.com as dns domain" {
  1425. run v-add-dns-domain $user $subdomain 198.18.0.125
  1426. assert_success
  1427. refute_output
  1428. }
  1429. @test "Allow Users: Cleanup tests" {
  1430. run v-delete-dns-domain $user $subdomain
  1431. assert_success
  1432. refute_output
  1433. run v-delete-mail-domain $user $subdomain
  1434. assert_success
  1435. refute_output
  1436. }
  1437. @test "Allow Users: Set Allow users no" {
  1438. run v-delete-web-domain-alias $user $domain $subdomain
  1439. assert_success
  1440. refute_output
  1441. run v-delete-web-domain-allow-users $user2 $rootdomain
  1442. assert_success
  1443. refute_output
  1444. }
  1445. @test "Allow Users: User can't add user.user2.com again" {
  1446. run v-add-web-domain $user $subdomain
  1447. assert_failure $E_EXISTS
  1448. }
  1449. @test "Allow Users: user2 can add user.user2.com again" {
  1450. run v-add-web-domain $user2 $subdomain
  1451. assert_success
  1452. refute_output
  1453. }
  1454. #----------------------------------------------------------#
  1455. # DB #
  1456. #----------------------------------------------------------#
  1457. @test "MYSQL: Add database" {
  1458. run v-add-database $user database dbuser 1234 mysql
  1459. assert_success
  1460. refute_output
  1461. # validate_database mysql database_name database_user password
  1462. validate_database mysql $database $dbuser 1234
  1463. }
  1464. @test "MYSQL: Add Database (Duplicate)" {
  1465. run v-add-database $user database dbuser 1234 mysql
  1466. assert_failure $E_EXISTS
  1467. }
  1468. @test "MYSQL: Rebuild Database" {
  1469. run v-rebuild-database $user $database
  1470. assert_success
  1471. refute_output
  1472. }
  1473. @test "MYSQL: Change database user password" {
  1474. run v-change-database-password $user $database 123456
  1475. assert_success
  1476. refute_output
  1477. validate_database mysql $database $dbuser 123456
  1478. }
  1479. @test "MYSQL: Change database user" {
  1480. run v-change-database-user $user $database database
  1481. assert_success
  1482. refute_output
  1483. validate_database mysql $database $database 123456
  1484. }
  1485. @test "MYSQL: Suspend database" {
  1486. run v-suspend-database $user $database
  1487. assert_success
  1488. refute_output
  1489. }
  1490. @test "MYSQL: Unsuspend database" {
  1491. run v-unsuspend-database $user $database
  1492. assert_success
  1493. refute_output
  1494. }
  1495. @test "MYSQL: Delete database" {
  1496. run v-delete-database $user $database
  1497. assert_success
  1498. refute_output
  1499. }
  1500. @test "MYSQL: Delete missing database" {
  1501. run v-delete-database $user $database
  1502. assert_failure $E_NOTEXIST
  1503. }
  1504. @test "PGSQL: Add database invalid user" {
  1505. if [ -z "$(echo $DB_SYSTEM | grep -w "pgsql")" ]; then
  1506. skip "PostGreSQL is not installed"
  1507. fi
  1508. run v-add-database "$user" "database" "dbuser" "1234ABCD" "pgsql"
  1509. assert_failure $E_INVALID
  1510. }
  1511. @test "PGSQL: Add database" {
  1512. if [ -z "$(echo $DB_SYSTEM | grep -w "pgsql")" ]; then
  1513. skip "PostGreSQL is not installed"
  1514. fi
  1515. run v-add-user $pguser $pguser $user@hestiacp.com default "Super Test"
  1516. run v-add-database "$pguser" "database" "dbuser" "1234ABCD" "pgsql"
  1517. assert_success
  1518. refute_output
  1519. # validate_database pgsql $pgdatabase $pgdbuser "1234ABCD"
  1520. }
  1521. @test "PGSQL: Add Database (Duplicate)" {
  1522. if [ -z "$(echo $DB_SYSTEM | grep -w "pgsql")" ]; then
  1523. skip "PostGreSQL is not installed"
  1524. fi
  1525. run v-add-database "$pguser" "database" "dbuser" "1234ABCD" "pgsql"
  1526. assert_failure $E_EXISTS
  1527. }
  1528. @test "PGSQL: Rebuild Database" {
  1529. if [ -z "$(echo $DB_SYSTEM | grep -w "pgsql")" ]; then
  1530. skip "PostGreSQL is not installed"
  1531. fi
  1532. run v-rebuild-database $pguser $pgdatabase
  1533. assert_success
  1534. refute_output
  1535. }
  1536. @test "PGSQL: Change database user password" {
  1537. if [ -z "$(echo $DB_SYSTEM | grep -w "pgsql")" ]; then
  1538. skip "PostGreSQL is not installed"
  1539. fi
  1540. run v-change-database-password $pguser $pgdatabase "123456"
  1541. assert_success
  1542. refute_output
  1543. # validate_database pgsql $pgdatabase $pgdbuser "123456"
  1544. }
  1545. @test "PGSQL: Suspend database" {
  1546. if [ -z "$(echo $DB_SYSTEM | grep -w "pgsql")" ]; then
  1547. skip "PostGreSQL is not installed"
  1548. fi
  1549. run v-suspend-database $pguser $pgdatabase
  1550. assert_success
  1551. refute_output
  1552. }
  1553. @test "PGSQL: Unsuspend database" {
  1554. if [ -z "$(echo $DB_SYSTEM | grep -w "pgsql")" ]; then
  1555. skip "PostGreSQL is not installed"
  1556. fi
  1557. run v-unsuspend-database $pguser $pgdatabase
  1558. assert_success
  1559. refute_output
  1560. }
  1561. @test "PGSQL: Change database user" {
  1562. if [ -z "$(echo $DB_SYSTEM | grep -w "pgsql")" ]; then
  1563. skip "PostGreSQL is not installed"
  1564. fi
  1565. skip
  1566. run v-change-database-user $pguser $pgdatabase database
  1567. assert_success
  1568. refute_output
  1569. validate_database pgsql $pgdatabase $pgdatabase 123456
  1570. }
  1571. @test "PGSQL: Delete database" {
  1572. if [ -z "$(echo $DB_SYSTEM | grep -w "pgsql")" ]; then
  1573. skip "PostGreSQL is not installed"
  1574. fi
  1575. run v-delete-database $pguser $pgdatabase
  1576. assert_success
  1577. refute_output
  1578. }
  1579. @test "PGSQL: Delete missing database" {
  1580. if [ -z "$(echo $DB_SYSTEM | grep -w "pgsql")" ]; then
  1581. skip "PostGreSQL is not installed"
  1582. fi
  1583. run v-delete-database $pguser $pgdatabase
  1584. assert_failure $E_NOTEXIST
  1585. run v-delete-user $pguser
  1586. }
  1587. #----------------------------------------------------------#
  1588. # System #
  1589. #----------------------------------------------------------#
  1590. @test "System: Set/Enable SMTP account for internal mail" {
  1591. run v-add-sys-smtp $domain 587 STARTTLS info@$domain 1234-test noreply@$domain
  1592. assert_success
  1593. refute_output
  1594. }
  1595. @test "System: Disable SMTP account for internal mail" {
  1596. run v-delete-sys-smtp
  1597. assert_success
  1598. refute_output
  1599. }
  1600. @test "System: Set/Enable SMTP relay" {
  1601. run v-add-sys-smtp-relay $domain info@$domain 1234-test 587
  1602. assert_success
  1603. refute_output
  1604. assert_file_exist /etc/exim4/smtp_relay.conf
  1605. }
  1606. @test "System: Delete SMTP relay" {
  1607. run v-delete-sys-smtp-relay
  1608. assert_success
  1609. refute_output
  1610. assert_file_not_exist /etc/exim4/smtp_relay.conf
  1611. }
  1612. #----------------------------------------------------------#
  1613. # Firewall #
  1614. #----------------------------------------------------------#
  1615. @test "Firewall: Add ip to banlist" {
  1616. run v-add-firewall-ban '1.2.3.4' 'HESTIA'
  1617. assert_success
  1618. refute_output
  1619. check_ip_banned '1.2.3.4' 'HESTIA'
  1620. }
  1621. @test "Firewall: Delete ip to banlist" {
  1622. run v-delete-firewall-ban '1.2.3.4' 'HESTIA'
  1623. assert_success
  1624. refute_output
  1625. check_ip_not_banned '1.2.3.4' 'HESTIA'
  1626. }
  1627. @test "Firewall: Add ip to banlist for ALL" {
  1628. run v-add-firewall-ban '1.2.3.4' 'HESTIA'
  1629. assert_success
  1630. refute_output
  1631. run v-add-firewall-ban '1.2.3.4' 'MAIL'
  1632. assert_success
  1633. refute_output
  1634. check_ip_banned '1.2.3.4' 'HESTIA'
  1635. }
  1636. @test "Firewall: Delete ip to banlist CHAIN = ALL" {
  1637. run v-delete-firewall-ban '1.2.3.4' 'ALL'
  1638. assert_success
  1639. refute_output
  1640. check_ip_not_banned '1.2.3.4' 'HESTIA'
  1641. }
  1642. @test "Test Whitelist Fail2ban" {
  1643. echo "1.2.3.4" >> $HESTIA/data/firewall/excludes.conf
  1644. run v-add-firewall-ban '1.2.3.4' 'HESTIA'
  1645. rm $HESTIA/data/firewall/excludes.conf
  1646. check_ip_not_banned '1.2.3.4' 'HESTIA'
  1647. }
  1648. @test "Test create ipset" {
  1649. run v-add-firewall-ipset "country-nl" "https://raw.githubusercontent.com/ipverse/rir-ip/master/country/nl/ipv4-aggregated.txt" v4 yes
  1650. assert_success
  1651. refute_output
  1652. }
  1653. @test "Create firewall with Ipset" {
  1654. run v-add-firewall-rule 'DROP' 'ipset:country-nl' '8083,22' 'TCP' 'Test'
  1655. assert_success
  1656. refute_output
  1657. }
  1658. @test "List firewall rules" {
  1659. run v-list-firewall csv
  1660. assert_success
  1661. assert_line --partial '11,DROP,TCP,8083,22,ipset:country-nl'
  1662. }
  1663. @test "Delete firewall with Ipset" {
  1664. run v-delete-firewall-rule '11'
  1665. assert_success
  1666. refute_output
  1667. }
  1668. @test "Test delete ipset" {
  1669. run v-delete-firewall-ipset "country-nl"
  1670. assert_success
  1671. refute_output
  1672. }
  1673. #----------------------------------------------------------#
  1674. # PACKAGE #
  1675. #----------------------------------------------------------#
  1676. @test "Package: Create new Package" {
  1677. cp $HESTIA/data/packages/default.pkg /tmp/package
  1678. run v-add-user-package /tmp/package hestiatest
  1679. assert_success
  1680. refute_output
  1681. }
  1682. @test "Package: Assign user to new Package" {
  1683. run v-change-user-package $user hestiatest
  1684. assert_success
  1685. refute_output
  1686. }
  1687. @test "Package: Create new package (Duplicate)" {
  1688. sed -i "s/BANDWIDTH='unlimited'/BANDWIDTH='100'/g" /tmp/package
  1689. run v-add-user-package /tmp/package hestiatest
  1690. assert_failure $E_EXISTS
  1691. }
  1692. @test "Package: Update new Package" {
  1693. sed -i "s/BANDWIDTH='unlimited'/BANDWIDTH='100'/g" /tmp/package
  1694. run v-add-user-package /tmp/package hestiatest yes
  1695. assert_success
  1696. refute_output
  1697. }
  1698. @test "Package: Update package of user" {
  1699. run v-change-user-package $user hestiatest
  1700. assert_success
  1701. refute_output
  1702. run grep "BANDWIDTH='100'" $HESTIA/data/users/$user/user.conf
  1703. assert_success
  1704. assert_output --partial "100"
  1705. }
  1706. @test "Package: Copy package Not Exists" {
  1707. run v-copy-user-package hestiadoesnotexists hestiatest2
  1708. assert_failure $E_NOTEXIST
  1709. }
  1710. @test "Package: Copy package" {
  1711. run v-copy-user-package hestiatest hestiatest2
  1712. assert_success
  1713. refute_output
  1714. }
  1715. @test "Package: Copy package Exists" {
  1716. run v-copy-user-package hestiatest hestiatest2
  1717. assert_failure $E_EXISTS
  1718. }
  1719. @test "Package: Delete package" {
  1720. run v-delete-user-package hestiatest
  1721. run v-delete-user-package hestiatest2
  1722. rm /tmp/package
  1723. assert_success
  1724. refute_output
  1725. run grep "BANDWIDTH='unlimited'" $HESTIA/data/users/$user/user.conf
  1726. assert_success
  1727. assert_output --partial "unlimited"
  1728. }
  1729. #----------------------------------------------------------#
  1730. # Backup user #
  1731. #----------------------------------------------------------#
  1732. @test "Backup: Backup user" {
  1733. run v-backup-user $user
  1734. assert_success
  1735. }
  1736. @test "Backup: List Backups" {
  1737. run v-list-user-backups $user plain
  1738. assert_success
  1739. assert_output --partial "$user"
  1740. }
  1741. @test "Backup: Delete backups" {
  1742. run v-delete-user-backup $user $(v-list-user-backups $user plain | cut -f1)
  1743. assert_success
  1744. run rm /backup/$user.log
  1745. }
  1746. #----------------------------------------------------------#
  1747. # Change owner scripts #
  1748. #----------------------------------------------------------#
  1749. @test "Change: Change domain owner" {
  1750. run v-change-domain-owner $domain $user2
  1751. assert_success
  1752. run v-restart-web
  1753. run v-restart-proxy
  1754. }
  1755. @test "Change: Add database" {
  1756. run v-add-database $user database dbuser 1234 mysql
  1757. assert_success
  1758. refute_output
  1759. # validate_database mysql database_name database_user password
  1760. validate_database mysql $database $dbuser 1234
  1761. }
  1762. @test "Change: Change database owner" {
  1763. run v-change-database-owner $database $user2
  1764. assert_success
  1765. validate_database mysql test-5286_database test-5286_dbuser 1234
  1766. }
  1767. @test "Change: Delete database" {
  1768. run v-delete-database $user2 test-5286_database
  1769. assert_success
  1770. refute_output
  1771. }
  1772. #----------------------------------------------------------#
  1773. # CLEANUP #
  1774. #----------------------------------------------------------#
  1775. @test "Mail: Delete domain" {
  1776. run v-delete-mail-domain $user2 $domain
  1777. assert_success
  1778. refute_output
  1779. }
  1780. @test "DNS: Delete domain" {
  1781. run v-delete-dns-domain $user2 $domain
  1782. assert_success
  1783. refute_output
  1784. }
  1785. @test "WEB: Delete domain" {
  1786. run v-delete-web-domain $user2 $domain
  1787. assert_success
  1788. refute_output
  1789. }
  1790. @test "Delete user" {
  1791. run v-delete-user $user
  1792. assert_success
  1793. refute_output
  1794. }
  1795. @test "Delete user2" {
  1796. run v-delete-user $user2
  1797. assert_success
  1798. refute_output
  1799. }
  1800. @test "Ip: Delete the test IP" {
  1801. run v-delete-sys-ip 198.18.0.125
  1802. assert_success
  1803. refute_output
  1804. }
  1805. @test 'assert()' {
  1806. touch '/var/log/test.log'
  1807. assert [ -e '/var/log/test.log' ]
  1808. }