restore.bats 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536
  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. fi
  27. source /tmp/hestia-test-env.sh
  28. source $HESTIA/func/main.sh
  29. source $HESTIA/conf/hestia.conf
  30. source $HESTIA/func/ip.sh
  31. }
  32. function validate_web_domain() {
  33. local user=$1
  34. local domain=$2
  35. local webproof=$3
  36. local webpath=${4}
  37. refute [ -z "$user" ]
  38. refute [ -z "$domain" ]
  39. refute [ -z "$webproof" ]
  40. source $HESTIA/func/ip.sh
  41. run v-list-web-domain $user $domain
  42. assert_success
  43. USER_DATA=$HESTIA/data/users/$user
  44. local domain_ip=$(get_object_value 'web' 'DOMAIN' "$domain" '$IP')
  45. SSL=$(get_object_value 'web' 'DOMAIN' "$domain" '$SSL')
  46. domain_ip=$(get_real_ip "$domain_ip")
  47. if [ ! -z $webpath ]; then
  48. domain_docroot=$(get_object_value 'web' 'DOMAIN' "$domain" '$CUSTOM_DOCROOT')
  49. if [ -n "$domain_docroot" ] && [ -d "$domain_docroot" ]; then
  50. assert_file_exist "${domain_docroot}/${webpath}"
  51. else
  52. assert_file_exist "${HOMEDIR}/${user}/web/${domain}/public_html/${webpath}"
  53. fi
  54. fi
  55. # Test HTTP
  56. run curl --location --silent --show-error --insecure --resolve "${domain}:80:${domain_ip}" "http://${domain}/${webpath}"
  57. assert_success
  58. assert_output --partial "$webproof"
  59. # Test HTTPS
  60. if [ "$SSL" = "yes" ]; then
  61. run v-list-web-domain-ssl $user $domain
  62. assert_success
  63. run curl --location --silent --show-error --insecure --resolve "${domain}:443:${domain_ip}" "https://${domain}/${webpath}"
  64. assert_success
  65. assert_output --partial "$webproof"
  66. fi
  67. }
  68. #----------------------------------------------------------#
  69. # Backup / Restore #
  70. #----------------------------------------------------------#
  71. #Test backup
  72. # Hestia v1.1.1 archive contains:
  73. # user: hestia111
  74. # web:
  75. # - test.hestia.com (+SSL self-signed)
  76. # dns:
  77. # - test.hestia.com
  78. # mail:
  79. # - test.hestia.com
  80. # mail acc:
  81. # - testaccount@test.hestia.com
  82. # db:
  83. # - hestia111_db
  84. # cron:
  85. # - 1: /bin/true
  86. # Hestia 1.3.1 archive contains (As zstd format)
  87. # user: hestia131
  88. # web:
  89. # - test.hestia.com (+SSL self-signed)
  90. # dns:
  91. # - test.hestia.com
  92. # mail:
  93. # - test.hestia.com
  94. # mail acc:
  95. # - testaccount@test.hestia.com
  96. # db:
  97. # - hestia131_db
  98. # cron:
  99. # - 1: /bin/true
  100. # Vesta 0.9.8-23 archive contains:
  101. # user: vesta09823
  102. # web:
  103. # - vesta09823.tld (+SSL self-signed)
  104. # dns:
  105. # - vesta09823.tld
  106. # mail:
  107. # - vesta09823.tld
  108. # mail acc:
  109. # - testaccount@vesta09823.tld
  110. # db:
  111. # - vesta09823_db
  112. # cron:
  113. # - 1: /bin/true
  114. #
  115. # Testing Hestia backups
  116. @test "Restore[1]: Hestia archive for a non-existing user" {
  117. if [ -d "$HOMEDIR/$userbk" ]; then
  118. run v-delete-user $userbk
  119. assert_success
  120. refute_output
  121. fi
  122. mkdir -p /backup
  123. local archive_name="hestia111.2020-03-26"
  124. run wget --quiet --tries=3 --timeout=15 --read-timeout=15 --waitretry=3 --no-dns-cache "https://hestiacp.com/testing/data/${archive_name}.tar" -O "/backup/${archive_name}.tar"
  125. assert_success
  126. run v-restore-user $userbk "${archive_name}.tar"
  127. assert_success
  128. rm "/backup/${archive_name}.tar"
  129. }
  130. @test "Restore[1]: From Hestia [WEB]" {
  131. local domain="test.hestia.com"
  132. validate_web_domain $userbk $domain 'Hello Hestia'
  133. }
  134. @test "Restore[1]: From Hestia [DNS]" {
  135. local domain="test.hestia.com"
  136. run v-list-dns-domain $userbk $domain
  137. assert_success
  138. run nslookup $domain 127.0.0.1
  139. assert_success
  140. }
  141. @test "Restore[1]: From Hestia [MAIL]" {
  142. local domain="test.hestia.com"
  143. run v-list-mail-domain $userbk $domain
  144. assert_success
  145. }
  146. @test "Restore[1]: From Hestia [MAIL-Account]" {
  147. local domain="test.hestia.com"
  148. run v-list-mail-account $userbk $domain testaccount
  149. assert_success
  150. }
  151. @test "Restore[1]: From Hestia [DB]" {
  152. run v-list-database $userbk "${userbk}_db"
  153. assert_success
  154. }
  155. @test "Restore[1]: From Hestia [CRON]" {
  156. run v-list-cron-job $userbk 1
  157. assert_success
  158. }
  159. @test "Restore[1]: From Hestia Cleanup" {
  160. run v-delete-user $userbk
  161. assert_success
  162. refute_output
  163. }
  164. @test "Restore[2]: Hestia archive over a existing user" {
  165. if [ -d "$HOMEDIR/$userbk" ]; then
  166. run v-delete-user $userbk
  167. assert_success
  168. refute_output
  169. fi
  170. if [ ! -d "$HOMEDIR/$userbk" ]; then
  171. run v-add-user $userbk $userbk test@hestia.com
  172. assert_success
  173. fi
  174. mkdir -p /backup
  175. local archive_name="hestia111.2020-03-26"
  176. run wget --quiet --tries=3 --timeout=15 --read-timeout=15 --waitretry=3 --no-dns-cache "https://hestiacp.com/testing/data/${archive_name}.tar" -O "/backup/${archive_name}.tar"
  177. assert_success
  178. run v-restore-user $userbk "${archive_name}.tar"
  179. assert_success
  180. rm "/backup/${archive_name}.tar"
  181. }
  182. @test "Restore[2]: From Hestia [WEB]" {
  183. local domain="test.hestia.com"
  184. validate_web_domain $userbk "${domain}" 'Hello Hestia'
  185. }
  186. @test "Restore[2]: From Hestia [DNS]" {
  187. local domain="test.hestia.com"
  188. run v-list-dns-domain $userbk $domain
  189. assert_success
  190. run nslookup $domain 127.0.0.1
  191. assert_success
  192. }
  193. @test "Restore[2]: From Hestia [MAIL]" {
  194. local domain="test.hestia.com"
  195. run v-list-mail-domain $userbk $domain
  196. assert_success
  197. }
  198. @test "Restore[2]: From Hestia [MAIL-Account]" {
  199. local domain="test.hestia.com"
  200. run v-list-mail-account $userbk $domain testaccount
  201. assert_success
  202. }
  203. @test "Restore[2]: From Hestia [DB]" {
  204. run v-list-database $userbk "${userbk}_db"
  205. assert_success
  206. }
  207. @test "Restore[2]: From Hestia [CRON]" {
  208. run v-list-cron-job $userbk 1
  209. assert_success
  210. }
  211. @test "Restore[2]: From Hestia Cleanup" {
  212. run v-delete-user $userbk
  213. assert_success
  214. refute_output
  215. }
  216. @test "Restore[3]: Hestia (zstd) archive for a non-existing user" {
  217. if [ -d "$HOMEDIR/$userbk" ]; then
  218. run v-delete-user $userbk
  219. assert_success
  220. refute_output
  221. fi
  222. mkdir -p /backup
  223. local archive_name="hestia131.2020-12-12"
  224. run wget --quiet --tries=3 --timeout=15 --read-timeout=15 --waitretry=3 --no-dns-cache "https://hestiacp.com/testing/data/${archive_name}.tar" -O "/backup/${archive_name}.tar"
  225. assert_success
  226. run v-restore-user $userbk "${archive_name}.tar"
  227. assert_success
  228. rm "/backup/${archive_name}.tar"
  229. }
  230. @test "Restore[3]: From Hestia [WEB]" {
  231. local domain="test.hestia.com"
  232. validate_web_domain $userbk $domain 'Hello Hestia'
  233. }
  234. @test "Restore[3]: From Hestia [DNS]" {
  235. local domain="test.hestia.com"
  236. run v-list-dns-domain $userbk $domain
  237. assert_success
  238. run nslookup $domain 127.0.0.1
  239. assert_success
  240. }
  241. @test "Restore[3]: From Hestia [MAIL]" {
  242. local domain="test.hestia.com"
  243. run v-list-mail-domain $userbk $domain
  244. assert_success
  245. }
  246. @test "Restore[3]: From Hestia [MAIL-Account]" {
  247. local domain="test.hestia.com"
  248. run v-list-mail-account $userbk $domain testaccount
  249. assert_success
  250. }
  251. @test "Restore[3]: From Hestia [DB]" {
  252. run v-list-database $userbk "${userbk}_db"
  253. assert_success
  254. }
  255. @test "Restore[3]: From Hestia [CRON]" {
  256. run v-list-cron-job $userbk 1
  257. assert_success
  258. }
  259. @test "Restore[3]: From Hestia Cleanup" {
  260. run v-delete-user $userbk
  261. assert_success
  262. refute_output
  263. }
  264. @test "Restore[4]: Hestia (zstd) archive for a existing user" {
  265. if [ -d "$HOMEDIR/$userbk" ]; then
  266. run v-delete-user $userbk
  267. assert_success
  268. refute_output
  269. fi
  270. if [ ! -d "$HOMEDIR/$userbk" ]; then
  271. run v-add-user $userbk $userbk test@hestia.com
  272. assert_success
  273. fi
  274. mkdir -p /backup
  275. local archive_name="hestia131.2020-12-12"
  276. run wget --quiet --tries=3 --timeout=15 --read-timeout=15 --waitretry=3 --no-dns-cache "https://hestiacp.com/testing/data/${archive_name}.tar" -O "/backup/${archive_name}.tar"
  277. assert_success
  278. run v-restore-user $userbk "${archive_name}.tar"
  279. assert_success
  280. rm "/backup/${archive_name}.tar"
  281. }
  282. @test "Restore[4]: From Hestia [WEB]" {
  283. local domain="test.hestia.com"
  284. validate_web_domain $userbk $domain 'Hello Hestia'
  285. }
  286. @test "Restore[4]: From Hestia [DNS]" {
  287. local domain="test.hestia.com"
  288. run v-list-dns-domain $userbk $domain
  289. assert_success
  290. run nslookup $domain 127.0.0.1
  291. assert_success
  292. }
  293. @test "Restore[4]: From Hestia [MAIL]" {
  294. local domain="test.hestia.com"
  295. run v-list-mail-domain $userbk $domain
  296. assert_success
  297. }
  298. @test "Restore[4]: From Hestia [MAIL-Account]" {
  299. local domain="test.hestia.com"
  300. run v-list-mail-account $userbk $domain testaccount
  301. assert_success
  302. }
  303. @test "Restore[4]: From Hestia [DB]" {
  304. run v-list-database $userbk "${userbk}_db"
  305. assert_success
  306. }
  307. @test "Restore[4]: From Hestia [CRON]" {
  308. run v-list-cron-job $userbk 1
  309. assert_success
  310. }
  311. @test "Restore[4]: From Hestia Cleanup" {
  312. run v-delete-user $userbk
  313. assert_success
  314. refute_output
  315. }
  316. # Testing Vesta Backups
  317. @test "Restore[1]: Vesta archive for a non-existing user" {
  318. if [ -d "$HOMEDIR/$userbk" ]; then
  319. run v-delete-user $userbk
  320. assert_success
  321. refute_output
  322. fi
  323. mkdir -p /backup
  324. local archive_name="vesta09823.2018-10-18"
  325. run wget --quiet --tries=3 --timeout=15 --read-timeout=15 --waitretry=3 --no-dns-cache "https://hestiacp.com/testing/data/${archive_name}.tar" -O "/backup/${archive_name}.tar"
  326. assert_success
  327. run v-restore-user $userbk "${archive_name}.tar"
  328. assert_success
  329. rm "/backup/${archive_name}.tar"
  330. }
  331. @test "Restore[1]: From Vesta [WEB]" {
  332. local domain="vesta09823.tld"
  333. validate_web_domain $userbk $domain 'Hello Vesta'
  334. }
  335. @test "Restore[1]: From Vesta [DNS]" {
  336. local domain="vesta09823.tld"
  337. run v-list-dns-domain $userbk $domain
  338. assert_success
  339. run nslookup $domain 127.0.0.1
  340. assert_success
  341. }
  342. @test "Restore[1]: From Vesta [MAIL]" {
  343. local domain="vesta09823.tld"
  344. run v-list-mail-domain $userbk $domain
  345. assert_success
  346. }
  347. @test "Restore[1]: From Vesta [MAIL-Account]" {
  348. local domain="vesta09823.tld"
  349. run v-list-mail-account $userbk $domain testaccount
  350. assert_success
  351. }
  352. @test "Restore[1]: From Vesta [DB]" {
  353. run v-list-database $userbk "${userbk}_db"
  354. assert_success
  355. }
  356. @test "Restore[1]: From Vesta [CRON]" {
  357. run v-list-cron-job $userbk 1
  358. assert_success
  359. }
  360. @test "Restore[1]: From Vesta Cleanup" {
  361. run v-delete-user $userbk
  362. assert_success
  363. refute_output
  364. }
  365. @test "Restore[2]: Vesta archive over a existing user" {
  366. if [ -d "$HOMEDIR/$userbk" ]; then
  367. run v-delete-user $userbk
  368. assert_success
  369. refute_output
  370. fi
  371. if [ ! -d "$HOMEDIR/$userbk" ]; then
  372. run v-add-user $userbk $userbk test@hestia.com
  373. assert_success
  374. fi
  375. mkdir -p /backup
  376. local archive_name="vesta09823.2018-10-18"
  377. run wget --quiet --tries=3 --timeout=15 --read-timeout=15 --waitretry=3 --no-dns-cache "https://hestiacp.com/testing/data/${archive_name}.tar" -O "/backup/${archive_name}.tar"
  378. assert_success
  379. run v-restore-user $userbk "${archive_name}.tar"
  380. assert_success
  381. rm "/backup/${archive_name}.tar"
  382. }
  383. @test "Restore[2]: From Vesta [WEB]" {
  384. local domain="vesta09823.tld"
  385. validate_web_domain $userbk "${domain}" 'Hello Vesta'
  386. }
  387. @test "Restore[2]: From Vesta [DNS]" {
  388. local domain="vesta09823.tld"
  389. run v-list-dns-domain $userbk $domain
  390. assert_success
  391. run nslookup $domain 127.0.0.1
  392. assert_success
  393. }
  394. @test "Restore[2]: From Vesta [MAIL]" {
  395. local domain="vesta09823.tld"
  396. run v-list-mail-domain $userbk $domain
  397. assert_success
  398. }
  399. @test "Restore[2]: From Vesta [MAIL-Account]" {
  400. local domain="vesta09823.tld"
  401. run v-list-mail-account $userbk $domain testaccount
  402. assert_success
  403. }
  404. @test "Restore[2]: From Vesta [DB]" {
  405. run v-list-database $userbk "${userbk}_db"
  406. assert_success
  407. }
  408. @test "Restore[2]: From Vesta [CRON]" {
  409. run v-list-cron-job $userbk 1
  410. assert_success
  411. }
  412. @test "Restore[2]: From Vesta Cleanup" {
  413. run v-delete-user $userbk
  414. assert_success
  415. refute_output
  416. }