diff options
| author | Markus Pettersson <markus.pettersson@mullvad.net> | 2025-02-12 13:57:40 +0100 |
|---|---|---|
| committer | Markus Pettersson <markus.pettersson@mullvad.net> | 2025-02-25 12:06:49 +0100 |
| commit | 28a0154b9b788cedead8fe47dcc1ac12a8af356b (patch) | |
| tree | 43abb5b8e44d696a1aae2ce00a5a479c79de4dcd /test/scripts | |
| parent | 5df6076543862e5f8c0ac0430f2774ecb9cd8362 (diff) | |
| download | mullvadvpn-28a0154b9b788cedead8fe47dcc1ac12a8af356b.tar.xz mullvadvpn-28a0154b9b788cedead8fe47dcc1ac12a8af356b.zip | |
Rename some scripts (and move them to subdirectories)
Start off with the download app package / e2e tests binary in
`download.sh`. Rename `test-utils.sh` to `lib.sh` & start to break up
`lib.sh`.
Diffstat (limited to 'test/scripts')
| -rwxr-xr-x | test/scripts/build.sh | 4 | ||||
| -rwxr-xr-x | test/scripts/build/runner-image.sh (renamed from test/scripts/build-runner-image.sh) | 13 | ||||
| -rwxr-xr-x | test/scripts/build/test-manager.sh (renamed from test/scripts/build-manager.sh) | 2 | ||||
| -rwxr-xr-x | test/scripts/build/test-runner.sh (renamed from test/scripts/build-runner.sh) | 6 | ||||
| -rwxr-xr-x | test/scripts/run/ci.sh (renamed from test/scripts/ci-runtests.sh) | 26 | ||||
| -rwxr-xr-x | test/scripts/utils/lib.sh (renamed from test/scripts/test-utils.sh) | 123 |
6 files changed, 68 insertions, 106 deletions
diff --git a/test/scripts/build.sh b/test/scripts/build.sh index 7cfaede311..99b7b34942 100755 --- a/test/scripts/build.sh +++ b/test/scripts/build.sh @@ -13,11 +13,11 @@ REPO_ROOT="$SCRIPT_DIR/../.." build_linux() { mkdir -p "$TEST_FRAMEWORK_ROOT/dist" # Build the test manager - "$SCRIPT_DIR/build-manager.sh" linux + "$SCRIPT_DIR/build/test-manager.sh" linux cp "$TEST_FRAMEWORK_ROOT/target/release/test-manager" "$TEST_FRAMEWORK_ROOT/dist/" # Build the test runner - "$SCRIPT_DIR/build-runner.sh" linux + "$SCRIPT_DIR/build/test-runner.sh" linux cp "$TEST_FRAMEWORK_ROOT/target/x86_64-unknown-linux-gnu/release/test-runner" "$TEST_FRAMEWORK_ROOT/dist/" cp "$TEST_FRAMEWORK_ROOT/target/x86_64-unknown-linux-gnu/release/connection-checker" "$TEST_FRAMEWORK_ROOT/dist/" diff --git a/test/scripts/build-runner-image.sh b/test/scripts/build/runner-image.sh index 512dc93a4c..47c41b2e38 100755 --- a/test/scripts/build-runner-image.sh +++ b/test/scripts/build/runner-image.sh @@ -4,6 +4,9 @@ set -eu +SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" +TEST_FRAMEWORK_ROOT="$SCRIPT_DIR/../.." + TEST_RUNNER_IMAGE_SIZE_MB=5000 case $TARGET in @@ -20,10 +23,8 @@ echo "************************************************************" echo "* Preparing test runner image: $TARGET" echo "************************************************************" -SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" - -mkdir -p "${SCRIPT_DIR}/../testrunner-images/" -TEST_RUNNER_IMAGE_PATH="${SCRIPT_DIR}/../testrunner-images/${TEST_RUNNER_IMAGE_FILENAME}" +mkdir -p "${TEST_FRAMEWORK_REPO}/testrunner-images" +TEST_RUNNER_IMAGE_PATH="${TEST_FRAMEWORK_REPO}/testrunner-images/${TEST_RUNNER_IMAGE_FILENAME}" case $TARGET in @@ -32,8 +33,8 @@ case $TARGET in mformat -F -i "${TEST_RUNNER_IMAGE_PATH}" "::" mcopy \ -i "${TEST_RUNNER_IMAGE_PATH}" \ - "${SCRIPT_DIR}/../target/$TARGET/release/test-runner.exe" \ - "${SCRIPT_DIR}/../target/$TARGET/release/connection-checker.exe" \ + "${TEST_FRAMEWORK_ROOT}/target/$TARGET/release/test-runner.exe" \ + "${TEST_FRAMEWORK_ROOT}/target/$TARGET/release/connection-checker.exe" \ "${PACKAGE_DIR}/"*.exe \ "::" mdir -i "${TEST_RUNNER_IMAGE_PATH}" diff --git a/test/scripts/build-manager.sh b/test/scripts/build/test-manager.sh index 60cf5da98c..517bdf310f 100755 --- a/test/scripts/build-manager.sh +++ b/test/scripts/build/test-manager.sh @@ -4,7 +4,7 @@ set -eu # Build `test-manager` SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" -TEST_FRAMEWORK_ROOT="$SCRIPT_DIR/.." +TEST_FRAMEWORK_ROOT="$SCRIPT_DIR/../.." REPO_DIR="$TEST_FRAMEWORK_ROOT/.." # shellcheck disable=SC1091 diff --git a/test/scripts/build-runner.sh b/test/scripts/build/test-runner.sh index ffdb2b861a..3e01353ac6 100755 --- a/test/scripts/build-runner.sh +++ b/test/scripts/build/test-runner.sh @@ -3,7 +3,9 @@ set -eu SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" -REPO_DIR="$SCRIPT_DIR/../.." +TEST_FRAMEWORK_ROOT="$SCRIPT_DIR/../.." +REPO_DIR="$TEST_FRAMEWORK_ROOT/.." + cd "$SCRIPT_DIR" # shellcheck disable=SC1091 @@ -35,5 +37,5 @@ cargo build \ # Only build runner image for Windows if [[ $TARGET == x86_64-pc-windows-gnu ]]; then - TARGET="$TARGET" ./build-runner-image.sh + TARGET="$TARGET" ./runner-image.sh fi diff --git a/test/scripts/ci-runtests.sh b/test/scripts/run/ci.sh index 88a8944164..b55b640e03 100755 --- a/test/scripts/ci-runtests.sh +++ b/test/scripts/run/ci.sh @@ -1,11 +1,17 @@ #!/usr/bin/env bash +# TODO: Break this down into multiple, smaller scripts and compose them in this file. + set -eu SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" +TEST_FRAMEWORK_ROOT="$SCRIPT_DIR/../.." +TEST_DIR="$TEST_FRAMEWORK_ROOT" + cd "$SCRIPT_DIR" -TEST_DIR="$SCRIPT_DIR/.." +# Parse arguments +# TODO: Add support for either passing in --account-tokens or reading from env variable. if [[ "$#" -lt 1 ]]; then echo "usage: $0 TEST_OS" 1>&2 exit 1 @@ -19,15 +25,17 @@ if [[ "$(uname -s)" == "Darwin" ]]; then rustup update fi -# shellcheck source=test/scripts/test-utils.sh -source "test-utils.sh" +# shellcheck source=test/scripts/utils/lib.sh +source "../utils/lib.sh" +# shellcheck source=test/scripts/utils/download.sh +source "../utils/download.sh" # TODO: Do not source it, call it instead. echo "**********************************" echo "* Version to upgrade from: $LATEST_STABLE_RELEASE" echo "* Version to test: $CURRENT_VERSION" echo "**********************************" - +# TODO: Add support for either passing in --account-tokens or reading from env variable. if [[ -z "${ACCOUNT_TOKENS+x}" ]]; then echo "'ACCOUNT_TOKENS' must be specified" 1>&2 exit 1 @@ -36,11 +44,15 @@ if ! readarray -t tokens < "${ACCOUNT_TOKENS}"; then echo "Specify account numbers in 'ACCOUNT_TOKENS' file" 1>&2 exit 1 fi + +# TODO: Can we get rid of this? Seemse excessive / leaves a trail CI_LOGS_DIR="$TEST_DIR/.ci-logs" mkdir -p "$CI_LOGS_DIR" echo "$CURRENT_VERSION" > "$CI_LOGS_DIR/last-version.log" +# TODO: This should def be it's own step in the GitHub actions workflow + echo "**********************************" echo "* Downloading app packages" echo "**********************************" @@ -50,16 +62,22 @@ nice_time download_app_package "$LATEST_STABLE_RELEASE" "$TEST_OS" nice_time download_app_package "$CURRENT_VERSION" "$TEST_OS" nice_time download_e2e_executable "$CURRENT_VERSION" "$TEST_OS" +# TODO: This should def be it's own step in the GitHub actions workflow + echo "**********************************" echo "* Building test manager" echo "**********************************" cargo build -p test-manager +# TODO: This should def be it's own step in the GitHub actions workflow + echo "**********************************" echo "* Running tests" echo "**********************************" +# TODO: Should we really care about logging in this script? + mkdir -p "$CI_LOGS_DIR/os/" export TEST_REPORT="$CI_LOGS_DIR/${TEST_OS}_report" rm -f "$TEST_REPORT" diff --git a/test/scripts/test-utils.sh b/test/scripts/utils/lib.sh index be826a6ef0..1a92d5484c 100755 --- a/test/scripts/test-utils.sh +++ b/test/scripts/utils/lib.sh @@ -2,33 +2,30 @@ set -eu +SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" +TEST_FRAMEWORK_ROOT="$SCRIPT_DIR/../.." +REPO_ROOT="$TEST_FRAMEWORK_ROOT/.." + +export BUILD_RELEASE_REPOSITORY="https://releases.mullvad.net/desktop/releases" +export BUILD_DEV_REPOSITORY="https://releases.mullvad.net/desktop/builds" + function executable_not_found_in_dist_error { 1>&2 echo "Executable \"$1\" not found in specified dist dir. Exiting." exit 1 } -# Returns the directory of the test-utils.sh script -function get_test_utls_dir { - local script_path="${BASH_SOURCE[0]}" - local script_dir - if [[ -n "$script_path" ]]; then - script_dir="$(cd "$(dirname "$script_path")" >/dev/null && pwd)" - else - script_dir="$(cd "$(dirname "$0")" >/dev/null && pwd)" - fi - echo "$script_dir" +# Returns the directory of the lib.sh script +function get_test_utils_dir { + echo "$SCRIPT_DIR" } -export BUILD_RELEASE_REPOSITORY="https://releases.mullvad.net/desktop/releases" -export BUILD_DEV_REPOSITORY="https://releases.mullvad.net/desktop/builds" - # Infer stable version from GitHub repo RELEASES=$(curl -sf https://api.github.com/repos/mullvad/mullvadvpn-app/releases | jq -r '[.[] | select(((.tag_name|(startswith("android") or startswith("ios"))) | not))]') LATEST_STABLE_RELEASE=$(jq -r '[.[] | select(.prerelease==false)] | .[0].tag_name' <<<"$RELEASES") function get_current_version { local app_dir - app_dir="$(get_test_utls_dir)/../.." + app_dir="$REPO_ROOT" if [ -n "${TEST_DIST_DIR+x}" ]; then if [ ! -x "${TEST_DIST_DIR%/}/mullvad-version" ]; then executable_not_found_in_dist_error mullvad-version @@ -114,25 +111,22 @@ function is_dev_version { return 1 } -function get_app_filename { +function get_e2e_filename { local version=$1 local os=$2 if is_dev_version "$version"; then parse_build_version "$version" - version="${BUILD_VERSION}${COMMIT_HASH}${TAG:-}" + version="${BUILD_VERSION}${COMMIT_HASH}" fi case $os in - debian* | ubuntu*) - echo "MullvadVPN-${version}_amd64.deb" - ;; - fedora*) - echo "MullvadVPN-${version}_x86_64.rpm" + debian* | ubuntu* | fedora*) + echo "app-e2e-tests-${version}-x86_64-unknown-linux-gnu" ;; windows*) - echo "MullvadVPN-${version}.exe" + echo "app-e2e-tests-${version}-x86_64-pc-windows-msvc.exe" ;; macos*) - echo "MullvadVPN-${version}.pkg" + echo "app-e2e-tests-${version}-aarch64-apple-darwin" ;; *) echo "Unsupported target: $os" 1>&2 @@ -141,50 +135,25 @@ function get_app_filename { esac } -function download_app_package { - local version=$1 - local os=$2 - local package_repo="" - - if is_dev_version "$version"; then - package_repo="${BUILD_DEV_REPOSITORY}" - else - package_repo="${BUILD_RELEASE_REPOSITORY}" - fi - - local filename - filename=$(get_app_filename "$version" "$os") - local url="${package_repo}/$version/$filename" - - local package_dir - package_dir=$(get_package_dir) - if [[ ! -f "$package_dir/$filename" ]]; then - echo "Downloading build for $version ($os) from $url" - if ! curl -sf -o "$package_dir/$filename" "$url"; then - echo "Failed to download package from $url (hint: build may not exist, check the url)" 1>&2 - exit 1 - fi - else - echo "App package for version $version ($os) already exists at $package_dir/$filename, skipping download" - fi -} - -function get_e2e_filename { +function get_app_filename { local version=$1 local os=$2 if is_dev_version "$version"; then parse_build_version "$version" - version="${BUILD_VERSION}${COMMIT_HASH}" + version="${BUILD_VERSION}${COMMIT_HASH}${TAG:-}" fi case $os in - debian* | ubuntu* | fedora*) - echo "app-e2e-tests-${version}-x86_64-unknown-linux-gnu" + debian* | ubuntu*) + echo "MullvadVPN-${version}_amd64.deb" + ;; + fedora*) + echo "MullvadVPN-${version}_x86_64.rpm" ;; windows*) - echo "app-e2e-tests-${version}-x86_64-pc-windows-msvc.exe" + echo "MullvadVPN-${version}.exe" ;; macos*) - echo "app-e2e-tests-${version}-aarch64-apple-darwin" + echo "MullvadVPN-${version}.pkg" ;; *) echo "Unsupported target: $os" 1>&2 @@ -193,44 +162,16 @@ function get_e2e_filename { esac } -function download_e2e_executable { - local version=${1:?Error: version not set} - local os=${2:?Error: os not set} - local package_repo - - if is_dev_version "$version"; then - package_repo="${BUILD_DEV_REPOSITORY}" - else - package_repo="${BUILD_RELEASE_REPOSITORY}" - fi - - local filename - filename=$(get_e2e_filename "$version" "$os") - local url="${package_repo}/$version/additional-files/$filename" - - local package_dir - package_dir=$(get_package_dir) - if [[ ! -f "$package_dir/$filename" ]]; then - echo "Downloading e2e executable for $version ($os) from $url" - if ! curl -sf -o "$package_dir/$filename" "$url"; then - echo "Failed to download package from $url (hint: build may not exist, check the url)" 1>&2 - exit 1 - fi - else - echo "GUI e2e executable for version $version ($os) already exists at $package_dir/$filename, skipping download" - fi -} - function build_test_runner { local script_dir - script_dir=$(get_test_utls_dir) + script_dir="$(get_test_utils_dir)/../" local test_os=${1:?Error: test os not set} if [[ "${test_os}" =~ "debian"|"ubuntu"|"fedora" ]]; then - "$script_dir"/container-run.sh scripts/build-runner.sh linux || exit 1 + "$script_dir"/container-run.sh scripts/build/test-runner.sh linux || exit 1 elif [[ "${test_os}" =~ "windows" ]]; then - "$script_dir"/container-run.sh scripts/build-runner.sh windows || exit 1 + "$script_dir"/container-run.sh scripts/build/test-runner.sh windows || exit 1 elif [[ "${test_os}" =~ "macos" ]]; then - "$script_dir"/build-runner.sh macos || exit 1 + "$script_dir"/build/test-runner.sh macos || exit 1 fi } @@ -279,7 +220,7 @@ function run_tests_for_os { local package_dir package_dir=$(get_package_dir) local test_dir - test_dir=$(get_test_utls_dir)/.. + test_dir=$(get_test_utils_dir)/../.. read -ra test_filters_arg <<<"${TEST_FILTERS:-}" # Split the string by words into an array pushd "$test_dir" if [ -n "${TEST_DIST_DIR+x}" ]; then @@ -321,7 +262,7 @@ function run_tests_for_os { # Currently unused, but may be useful in the future function build_current_version { local app_dir - app_dir="$(get_test_utls_dir)/../.." + app_dir="$REPO_ROOT" local app_filename # TODO: TEST_OS must be set to local OS manually, should be set automatically app_filename=$(get_app_filename "$CURRENT_VERSION" "${TEST_OS:?Error: TEST_OS not set}") |
