blob: 255d95aca57526a41dca3e66e0d47f6662cef84e [file] [log] [blame]
#!/bin/bash
# Copyright 2025 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.
### Test expected behavior of 'fx use'
BT_FILE_DEPS=(
"scripts/fx"
"tools/devshell/lib/vars.sh"
"tools/devshell/use"
"tools/devshell/lib/fx-cmd-locator.sh"
"tools/devshell/lib/fx-optional-features.sh"
"tools/devshell/lib/platform.sh"
"tools/devshell/lib/generate-ssh-config.sh"
)
declare fx
BT_MKDIR_DEPS=(
"out/default"
"out/secondary"
)
BT_SET_UP() {
source "${BT_TEMP_DIR}/tools/devshell/tests/lib/fuchsia-mock.sh"
fx="$(btf::setup_fx)"
btf::make_out_dir "out/secondary"
FUCHSIA_DIR="${BT_TEMP_DIR}"
mkdir -p "$FUCHSIA_DIR/build"
touch "$FUCHSIA_DIR/build/regenerator"
chmod +x "$FUCHSIA_DIR/build/regenerator"
}
# Check that the current build dir is switched with fx use.
TEST_fx-use-switches-build-dir() {
local out="${BT_TEMP_DIR}/_fx_use_stdout"
BT_EXPECT "${fx}" use out/secondary >"$out" 2>&1
BT_EXPECT_FILE_CONTAINS "$FUCHSIA_DIR/.fx-build-dir" "out/secondary"
BT_EXPECT_FILE_CONTAINS "${out}" ""
}
# Check that fx use errors if we try to switch to a nonexistent build dir.
TEST_fx-use-nonexistent-build-dir() {
local out="${BT_TEMP_DIR}/_fx_use_stdout"
BT_EXPECT_FAIL "${fx}" use out/nonexistent >"$out" 2>&1
BT_EXPECT_FILE_CONTAINS "$FUCHSIA_DIR/.fx-build-dir" "out/default"
BT_EXPECT_FILE_CONTAINS_SUBSTRING "$out" '"out/nonexistent" is not a valid build dir'
}
# Check that we log the new default target.
TEST_fx-use-logs-default-target() {
local device_file="${FUCHSIA_DIR}/out/secondary.device"
echo "foo" >"${device_file}"
local out="${BT_TEMP_DIR}/_fx_use_stdout"
BT_EXPECT "${fx}" use out/secondary >"$out" 2>&1
# Check that the output has the right message
BT_EXPECT_FILE_CONTAINS "${out}" "INFO: The default device for out/secondary is \"foo\"."
BT_EXPECT_FILE_CONTAINS "${device_file}" "foo"
}
# Check that the default target log prints out an out dir short path.
TEST_fx-use-logs-default-target-absolute-path() {
local device_file="${FUCHSIA_DIR}/out/secondary.device"
echo "foo" >"${device_file}"
local out="${BT_TEMP_DIR}/_fx_use_stdout"
BT_EXPECT "${fx}" use "${FUCHSIA_DIR}/out/secondary/" >"$out" 2>&1
# Check that the output has the right message
BT_EXPECT_FILE_CONTAINS "${out}" "INFO: The default device for out/secondary is \"foo\"."
BT_EXPECT_FILE_CONTAINS "${device_file}" "foo"
}
# Check that we warn the user if $FUCHSIA_NODENAME has been set by the user.
TEST_fx-use-warns-if-nodename-env-var-set() {
local device_file="${FUCHSIA_DIR}/out/secondary.device"
echo "foo" >"${device_file}"
local out="${BT_TEMP_DIR}/_fx_use_stdout"
export FUCHSIA_NODENAME="bar"
BT_EXPECT "${fx}" use out/secondary >"$out" 2>&1
# Check that the output has the right message
BT_EXPECT_FILE_CONTAINS "${out}" "INFO: The default device for out/secondary is \"foo\".
WARNING: However, you've overridden this by setting \$FUCHSIA_NODENAME=\"bar\".
WARNING: If you want to use \"foo\", please unset the \$FUCHSIA_NODENAME environment variable."
BT_EXPECT_FILE_CONTAINS "${device_file}" "foo"
}
# Check that we warn the user if $FUCHSIA_DEVICE_ADDR has been set by the user.
TEST_fx-use-warns-if-device_addr-env-var-set() {
local device_file="${FUCHSIA_DIR}/out/secondary.device"
echo "foo" >"${device_file}"
local out="${BT_TEMP_DIR}/_fx_use_stdout"
export FUCHSIA_DEVICE_ADDR="bar"
BT_EXPECT "${fx}" use out/secondary >"$out" 2>&1
# Check that the output has the right message
BT_EXPECT_FILE_CONTAINS "${out}" "INFO: The default device for out/secondary is \"foo\".
WARNING: However, you've overridden this by setting \$FUCHSIA_DEVICE_ADDR=\"bar\".
WARNING: If you want to use \"foo\", please unset the \$FUCHSIA_DEVICE_ADDR environment variable."
BT_EXPECT_FILE_CONTAINS "${device_file}" "foo"
}
# Check that we warn the user if both $FUCHSIA_NODENAME and $FUCHSIA_DEVICE_ADDR
# have been set by the user.
TEST_fx-use-warns-if-both-env-vars-set() {
local device_file="${FUCHSIA_DIR}/out/secondary.device"
echo "foo" >"${device_file}"
local out="${BT_TEMP_DIR}/_fx_use_stdout"
export FUCHSIA_NODENAME="bar"
export FUCHSIA_DEVICE_ADDR="baz"
BT_EXPECT "${fx}" use out/secondary >"$out" 2>&1
# Check that the output has the right message
BT_EXPECT_FILE_CONTAINS "${out}" "INFO: The default device for out/secondary is \"foo\".
WARNING: However, you've overridden this by setting \$FUCHSIA_NODENAME=\"bar\" and \$FUCHSIA_DEVICE_ADDR=\"baz\".
WARNING: If you want to use \"foo\", please unset the \$FUCHSIA_NODENAME and \$FUCHSIA_DEVICE_ADDR environment variable."
BT_EXPECT_FILE_CONTAINS "${device_file}" "foo"
}
BT_RUN_TESTS "$@"