summaryrefslogtreecommitdiffhomepage
path: root/test/scripts
diff options
context:
space:
mode:
authorMarkus Pettersson <markus.pettersson@mullvad.net>2025-02-12 13:57:40 +0100
committerMarkus Pettersson <markus.pettersson@mullvad.net>2025-02-25 12:06:49 +0100
commit28a0154b9b788cedead8fe47dcc1ac12a8af356b (patch)
tree43abb5b8e44d696a1aae2ce00a5a479c79de4dcd /test/scripts
parent5df6076543862e5f8c0ac0430f2774ecb9cd8362 (diff)
downloadmullvadvpn-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-xtest/scripts/build.sh4
-rwxr-xr-xtest/scripts/build/runner-image.sh (renamed from test/scripts/build-runner-image.sh)13
-rwxr-xr-xtest/scripts/build/test-manager.sh (renamed from test/scripts/build-manager.sh)2
-rwxr-xr-xtest/scripts/build/test-runner.sh (renamed from test/scripts/build-runner.sh)6
-rwxr-xr-xtest/scripts/run/ci.sh (renamed from test/scripts/ci-runtests.sh)26
-rwxr-xr-xtest/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}")