| #!/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 "$@" |