From e1ed044b008a867b8cdbb2a8df56198f21abb911 Mon Sep 17 00:00:00 2001 From: Maniack Crudelis Date: Wed, 10 May 2017 20:10:43 +0200 Subject: [PATCH] Add change_url new test --- README-fr.md | 3 + README.md | 3 + check_process | 1 + package_check.sh | 8 +- sub_scripts/lxc_build.sh | 5 +- sub_scripts/testing_process.sh | 184 ++++++++++++++++++++++++++++++--- 6 files changed, 185 insertions(+), 19 deletions(-) diff --git a/README-fr.md b/README-fr.md index 5834ade..197fac0 100644 --- a/README-fr.md +++ b/README-fr.md @@ -23,6 +23,7 @@ Le script est capable d'effectuer les tests suivant: - Installation multi-instance - Test de path mal formé (path/ au lieu de /path) - Test de port déjà utilisé +- Test du script change_url Package check utilise un conteneur LXC pour créer un environnement de test propre sans résidus d'installations précédentes. @@ -69,6 +70,7 @@ package_check/package_check.sh APP_ynh multi_instance=1 incorrect_path=1 port_already_use=1 (XXXX) + change_url=1 ;;; Levels Level 1=auto Level 2=auto @@ -114,6 +116,7 @@ Si un test est absent de la liste, il sera ignoré. Cela revient à le noter à - `port_already_use`: Provoque une erreur sur le port en l'ouvrant avant le script d'install. Le test` port_already_use` peut éventuellement prendre en argument un numéro de port. Si celui-ci n'est pas dans le manifest. Le numéro de port doit alors être noté entre parenthèse, il servira au test de port. +- `change_url`: Test le script change_url de 6 manières différentes, Root vers un path, path vers un autre path et path vers root. Et la même chose avec un autre domaine. ### `;;; Levels` Permet de choisir comment [chaque niveau](https://yunohost.org/#/packaging_apps_levels_fr) est déterminé. diff --git a/README.md b/README.md index 18bcf87..bd4e680 100644 --- a/README.md +++ b/README.md @@ -23,6 +23,7 @@ The script is able to perform following tests: - Multi-instances installation - Test malformed path (path/ instead od /path) - Test port already use +- Test of change_url script Package_check script use an LXC container to manipulate the package in a non parasited environnement by previous installs. @@ -69,6 +70,7 @@ package_check/package_check.sh APP_ynh multi_instance=1 incorrect_path=1 port_already_use=1 (XXXX) + change_url=1 ;;; Levels Level 1=auto Level 2=auto @@ -114,6 +116,7 @@ If a test is not in the list, it will be ignored. It's similar to marked at 0. - `port_already_use`: Causes an error on the port by opening before. The `port_already_use` test may eventually take in argument the port number. The port number must be written into parentheses, it will serve to test port. +- `change_url`: Try to change the url by 6 different way. Root to path, path to another path and path to root. And the same thing, with another domain. ### `;;; Levels` Allow to choose how [each level](https://yunohost.org/#/packaging_apps_levels_fr) is determined diff --git a/check_process b/check_process index 553cca6..a9f8844 100644 --- a/check_process +++ b/check_process @@ -21,6 +21,7 @@ multi_instance=1 incorrect_path=1 port_already_use=1 (66) + change_url=0 ;;; Levels Level 1=auto Level 2=auto diff --git a/package_check.sh b/package_check.sh index b71c9f4..2d5e761 100755 --- a/package_check.sh +++ b/package_check.sh @@ -512,6 +512,7 @@ TEST_RESULTS () { print_result "Port already used" $RESULT_check_port print_result "Backup" $RESULT_check_backup print_result "Restore" $RESULT_check_restore + print_result "Change URL" $RESULT_change_url @@ -646,7 +647,8 @@ TEST_RESULTS () { [ $RESULT_check_path -ne -1 ] && \ [ $RESULT_check_port -ne -1 ] && \ [ $RESULT_check_backup -ne -1 ] && \ - [ $RESULT_check_restore -ne -1 ] + [ $RESULT_check_restore -ne -1 ] && \ + [ $RESULT_change_url -ne -1 ] then level[7]=2 else level[7]=0 fi @@ -755,6 +757,7 @@ initialize_values() { RESULT_check_multi_instance=0 RESULT_check_path=0 RESULT_check_port=0 + RESULT_change_url=0 # auto_remove parameter if [ $interrupt -eq 1 ]; then @@ -980,6 +983,8 @@ fi count_test $incorrect_path port_already_use=$(read_check_option port_already_use) count_test $port_already_use + change_url=$(read_check_option change_url) + count_test $change_url # For port_already_use, check if there is also a port number if [ $port_already_use -eq 1 ] @@ -1022,6 +1027,7 @@ else multi_instance=1 incorrect_path=1 port_already_use=0 + change_url=0 all_test=$((all_test+9)) diff --git a/sub_scripts/lxc_build.sh b/sub_scripts/lxc_build.sh index 2a47881..afa9409 100755 --- a/sub_scripts/lxc_build.sh +++ b/sub_scripts/lxc_build.sh @@ -165,15 +165,14 @@ ssh $ARG_SSH $LXC_NAME "cd /tmp/install_script; sudo ./install_yunohost -a" | te echo -e "\e[1m> Post install Yunohost\e[0m" | tee -a "$LOG_BUILD_LXC" ssh $ARG_SSH $LXC_NAME "sudo yunohost tools postinstall --domain $DOMAIN --password $YUNO_PWD" | tee -a "$LOG_BUILD_LXC" 2>&1 -USER_TEST=$(cat "$(dirname "$script_dir")/package_check.sh" | grep USER_TEST= | cut -d '=' -f2) -PASSWORD_TEST=$(cat "$(dirname "$script_dir")/package_check.sh" | grep PASSWORD_TEST= | cut -d '=' -f2) +USER_TEST=$(cat "$(dirname "$script_dir")/package_check.sh" | grep test_user= | cut -d '=' -f2) SOUS_DOMAIN="sous.$DOMAIN" # echo "Le mot de passe Yunohost est \'$YUNO_PWD\'" echo -e "\e[1m> Ajout du sous domaine de test\e[0m" | tee -a "$LOG_BUILD_LXC" ssh $ARG_SSH $LXC_NAME "sudo yunohost domain add \"$SOUS_DOMAIN\" --admin-password=\"$YUNO_PWD\"" USER_TEST_CLEAN=${USER_TEST//"_"/""} echo -e "\e[1m> Ajout de l'utilisateur de test\e[0m" | tee -a "$LOG_BUILD_LXC" -ssh $ARG_SSH $LXC_NAME "sudo yunohost user create --firstname \"$USER_TEST_CLEAN\" --mail \"$USER_TEST_CLEAN@$DOMAIN\" --lastname \"$USER_TEST_CLEAN\" --password \"$PASSWORD_TEST\" \"$USER_TEST\" --admin-password=\"$YUNO_PWD\"" +ssh $ARG_SSH $LXC_NAME "sudo yunohost user create --firstname \"$USER_TEST_CLEAN\" --mail \"$USER_TEST_CLEAN@$DOMAIN\" --lastname \"$USER_TEST_CLEAN\" --password \"$YUNO_PWD\" \"$USER_TEST\" --admin-password=\"$YUNO_PWD\"" echo -e -e "\e[1m\n> Vérification de l'état de Yunohost\e[0m" | tee -a "$LOG_BUILD_LXC" ssh $ARG_SSH $LXC_NAME "sudo yunohost -v" | tee -a "$LOG_BUILD_LXC" 2>&1 diff --git a/sub_scripts/testing_process.sh b/sub_scripts/testing_process.sh index c0a5077..7cea6bb 100644 --- a/sub_scripts/testing_process.sh +++ b/sub_scripts/testing_process.sh @@ -96,12 +96,12 @@ CHECK_URL () { # Inform /etc/hosts with the IP of LXC to resolve the domain. # This is set only here and not before to prevent to help the app's scripts - echo -e "$ip_range.2 $main_domain #package_check\n$ip_range.2 $sub_domain #package_check" | sudo tee --append /etc/hosts > /dev/null + echo -e "$ip_range.2 $check_domain #package_check" | sudo tee --append /etc/hosts > /dev/null # Try to resolv the domain during 10 seconds maximum. local i=0 for i in `seq 1 10`; do - curl --location --insecure $sub_domain > /dev/null 2>&1 + curl --location --insecure $check_domain > /dev/null 2>&1 # If curl return 6, it's an error "Could not resolve host" if [ $? -ne 6 ]; then # If not, curl is ready to work. @@ -157,7 +157,7 @@ CHECK_URL () { rm -f "$script_dir/url_output" # Call curl to try to access to the url of the app - curl --location --insecure --silent --show-error --write-out "%{http_code};%{url_effective}\n" $sub_domain$curl_check_path --output "$script_dir/url_output" > "$script_dir/curl_print" + curl --location --insecure --silent --show-error --write-out "%{http_code};%{url_effective}\n" $check_domain$curl_check_path --output "$script_dir/url_output" > "$script_dir/curl_print" # Analyze the result of curl command if [ $? -ne 0 ] @@ -167,7 +167,7 @@ CHECK_URL () { fi # Print informations about the connection - ECHO_FORMAT "Test url: $sub_domain$curl_check_path\n" "white" + ECHO_FORMAT "Test url: $check_domain$curl_check_path\n" "white" ECHO_FORMAT "Real url: $(cat "$script_dir/curl_print" | cut --delimiter=';' --fields=2)\n" "white" local http_code=$(cat "$script_dir/curl_print" | cut -d ';' -f1) ECHO_FORMAT "HTTP code: $http_code\n" "white" @@ -327,7 +327,7 @@ is_install_failed () { then # If root installation worked, return root. echo root - elif [ $RESULT_check_sub_dir -eq 1 ] || [ $force_install_ok -eq 1 ] + elif [ $RESULT_check_sub_dir -eq 1 ] && [ $force_install_ok -ne 1 ] then # If subdir installation worked or force_install_ok setted, return subdir. echo subdir @@ -366,7 +366,8 @@ CHECK_SETUP () { local manifest_args_mod="$manifest_arguments" # Replace manifest key for the test - replace_manifest_key "domain" "$sub_domain" + check_domain=$sub_domain + replace_manifest_key "domain" "$check_domain" if [ "$install_type" = "subdir" ]; then local check_path=$test_path elif [ "$install_type" = "root" ]; then @@ -442,7 +443,8 @@ CHECK_UPGRADE () { local manifest_args_mod="$manifest_arguments" # Replace manifest key for the test - replace_manifest_key "domain" "$sub_domain" + check_domain=$sub_domain + replace_manifest_key "domain" "$check_domain" # Use a path according to previous succeeded installs if [ "$previous_install" = "subdir" ]; then local check_path=$test_path @@ -527,7 +529,8 @@ CHECK_PUBLIC_PRIVATE () { local manifest_args_mod="$manifest_arguments" # Replace manifest key for the test - replace_manifest_key "domain" "$sub_domain" + check_domain=$sub_domain + replace_manifest_key "domain" "$check_domain" replace_manifest_key "user" "$test_user" # Set public or private according to type of test requested if [ "$install_type" = "private" ]; then @@ -547,7 +550,7 @@ CHECK_PUBLIC_PRIVATE () { if [ $i -eq 0 ] then # Check if root installation worked, or if force_install_ok is setted. - if [ $RESULT_check_root -eq 1 ] || [ $force_install_ok -eq 1 ] + if [ $RESULT_check_root -eq 1 ] && [ $force_install_ok -ne 1 ] then # Replace manifest key for path local check_path=/ @@ -562,7 +565,7 @@ CHECK_PUBLIC_PRIVATE () { elif [ $i -eq 1 ] then # Check if sub path installation worked, or if force_install_ok is setted. - if [ $RESULT_check_sub_dir -eq 1 ] || [ $force_install_ok -eq 1 ] + if [ $RESULT_check_sub_dir -eq 1 ] && [ $force_install_ok -ne 1 ] then # Replace manifest key for path local check_path=$test_path @@ -644,7 +647,8 @@ CHECK_MULTI_INSTANCE () { local manifest_args_mod="$manifest_arguments" # Replace manifest key for the test - replace_manifest_key "domain" "$sub_domain" + check_domain=$sub_domain + replace_manifest_key "domain" "$check_domain" replace_manifest_key "user" "$test_user" replace_manifest_key "public" "$public_public_arg" @@ -772,7 +776,8 @@ CHECK_COMMON_ERROR () { local manifest_args_mod="$manifest_arguments" # Replace manifest key for the test - replace_manifest_key "domain" "$sub_domain" + check_domain=$sub_domain + replace_manifest_key "domain" "$check_domain" replace_manifest_key "user" "$test_user" replace_manifest_key "public" "$public_public_arg" @@ -857,7 +862,8 @@ CHECK_BACKUP_RESTORE () { local manifest_args_mod="$manifest_arguments" # Replace manifest key for the test - replace_manifest_key "domain" "$sub_domain" + check_domain=$sub_domain + replace_manifest_key "domain" "$check_domain" replace_manifest_key "user" "$test_user" replace_manifest_key "public" "$public_public_arg" @@ -869,7 +875,7 @@ CHECK_BACKUP_RESTORE () { if [ $i -eq 0 ] then # Check if root installation worked, or if force_install_ok is setted. - if [ $RESULT_check_root -eq 1 ] || [ $force_install_ok -eq 1 ] + if [ $RESULT_check_root -eq 1 ] && [ $force_install_ok -ne 1 ] then # Replace manifest key for path local check_path=/ @@ -885,7 +891,7 @@ CHECK_BACKUP_RESTORE () { elif [ $i -eq 1 ] then # Check if sub path installation worked, or if force_install_ok is setted. - if [ $RESULT_check_sub_dir -eq 1 ] || [ $force_install_ok -eq 1 ] + if [ $RESULT_check_sub_dir -eq 1 ] && [ $force_install_ok -ne 1 ] then # Replace manifest key for path local check_path=$test_path @@ -1015,6 +1021,149 @@ CHECK_BACKUP_RESTORE () { done } +CHECK_CHANGE_URL () { + # Try the change_url script + + unit_test_title "Change URL..." + + # Check if the needed manifest key are set or abort the test + check_manifest_key "domain" || return + + # Check if an install have previously work + local previous_install=$(is_install_failed) + # Abort if none install worked + [ "$previous_install" = "1" ] && return + + # Copy original arguments + local manifest_args_mod="$manifest_arguments" + + # Replace manifest key for the test + check_domain=$sub_domain + replace_manifest_key "domain" "$check_domain" + replace_manifest_key "user" "$test_user" + replace_manifest_key "public" "$public_public_arg" + + # Try in 6 times ! + # Without modify the domain, root to path, path to path and path to root. + # And then, same with a domain change + local i=0 + for i in ` seq 1 6` + do + if [ $i -eq 1 ]; then + # Same domain, root to path + check_path=/ + local new_path=$test_path + local new_domain=$sub_domain + elif [ $i -eq 2 ]; then + # Same domain, path to path + check_path=$test_path + local new_path=${test_path}_2 + local new_domain=$sub_domain + elif [ $i -eq 3 ]; then + # Same domain, path to root + check_path=$test_path + local new_path=/ + local new_domain=$sub_domain + + elif [ $i -eq 4 ]; then + # Other domain, root to path + check_path=/ + local new_path=$test_path + local new_domain=$main_domain + elif [ $i -eq 5 ]; then + # Other domain, path to path + check_path=$test_path + local new_path=${test_path}_2 + local new_domain=$main_domain + elif [ $i -eq 6 ]; then + # Other domain, path to root + check_path=$test_path + local new_path=/ + local new_domain=$main_domain + fi + replace_manifest_key "path" "$check_path" + + # Check if root or subpath installation worked, or if force_install_ok is setted. + if [ $force_install_ok -eq 1 ] + then + # Try with a sub path install + if [ "$check_path" = "/" ] + then + if [ $RESULT_check_root -ne 1 ] && [ $force_install_ok -ne 1 ] + then + # Jump this test + ECHO_FORMAT "Root install failed, impossible to perform this test...\n" "lyellow" clog + continue + fi + # And with a sub path install + else + if [ $RESULT_check_sub_dir -ne 1 ] && [ $force_install_ok -ne 1 ] + then + # Jump this test + ECHO_FORMAT "Sub path install failed, impossible to perform this test...\n" "lyellow" clog + continue + fi + fi + fi + + # Install the application in a LXC container + ECHO_FORMAT "\nPreliminary install...\n" "white" "bold" clog + SETUP_APP + + # Analyse the log to extract "warning" and "error" lines + LOG_EXTRACTOR + + # Check if the install had work + if [ $yunohost_result -ne 0 ] + then + ECHO_FORMAT "\nInstallation failed...\n" "red" "bold" + else + ECHO_FORMAT "\nChange the url from $sub_domain$check_path to $new_domain$new_path...\n" "white" "bold" clog + + # Change the url + LXC_START "sudo yunohost --debug app change-url $ynh_app_id -d \"$new_domain\" -p \"$new_path\"" + + # yunohost_result gets the return code of the upgrade + yunohost_result=$? + + # Print the result of the change_url command + if [ $yunohost_result -eq 0 ]; then + ECHO_FORMAT "Change_url script successful. ($yunohost_result)\n" "white" clog + else + ECHO_FORMAT "Change_url script failed. ($yunohost_result)\n" "white" clog + fi + + # Check all the witness files, to verify if them still here + check_witness_files + + # Analyse the log to extract "warning" and "error" lines + LOG_EXTRACTOR + + # Try to access the app by its url + check_path=$new_path + check_domain=$new_domain + CHECK_URL + fi + + # Check the result and print SUCCESS or FAIL + if check_test_result + then # Success + # The global success for a change_url can't be a success if another change_url failed + if [ $RESULT_change_url -ne -1 ]; then + RESULT_change_url=1 # Change_url succeed + fi + else # Fail + RESULT_change_url=-1 # Change_url failed + fi + + # Make a break if auto_remove is set + break_before_continue + + # Stop and restore the LXC container + LXC_STOP + done +} + PACKAGE_LINTER () { # Package linter @@ -1224,4 +1373,9 @@ TESTING_PROCESS () { if [ $backup_restore -eq 1 ]; then TEST_LAUNCHER CHECK_BACKUP_RESTORE fi + + # Try the change_url script + if [ $change_url -eq 1 ]; then + TEST_LAUNCHER CHECK_CHANGE_URL + fi }