test.bats 62 KB

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