|  | #!/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. | 
|  |  | 
|  | ### Test expected behavior of fx run-test | 
|  |  | 
|  | BT_FILE_DEPS=( | 
|  | "scripts/fx" | 
|  | "tools/devshell/lib/fx-cmd-locator.sh" | 
|  | "tools/devshell/lib/fx-optional-features.sh" | 
|  | "tools/devshell/lib/vars.sh" | 
|  | "tools/devshell/lib/platform.sh" | 
|  | "tools/devshell/run-test" | 
|  | ) | 
|  |  | 
|  | BT_MOCKED_TOOLS=( | 
|  | "tools/devshell/lib/updates.sh" | 
|  | "tools/devshell/build" | 
|  | "tools/devshell/wait" | 
|  | "tools/devshell/push-package" | 
|  | "tools/devshell/test" | 
|  | "tools/devshell/shell" | 
|  | "tools/devshell/symbolize" | 
|  | "tools/devshell/update-if-in-base" | 
|  | "tools/devshell/is-package-server-running" | 
|  | ) | 
|  |  | 
|  | declare fx DATA_DIR | 
|  |  | 
|  | BT_SET_UP() { | 
|  | source "${BT_TEMP_DIR}/tools/devshell/tests/lib/fuchsia-mock.sh" | 
|  | fx="$(btf::setup_fx)" | 
|  | mkdir -p "${BT_TEMP_DIR}/tools/devshell/lib" | 
|  | cat > "${BT_TEMP_DIR}/tools/devshell/lib/updates.sh.mock_side_effects" <<EOF | 
|  | function check-for-amber-server { | 
|  | return 0 | 
|  | } | 
|  | EOF | 
|  | } | 
|  |  | 
|  | # Test if "fx run-test" runs fx update-if-in-base when the package is in base | 
|  | TEST_in_base() { | 
|  | local test_name="example_component" | 
|  | local component1_url="fuchsia-pkg://fuchsia.com/example_package#meta/example_component_1.cmx", | 
|  | cat > "${BT_TEMP_DIR}/tools/devshell/test.mock_stdout" <<EOF | 
|  | command: fx shell run-test-component ${component1_url} | 
|  | cpu: arm64 | 
|  | label: //src/connectivity/telephony/example:example_package(//build/toolchain/fuchsia:arm64) | 
|  | name: ${test_name} | 
|  | os: fuchsia | 
|  | package_url: ${component1_url} | 
|  | path: /pkgfs/packages/${test_name}/0/test/${test_name} | 
|  | EOF | 
|  | echo "${test_name}" > "${BT_TEMP_DIR}/out/default/base_packages.list" | 
|  | local out="${BT_TEMP_DIR}/output.log" | 
|  | ${fx} run-test ${test_name} >${out} 2>&1 | 
|  | # check that "fx update-if-in-base" was called | 
|  | btf::expect-mock-args "${BT_TEMP_DIR}/tools/devshell/update-if-in-base" "${test_name}" | 
|  | } | 
|  |  | 
|  | # Test if "fx run-test" executes "fx shell runtests" properly when | 
|  | # the name passed results in multiple test packages. | 
|  | TEST_multiple_tests() { | 
|  | local component1_url="fuchsia-pkg://fuchsia.com/example_package#meta/example_component_1.cmx" | 
|  | local component2_url="fuchsia-pkg://fuchsia.com/example_package#meta/example_component_2.cmx" | 
|  | cat > "${BT_TEMP_DIR}/tools/devshell/test.mock_stdout" <<EOF | 
|  | command: fx shell run-test-component ${component1_url} | 
|  | cpu: arm64 | 
|  | label: //src/connectivity/telephony/example:example_package(//build/toolchain/fuchsia:arm64) | 
|  | name: example_package_test | 
|  | os: fuchsia | 
|  | package_url: ${component1_url} | 
|  | path: /pkgfs/packages/example_package_test/0/test/example_package_test | 
|  |  | 
|  | command: fx shell run-test-component ${component2_url} | 
|  | cpu: arm64 | 
|  | label: //src/connectivity/telephony/example:example_package(//build/toolchain/fuchsia:arm64) | 
|  | name: example_package_test | 
|  | os: fuchsia | 
|  | package_url: ${component2_url} | 
|  | path: /pkgfs/packages/example_package_test/0/test/example_package_test | 
|  | EOF | 
|  | local out="${BT_TEMP_DIR}/output.log" | 
|  | ${fx} run-test example_package >${out} 2>&1 | 
|  | # check if "fx shell" was executed properly for runtests syntax | 
|  | btf::expect-mock-args "${BT_TEMP_DIR}/tools/devshell/shell" \ | 
|  | "runtests" "${component1_url}" "${component2_url}" | 
|  | } | 
|  |  | 
|  | BT_RUN_TESTS "$@" | 
|  |  |