blob: 212457f181e5ed2eae9f5a776dbcde14b3931256 [file] [log] [blame]
#!/bin/bash
# Copyright 2020 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
#
# Tests for fuchsia-common.sh library script
SCRIPT_SRC_DIR="$(cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd)"
BT_FILE_DEPS=(
"scripts/sdk/gn/base/bin/fuchsia-common.sh"
"scripts/sdk/gn/base/bin/sshconfig"
"scripts/sdk/gn/testdata/meta/manifest.json"
)
SOURCE_FILE="${SCRIPT_SRC_DIR}/../base/bin/fuchsia-common.sh"
REPO_ROOT="$(realpath "$(dirname "${SOURCE_FILE}")")"
MOCKED_SSH_BIN="mocked/ssh"
MOCKED_DEVICE_FINDER="tools/device-finder"
MOCKED_GSUTIL="${REPO_ROOT}/gsutil"
MOCKED_CIPD="${REPO_ROOT}/cipd"
BT_MOCKED_TOOLS=(
"${MOCKED_SSH_BIN}"
"${MOCKED_DEVICE_FINDER}"
"${MOCKED_GSUTIL}"
"${MOCKED_CIPD}"
)
BT_SET_UP() {
btf::make_mock "${MOCKED_SSH_BIN}"
cat > "${MOCKED_SSH_BIN}.mock_side_effects" <<"EOF"
echo "$@"
EOF
}
source "${SOURCE_FILE}"
TEST_fx-warn() {
BT_ASSERT_FUNCTION_EXISTS fx-warn
fx-warn "This is a test" 2>fx-warn-stderr.txt > fx-warn-stdout.txt
BT_EXPECT_FILE_CONTAINS "fx-warn-stderr.txt" "WARNING: This is a test"
[ ! -s fx-warn-stdout.txt ] || BT_EXPECT_GOOD_STATUS $?
}
TEST_fx-error() {
BT_ASSERT_FUNCTION_EXISTS fx-error
fx-error "This is a test" 2>fx-error-stderr.txt > fx-error-stdout.txt
BT_EXPECT_FILE_CONTAINS "fx-error-stderr.txt" "ERROR: This is a test"
[ ! -s fx-error-stdout.txt ] || BT_EXPECT_GOOD_STATUS $?
}
TEST_ssh-cmd() {
BT_ASSERT_FUNCTION_EXISTS ssh-cmd
BT_ASSERT_FUNCTION_EXISTS set-ssh-path
set-ssh-path "${MOCKED_SSH_BIN}"
ssh-cmd remote-host ls -l
source "${MOCKED_SSH_BIN}.mock_state"
EXPECTED_SSH_CMD_LINE=("${MOCKED_SSH_BIN}" "-F" "${REPO_ROOT}/sshconfig" "remote-host" "ls" "-l")
BT_EXPECT_EQ "${EXPECTED_SSH_CMD_LINE[*]}" "${BT_MOCK_ARGS[*]}"
}
TEST_get-device-name() {
BT_ASSERT_FUNCTION_EXISTS get-device-name
btf::make_mock "${MOCKED_DEVICE_FINDER}"
cat > "${MOCKED_DEVICE_FINDER}.mock_side_effects" <<"EOF"
echo fe80::4607:bff:fe69:b53e%enx44070b69b53f atom-device-name-mocked
EOF
DEVICE_NAME="$(get-device-name ".")"
BT_EXPECT_EQ "${DEVICE_NAME}" "atom-device-name-mocked"
}
TEST_get-device-ip-by-name() {
BT_ASSERT_FUNCTION_EXISTS get-device-ip-by-name
btf::make_mock "${MOCKED_DEVICE_FINDER}"
MOCK_DEVICE="atom-device-name-mocked"
get-device-ip-by-name "." "${MOCK_DEVICE}"
source "${MOCKED_DEVICE_FINDER}.mock_state"
EXPECTED_DEVICE_FINDER_CMD_LINE=("./${MOCKED_DEVICE_FINDER}" "resolve" "-device-limit" "1" "-ipv4=false" "-netboot" "${MOCK_DEVICE}")
BT_EXPECT_EQ "${EXPECTED_DEVICE_FINDER_CMD_LINE[*]}" "${BT_MOCK_ARGS[*]}"
}
TEST_get-device-ip-by-name-no-args() {
BT_ASSERT_FUNCTION_EXISTS get-device-ip-by-name
btf::make_mock "${MOCKED_DEVICE_FINDER}"
get-device-ip-by-name "."
source "${MOCKED_DEVICE_FINDER}.mock_state"
EXPECTED_DEVICE_FINDER_CMD_LINE=("./${MOCKED_DEVICE_FINDER}" "list" "-netboot" "-device-limit" "1" "-ipv4=false")
BT_EXPECT_EQ "${EXPECTED_DEVICE_FINDER_CMD_LINE[*]}" "${BT_MOCK_ARGS[*]}"
}
TEST_get-device-ip() {
BT_ASSERT_FUNCTION_EXISTS get-device-ip
btf::make_mock "${MOCKED_DEVICE_FINDER}"
MOCK_DEVICE="atom-device-name-mocked"
get-device-ip "."
source "${MOCKED_DEVICE_FINDER}.mock_state"
EXPECTED_DEVICE_FINDER_CMD_LINE=("./${MOCKED_DEVICE_FINDER}" "list" "-netboot" "-device-limit" "1" "-ipv4=false")
BT_EXPECT_EQ "${EXPECTED_DEVICE_FINDER_CMD_LINE[*]}" "${BT_MOCK_ARGS[*]}"
}
TEST_get-host-ip() {
BT_ASSERT_FUNCTION_EXISTS get-host-ip
btf::make_mock "${MOCKED_DEVICE_FINDER}"
cat > "${MOCKED_DEVICE_FINDER}.mock_side_effects" <<"EOF"
echo "fe80::4600:fff:fefe:b555%enx010101010101"
EOF
HOST_IP="$(get-host-ip ".")"
BT_EXPECT_EQ "${HOST_IP}" "fe80::4600:fff:fefe:b555"
}
TEST_get-sdk-version() {
BT_ASSERT_FUNCTION_EXISTS get-sdk-version
SDK_VERSION="$(get-sdk-version "${SCRIPT_SRC_DIR}/../../testdata")"
BT_EXPECT_EQ "${SDK_VERSION}" "8890373976687374912"
}
TEST_run-gsutil() {
BT_ASSERT_FUNCTION_EXISTS run-gsutil
btf::make_mock "${MOCKED_GSUTIL}"
cat > "${MOCKED_GSUTIL}.mock_side_effects" <<EOF
echo "gs://fuchsia/development/LATEST"
EOF
RESULT="$(run-gsutil ls gs://fuchsia/development/LATEST)"
BT_EXPECT_EQ "${RESULT}" "gs://fuchsia/development/LATEST"
}
TEST_run-cipd() {
BT_ASSERT_FUNCTION_EXISTS run-cipd
btf::make_mock "${MOCKED_CIPD}"
cat > "${MOCKED_CIPD}.mock_side_effects" <<EOF
echo "fuchsia/"
EOF
RESULT="$(run-cipd ls)"
BT_EXPECT_EQ "${RESULT}" "fuchsia/"
}
TEST_get-available-images() {
BT_ASSERT_FUNCTION_EXISTS get-available-images
btf::make_mock "${MOCKED_GSUTIL}"
cat > "${MOCKED_GSUTIL}.mock_side_effects" <<"EOF"
if [[ "${2}" == gs://fuchsia* ]]; then
echo "gs://fuchsia/development/sdk_id/images/image1.tgz"
echo "gs://fuchsia/development/sdk_id/images/image2.tgz"
echo "gs://fuchsia/development/sdk_id/images/image3.tgz"
elif [[ "${2}" == gs://other* ]]; then
echo "gs://other/development/sdk_id/images/image4.tgz"
echo "gs://other/development/sdk_id/images/image5.tgz"
echo "gs://other/development/sdk_id/images/image6.tgz"
fi
EOF
RESULT_LIST=()
IFS=' ' read -r -a RESULT_LIST <<< "$(get-available-images "sdk_id")"
BT_EXPECT_EQ "${RESULT_LIST[*]}" "image1 image2 image3"
IFS=' ' read -r -a RESULT_LIST <<< "$(get-available-images "sdk_id" "other")"
BT_EXPECT_EQ "${RESULT_LIST[*]}" "image4 image5 image6 image1 image2 image3"
}
BT_RUN_TESTS "$@"