| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289 |
- #!/usr/bin/env bats
- if [ "${PATH#*/usr/local/hestia/bin*}" = "$PATH" ]; then
- . /etc/profile.d/hestia.sh
- fi
- load 'test_helper/bats-support/load'
- load 'test_helper/bats-assert/load'
- load 'test_helper/bats-file/load'
- function random() {
- head /dev/urandom | tr -dc 0-9 | head -c$1
- }
- function setup() {
- # echo "# Setup_file" > &3
- if [ $BATS_TEST_NUMBER = 1 ]; then
- echo 'user=test-5285' > /tmp/hestia-test-env.sh
- echo 'user2=test-5286' >> /tmp/hestia-test-env.sh
- echo 'userbk=testbk-5285' >> /tmp/hestia-test-env.sh
- echo 'userpass1=test-5285' >> /tmp/hestia-test-env.sh
- echo 'userpass2=t3st-p4ssw0rd' >> /tmp/hestia-test-env.sh
- echo 'HESTIA=/usr/local/hestia' >> /tmp/hestia-test-env.sh
- echo 'domain=test-5285.hestiacp.com' >> /tmp/hestia-test-env.sh
- echo 'domainuk=test-5285.hestiacp.com.uk' >> /tmp/hestia-test-env.sh
- echo 'rootdomain=testhestiacp.com' >> /tmp/hestia-test-env.sh
- echo 'subdomain=cdn.testhestiacp.com' >> /tmp/hestia-test-env.sh
- echo 'database=test-5285_database' >> /tmp/hestia-test-env.sh
- echo 'dbuser=test-5285_dbuser' >> /tmp/hestia-test-env.sh
- echo 'pguser=test5290' >> /tmp/hestia-test-env.sh
- echo 'pgdatabase=test5290_database' >> /tmp/hestia-test-env.sh
- echo 'pgdbuser=test5290_dbuser' >> /tmp/hestia-test-env.sh
- fi
- source /tmp/hestia-test-env.sh
- source $HESTIA/func/main.sh
- source $HESTIA/conf/hestia.conf
- source $HESTIA/func/ip.sh
- }
- function validate_web_domain() {
- local user=$1
- local domain=$2
- local webproof=$3
- local webpath=${4}
- refute [ -z "$user" ]
- refute [ -z "$domain" ]
- refute [ -z "$webproof" ]
- source $HESTIA/func/ip.sh
- run v-list-web-domain $user $domain
- assert_success
- USER_DATA=$HESTIA/data/users/$user
- local domain_ip=$(get_object_value 'web' 'DOMAIN' "$domain" '$IP')
- SSL=$(get_object_value 'web' 'DOMAIN' "$domain" '$SSL')
- domain_ip=$(get_real_ip "$domain_ip")
- if [ ! -z $webpath ]; then
- domain_docroot=$(get_object_value 'web' 'DOMAIN' "$domain" '$CUSTOM_DOCROOT')
- if [ -n "$domain_docroot" ] && [ -d "$domain_docroot" ]; then
- assert_file_exist "${domain_docroot}/${webpath}"
- else
- assert_file_exist "${HOMEDIR}/${user}/web/${domain}/public_html/${webpath}"
- fi
- fi
- # Test HTTP
- # Curl hates UTF domains so convert them to ascci.
- domain_idn=$(idn2 $domain)
- run curl --location --silent --show-error --insecure --resolve "${domain_idn}:80:${domain_ip}" "http://${domain_idn}/${webpath}"
- assert_success
- assert_output --partial "$webproof"
- # Test HTTPS
- if [ "$SSL" = "yes" ]; then
- run v-list-web-domain-ssl $user $domain
- assert_success
- run curl --location --silent --show-error --insecure --resolve "${domain_idn}:443:${domain_ip}" "https://${domain_idn}/${webpath}"
- assert_success
- assert_output --partial "$webproof"
- fi
- }
- function validate_headers_domain() {
- local user=$1
- local domain=$2
- local webproof=$3
- refute [ -z "$user" ]
- refute [ -z "$domain" ]
- refute [ -z "$webproof" ]
- source $HESTIA/func/ip.sh
- run v-list-web-domain $user $domain
- assert_success
- USER_DATA=$HESTIA/data/users/$user
- local domain_ip=$(get_object_value 'web' 'DOMAIN' "$domain" '$IP')
- SSL=$(get_object_value 'web' 'DOMAIN' "$domain" '$SSL')
- domain_ip=$(get_real_ip "$domain_ip")
- # Test HTTP with code redirect for some reasons due to 301 redirect it fails
- curl -i --resolve "${domain}:80:${domain_ip}" "http://${domain}"
- assert_success
- assert_output --partial "$webproof"
- }
- function validate_mail_domain() {
- local user=$1
- local domain=$2
- refute [ -z "$user" ]
- refute [ -z "$domain" ]
- run v-list-mail-domain $user $domain
- assert_success
- assert_dir_exist $HOMEDIR/$user/mail/$domain
- assert_dir_exist $HOMEDIR/$user/conf/mail/$domain
- assert_file_exist $HOMEDIR/$user/conf/mail/$domain/aliases
- if [ -n "$ANTISPAM_SYSTEM" ]; then
- assert_file_exist $HOMEDIR/$user/conf/mail/$domain/antispam
- fi
- if [ -n "$ANTIVIRUS_SYSTEM" ]; then
- assert_file_exist $HOMEDIR/$user/conf/mail/$domain/antivirus
- fi
- assert_file_exist $HOMEDIR/$user/conf/mail/$domain/fwd_only
- assert_file_exist $HOMEDIR/$user/conf/mail/$domain/ip
- assert_file_exist $HOMEDIR/$user/conf/mail/$domain/passwd
- }
- function validate_webmail_domain() {
- local user=$1
- local domain=$2
- local webproof=$3
- local webpath=${4}
- refute [ -z "$user" ]
- refute [ -z "$domain" ]
- refute [ -z "$webproof" ]
- source $HESTIA/func/ip.sh
- USER_DATA=$HESTIA/data/users/$user
- local domain_ip=$(get_object_value 'web' 'DOMAIN' "$domain" '$IP')
- SSL=$(get_object_value 'mail' 'DOMAIN' "$domain" '$SSL')
- domain_ip=$(get_real_ip "$domain_ip")
- if [ ! -z "$webpath" ]; then
- assert_file_exist /var/lib/roundcube/$webpath
- fi
- if [ "$SSL" = "no" ]; then
- # Test HTTP
- run curl --location --silent --show-error --insecure --resolve "webmail.${domain}:80:${domain_ip}" "http://webmail.${domain}/${webpath}"
- assert_success
- assert_output --partial "$webproof"
- # Test HTTP
- run curl --location --silent --show-error --insecure --resolve "mail.${domain}:80:${domain_ip}" "http://mail.${domain}/${webpath}"
- assert_success
- assert_output --partial "$webproof"
- fi
- # Test HTTPS
- if [ "$SSL" = "yes" ]; then
- # Test HTTP with 301 redirect for some reasons due to 301 redirect it fails
- run curl --silent --show-error --insecure --resolve "webmail.${domain}:80:${domain_ip}" "http://webmail.${domain}/${webpath}"
- assert_success
- assert_output --partial "301 Moved Permanently"
- # Test HTTP with 301 redirect for some reasons due to 301 redirect it fails
- run curl --silent --show-error --insecure --resolve "mail.${domain}:80:${domain_ip}" "http://mail.${domain}/${webpath}"
- assert_success
- assert_output --partial "301 Moved Permanently"
- run v-list-mail-domain-ssl $user $domain
- assert_success
- run curl --location --silent --show-error --insecure --resolve "webmail.${domain}:443:${domain_ip}" "https://webmail.${domain}/${webpath}"
- assert_success
- assert_output --partial "$webproof"
- run curl --location --silent --show-error --insecure --resolve "mail.${domain}:443:${domain_ip}" "https://mail.${domain}/${webpath}"
- assert_success
- assert_output --partial "$webproof"
- fi
- }
- function validate_database(){
- local type=$1
- local database=$2
- local dbuser=$3
- local password=$4
- host_str=$(grep "HOST='localhost'" $HESTIA/conf/$type.conf)
- parse_object_kv_list "$host_str"
- if [ -z $PORT ]; then PORT=3306; fi
- refute [ -z "$HOST" ]
- refute [ -z "$PORT" ]
- refute [ -z "$database" ]
- refute [ -z "$dbuser" ]
- refute [ -z "$password" ]
- if [ "$type" = "mysql" ]; then
- # Create an connection to verify correct username / password has been set correctly
- tmpfile=$(mktemp /tmp/mysql.XXXXXX)
- echo "[client]">$tmpfile
- echo "host='$HOST'" >> $tmpfile
- echo "user='$dbuser'" >> $tmpfile
- echo "password='$password'" >> $tmpfile
- echo "port='$PORT'" >> $tmpfile
- chmod 600 $tmpfile
- sql_tmp=$(mktemp /tmp/query.XXXXXX)
- echo "show databases;" > $sql_tmp
- run mysql --defaults-file=$tmpfile < "$sql_tmp"
- assert_success
- assert_output --partial "$database"
- rm -f "$sql_tmp"
- rm -f "$tmpfile"
- else
- echo "*:*:*:$dbuser:$password" > /root/.pgpass
- chmod 600 /root/.pgpass
- run export PGPASSWORD="$password" | psql -h $HOST -U "$dbuser" -p $PORT -d "$database" --no-password -c "\l"
- assert_success
- rm /root/.pgpass
- fi
- }
- function check_ip_banned(){
- local ip=$1
- local chain=$2
- run grep "IP='$ip' CHAIN='$chain'" $HESTIA/data/firewall/banlist.conf
- assert_success
- assert_output --partial "$ip"
- }
- function check_ip_not_banned(){
- local ip=$1
- local chain=$2
- run grep "IP='$ip' CHAIN='$chain'" $HESTIA/data/firewall/banlist.conf
- assert_failure E_ARGS
- refute_output
- }
- #----------------------------------------------------------#
- # IP #
- #----------------------------------------------------------#
- @test "RDNS: Check reverse Dns validation" {
- # 1. PTR record for a IP should return a hostname(reverse) which in turn must resolve to the same IP addr(forward). (Full circle)
- # `-> not implemented in `is_ip_rdns_valid` yet and also not tested here
- # 2. Reject rPTR records that match generic dynamic IP pool patterns
- local ip="54.200.1.22"
- local rdns="ec2-54-200-1-22.us-west-2.compute.amazonaws.com"
- run is_ip_rdns_valid "$ip"
- assert_failure
- refute_output
- local rdns="ec2.54.200.1.22.us-west-2.compute.amazonaws.com"
- run is_ip_rdns_valid "$ip"
- assert_failure
- refute_output
- local rdns="ec2-22-1-200-54.us-west-2.compute.amazonaws.com"
- run is_ip_rdns_valid "$ip"
- assert_failure
- refute_output
- local rdns="ec2.22.1.200.54.us-west-2.compute.amazonaws.com"
- run is_ip_rdns_valid "$ip"
- assert_failure
- refute_output
- local rdns="ec2-200-54-1-22.us-west-2.compute.amazonaws.com"
- run is_ip_rdns_valid "$ip"
- assert_failure
- refute_output
- local rdns="panel-22.mydomain.tld"
- run is_ip_rdns_valid "$ip"
- assert_success
- assert_output "$rdns"
- local rdns="mail.mydomain.tld"
- run is_ip_rdns_valid "$ip"
- assert_success
- assert_output "$rdns"
- local rdns="mydomain.tld"
- run is_ip_rdns_valid "$ip"
- assert_success
- assert_output "$rdns"
- }
- #----------------------------------------------------------#
- # User #
- #----------------------------------------------------------#
- @test "User: Add new user" {
- run v-add-user $user $user $user@hestiacp.com default "Super Test"
- assert_success
- refute_output
- }
- @test "User: Add new user Failed 1" {
- run v-add-user 'jäap' $user $user@hestiacp2.com default "Super Test"
- assert_failure $E_INVALID
- assert_output --partial 'Error: invalid user format'
- }
- @test "User: Add new user Failed 2" {
- run v-add-user 'ëaap' $user $user@hestiacp2.com default "Super Test"
- assert_failure $E_INVALID
- assert_output --partial 'Error: invalid user format'
- }
- @test "User: Add new user Failed 3" {
- run v-add-user 'jaaẞ' $user $user@hestiacp2.com default "Super Test"
- assert_failure $E_INVALID
- assert_output --partial 'Error: invalid user format'
- }
- @test "User: Add new user Failed 4" {
- run v-add-user '1234' $user $user@hestiacp2.com default "Super Test"
- assert_failure $E_INVALID
- assert_output --partial 'Error: invalid user format'
- }
- @test "User: Add new user Failed 5" {
- run v-add-user '1aap' $user $user@hestiacp2.com default "Super Test"
- assert_failure $E_INVALID
- assert_output --partial 'Error: invalid user format'
- }
- @test "User: Add new user Failed 6" {
- run v-add-user 'ib_Buffer' $user $user@hestiacp2.com default "Super Test"
- assert_failure $E_INVALID
- assert_output --partial 'Error: The user name'
- }
- @test "User: Add new user Failed 7" {
- run v-add-user 'hello.com' $user $user@hestiacp2.com default "Super Test"
- assert_failure $E_INVALID
- assert_output --partial 'Error: invalid user format'
- }
- @test "User: Add new user Success 1" {
- run v-add-user 'jaap01' $user $user@hestiacp2.com default "Super Test"
- assert_success
- refute_output
- }
- @test "User: Add new user Success 1 Delete" {
- run v-delete-user jaap01
- assert_success
- refute_output
- }
- @test "User: Add new user Success 2" {
- run v-add-user 'buffer' $user $user@hestiacp2.com default "Super Test"
- assert_success
- refute_output
- }
- @test "User: Add new user Success 2 Delete" {
- run v-delete-user buffer
- assert_success
- refute_output
- }
- @test "User: Change user password" {
- run v-change-user-password "$user" "$userpass2"
- assert_success
- refute_output
- }
- @test "User: Change user email" {
- run v-change-user-contact "$user" tester@hestiacp.com
- assert_success
- refute_output
- }
- @test "User: Change user contact invalid email " {
- run v-change-user-contact "$user" testerhestiacp.com
- assert_failure $E_INVALID
- assert_output --partial 'Error: invalid email format'
- }
- @test "User: Change user name" {
- run v-change-user-name "$user" "New name"
- assert_success
- refute_output
- }
- @test "User: Change user shell" {
- run v-change-user-shell $user bash
- assert_success
- refute_output
- run stat -c '%U' /home/$user
- assert_output --partial "$user"
- mount_file=$(systemd-escape -p --suffix=mount "/srv/jail/$user/home")
- assert_file_not_exist /etc/systemd/system/$mount_file
- }
- @test "User: Change user invalid shell" {
- run v-change-user-shell $user bashinvalid
- assert_failure $E_INVALID
- assert_output --partial 'shell bashinvalid is not valid'
- }
- @test "User: Change user nologin" {
- run v-change-user-shell $user nologin
- assert_success
- refute_output
- run stat -c '%U' /home/$user
- assert_output --partial 'root'
- mount_file=$(systemd-escape -p --suffix=mount "/srv/jail/$user/home/$user")
- assert_file_exist /etc/systemd/system/$mount_file
- }
- @test "User: Change user bash with bubblewrap jail" {
- run v-change-user-shell $user jailbash
- assert_success
- refute_output
- run stat -c '%U' /home/$user
- assert_output --partial "$user"
- mount_file=$(systemd-escape -p --suffix=mount "/srv/jail/$user/home")
- assert_file_not_exist /etc/systemd/system/$mount_file
- }
- @test "User: Change user default ns" {
- run v-change-user-ns $user ns0.com ns1.com ns2.com ns3.com
- assert_success
- refute_output
- run v-list-user-ns "$user" plain
- assert_success
- assert_output --partial 'ns0.com'
- }
- @test "User: Change user language" {
- run v-change-user-language $user "nl"
- assert_success
- refute_output
- }
- @test "User: Change user language (Does not exist)" {
- run v-change-user-language $user "aa"
- assert_failure $E_NOTEXIST
- }
- @test "User: Change user sort order" {
- run v-change-user-sort-order $user "name"
- assert_success
- refute_output
- }
- @test "User: Change user theme" {
- run v-change-user-theme $user "flat"
- assert_success
- refute_output
- }
- @test "User: Change user theme (Does not exist)" {
- run v-change-user-theme $user "aa"
- assert_failure $E_NOTEXIST
- }
- @test "User: Change user login ip" {
- run v-change-user-config-value $user "LOGIN_USE_IPLIST" "1.2.3.4,1.2.3.5"
- assert_success
- refute_output
- }
- @test "User: Change user login ip (Failed)" {
- run v-change-user-config-value $user "LOGIN_USE_IPLIST" "'; echo 'jaap'; echo '"
- assert_failure $E_INVALID
- }
- @test "User: Add user notification" {
- run v-add-user-notification $user "Test message" "Message"
- assert_success
- refute_output
- }
- @test "User: Acknowledge user notification" {
- run v-acknowledge-user-notification $user 1
- assert_success
- refute_output
- }
- @test "User: List user notification" {
- run v-list-user-notifications $user csv
- assert_success
- assert_output --partial "1,\"Test message\",\"Message\",yes"
- }
- @test "User: Delete user notification" {
- run v-delete-user-notification $user 1
- assert_success
- refute_output
- }
- @test "User: Get User salt ipv4" {
- run v-get-user-salt $user 192.168.2.10
- assert_success
- }
- @test "User: Get User salt ipv4 invalid" {
- run v-get-user-salt $user 192.168.992.10
- assert_failure $E_INVALID
- }
- @test "User: Get User salt ipv6" {
- run v-get-user-salt $user "21DA:D3:0:2F3B:2AA:FF:FE28:9C5A"
- assert_success
- }
- @test "User: Get User salt ipv6 not exists" {
- run v-get-user-salt "notexists" "21DA:D3:0:2F3B:2AA:FF:FE28:9C5B"
- assert_failure $E_PASSWORD
- }
- @test "User: Get User salt ipv6 invalid" {
- run v-get-user-salt "$user" "21DA:D3:0:2F3B:ZZZ:FF:FE28:9C5B"
- assert_failure $E_INVALID
- }
- @test "User: Check user password" {
- run v-check-user-password $user "$userpass2" 192.168.2.10 'no'
- assert_success
- }
- @test "User: Check user password Incorrect password" {
- run v-check-user-password $user "$userpass1" 192.168.2.10 'no'
- assert_failure $E_PASSWORD
- }
- @test "User: Check user hash ipv4" {
- hash=$(v-check-user-password $user "$userpass2" 192.168.2.10 'yes');
- run v-check-user-hash $user $hash 192.168.2.10
- assert_success
- }
- @test "User: Check user hash ipv6" {
- hash=$(v-check-user-password $user "$userpass2" 21DA:D3:0:2F3B:2AA:FF:FE28:9C5A 'yes');
- run v-check-user-hash $user $hash 21DA:D3:0:2F3B:2AA:FF:FE28:9C5A
- assert_success
- }
- @test "User: Check user hash ipv6 incorrect" {
- run v-check-user-hash $user 'jafawefaweijawe' 21DA:D3:0:2F3B:2AA:FF:FE28:9C5A
- assert_failure $E_PASSWORD
- }
- #----------------------------------------------------------#
- # Cron #
- #----------------------------------------------------------#
- @test "Cron: Add cron job" {
- run v-add-cron-job $user 1 1 1 1 1 echo
- assert_success
- refute_output
- }
- @test "Cron: Suspend cron job" {
- run v-suspend-cron-job $user 1
- assert_success
- refute_output
- }
- @test "Cron: Unsuspend cron job" {
- run v-unsuspend-cron-job $user 1
- assert_success
- refute_output
- }
- @test "Cron: Delete cron job" {
- run v-delete-cron-job $user 1
- assert_success
- refute_output
- }
- @test "Cron: Add cron job (duplicate)" {
- run v-add-cron-job $user 1 1 1 1 1 echo 1
- assert_success
- refute_output
- run v-add-cron-job $user 1 1 1 1 1 echo 1
- assert_failure $E_EXISTS
- assert_output --partial 'JOB=1 already exists'
- }
- @test "Cron: Second cron job" {
- run v-add-cron-job $user 2 2 2 2 2 echo 2
- assert_success
- refute_output
- }
- @test "Cron: Two cron jobs must be listed" {
- run v-list-cron-jobs $user csv
- assert_success
- assert_line --partial '1,1,1,1,1,"echo",no'
- assert_line --partial '2,2,2,2,2,"echo",no'
- }
- @test "Cron: rebuild" {
- run v-rebuild-cron-jobs $user
- assert_success
- refute_output
- }
- #----------------------------------------------------------#
- # IP #
- #----------------------------------------------------------#
- @test "Ip: Add new ip on first interface" {
- interface=$(v-list-sys-interfaces plain | head -n 1)
- run ip link show dev $interface
- assert_success
- local a2_rpaf="/etc/$WEB_SYSTEM/mods-enabled/rpaf.conf"
- local a2_remoteip="/etc/$WEB_SYSTEM/mods-enabled/remoteip.conf"
- # Save initial state
- echo "interface=${interface}" >> /tmp/hestia-test-env.sh
- [ -f "$a2_rpaf" ] && file_hash1=$(cat $a2_rpaf |md5sum |cut -d" " -f1) && echo "a2_rpaf_hash='${file_hash1}'" >> /tmp/hestia-test-env.sh
- [ -f "$a2_remoteip" ] && file_hash2=$(cat $a2_remoteip |md5sum |cut -d" " -f1) && echo "a2_remoteip_hash='${file_hash2}'" >> /tmp/hestia-test-env.sh
- local ip="198.18.0.12"
- run v-add-sys-ip $ip 255.255.255.255 $interface $user
- assert_success
- refute_output
- assert_file_exist /etc/$WEB_SYSTEM/conf.d/$ip.conf
- assert_file_exist $HESTIA/data/ips/$ip
- assert_file_contains $HESTIA/data/ips/$ip "OWNER='$user'"
- assert_file_contains $HESTIA/data/ips/$ip "INTERFACE='$interface'"
- if [ -n "$PROXY_SYSTEM" ]; then
- assert_file_exist /etc/$PROXY_SYSTEM/conf.d/$ip.conf
- [ -f "$a2_rpaf" ] && assert_file_contains "$a2_rpaf" "RPAFproxy_ips.*$ip\b"
- [ -f "$a2_remoteip" ] && assert_file_contains "$a2_remoteip" "RemoteIPInternalProxy $ip\$"
- fi
- }
- @test "Ip: [Ubuntu] Netplan file updated" {
- # Skip if Debian
- if [ $(lsb_release -s -i) != "Ubuntu" ]; then
- skip
- fi
- # 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!
- assert_file_exist /etc/netplan/60-hestia.yaml
- # also check if file contains the newly added ip
- assert_file_contains /etc/netplan/60-hestia.yaml "$ip"
- }
- @test "Ip: [Debian] Netplan file updated" {
- # Skip with netplan
- if [ $(lsb_release -s -i) = "Ubuntu" ]; then
- skip
- fi
- assert_file_exist /etc/network/interfaces
- assert_file_contains /etc/network/interfaces "$ip"
- }
- @test "Ip: Add ip (duplicate)" {
- run v-add-sys-ip 198.18.0.12 255.255.255.255 $interface $user
- assert_failure $E_EXISTS
- }
- @test "Ip: Add extra ip" {
- local ip="198.18.0.121"
- run v-add-sys-ip $ip 255.255.255.255 $interface $user
- assert_success
- refute_output
- assert_file_exist /etc/$WEB_SYSTEM/conf.d/$ip.conf
- assert_file_exist $HESTIA/data/ips/$ip
- assert_file_contains $HESTIA/data/ips/$ip "OWNER='$user'"
- assert_file_contains $HESTIA/data/ips/$ip "INTERFACE='$interface'"
- if [ -n "$PROXY_SYSTEM" ]; then
- assert_file_exist /etc/$PROXY_SYSTEM/conf.d/$ip.conf
- local a2_rpaf="/etc/$WEB_SYSTEM/mods-enabled/rpaf.conf"
- [ -f "$a2_rpaf" ] && assert_file_contains "$a2_rpaf" "RPAFproxy_ips.*$ip\b"
- local a2_remoteip="/etc/$WEB_SYSTEM/mods-enabled/remoteip.conf"
- [ -f "$a2_remoteip" ] && assert_file_contains "$a2_remoteip" "RemoteIPInternalProxy $ip\$"
- fi
- }
- @test "Ip: Delete ip 198.18.0.12" {
- local ip="198.18.0.12"
- run v-delete-sys-ip $ip
- assert_success
- refute_output
- assert_file_not_exist /etc/$WEB_SYSTEM/conf.d/$ip.conf
- assert_file_not_exist $HESTIA/data/ips/$ip
- }
- @test "Ip: [Ubuntu] Netplan file changed" {
- # Skip if Debian
- if [ $(lsb_release -s -i) != "Ubuntu" ]; then
- skip
- fi
- ip="198.18.0.121"
- assert_file_exist /etc/netplan/60-hestia.yaml
- assert_file_contains /etc/netplan/60-hestia.yaml "$ip"
- }
- @test "Ip: Delete ip 198.18.0.121" {
- ip="198.18.0.121"
- run v-delete-sys-ip $ip
- assert_success
- refute_output
- assert_file_not_exist /etc/$WEB_SYSTEM/conf.d/$ip.conf
- assert_file_not_exist $HESTIA/data/ips/$ip
- if [ -n "$PROXY_SYSTEM" ]; then
- assert_file_not_exist /etc/$PROXY_SYSTEM/conf.d/$ip.conf
- fi
- # remoteip and rpaf config hashes must match the initial one
- if [ ! -z "$a2_rpaf_hash" ]; then
- local a2_rpaf="/etc/$WEB_SYSTEM/mods-enabled/rpaf.conf"
- file_hash=$(cat $a2_rpaf |md5sum |cut -d" " -f1)
- assert_equal "$file_hash" "$a2_rpaf_hash"
- fi
- if [ ! -z "$a2_remoteip_hash" ]; then
- local a2_remoteip="/etc/$WEB_SYSTEM/mods-enabled/remoteip.conf"
- file_hash=$(cat $a2_remoteip |md5sum |cut -d" " -f1)
- assert_equal "$file_hash" "$a2_remoteip_hash"
- fi
- }
- @test "Ip: Add IP for rest of the test" {
- local ip="198.18.0.125"
- run v-add-sys-ip $ip 255.255.255.255 $interface $user
- assert_success
- refute_output
- assert_file_exist /etc/$WEB_SYSTEM/conf.d/$ip.conf
- assert_file_exist $HESTIA/data/ips/$ip
- assert_file_contains $HESTIA/data/ips/$ip "OWNER='$user'"
- assert_file_contains $HESTIA/data/ips/$ip "INTERFACE='$interface'"
- if [ -n "$PROXY_SYSTEM" ]; then
- assert_file_exist /etc/$PROXY_SYSTEM/conf.d/$ip.conf
- local a2_rpaf="/etc/$WEB_SYSTEM/mods-enabled/rpaf.conf"
- [ -f "$a2_rpaf" ] && assert_file_contains "$a2_rpaf" "RPAFproxy_ips.*$ip\b"
- local a2_remoteip="/etc/$WEB_SYSTEM/mods-enabled/remoteip.conf"
- [ -f "$a2_remoteip" ] && assert_file_contains "$a2_remoteip" "RemoteIPInternalProxy $ip\$"
- fi
- }
- #----------------------------------------------------------#
- # WEB #
- #----------------------------------------------------------#
- @test "WEB: Add web domain" {
- run v-add-web-domain $user $domain 198.18.0.125
- assert_success
- refute_output
- echo -e "<?php\necho 'Hestia Test:'.(4*3);" > $HOMEDIR/$user/web/$domain/public_html/php-test.php
- validate_web_domain $user $domain 'Hestia Test:12' 'php-test.php'
- rm $HOMEDIR/$user/web/$domain/public_html/php-test.php
- }
- @test "WEB: Add web domain (duplicate)" {
- run v-add-web-domain $user $domain 198.18.0.125
- assert_failure $E_EXISTS
- }
- @test "WEB: Add web domain alias" {
- run v-add-web-domain-alias $user $domain v3.$domain
- assert_success
- refute_output
- }
- @test "WEB: Add web domain alias (duplicate)" {
- run v-add-web-domain-alias $user $domain v3.$domain
- assert_failure $E_EXISTS
- }
- @test "WEB: Add web domain wildcard alias" {
- run v-add-web-domain-alias $user $domain "*.$domain"
- assert_success
- refute_output
- }
- @test "WEB: Delete web domain wildcard alias" {
- run v-delete-web-domain-alias $user $domain "*.$domain"
- assert_success
- refute_output
- }
- @test "WEB: Add web domain stats" {
- run v-add-web-domain-stats $user $domain awstats
- assert_success
- refute_output
- }
- @test "WEB: Add web domain stats user" {
- skip
- run v-add-web-domain-stats-user $user $domain test m3g4p4ssw0rd
- assert_success
- refute_output
- }
- @test "WEB: Suspend web domain" {
- run v-suspend-web-domain $user $domain
- assert_success
- refute_output
- echo -e "<?php\necho 'Hestia Test:'.(4*3);" > $HOMEDIR/$user/web/$domain/public_html/php-test.php
- validate_web_domain $user $domain 'This site is currently suspended'
- validate_web_domain $user $domain 'This site is currently suspended' 'php-test.php'
- rm $HOMEDIR/$user/web/$domain/public_html/php-test.php
- }
- @test "WEB: Unsuspend web domain" {
- run v-unsuspend-web-domain $user $domain
- assert_success
- refute_output
- echo -e "<?php\necho 'Hestia Test:'.(4*3);" > $HOMEDIR/$user/web/$domain/public_html/php-test.php
- validate_web_domain $user $domain 'Hestia Test:12' 'php-test.php'
- rm $HOMEDIR/$user/web/$domain/public_html/php-test.php
- }
- @test "WEB: Add redirect to www.domain.com" {
- run v-add-web-domain-redirect $user $domain www.$domain 301
- assert_success
- refute_output
- run validate_headers_domain $user $domain "301"
- }
- @test "WEB: Delete redirect to www.domain.com" {
- run v-delete-web-domain-redirect $user $domain
- assert_success
- refute_output
- }
- @test "WEB: Enable Fast CGI Cache" {
- if [ "$WEB_SYSTEM" != "nginx" ]; then
- skip "FastCGI cache is not supported"
- fi
- run v-add-fastcgi-cache $user $domain '1m' yes
- assert_success
- refute_output
- echo -e "<?php\necho 'Hestia Test:'.(4*3);" > $HOMEDIR/$user/web/$domain/public_html/php-test.php
- run validate_headers_domain $user $domain "Miss"
- run validate_headers_domain $user $domain "Hit"
- rm $HOMEDIR/$user/web/$domain/public_html/php-test.php
- }
- @test "WEB: Disable Fast CGI Cache" {
- if [ "$WEB_SYSTEM" != "nginx" ]; then
- skip "FastCGI cache is not supported"
- fi
- run v-delete-fastcgi-cache $user $domain yes
- assert_success
- refute_output
- }
- @test "WEB: Generate Self signed certificate" {
- ssl=$(v-generate-ssl-cert "$domain" "info@$domain" US CA "Orange County" HestiaCP IT "mail.$domain" | tail -n1 | awk '{print $2}')
- echo $ssl;
- mv $ssl/$domain.crt /tmp/$domain.crt
- mv $ssl/$domain.key /tmp/$domain.key
- }
- @test "WEB: Add ssl" {
- # Use self signed certificates during last test
- run v-add-web-domain-ssl $user $domain /tmp
- assert_success
- refute_output
- }
- @test "WEB: Rebuild web domain" {
- run v-rebuild-web-domains $user
- assert_success
- refute_output
- }
- @test "WEB: Use quick install app on web domain" {
- run v-quick-install-app install $user $domain Laravel
- assert_success
- refute_output
- }
- #----------------------------------------------------------#
- # IDN #
- #----------------------------------------------------------#
- @test "WEB: Add IDN domain UTF idn-tést.eu" {
- run v-add-web-domain $user idn-tést.eu 198.18.0.125
- assert_success
- refute_output
- assert_file_exist /home/$user/web/idn-tést.eu/public_html/index.html
- }
- @test "WEB: Add IDN domain ASCII idn-tést.eu" {
- # Expected to fail due to utf exists
- run v-add-web-domain $user "xn--idn-tst-fya.eu" 198.18.0.125
- assert_failure $E_EXISTS
- }
- @test "WEB: Generate Self signed certificate ASCII idn-tést.eu" {
- 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"
- assert_success
- }
- @test "WEB: Delete IDN domain idn-tést.eu" {
- run v-delete-web-domain $user idn-tést.eu
- assert_success
- refute_output
- }
- @test "WEB: Add IDN domain UTF bløst.рф" {
- run v-add-web-domain $user bløst.рф 198.18.0.125
- assert_success
- refute_output
- }
- @test "WEB: Generate Self signed certificate ASCII bløst.рф" {
- 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"
- assert_success
- }
- @test "WEB: Delete IDN domain bløst.рф" {
- run v-delete-web-domain $user bløst.рф
- assert_success
- refute_output
- }
- #----------------------------------------------------------#
- # MULTIPHP #
- #----------------------------------------------------------#
- @test "Multiphp: Default php Backend version" {
- def_phpver=$(multiphp_default_version)
- multi_domain="multiphp.${domain}"
- run v-add-web-domain $user $multi_domain 198.18.0.125
- assert_success
- refute_output
- echo -e "<?php\necho PHP_MAJOR_VERSION.'.'.PHP_MINOR_VERSION;" > "$HOMEDIR/$user/web/$multi_domain/public_html/php-test.php"
- validate_web_domain $user $multi_domain "$def_phpver" 'php-test.php'
- rm "$HOMEDIR/$user/web/$multi_domain/public_html/php-test.php"
- }
- @test "Multiphp: Change backend version - PHP v5.6" {
- test_phpver='5.6'
- multi_domain="multiphp.${domain}"
- if [ ! -d "/etc/php/${test_phpver}/fpm/pool.d/" ]; then
- skip "PHP ${test_phpver} not installed"
- fi
- run v-change-web-domain-backend-tpl $user $multi_domain 'PHP-5_6' 'yes'
- assert_success
- refute_output
- # Changing web backend will create a php-fpm pool config in the corresponding php folder
- assert_file_exist "/etc/php/${test_phpver}/fpm/pool.d/${multi_domain}.conf"
- # A single php-fpm pool config file must be present
- num_fpm_config_files="$(find -L /etc/php/ -name "${multi_domain}.conf" | wc -l)"
- assert_equal "$num_fpm_config_files" '1'
- echo -e "<?php\necho 'hestia-multiphptest:'.PHP_MAJOR_VERSION.'.'.PHP_MINOR_VERSION;" > "$HOMEDIR/$user/web/$multi_domain/public_html/php-test.php"
- validate_web_domain $user $multi_domain "hestia-multiphptest:$test_phpver" 'php-test.php'
- rm "$HOMEDIR/$user/web/$multi_domain/public_html/php-test.php"
- }
- @test "Multiphp: Change backend version - PHP v7.0" {
- test_phpver='7.0'
- multi_domain="multiphp.${domain}"
- if [ ! -d "/etc/php/${test_phpver}/fpm/pool.d/" ]; then
- skip "PHP ${test_phpver} not installed"
- fi
- run v-change-web-domain-backend-tpl $user $multi_domain 'PHP-7_0' 'yes'
- assert_success
- refute_output
- # Changing web backend will create a php-fpm pool config in the corresponding php folder
- assert_file_exist "/etc/php/${test_phpver}/fpm/pool.d/${multi_domain}.conf"
- # A single php-fpm pool config file must be present
- num_fpm_config_files="$(find -L /etc/php/ -name "${multi_domain}.conf" | wc -l)"
- assert_equal "$num_fpm_config_files" '1'
- echo -e "<?php\necho 'hestia-multiphptest:'.PHP_MAJOR_VERSION.'.'.PHP_MINOR_VERSION;" > "$HOMEDIR/$user/web/$multi_domain/public_html/php-test.php"
- validate_web_domain $user $multi_domain "hestia-multiphptest:$test_phpver" 'php-test.php'
- rm "$HOMEDIR/$user/web/$multi_domain/public_html/php-test.php"
- }
- @test "Multiphp: Change backend version - PHP v7.1" {
- test_phpver='7.1'
- multi_domain="multiphp.${domain}"
- if [ ! -d "/etc/php/${test_phpver}/fpm/pool.d/" ]; then
- skip "PHP ${test_phpver} not installed"
- fi
- run v-change-web-domain-backend-tpl $user $multi_domain 'PHP-7_1' 'yes'
- assert_success
- refute_output
- # Changing web backend will create a php-fpm pool config in the corresponding php folder
- assert_file_exist "/etc/php/${test_phpver}/fpm/pool.d/${multi_domain}.conf"
- # A single php-fpm pool config file must be present
- num_fpm_config_files="$(find -L /etc/php/ -name "${multi_domain}.conf" | wc -l)"
- assert_equal "$num_fpm_config_files" '1'
- echo -e "<?php\necho 'hestia-multiphptest:'.PHP_MAJOR_VERSION.'.'.PHP_MINOR_VERSION;" > "$HOMEDIR/$user/web/$multi_domain/public_html/php-test.php"
- validate_web_domain $user $multi_domain "hestia-multiphptest:$test_phpver" 'php-test.php'
- rm "$HOMEDIR/$user/web/$multi_domain/public_html/php-test.php"
- }
- @test "Multiphp: Change backend version - PHP v7.2" {
- test_phpver='7.2'
- multi_domain="multiphp.${domain}"
- if [ ! -d "/etc/php/${test_phpver}/fpm/pool.d/" ]; then
- skip "PHP ${test_phpver} not installed"
- fi
- run v-change-web-domain-backend-tpl $user $multi_domain 'PHP-7_2' 'yes'
- assert_success
- refute_output
- # Changing web backend will create a php-fpm pool config in the corresponding php folder
- assert_file_exist "/etc/php/${test_phpver}/fpm/pool.d/${multi_domain}.conf"
- # A single php-fpm pool config file must be present
- num_fpm_config_files="$(find -L /etc/php/ -name "${multi_domain}.conf" | wc -l)"
- assert_equal "$num_fpm_config_files" '1'
- echo -e "<?php\necho 'hestia-multiphptest:'.PHP_MAJOR_VERSION.'.'.PHP_MINOR_VERSION;" > "$HOMEDIR/$user/web/$multi_domain/public_html/php-test.php"
- validate_web_domain $user $multi_domain "hestia-multiphptest:$test_phpver" 'php-test.php'
- rm "$HOMEDIR/$user/web/$multi_domain/public_html/php-test.php"
- }
- @test "Multiphp: Change backend version - PHP v7.3" {
- test_phpver='7.3'
- multi_domain="multiphp.${domain}"
- if [ ! -d "/etc/php/${test_phpver}/fpm/pool.d/" ]; then
- skip "PHP ${test_phpver} not installed"
- fi
- run v-change-web-domain-backend-tpl $user $multi_domain 'PHP-7_3' 'yes'
- assert_success
- refute_output
- # Changing web backend will create a php-fpm pool config in the corresponding php folder
- assert_file_exist "/etc/php/${test_phpver}/fpm/pool.d/${multi_domain}.conf"
- # A single php-fpm pool config file must be present
- num_fpm_config_files="$(find -L /etc/php/ -name "${multi_domain}.conf" | wc -l)"
- assert_equal "$num_fpm_config_files" '1'
- echo -e "<?php\necho 'hestia-multiphptest:'.PHP_MAJOR_VERSION.'.'.PHP_MINOR_VERSION;" > "$HOMEDIR/$user/web/$multi_domain/public_html/php-test.php"
- validate_web_domain $user $multi_domain "hestia-multiphptest:$test_phpver" 'php-test.php'
- rm "$HOMEDIR/$user/web/$multi_domain/public_html/php-test.php"
- }
- @test "Multiphp: Change backend version - PHP v7.4" {
- test_phpver='7.4'
- multi_domain="multiphp.${domain}"
- if [ ! -d "/etc/php/${test_phpver}/fpm/pool.d/" ]; then
- skip "PHP ${test_phpver} not installed"
- fi
- run v-change-web-domain-backend-tpl $user $multi_domain 'PHP-7_4' 'yes'
- assert_success
- refute_output
- # Changing web backend will create a php-fpm pool config in the corresponding php folder
- assert_file_exist "/etc/php/${test_phpver}/fpm/pool.d/${multi_domain}.conf"
- # A single php-fpm pool config file must be present
- num_fpm_config_files="$(find -L /etc/php/ -name "${multi_domain}.conf" | wc -l)"
- assert_equal "$num_fpm_config_files" '1'
- echo -e "<?php\necho 'hestia-multiphptest:'.PHP_MAJOR_VERSION.'.'.PHP_MINOR_VERSION;" > "$HOMEDIR/$user/web/$multi_domain/public_html/php-test.php"
- validate_web_domain $user $multi_domain "hestia-multiphptest:$test_phpver" 'php-test.php'
- rm "$HOMEDIR/$user/web/$multi_domain/public_html/php-test.php"
- }
- @test "Multiphp: Change backend version - PHP v8.0" {
- test_phpver='8.0'
- multi_domain="multiphp.${domain}"
- if [ ! -d "/etc/php/${test_phpver}/fpm/pool.d/" ]; then
- skip "PHP ${test_phpver} not installed"
- fi
- run v-change-web-domain-backend-tpl $user $multi_domain 'PHP-8_0' 'yes'
- assert_success
- refute_output
- # Changing web backend will create a php-fpm pool config in the corresponding php folder
- assert_file_exist "/etc/php/${test_phpver}/fpm/pool.d/${multi_domain}.conf"
- # A single php-fpm pool config file must be present
- num_fpm_config_files="$(find -L /etc/php/ -name "${multi_domain}.conf" | wc -l)"
- assert_equal "$num_fpm_config_files" '1'
- echo -e "<?php\necho 'hestia-multiphptest:'.PHP_MAJOR_VERSION.'.'.PHP_MINOR_VERSION;" > "$HOMEDIR/$user/web/$multi_domain/public_html/php-test.php"
- validate_web_domain $user $multi_domain "hestia-multiphptest:$test_phpver" 'php-test.php'
- rm $HOMEDIR/$user/web/$multi_domain/public_html/php-test.php
- }
- @test "Multiphp: Change backend version - PHP v8.1" {
- test_phpver='8.1'
- multi_domain="multiphp.${domain}"
- if [ ! -d "/etc/php/${test_phpver}/fpm/pool.d/" ]; then
- skip "PHP ${test_phpver} not installed"
- fi
- run v-change-web-domain-backend-tpl $user $multi_domain 'PHP-8_1' 'yes'
- assert_success
- refute_output
- # Changing web backend will create a php-fpm pool config in the corresponding php folder
- assert_file_exist "/etc/php/${test_phpver}/fpm/pool.d/${multi_domain}.conf"
- # A single php-fpm pool config file must be present
- num_fpm_config_files="$(find -L /etc/php/ -name "${multi_domain}.conf" | wc -l)"
- assert_equal "$num_fpm_config_files" '1'
- echo -e "<?php\necho 'hestia-multiphptest:'.PHP_MAJOR_VERSION.'.'.PHP_MINOR_VERSION;" > "$HOMEDIR/$user/web/$multi_domain/public_html/php-test.php"
- validate_web_domain $user $multi_domain "hestia-multiphptest:$test_phpver" 'php-test.php'
- rm $HOMEDIR/$user/web/$multi_domain/public_html/php-test.php
- }
- @test "Multiphp: Change backend version - PHP v8.2" {
- test_phpver='8.2'
- multi_domain="multiphp.${domain}"
- if [ ! -d "/etc/php/${test_phpver}/fpm/pool.d/" ]; then
- skip "PHP ${test_phpver} not installed"
- fi
- run v-change-web-domain-backend-tpl $user $multi_domain 'PHP-8_2' 'yes'
- assert_success
- refute_output
- # Changing web backend will create a php-fpm pool config in the corresponding php folder
- assert_file_exist "/etc/php/${test_phpver}/fpm/pool.d/${multi_domain}.conf"
- # A single php-fpm pool config file must be present
- num_fpm_config_files="$(find -L /etc/php/ -name "${multi_domain}.conf" | wc -l)"
- assert_equal "$num_fpm_config_files" '1'
- echo -e "<?php\necho 'hestia-multiphptest:'.PHP_MAJOR_VERSION.'.'.PHP_MINOR_VERSION;" > "$HOMEDIR/$user/web/$multi_domain/public_html/php-test.php"
- validate_web_domain $user $multi_domain "hestia-multiphptest:$test_phpver" 'php-test.php'
- rm $HOMEDIR/$user/web/$multi_domain/public_html/php-test.php
- }
- @test "Multiphp: Cleanup" {
- multi_domain="multiphp.${domain}"
- run v-delete-web-domain $user $multi_domain 'yes'
- assert_success
- refute_output
- # No php-fpm pool config file must be present
- num_fpm_config_files="$(find -L /etc/php/ -name "${multi_domain}.conf" | wc -l)"
- assert_equal "$num_fpm_config_files" '0'
- }
- #----------------------------------------------------------#
- # CUSTOM DOCROOT #
- #----------------------------------------------------------#
- @test "Docroot: Self Subfolder" {
- docroot1_domain="docroot1.${domain}"
- run v-add-web-domain $user $docroot1_domain 198.18.0.125
- assert_success
- refute_output
- run v-add-fs-directory $user "$HOMEDIR/$user/web/$docroot1_domain/public_html/public/"
- assert_success
- refute_output
- run v-change-web-domain-docroot $user "$docroot1_domain" "$docroot1_domain" "/public"
- assert_success
- refute_output
- echo -e '<?php\necho "self-sub-".$_SERVER["HTTP_HOST"];' > "$HOMEDIR/$user/web/$docroot1_domain/public_html/public/php-test.php"
- validate_web_domain $user $docroot1_domain "self-sub-${docroot1_domain}" 'php-test.php'
- rm "$HOMEDIR/$user/web/$docroot1_domain/public_html/public/php-test.php"
- }
- @test "Docroot: Other domain subfolder" {
- docroot1_domain="docroot1.${domain}"
- docroot2_domain="docroot2.${domain}"
- run v-add-web-domain $user $docroot2_domain 198.18.0.125
- assert_success
- refute_output
- run v-add-fs-directory $user "$HOMEDIR/$user/web/$docroot2_domain/public_html/public/"
- assert_success
- refute_output
- run v-change-web-domain-docroot $user "$docroot1_domain" "$docroot2_domain" "/public"
- assert_success
- refute_output
- echo -e '<?php\necho "doc2-sub-".$_SERVER["HTTP_HOST"];' > "$HOMEDIR/$user/web/$docroot2_domain/public_html/public/php-test.php"
- validate_web_domain $user $docroot1_domain "doc2-sub-${docroot1_domain}" 'php-test.php'
- rm "$HOMEDIR/$user/web/$docroot2_domain/public_html/public/php-test.php"
- }
- @test "Docroot: Other domain root folder" {
- docroot1_domain="docroot1.${domain}"
- docroot2_domain="docroot2.${domain}"
- run v-change-web-domain-docroot $user "$docroot1_domain" "$docroot2_domain"
- assert_success
- refute_output
- echo -e '<?php\necho "doc2-root-".$_SERVER["HTTP_HOST"];' > "$HOMEDIR/$user/web/$docroot2_domain/public_html/php-test.php"
- validate_web_domain $user $docroot1_domain "doc2-root-${docroot1_domain}" 'php-test.php'
- rm "$HOMEDIR/$user/web/$docroot2_domain/public_html/php-test.php"
- }
- @test "Docroot: Reset" {
- docroot1_domain="docroot1.${domain}"
- run v-change-web-domain-docroot $user "$docroot1_domain" "default"
- assert_success
- refute_output
- echo -e '<?php\necho "doc1-root-".$_SERVER["HTTP_HOST"];' > "$HOMEDIR/$user/web/$docroot1_domain/public_html/php-test.php"
- validate_web_domain $user $docroot1_domain "doc1-root-${docroot1_domain}" 'php-test.php'
- rm "$HOMEDIR/$user/web/$docroot1_domain/public_html/php-test.php"
- }
- @test "Docroot: Cleanup" {
- docroot1_domain="docroot1.${domain}"
- docroot2_domain="docroot2.${domain}"
- run v-delete-web-domain $user $docroot1_domain
- assert_success
- refute_output
- run v-delete-web-domain $user $docroot2_domain
- assert_success
- refute_output
- }
- #----------------------------------------------------------#
- # DNS #
- #----------------------------------------------------------#
- @test "DNS: Add domain" {
- run v-add-dns-domain $user $domain 198.18.0.125
- assert_success
- refute_output
- }
- @test "DNS: Add domain (duplicate)" {
- run v-add-dns-domain $user $domain 198.18.0.125
- assert_failure $E_EXISTS
- }
- @test "DNS: Add domain record" {
- run v-add-dns-record $user $domain test A 198.18.0.125 '' 30
- assert_success
- refute_output
- }
- @test "DNS: Add domain record *.domain.com" {
- run v-add-dns-record $user $domain '*' A 198.18.0.125 '' 40
- assert_success
- refute_output
- }
- @test "DNS: Add domain record *.domain.com with ID 0" {
- run v-add-dns-record $user $domain '*' A 198.18.0.125 '' 0
- assert_failure $E_INVALID
- }
- @test "DNS: Change DNS record" {
- run v-change-dns-record $user $domain 30 test A 198.18.0.125 "" "" 1500
- assert_success
- refute_output
- }
- @test "DNS: Change DNS record (no update)" {
- run v-change-dns-record $user $domain 30 test A 198.18.0.125 "" "" 1500
- assert_failure $E_EXSIST
- }
- @test "DNS: Change DNS record id" {
- run v-change-dns-record-id $user $domain 30 31
- assert_success
- refute_output
- # Change back
- run v-change-dns-record-id $user $domain 31 30
- }
- @test "DNS: Change DNS record id (no update)" {
- run v-change-dns-record-id $user $domain 30 30
- assert_failure $E_EXSIST
- }
- @test "DNS: Delete domain record" {
- run v-delete-dns-record $user $domain 30
- assert_success
- refute_output
- }
- @test "DNS: Delete missing domain record" {
- run v-delete-dns-record $user $domain 30
- assert_failure $E_NOTEXIST
- }
- @test "DNS: Change domain expire date" {
- run v-change-dns-domain-exp $user $domain 2020-01-01
- assert_success
- refute_output
- }
- @test "DNS: Add domain record MX" {
- run v-add-dns-record $user $domain '@' MX mx.hestiacp.com '' 50
- assert_success
- refute_output
- assert_file_contains "$HOMEDIR/$user/conf/dns/${domain}.db" "mx.hestiacp.com."
- run v-change-dns-record $user $domain 50 '@' MX mx.hestia.com
- assert_success
- refute_output
- assert_file_contains "$HOMEDIR/$user/conf/dns/${domain}.db" "mx.hestia.com."
- run v-delete-dns-record $user $domain 50
- assert_success
- refute_output
- }
- @test "DNS: Add domain record NS" {
- run v-delete-dns-record $user $domain 50
- run v-add-dns-record $user $domain '@' NS mx.hestiacp.com '' 50
- assert_success
- refute_output
- assert_file_contains "$HOMEDIR/$user/conf/dns/${domain}.db" "mx.hestiacp.com."
- run v-change-dns-record $user $domain 50 '@' NS mx.hestia.com
- assert_success
- refute_output
- assert_file_contains "$HOMEDIR/$user/conf/dns/${domain}.db" "mx.hestia.com."
- run v-delete-dns-record $user $domain 50
- assert_success
- refute_output
- }
- @test "DNS: Add domain record SRV" {
- run v-delete-dns-record $user $domain 50
- run v-add-dns-record $user $domain '_test_domain' SRV '10 5 443 mx.hestiacp.com' '' 50
- assert_success
- refute_output
- assert_file_contains "$HOMEDIR/$user/conf/dns/${domain}.db" "mx.hestiacp.com."
- run v-change-dns-record $user $domain 50 '_test.domain' SRV '10 5 443 mx.hestia.com'
- assert_success
- refute_output
- assert_file_contains "$HOMEDIR/$user/conf/dns/${domain}.db" "mx.hestia.com."
- run v-delete-dns-record $user $domain 50
- assert_success
- refute_output
- }
- @test "DNS: Add domain record CNAME" {
- run v-delete-dns-record $user $domain 50
- run v-add-dns-record $user $domain 'mail' CNAME mx.hestiacp.com '' 50
- assert_success
- refute_output
- assert_file_contains "$HOMEDIR/$user/conf/dns/${domain}.db" "mx.hestiacp.com."
- run v-change-dns-record $user $domain 50 'mail' CNAME mx.hestia.com
- assert_success
- refute_output
- assert_file_contains "$HOMEDIR/$user/conf/dns/${domain}.db" "mx.hestia.com."
- run v-delete-dns-record $user $domain 50
- assert_success
- refute_output
- }
- @test "DNS: Check txt dns records type1" {
- [ -z "$DNS_SYSTEM" ] && skip
- run v-delete-dns-record $user $domain 50
- record1_in='v=DMARC1; p=quarantine; pct=100'
- record2_in='v=DMARC1; p=quarantine; pct=90'
- record1_out='"v=DMARC1; p=quarantine; pct=100"'
- record2_in='"v=DMARC1; p=quarantine; pct=90"'
- # Test Create
- run v-add-dns-record $user $domain 'test-long-txt' 'TXT' "$record1_in" '' 50
- assert_success
- refute_output
- assert_file_contains "$HOMEDIR/$user/conf/dns/${domain}.db" "$record1_out"
- # Test Edit
- run v-change-dns-record $user $domain 50 'test-long-txt' 'TXT' "$record2_in"
- assert_success
- refute_output
- assert_file_contains "$HOMEDIR/$user/conf/dns/${domain}.db" "$record2_out"
- # Test Cleanup
- run v-delete-dns-record $user $domain 50
- assert_success
- refute_output
- }
- @test "DNS: Check txt dns records type2" {
- [ -z "$DNS_SYSTEM" ] && skip
- run v-delete-dns-record $user $domain 50
- record3_in='k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4+VEVsoTbl6tYLJlhozqAGju3IgpSVdBAS5LMyzpHP8/L0/PlyVRJnm2xECjVk3DRqCmelyIvmraw1VtFz2aH6DRlDhHsZghj1DmGhwN+7NkwIb4hEvmytMVAz1WyiLH6Rm6Iemm/ZCt1RhrAMUYLxHA9mJgky76YCcf8/cX35xC+1vd4a5U6YofAZeVP9DBvVgQ8ung4gVrOrQrXkU8QfVNAoXz5pfJo74GB7woIBFhZXsU6SKho7KnzT5inVCIOtWp7L5hyEnbySWQPHT2vAMCCAe2AY/Vv0N3HW14o8P3b4A6OU920wFB2kA7pkQNzO5OwH+HSttwG0PaIiQxYQIDAQAB'
- record3_out='"k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4+VEVsoTbl6tYLJlhozqAGju3IgpSVdBAS5LMyzpHP8/L0/PlyVRJnm2xECjVk3DRqCmelyIvmraw1VtFz2aH6DRlDhHsZghj1DmGhwN+7NkwIb4hEvmytMVAz1WyiLH6Rm6Iemm/ZCt1RhrAMUYLxHA9mJgky76YCcf8/cX35xC+1vd4a5U6YofAZeVP9DBvVgQ8ung4g""VrOrQrXkU8QfVNAoXz5pfJo74GB7woIBFhZXsU6SKho7KnzT5inVCIOtWp7L5hyEnbySWQPHT2vAMCCAe2AY/Vv0N3HW14o8P3b4A6OU920wFB2kA7pkQNzO5OwH+HSttwG0PaIiQxYQIDAQAB"'
- record4_in='k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4+VEVsoTbl6tYLJlhozqAGju3IgpSVdBAS5LMyzpHP8/L0/PlyVRJnm2xECjVk3DRqCmelyIvmraw1VtFz2aH6DRlDhHsZghj1DmGhwN+7NkwIb4hEvmytMVAz1WyiLH6Rm6Iemm/ZCt1RhrAMUYLxHA9mJgky76YCcf8/cX35xC+1vd4a5U6YofAZeVP9DBvVgQ8ung4gVrOrQrXkU8QfVNAoXz5pfJo74GB7woIBFhZXsU6SKho7KnzT5inVCIOtWp7L5hyEnbySWQPHT2vAMCCAe2AY/Vv0N3HW14o8P3b4A6OU920wFB2kA7pkQNzO5OwH+HSttwG0PaIiQxYQIDAQA4'
- record4_out='"k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4+VEVsoTbl6tYLJlhozqAGju3IgpSVdBAS5LMyzpHP8/L0/PlyVRJnm2xECjVk3DRqCmelyIvmraw1VtFz2aH6DRlDhHsZghj1DmGhwN+7NkwIb4hEvmytMVAz1WyiLH6Rm6Iemm/ZCt1RhrAMUYLxHA9mJgky76YCcf8/cX35xC+1vd4a5U6YofAZeVP9DBvVgQ8ung4g""VrOrQrXkU8QfVNAoXz5pfJo74GB7woIBFhZXsU6SKho7KnzT5inVCIOtWp7L5hyEnbySWQPHT2vAMCCAe2AY/Vv0N3HW14o8P3b4A6OU920wFB2kA7pkQNzO5OwH+HSttwG0PaIiQxYQIDAQA4"'
- # Test Create
- run v-add-dns-record $user $domain 'test-long-txt' 'TXT' "$record3_in" '' 50
- assert_success
- refute_output
- assert_file_contains "$HOMEDIR/$user/conf/dns/${domain}.db" "$record3_out"
- # Test Edit
- run v-change-dns-record $user $domain 50 'test-long-txt' 'TXT' "$record4_in"
- assert_success
- refute_output
- assert_file_contains "$HOMEDIR/$user/conf/dns/${domain}.db" "$record4_out"
- # Test Cleanup
- run v-delete-dns-record $user $domain 50
- assert_success
- refute_output
- }
- @test "DNS: Change domain ip" {
- run v-change-dns-domain-ip $user $domain 127.0.0.1
- assert_success
- refute_output
- }
- @test "DNS: Suspend domain" {
- run v-suspend-dns-domain $user $domain
- assert_success
- refute_output
- }
- @test "DNS: Unsuspend domain" {
- run v-unsuspend-dns-domain $user $domain
- assert_success
- refute_output
- }
- @test "DNS: Rebuild" {
- run v-rebuild-dns-domains $user
- assert_success
- refute_output
- }
- #----------------------------------------------------------#
- # MAIL #
- #----------------------------------------------------------#
- @test "MAIL: Add domain" {
- run v-add-mail-domain $user $domain
- assert_success
- refute_output
- validate_mail_domain $user $domain
- }
- @test "MAIL: Add mail domain webmail client (Roundcube)" {
- run v-add-mail-domain-webmail $user $domain "roundcube" "yes"
- assert_success
- refute_output
- # echo -e "<?php\necho 'Server: ' . \$_SERVER['SERVER_SOFTWARE'];" > /var/lib/roundcube/check_server.php
- validate_webmail_domain $user $domain 'Welcome to Roundcube Webmail'
- # rm /var/lib/roundcube/check_server.php
- }
- @test "Mail: Add SSL to mail domain" {
- # Use generated certificates during WEB Generate Self signed certificate
- run v-add-mail-domain-ssl $user $domain /tmp
- assert_success
- refute_output
- validate_webmail_domain $user $domain 'Welcome to Roundcube Webmail'
- }
- @test "MAIL: Add mail domain webmail client (SnappyMail)" {
- if [ -z "$(echo $WEBMAIL_SYSTEM | grep -w "snappymail")" ]; then
- skip "Webmail client SnappyMail not installed"
- fi
- run v-add-mail-domain-webmail $user $domain "snappymail" "yes"
- assert_success
- refute_output
- validate_mail_domain $user $domain
- validate_webmail_domain $user $domain 'SnappyMail Webmail'
- }
- @test "MAIL: Disable webmail client" {
- run v-add-mail-domain-webmail $user $domain "disabled" "yes"
- assert_success
- refute_output
- validate_mail_domain $user $domain
- validate_webmail_domain $user $domain 'Success!'
- run v-add-mail-domain-webmail $user $domain "roundcube" "yes"
- assert_success
- refute_output
- }
- @test "MAIL: Add domain (duplicate)" {
- run v-add-mail-domain $user $domain
- assert_failure $E_EXISTS
- }
- @test "MAIL: Add account" {
- run v-add-mail-account $user $domain test "$userpass2"
- assert_success
- assert_file_contains /etc/exim4/domains/$domain/limits "test@$domain"
- refute_output
- }
- @test "MAIL: Add account (duplicate)" {
- run v-add-mail-account $user $domain test "$userpass2"
- assert_failure $E_EXISTS
- }
- @test "MAIL: Add account 2" {
- run v-add-mail-account $user $domain random "$userpass2"
- assert_success
- assert_file_contains /etc/exim4/domains/$domain/limits "random@$domain"
- refute_output
- }
- @test "MAIL: Add account alias" {
- run v-add-mail-account-alias $user $domain test hestiacprocks
- assert_success
- assert_file_contains /etc/exim4/domains/$domain/aliases "hestiacprocks@$domain"
- refute_output
- }
- @test "MAIL: Add account alias 2" {
- run v-add-mail-account-alias $user $domain test hestiacprocks2
- assert_success
- assert_file_contains /etc/exim4/domains/$domain/aliases "hestiacprocks2@$domain"
- refute_output
- }
- @test "MAIL: Add account alias 3" {
- run v-add-mail-account-alias $user $domain test hestiacp
- assert_success
- assert_file_contains /etc/exim4/domains/$domain/aliases "hestiacp@$domain"
- refute_output
- }
- @test "MAIL: Add account 3" {
- run v-add-mail-account $user $domain hestia "$userpass2"
- assert_success
- assert_file_contains /etc/exim4/domains/$domain/limits "hestia@$domain"
- refute_output
- }
- @test "MAIL: Add account 4" {
- run v-add-mail-account $user $domain hestiarocks3 "$userpass2"
- assert_success
- assert_file_contains /etc/exim4/domains/$domain/limits "hestiarocks3@$domain"
- refute_output
- }
- @test "MAIL: Add account 5" {
- run v-add-mail-account $user $domain 01 "$userpass2"
- assert_success
- assert_file_contains /etc/exim4/domains/$domain/limits "01@$domain"
- refute_output
- }
- @test "MAIL: Add account 6" {
- run v-add-mail-account $user $domain "0aa" "$userpass2"
- assert_success
- assert_file_contains /etc/exim4/domains/$domain/limits "0aa@$domain"
- refute_output
- }
- @test "MAIL: Add account alias Invalid length" {
- run v-add-mail-account-alias $user $domain test 'hestiacp-really-rocks-but-i-want-to-have-feature-xyz-and-i-want-it-now'
- assert_failure $E_INVALID
- }
- @test "MAIL: Add account alias Invalid" {
- run v-add-mail-account-alias $user $domain test 'test+123'
- assert_failure $E_INVALID
- }
- @test "MAIL: Add account alias starting with -" {
- run v-add-mail-account-alias $user $domain test '-test'
- assert_success
- }
- @test "MAIL: Add account alias ending with -" {
- run v-add-mail-account-alias $user $domain test 'test-'
- assert_success
- }
- @test "MAIL: Add account alias Invalid 2" {
- run v-add-mail-account-alias $user $domain test 'hestia@test'
- assert_failure $E_INVALID
- }
- @test "MAIL: Add account alias (duplicate)" {
- run v-add-mail-account-alias $user $domain test hestiacprocks
- assert_failure $E_EXISTS
- }
- @test "MAIL: change mail account password" {
- run curl -k -X POST -d "email=test@$domain&password=$userpass2&new=123456" https://localhost:8083/reset/mail/
- assert_success
- assert_output --partial "==ok=="
- }
- @test "MAIL: change mail account password (Incorrect PW)" {
- run curl -k -X POST -d "email=test@$domain&password=$userpass2&new=123456" https://localhost:8083/reset/mail/
- assert_success
- assert_output --partial "error"
- }
- @test "MAIL: Change rate limit" {
- run v-change-mail-account-rate-limit $user $domain test 10
- assert_file_contains /etc/exim4/domains/$domain/limits "test@$domain:10"
- }
- @test "MAIL: Delete account" {
- run v-delete-mail-account $user $domain test
- assert_success
- refute_output
- }
- @test "MAIL: Delete missing account" {
- run v-delete-mail-account $user $domain test
- assert_failure $E_NOTEXIST
- }
- @test "MAIL: Rebuild mail domain" {
- run v-rebuild-mail-domains $user
- assert_success
- refute_output
- }
- @test "MAIL: Delete DKIM" {
- run v-delete-mail-domain-dkim $user $domain
- assert_success
- refute_output
- run grep "RECORD='mail._domainkey'" "${HESTIA}/data/users/${user}/dns/${domain}.conf"
- assert_failure
- refute_output
- }
- @test "MAIL: Add DKIM" {
- run v-add-mail-domain-dkim $user $domain
- assert_success
- refute_output
- run grep "RECORD='mail._domainkey'" "${HESTIA}/data/users/${user}/dns/${domain}.conf"
- assert_success
- assert_output --partial "RECORD='mail._domainkey' TYPE='TXT'"
- }
- @test "MAIL: Delete DKIM but preserve custom dkim records" {
- run v-add-dns-record $user $domain 'k2._domainkey' 'TXT' 'v=DKIM1; k=rsa; p=123456'
- assert_success
- refute_output
- run v-delete-mail-domain-dkim $user $domain
- assert_success
- refute_output
- run grep "RECORD='k2._domainkey'" "${HESTIA}/data/users/${user}/dns/${domain}.conf"
- assert_success
- assert_output --partial "RECORD='k2._domainkey' TYPE='TXT'"
- }
- #----------------------------------------------------------#
- # Limit possibilities adding different owner domain #
- #----------------------------------------------------------#
- @test "Allow Users: User can't add user.user2.com " {
- # Case: admin company.tld
- # users should not be allowed to add user.company.tld
- run v-add-user $user2 $user2 $user@hestiacp.com default "Super Test"
- assert_success
- refute_output
- run v-add-web-domain $user2 $rootdomain
- assert_success
- refute_output
- run v-add-web-domain $user $subdomain
- assert_failure $E_EXISTS
- }
- @test "Allow Users: User can't add user.user2.com as alias" {
- run v-add-web-domain-alias $user $domain $subdomain
- assert_failure $E_EXISTS
- }
- @test "Allow Users: User can't add user.user2.com as mail domain" {
- run v-add-mail-domain $user $subdomain
- assert_failure $E_EXISTS
- }
- @test "Allow Users: User can't add user.user2.com as dns domain" {
- run v-add-dns-domain $user $subdomain 198.18.0.125
- assert_failure $E_EXISTS
- }
- @test "Allow Users: Set Allow users" {
- # Allow user to yes allows
- # Case: admin company.tld
- # users are allowed to add user.company.tld
- run v-add-web-domain-allow-users $user2 $rootdomain
- assert_success
- refute_output
- }
- @test "Allow Users: User can add user.user2.com" {
- run v-add-web-domain $user $subdomain
- assert_success
- refute_output
- }
- @test "Allow Users: User can add user.user2.com as alias" {
- run v-delete-web-domain $user $subdomain
- assert_success
- refute_output
- run v-add-web-domain-alias $user $domain $subdomain
- assert_success
- refute_output
- }
- @test "Allow Users: User can add user.user2.com as mail domain" {
- run v-add-mail-domain $user $subdomain
- assert_success
- refute_output
- }
- @test "Allow Users: User can add user.user2.com as dns domain" {
- run v-add-dns-domain $user $subdomain 198.18.0.125
- assert_success
- refute_output
- }
- @test "Allow Users: Cleanup tests" {
- run v-delete-dns-domain $user $subdomain
- assert_success
- refute_output
- run v-delete-mail-domain $user $subdomain
- assert_success
- refute_output
- }
- @test "Allow Users: Set Allow users no" {
- run v-delete-web-domain-alias $user $domain $subdomain
- assert_success
- refute_output
- run v-delete-web-domain-allow-users $user2 $rootdomain
- assert_success
- refute_output
- }
- @test "Allow Users: User can't add user.user2.com again" {
- run v-add-web-domain $user $subdomain
- assert_failure $E_EXISTS
- }
- @test "Allow Users: user2 can add user.user2.com again" {
- run v-add-web-domain $user2 $subdomain
- assert_success
- refute_output
- }
- #----------------------------------------------------------#
- # DB #
- #----------------------------------------------------------#
- @test "MYSQL: Add database" {
- run v-add-database $user database dbuser 1234 mysql
- assert_success
- refute_output
- # validate_database mysql database_name database_user password
- validate_database mysql $database $dbuser 1234
- }
- @test "MYSQL: Add Database (Duplicate)" {
- run v-add-database $user database dbuser 1234 mysql
- assert_failure $E_EXISTS
- }
- @test "MYSQL: Rebuild Database" {
- run v-rebuild-database $user $database
- assert_success
- refute_output
- }
- @test "MYSQL: Change database user password" {
- run v-change-database-password $user $database 123456
- assert_success
- refute_output
- validate_database mysql $database $dbuser 123456
- }
- @test "MYSQL: Change database user" {
- run v-change-database-user $user $database database
- assert_success
- refute_output
- validate_database mysql $database $database 123456
- }
- @test "MYSQL: Suspend database" {
- run v-suspend-database $user $database
- assert_success
- refute_output
- }
- @test "MYSQL: Unsuspend database" {
- run v-unsuspend-database $user $database
- assert_success
- refute_output
- }
- @test "MYSQL: Delete database" {
- run v-delete-database $user $database
- assert_success
- refute_output
- }
- @test "MYSQL: Delete missing database" {
- run v-delete-database $user $database
- assert_failure $E_NOTEXIST
- }
- @test "PGSQL: Add database invalid user" {
- if [ -z "$(echo $DB_SYSTEM | grep -w "pgsql")" ]; then
- skip "PostGreSQL is not installed"
- fi
- run v-add-database "$user" "database" "dbuser" "1234ABCD" "pgsql"
- assert_failure $E_INVALID
- }
- @test "PGSQL: Add database" {
- if [ -z "$(echo $DB_SYSTEM | grep -w "pgsql")" ]; then
- skip "PostGreSQL is not installed"
- fi
- run v-add-user $pguser $pguser $user@hestiacp.com default "Super Test"
- run v-add-database "$pguser" "database" "dbuser" "1234ABCD" "pgsql"
- assert_success
- refute_output
- # validate_database pgsql $pgdatabase $pgdbuser "1234ABCD"
- }
- @test "PGSQL: Add Database (Duplicate)" {
- if [ -z "$(echo $DB_SYSTEM | grep -w "pgsql")" ]; then
- skip "PostGreSQL is not installed"
- fi
- run v-add-database "$pguser" "database" "dbuser" "1234ABCD" "pgsql"
- assert_failure $E_EXISTS
- }
- @test "PGSQL: Rebuild Database" {
- if [ -z "$(echo $DB_SYSTEM | grep -w "pgsql")" ]; then
- skip "PostGreSQL is not installed"
- fi
- run v-rebuild-database $pguser $pgdatabase
- assert_success
- refute_output
- }
- @test "PGSQL: Change database user password" {
- if [ -z "$(echo $DB_SYSTEM | grep -w "pgsql")" ]; then
- skip "PostGreSQL is not installed"
- fi
- run v-change-database-password $pguser $pgdatabase "123456"
- assert_success
- refute_output
- # validate_database pgsql $pgdatabase $pgdbuser "123456"
- }
- @test "PGSQL: Suspend database" {
- if [ -z "$(echo $DB_SYSTEM | grep -w "pgsql")" ]; then
- skip "PostGreSQL is not installed"
- fi
- run v-suspend-database $pguser $pgdatabase
- assert_success
- refute_output
- }
- @test "PGSQL: Unsuspend database" {
- if [ -z "$(echo $DB_SYSTEM | grep -w "pgsql")" ]; then
- skip "PostGreSQL is not installed"
- fi
- run v-unsuspend-database $pguser $pgdatabase
- assert_success
- refute_output
- }
- @test "PGSQL: Change database user" {
- if [ -z "$(echo $DB_SYSTEM | grep -w "pgsql")" ]; then
- skip "PostGreSQL is not installed"
- fi
- skip
- run v-change-database-user $pguser $pgdatabase database
- assert_success
- refute_output
- validate_database pgsql $pgdatabase $pgdatabase 123456
- }
- @test "PGSQL: Delete database" {
- if [ -z "$(echo $DB_SYSTEM | grep -w "pgsql")" ]; then
- skip "PostGreSQL is not installed"
- fi
- run v-delete-database $pguser $pgdatabase
- assert_success
- refute_output
- }
- @test "PGSQL: Delete missing database" {
- if [ -z "$(echo $DB_SYSTEM | grep -w "pgsql")" ]; then
- skip "PostGreSQL is not installed"
- fi
- run v-delete-database $pguser $pgdatabase
- assert_failure $E_NOTEXIST
- run v-delete-user $pguser
- }
- #----------------------------------------------------------#
- # System #
- #----------------------------------------------------------#
- @test "System: Set/Enable SMTP account for internal mail" {
- run v-add-sys-smtp $domain 587 STARTTLS info@$domain 1234-test noreply@$domain
- assert_success
- refute_output
- }
- @test "System: Disable SMTP account for internal mail" {
- run v-delete-sys-smtp
- assert_success
- refute_output
- }
- @test "System: Set/Enable SMTP relay" {
- run v-add-sys-smtp-relay $domain info@$domain 1234-test 587
- assert_success
- refute_output
- assert_file_exist /etc/exim4/smtp_relay.conf
- }
- @test "System: Delete SMTP relay" {
- run v-delete-sys-smtp-relay
- assert_success
- refute_output
- assert_file_not_exist /etc/exim4/smtp_relay.conf
- }
- #----------------------------------------------------------#
- # Firewall #
- #----------------------------------------------------------#
- @test "Firewall: Add ip to banlist" {
- run v-add-firewall-ban '1.2.3.4' 'HESTIA'
- assert_success
- refute_output
- check_ip_banned '1.2.3.4' 'HESTIA'
- }
- @test "Firewall: Delete ip to banlist" {
- run v-delete-firewall-ban '1.2.3.4' 'HESTIA'
- assert_success
- refute_output
- check_ip_not_banned '1.2.3.4' 'HESTIA'
- }
- @test "Firewall: Add ip to banlist for ALL" {
- run v-add-firewall-ban '1.2.3.4' 'HESTIA'
- assert_success
- refute_output
- run v-add-firewall-ban '1.2.3.4' 'MAIL'
- assert_success
- refute_output
- check_ip_banned '1.2.3.4' 'HESTIA'
- }
- @test "Firewall: Delete ip to banlist CHAIN = ALL" {
- run v-delete-firewall-ban '1.2.3.4' 'ALL'
- assert_success
- refute_output
- check_ip_not_banned '1.2.3.4' 'HESTIA'
- }
- @test "Test Whitelist Fail2ban" {
- echo "1.2.3.4" >> $HESTIA/data/firewall/excludes.conf
- run v-add-firewall-ban '1.2.3.4' 'HESTIA'
- rm $HESTIA/data/firewall/excludes.conf
- check_ip_not_banned '1.2.3.4' 'HESTIA'
- }
- @test "Test create ipset" {
- run v-add-firewall-ipset "country-nl" "https://raw.githubusercontent.com/ipverse/rir-ip/master/country/nl/ipv4-aggregated.txt" v4 yes
- assert_success
- refute_output
- }
- @test "Create firewall with Ipset" {
- run v-add-firewall-rule 'DROP' 'ipset:country-nl' '8083,22' 'TCP' 'Test'
- assert_success
- refute_output
- }
- @test "List firewall rules" {
- run v-list-firewall csv
- assert_success
- assert_line --partial '11,DROP,TCP,8083,22,ipset:country-nl'
- }
- @test "Delete firewall with Ipset" {
- run v-delete-firewall-rule '11'
- assert_success
- refute_output
- }
- @test "Test delete ipset" {
- run v-delete-firewall-ipset "country-nl"
- assert_success
- refute_output
- }
- #----------------------------------------------------------#
- # PACKAGE #
- #----------------------------------------------------------#
- @test "Package: Create new Package" {
- cp $HESTIA/data/packages/default.pkg /tmp/package
- run v-add-user-package /tmp/package hestiatest
- assert_success
- refute_output
- }
- @test "Package: Assign user to new Package" {
- run v-change-user-package $user hestiatest
- assert_success
- refute_output
- }
- @test "Package: Create new package (Duplicate)" {
- sed -i "s/BANDWIDTH='unlimited'/BANDWIDTH='100'/g" /tmp/package
- run v-add-user-package /tmp/package hestiatest
- assert_failure $E_EXISTS
- }
- @test "Package: Update new Package" {
- sed -i "s/BANDWIDTH='unlimited'/BANDWIDTH='100'/g" /tmp/package
- run v-add-user-package /tmp/package hestiatest yes
- assert_success
- refute_output
- }
- @test "Package: Update package of user" {
- run v-change-user-package $user hestiatest
- assert_success
- refute_output
- run grep "BANDWIDTH='100'" $HESTIA/data/users/$user/user.conf
- assert_success
- assert_output --partial "100"
- }
- @test "Package: Copy package Not Exists" {
- run v-copy-user-package hestiadoesnotexists hestiatest2
- assert_failure $E_NOTEXIST
- }
- @test "Package: Copy package" {
- run v-copy-user-package hestiatest hestiatest2
- assert_success
- refute_output
- }
- @test "Package: Copy package Exists" {
- run v-copy-user-package hestiatest hestiatest2
- assert_failure $E_EXISTS
- }
- @test "Package: Delete package" {
- run v-delete-user-package hestiatest
- run v-delete-user-package hestiatest2
- rm /tmp/package
- assert_success
- refute_output
- run grep "BANDWIDTH='unlimited'" $HESTIA/data/users/$user/user.conf
- assert_success
- assert_output --partial "unlimited"
- }
- #----------------------------------------------------------#
- # Backup user #
- #----------------------------------------------------------#
- @test "Backup: Backup user" {
- run v-backup-user $user
- assert_success
- }
- @test "Backup: List Backups" {
- run v-list-user-backups $user plain
- assert_success
- assert_output --partial "$user"
- }
- @test "Backup: Delete backups" {
- run v-delete-user-backup $user $(v-list-user-backups $user plain | cut -f1)
- assert_success
- run rm /backup/$user.log
- }
- #----------------------------------------------------------#
- # Change owner scripts #
- #----------------------------------------------------------#
- @test "Change: Change domain owner" {
- run v-change-domain-owner $domain $user2
- assert_success
- run v-restart-web
- run v-restart-proxy
- }
- @test "Change: Add database" {
- run v-add-database $user database dbuser 1234 mysql
- assert_success
- refute_output
- # validate_database mysql database_name database_user password
- validate_database mysql $database $dbuser 1234
- }
- @test "Change: Change database owner" {
- run v-change-database-owner $database $user2
- assert_success
- validate_database mysql test-5286_database test-5286_dbuser 1234
- }
- @test "Change: Delete database" {
- run v-delete-database $user2 test-5286_database
- assert_success
- refute_output
- }
- #----------------------------------------------------------#
- # CLEANUP #
- #----------------------------------------------------------#
- @test "Mail: Delete domain" {
- run v-delete-mail-domain $user2 $domain
- assert_success
- refute_output
- }
- @test "DNS: Delete domain" {
- run v-delete-dns-domain $user2 $domain
- assert_success
- refute_output
- }
- @test "WEB: Delete domain" {
- run v-delete-web-domain $user2 $domain
- assert_success
- refute_output
- }
- @test "Delete user" {
- run v-delete-user $user
- assert_success
- refute_output
- }
- @test "Delete user2" {
- run v-delete-user $user2
- assert_success
- refute_output
- }
- @test "Ip: Delete the test IP" {
- run v-delete-sys-ip 198.18.0.125
- assert_success
- refute_output
- }
- @test 'assert()' {
- touch '/var/log/test.log'
- assert [ -e '/var/log/test.log' ]
- }
|