blob: f922b9df62d7edd316e2431ae141da797ef32e47 [file] [log] [blame]
#!/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 "$@"