test.bats 66 KB

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