| #!/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 basic fx execution flows |
| |
| # shellcheck disable=SC2034 # unused variable |
| BT_MOCKED_TOOLS=( |
| "mockgoeshere" |
| ) |
| |
| BT_SET_UP() { |
| mocked_tool="${BT_TEMP_DIR}/mockgoeshere" |
| } |
| |
| # Verifies that |
| TEST_mock-tokenizes-correctly() { |
| "${mocked_tool}" -1 --2 3 four "five" " six " " \"seven\" " " eight stilleight " " nine \" stillnine " |
| |
| # shellcheck source=/dev/null |
| source "${BT_TEMP_DIR}/mockgoeshere.mock_state" |
| BT_EXPECT_EQ "${BT_MOCK_ARGS[0]}" "${BT_TEMP_DIR}"/mockgoeshere |
| BT_EXPECT_EQ "${BT_MOCK_ARGS[1]}" -1 |
| BT_EXPECT_EQ "${BT_MOCK_ARGS[2]}" --2 |
| BT_EXPECT_EQ "${BT_MOCK_ARGS[3]}" 3 |
| BT_EXPECT_EQ "${BT_MOCK_ARGS[4]}" four |
| BT_EXPECT_EQ "${BT_MOCK_ARGS[5]}" five |
| BT_EXPECT_EQ "${BT_MOCK_ARGS[6]}" ' six ' |
| BT_EXPECT_EQ "${BT_MOCK_ARGS[7]}" ' "seven" ' |
| BT_EXPECT_EQ "${BT_MOCK_ARGS[8]}" ' eight stilleight ' |
| BT_EXPECT_EQ "${BT_MOCK_ARGS[9]}" ' nine " stillnine ' |
| } |
| |
| TEST_mock-handles-single-double-quotes() { |
| "${mocked_tool}" 'before"after' |
| |
| # shellcheck source=/dev/null |
| source "${BT_TEMP_DIR}/mockgoeshere.mock_state" |
| BT_EXPECT_EQ "${BT_MOCK_ARGS[0]}" "${BT_TEMP_DIR}"/mockgoeshere |
| BT_EXPECT_EQ "${BT_MOCK_ARGS[1]}" 'before"after' |
| } |
| |
| TEST_mock-stdout-for-multiple-calls() { |
| echo "any call" > "${mocked_tool}.mock_stdout" |
| echo "first call" > "${mocked_tool}.mock_stdout.1" |
| echo "third call" > "${mocked_tool}.mock_stdout.3" |
| |
| "${mocked_tool}" "FIRST" > "stdout.1" |
| "${mocked_tool}" "SECOND" > "stdout.2" |
| "${mocked_tool}" "THIRD" > "stdout.3" |
| |
| # shellcheck source=/dev/null |
| source "${mocked_tool}.mock_state.1" |
| BT_EXPECT_EQ "${BT_MOCK_ARGS[0]}" "${mocked_tool}" |
| BT_EXPECT_EQ "${BT_MOCK_ARGS[1]}" "FIRST" |
| BT_EXPECT_FILE_CONTAINS "stdout.1" "first call" |
| |
| # shellcheck source=/dev/null |
| source "${mocked_tool}.mock_state.2" |
| BT_EXPECT_EQ "${BT_MOCK_ARGS[0]}" "${mocked_tool}" |
| BT_EXPECT_EQ "${BT_MOCK_ARGS[1]}" "SECOND" |
| BT_EXPECT_FILE_CONTAINS "stdout.2" "any call" |
| |
| # shellcheck source=/dev/null |
| source "${mocked_tool}.mock_state.3" |
| BT_EXPECT_EQ "${BT_MOCK_ARGS[0]}" "${mocked_tool}" |
| BT_EXPECT_EQ "${BT_MOCK_ARGS[1]}" "THIRD" |
| BT_EXPECT_FILE_CONTAINS "stdout.3" "third call" |
| } |
| |
| TEST_mock-stderr-for-multiple-calls() { |
| echo "any call" > "${mocked_tool}.mock_stderr" |
| echo "first call" > "${mocked_tool}.mock_stderr.1" |
| echo "third call" > "${mocked_tool}.mock_stderr.3" |
| |
| "${mocked_tool}" "FIRST" 2> "stderr.1" |
| "${mocked_tool}" "SECOND" 2> "stderr.2" |
| "${mocked_tool}" "THIRD" 2> "stderr.3" |
| |
| # shellcheck source=/dev/null |
| source "${mocked_tool}.mock_state.1" |
| BT_EXPECT_EQ "${BT_MOCK_ARGS[0]}" "${mocked_tool}" |
| BT_EXPECT_EQ "${BT_MOCK_ARGS[1]}" "FIRST" |
| BT_EXPECT_FILE_CONTAINS "stderr.1" "first call" |
| |
| # shellcheck source=/dev/null |
| source "${mocked_tool}.mock_state.2" |
| BT_EXPECT_EQ "${BT_MOCK_ARGS[0]}" "${mocked_tool}" |
| BT_EXPECT_EQ "${BT_MOCK_ARGS[1]}" "SECOND" |
| BT_EXPECT_FILE_CONTAINS "stderr.2" "any call" |
| |
| # shellcheck source=/dev/null |
| source "${mocked_tool}.mock_state.3" |
| BT_EXPECT_EQ "${BT_MOCK_ARGS[0]}" "${mocked_tool}" |
| BT_EXPECT_EQ "${BT_MOCK_ARGS[1]}" "THIRD" |
| BT_EXPECT_FILE_CONTAINS "stderr.3" "third call" |
| } |
| |
| TEST_mock-side-effects-for-multiple-calls() { |
| cat > "${mocked_tool}.mock_side_effects" <<EOF |
| echo "any call" |
| return 0 |
| EOF |
| |
| cat > "${mocked_tool}.mock_side_effects.1" <<EOF |
| echo "first call" |
| return 10 |
| EOF |
| |
| cat > "${mocked_tool}.mock_side_effects.3" <<EOF |
| echo "third call" |
| return 20 |
| EOF |
| |
| "${mocked_tool}" "FIRST" > "stdout.1" |
| "${mocked_tool}" "SECOND" > "stdout.2" |
| "${mocked_tool}" "THIRD" > "stdout.3" |
| |
| # shellcheck source=/dev/null |
| source "${mocked_tool}.mock_state.1" |
| BT_EXPECT_EQ "${BT_MOCK_ARGS[0]}" "${mocked_tool}" |
| BT_EXPECT_EQ "${BT_MOCK_ARGS[1]}" "FIRST" |
| BT_EXPECT_FILE_CONTAINS "stdout.1" "first call" |
| BT_EXPECT_EQ "${BT_MOCK_SIDE_EFFECT_STATUS}" 10 |
| |
| # shellcheck source=/dev/null |
| source "${mocked_tool}.mock_state.2" |
| BT_EXPECT_EQ "${BT_MOCK_ARGS[0]}" "${mocked_tool}" |
| BT_EXPECT_EQ "${BT_MOCK_ARGS[1]}" "SECOND" |
| BT_EXPECT_FILE_CONTAINS "stdout.2" "any call" |
| BT_EXPECT_EQ "${BT_MOCK_SIDE_EFFECT_STATUS}" 0 |
| |
| # shellcheck source=/dev/null |
| source "${mocked_tool}.mock_state.3" |
| BT_EXPECT_EQ "${BT_MOCK_ARGS[0]}" "${mocked_tool}" |
| BT_EXPECT_EQ "${BT_MOCK_ARGS[1]}" "THIRD" |
| BT_EXPECT_FILE_CONTAINS "stdout.3" "third call" |
| BT_EXPECT_EQ "${BT_MOCK_SIDE_EFFECT_STATUS}" 20 |
| } |
| |
| TEST_mock-status-for-multiple-calls() { |
| echo "0" > "${mocked_tool}.mock_status" |
| echo "10" > "${mocked_tool}.mock_status.1" |
| echo "20" > "${mocked_tool}.mock_status.3" |
| |
| "${mocked_tool}" "FIRST" |
| "${mocked_tool}" "SECOND" |
| "${mocked_tool}" "THIRD" |
| |
| declare -i mock_status |
| |
| # shellcheck source=/dev/null |
| source "${mocked_tool}.mock_state.1" |
| mock_status=$? |
| BT_EXPECT_EQ "${mock_status}" 10 |
| BT_EXPECT_EQ "${BT_MOCK_ARGS[0]}" "${mocked_tool}" |
| BT_EXPECT_EQ "${BT_MOCK_ARGS[1]}" "FIRST" |
| |
| # shellcheck source=/dev/null |
| source "${mocked_tool}.mock_state.2" |
| mock_status=$? |
| BT_EXPECT_EQ "${mock_status}" 0 |
| BT_EXPECT_EQ "${BT_MOCK_ARGS[0]}" "${mocked_tool}" |
| BT_EXPECT_EQ "${BT_MOCK_ARGS[1]}" "SECOND" |
| |
| # shellcheck source=/dev/null |
| source "${mocked_tool}.mock_state.3" |
| mock_status=$? |
| BT_EXPECT_EQ "${mock_status}" 20 |
| BT_EXPECT_EQ "${BT_MOCK_ARGS[0]}" "${mocked_tool}" |
| BT_EXPECT_EQ "${BT_MOCK_ARGS[1]}" "THIRD" |
| } |
| |
| BT_RUN_TESTS "$@" |