| #!/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 set-device' | |
| BT_FILE_DEPS=( | |
| "scripts/fx" | |
| "tools/devshell/lib/vars.sh" | |
| "tools/devshell/lib/is_invoked_by_agent.sh" | |
| "tools/devshell/lib/agents.txt" | |
| "tools/devshell/set-device" | |
| "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" | |
| ) | |
| BT_SET_UP() { | |
| source "${BT_TEMP_DIR}/tools/devshell/tests/lib/fuchsia-mock.sh" | |
| fx="$(btf::setup_fx)" | |
| FUCHSIA_DIR="${BT_TEMP_DIR}" | |
| } | |
| # Check that the device file is written when setting the device | |
| TEST_fx-set-device-writes-file() { | |
| local device_name="foo" | |
| BT_EXPECT "${fx}" set-device ${device_name} 2>/dev/null | |
| local device_file="${FUCHSIA_DIR}/out/default.device" | |
| BT_EXPECT_FILE_EXISTS "${device_file}" | |
| BT_EXPECT_FILE_CONTAINS "${device_file}" "${device_name}" | |
| } | |
| # Check that serial: and id: specifiers are accepted by set-device | |
| TEST_fx-set-device-writes-file-serial-and-id() { | |
| local device_name="serial:EM-C0B2F2D96" | |
| BT_EXPECT "${fx}" set-device "${device_name}" | |
| local device_file="${FUCHSIA_DIR}/out/default.device" | |
| BT_EXPECT_FILE_EXISTS "${device_file}" | |
| BT_EXPECT_FILE_CONTAINS "${device_file}" "${device_name}" | |
| device_name="id:EM-C0B2F2D96" | |
| BT_EXPECT "${fx}" set-device "${device_name}" | |
| BT_EXPECT_FILE_CONTAINS "${device_file}" "${device_name}" | |
| } | |
| # Check that the device file is written when setting the device with a non-default build-dir | |
| TEST_fx-set-device-writes-file-non-standard-build-dir() { | |
| local device_name="bar" | |
| local rel_build_dir="out/foo" | |
| local build_dir="${FUCHSIA_DIR}/${rel_build_dir}" | |
| echo "${rel_build_dir}" > "${FUCHSIA_DIR}/.fx-build-dir" | |
| mkdir -p "${build_dir}" | |
| cat > "${build_dir}/fx.config" << EOF | |
| FUCHSIA_BUILD_DIR="${FUCHSIA_DIR}/out/foo" | |
| EOF | |
| BT_EXPECT "${fx}" set-device ${device_name} 2>/dev/null | |
| local device_file="${build_dir}.device" | |
| BT_EXPECT_FILE_EXISTS "${device_file}" | |
| BT_EXPECT_FILE_CONTAINS "${device_file}" "${device_name}" | |
| } | |
| # Check that the command fails if used with -t | |
| TEST_fx-set-device-fails-with-target-flag() { | |
| local out="${BT_TEMP_DIR}/_fx_set_device_output" | |
| local device_file="${FUCHSIA_DIR}/out/default.device" | |
| # Clear state from previous tests (as CI may run tests in a shared directory) | |
| rm -f "${device_file}" | |
| BT_EXPECT_FAIL "${fx}" -t foo set-device bar >"$out" 2>&1 | |
| # Check that the output has the right message | |
| BT_EXPECT_FILE_CONTAINS "${out}" "ERROR: The -t flag is not supported when calling this function | |
| ERROR: Please remove the -t or --target flag from your command." | |
| BT_EXPECT_FILE_DOES_NOT_EXIST "${device_file}" | |
| } | |
| # fx set-device should print an error if FUCHSIA_NODENAME is set outside of fx. | |
| TEST_fx-set-device-errors-if-nodename-env-var-set-already() { | |
| local out="${BT_TEMP_DIR}/_fx_set_device_output" | |
| export FUCHSIA_NODENAME="bar" | |
| local device="foo" | |
| BT_EXPECT_FAIL "${fx}" set-device "${device}" >"$out" 2>&1 | |
| # Check that the output has the right message | |
| BT_EXPECT_FILE_CONTAINS "${out}" "Default device for '${FUCHSIA_DIR}/out/default' is now foo | |
| ERROR: However, you've overriden this value by setting \$FUCHSIA_NODENAME=\"bar\". | |
| ERROR: If you want to use \"foo\", please unset the \$FUCHSIA_NODENAME environment variable." | |
| local device_file="${FUCHSIA_DIR}/out/default.device" | |
| BT_EXPECT_FILE_EXISTS "${device_file}" | |
| BT_EXPECT_FILE_CONTAINS "${device_file}" "${device}" | |
| } | |
| # fx set-device should print an error if FUCHSIA_DEVICE_ADDR is set outside of fx. | |
| TEST_fx-set-device-errors-if-device-addr-env-var-set() { | |
| local out="${BT_TEMP_DIR}/_fx_set_device_output" | |
| export FUCHSIA_DEVICE_ADDR="baz" | |
| local device="foo" | |
| BT_EXPECT_FAIL "${fx}" set-device "${device}" >"$out" 2>&1 | |
| # Check that the output has the right message | |
| BT_EXPECT_FILE_CONTAINS "${out}" "Default device for '${FUCHSIA_DIR}/out/default' is now foo | |
| ERROR: However, you've overriden this value by setting \$FUCHSIA_DEVICE_ADDR=\"baz\". | |
| ERROR: If you want to use \"foo\", please unset the \$FUCHSIA_DEVICE_ADDR environment variable." | |
| local device_file="${FUCHSIA_DIR}/out/default.device" | |
| BT_EXPECT_FILE_EXISTS "${device_file}" | |
| BT_EXPECT_FILE_CONTAINS "${device_file}" "${device}" | |
| } | |
| # fx set-device should print an error if FUCHSIA_NODENAME and | |
| # FUCHSIA_DEVICE_ADDR are both set outside of fx. | |
| TEST_fx-set-device-errors-if-both-env-vars-set() { | |
| local out="${BT_TEMP_DIR}/_fx_set_device_output" | |
| export FUCHSIA_NODENAME="bar" | |
| export FUCHSIA_DEVICE_ADDR="baz" | |
| local device="foo" | |
| BT_EXPECT_FAIL "${fx}" set-device "${device}" >"$out" 2>&1 | |
| # Check that the output has the right message | |
| BT_EXPECT_FILE_CONTAINS "${out}" "Default device for '${FUCHSIA_DIR}/out/default' is now foo | |
| ERROR: However, you've overriden this value by setting \$FUCHSIA_NODENAME=\"bar\" and \$FUCHSIA_DEVICE_ADDR=\"baz\". | |
| ERROR: If you want to use \"foo\", please unset the \$FUCHSIA_NODENAME and \$FUCHSIA_DEVICE_ADDR environment variable." | |
| local device_file="${FUCHSIA_DIR}/out/default.device" | |
| BT_EXPECT_FILE_EXISTS "${device_file}" | |
| BT_EXPECT_FILE_CONTAINS "${device_file}" "${device}" | |
| } | |
| BT_RUN_TESTS "$@" |