You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
hestiacp/test/test.bats

2288 lines
68 KiB

#!/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_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: 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"
}
@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'
}
@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 exists)" {
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 exists)" {
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 admin 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
if [ "$WEB_SYSTEM" = "httpd" ]; then
confd="conf.h.d"
else
confd="conf.d"
fi
if [ "$PROXY_SYSTEM" = "httpd" ]; then
pconfd="conf.h.d"
else
pconfd="conf.d"
fi
assert_file_exist /etc/$WEB_SYSTEM/$confd/$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/$pconfd/$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 [ -f /etc/netplan/60-hestia.yaml ]; 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
if [ "$WEB_SYSTEM" = "httpd" ]; then
confd="conf.h.d"
else
confd="conf.d"
fi
if [ "$PROXY_SYSTEM" = "httpd" ]; then
pconfd="conf.h.d"
else
pconfd="conf.d"
fi
assert_file_exist /etc/$WEB_SYSTEM/$confd/$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/$pconfd/$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 ips" {
local ip="198.18.0.12"
run v-delete-sys-ip $ip
assert_success
refute_output
if [ "$WEB_SYSTEM" = "httpd" ]; then
confd="conf.h.d"
else
confd="conf.d"
fi
if [ "$PROXY_SYSTEM" = "httpd" ]; then
pconfd="conf.h.d"
else
pconfd="conf.d"
fi
assert_file_not_exist /etc/$WEB_SYSTEM/$confd/$ip.conf
assert_file_not_exist $HESTIA/data/ips/$ip
ip="198.18.0.121"
run v-delete-sys-ip $ip
assert_success
refute_output
assert_file_not_exist /etc/$WEB_SYSTEM/$confd/$ip.conf
assert_file_not_exist $HESTIA/data/ips/$ip
if [ -n "$PROXY_SYSTEM" ]; then
assert_file_not_exist /etc/$PROXY_SYSTEM/$pconfd/$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
if [ "$WEB_SYSTEM" = "httpd" ]; then
confd="conf.h.d"
else
confd="conf.d"
fi
if [ "$PROXY_SYSTEM" = "httpd" ]; then
pconfd="conf.h.d"
else
pconfd="conf.d"
fi
assert_file_exist /etc/$WEB_SYSTEM/$confd/$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/$pconfd/$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
}
#----------------------------------------------------------#
# 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
echo -e "<?php\necho 'Hestia Test:'.(4*3);" > $HOMEDIR/$user/web/idn-tést.eu/public_html/php-test.php
validate_web_domain $user idn-tést.eu 'Hestia Test:12' 'php-test.php'
rm $HOMEDIR/$user/web/idn-tést.eu/public_html/php-test.php
}
@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 '' 20
assert_success
refute_output
}
@test "DNS: Add domain record *.domain.com" {
run v-add-dns-record $user $domain '*' A 198.18.0.125 '' 30
assert_success
refute_output
}
@test "DNS: Change DNS record" {
run v-change-dns-record $user $domain 20 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 20 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 20 21
assert_success
refute_output
# Change back
run v-change-dns-record-id $user $domain 21 20
}
@test "DNS: Change DNS record id (no update)" {
run v-change-dns-record-id $user $domain 20 20
assert_failure $E_EXSIST
}
@test "DNS: Delete domain record" {
run v-delete-dns-record $user $domain 20
assert_success
refute_output
}
@test "DNS: Delete missing domain record" {
run v-delete-dns-record $user $domain 20
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 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 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 alias Invalid length" {
run v-add-mail-account-alias $user $domain test 'hestiacp-realy-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'
assert_failure $E_INVALID
}
@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='_domainkey'" "${HESTIA}/data/users/${user}/dns/${domain}.conf"
assert_failure
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='_domainkey'" "${HESTIA}/data/users/${user}/dns/${domain}.conf"
assert_success
assert_output --partial "RECORD='_domainkey' TYPE='TXT'"
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' ]
}