| #!/bin/bash |
| # Copyright 2019 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 vendor |
| |
| 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/vendor" |
| ) |
| |
| declare fx |
| |
| BT_SET_UP() { |
| source "${BT_TEMP_DIR}/tools/devshell/tests/lib/fuchsia-mock.sh" |
| fx="$(btf::setup_fx)" |
| } |
| |
| # Test that 'fx vendor company1 mycommand' works |
| TEST_fxvendor_exec() { |
| local cmd_path="${BT_TEMP_DIR}/vendor/company1/scripts/devshell/mycommand" |
| btf::make_mock "$cmd_path" |
| |
| BT_EXPECT ${fx} vendor company1 mycommand arg1 arg2 |
| # ensure that 'mycommand arg1 arg2' was called |
| btf::expect-mock-args "${cmd_path}" "arg1" "arg2" |
| } |
| |
| # Ensure that when there's a vendor and non-vendor commands with the same name, |
| # the vendor version of the command is called when using "fx vendor company1" |
| TEST_fxvendor_conflict_vendor() { |
| local vendor_cmd="${BT_TEMP_DIR}/vendor/company1/scripts/devshell/mycommand" |
| local nonvendor_cmd="${BT_TEMP_DIR}/tools/devshell/mycommand" |
| btf::make_mock "${vendor_cmd}" |
| btf::make_mock "${nonvendor_cmd}" |
| |
| BT_EXPECT ${fx} vendor company1 mycommand arg1 arg2 |
| btf::expect-mock-args "${vendor_cmd}" "arg1" "arg2" |
| BT_EXPECT_FILE_DOES_NOT_EXIST "${nonvendor_cmd}.mock_state" |
| } |
| |
| # Ensure that when there's a vendor and non-vendor commands with the same name, |
| # the non-vendor version of the command is called by default |
| TEST_fxvendor_conflict_nonvendor() { |
| local vendor_cmd="${BT_TEMP_DIR}/vendor/company1/scripts/devshell/mycommand" |
| local nonvendor_cmd="${BT_TEMP_DIR}/tools/devshell/mycommand" |
| btf::make_mock "${vendor_cmd}" |
| btf::make_mock "${nonvendor_cmd}" |
| |
| BT_EXPECT ${fx} mycommand argA argB |
| btf::expect-mock-args "${nonvendor_cmd}" "argA" "argB" |
| BT_EXPECT_FILE_DOES_NOT_EXIST "${vendor_cmd}.mock_state" |
| } |
| |
| # Test that 'fx vendor company1 mycommand' works for a metadata mycommand.fx file |
| TEST_fxvendor_metadata() { |
| local binary_path="${BT_TEMP_DIR}/prebuilt/mytool/binary" |
| btf::make_mock "$binary_path" |
| local metadata_path="${BT_TEMP_DIR}/vendor/company1/scripts/devshell/mycommand.fx" |
| mkdir -p "$(dirname "${metadata_path}")" |
| echo '#### EXECUTABLE=${FUCHSIA_DIR}/prebuilt/mytool/binary' > "${metadata_path}" |
| |
| BT_EXPECT ${fx} vendor company1 mycommand arg1 arg2 |
| # ensure that 'binary arg1 arg2' was called |
| btf::expect-mock-args "${binary_path}" "arg1" "arg2" |
| } |
| |
| # Test that 'fx vendor company1 nonvendorcommand' fails |
| TEST_fxvendor_nonvendorcmd() { |
| btf::make_mock "${BT_TEMP_DIR}/vendor/company1/scripts/devshell/vendorcmd" |
| |
| local nonvendor_path="${BT_TEMP_DIR}/tools/devshell/nonvendorcmd" |
| btf::make_mock "$nonvendor_path" |
| |
| BT_EXPECT_FAIL ${fx} vendor company1 nonvendorcmd \>\& _stderr |
| } |
| |
| BT_RUN_TESTS "$@" |
| |