diff options
Diffstat (limited to 'test/end-to-end')
-rw-r--r-- | test/end-to-end/TARGETS | 42 | ||||
-rw-r--r-- | test/end-to-end/just-mr/invocation-log.sh | 14 | ||||
-rw-r--r-- | test/end-to-end/profile/TARGETS | 13 | ||||
-rw-r--r-- | test/end-to-end/profile/basic.sh | 84 |
4 files changed, 130 insertions, 23 deletions
diff --git a/test/end-to-end/TARGETS b/test/end-to-end/TARGETS index b4f878b7..4959a4b4 100644 --- a/test/end-to-end/TARGETS +++ b/test/end-to-end/TARGETS @@ -61,23 +61,33 @@ } , "TESTS": { "type": ["@", "rules", "test", "suite"] - , "arguments_config": [] + , "arguments_config": ["TEST_BOOTSTRAP_JUST_MR"] , "stage": ["end-to-end"] , "deps": - [ "remote tests" - , ["./", "actions", "TESTS"] - , ["./", "build-fails", "TESTS"] - , ["./", "built-in-rules", "TESTS"] - , ["./", "cli", "TESTS"] - , ["./", "execution-service", "TESTS"] - , ["./", "gc", "TESTS"] - , ["./", "generated-binary", "TESTS"] - , ["./", "git-import", "TESTS"] - , ["./", "just-lock", "TESTS"] - , ["./", "symlinks", "TESTS"] - , ["./", "target-cache", "TESTS"] - , ["./", "target-tests", "TESTS"] - , ["./", "user-errors", "TESTS"] - ] + { "type": "`" + , "$1": + [ "remote tests" + , ["./", "actions", "TESTS"] + , ["./", "build-fails", "TESTS"] + , ["./", "built-in-rules", "TESTS"] + , ["./", "cli", "TESTS"] + , ["./", "execution-service", "TESTS"] + , ["./", "gc", "TESTS"] + , ["./", "generated-binary", "TESTS"] + , ["./", "git-import", "TESTS"] + , ["./", "just-lock", "TESTS"] + , { "type": ",@" + , "$1": + { "type": "if" + , "cond": {"type": "var", "name": "TEST_BOOTSTRAP_JUST_MR"} + , "else": [["./", "profile", "TESTS"]] + } + } + , ["./", "symlinks", "TESTS"] + , ["./", "target-cache", "TESTS"] + , ["./", "target-tests", "TESTS"] + , ["./", "user-errors", "TESTS"] + ] + } } } diff --git a/test/end-to-end/just-mr/invocation-log.sh b/test/end-to-end/just-mr/invocation-log.sh index 1b4aea08..1e096f17 100644 --- a/test/end-to-end/just-mr/invocation-log.sh +++ b/test/end-to-end/just-mr/invocation-log.sh @@ -31,7 +31,7 @@ readonly RC="${ETC_DIR}/rc.json" cat > "${RC}" <<EOF { "invocation log": { "directory": {"root": "system", "path": "${LOG_DIR#/}"} - , "meta data": "meta.json" + , "metadata": "meta.json" , "--dump-graph": "graph.json" , "--profile": "profile.json" } @@ -71,20 +71,20 @@ echo blablabla > data.txt # As this is the first invocation, we can find the invocation-log dir by a glob INVOCATION_DIR="$(ls -d "${LOG_DIR}"/invocation-log-test/*)" -# ... this should create a meta-data file. -META_DATA_FILE="${INVOCATION_DIR}/meta.json" -echo "Meta data file ${META_DATA_FILE}" -cat "${META_DATA_FILE}" +# ... this should create a metadata file. +METADATA_FILE="${INVOCATION_DIR}/meta.json" +echo "Meta data file ${METADATA_FILE}" +cat "${METADATA_FILE}" echo # Sanity check: the local build root must occur in the command line as # it was specified in the rc file. -[ $(jq '.cmdline | contains(["'"${LBR}"'"])' "${META_DATA_FILE}") = true ] +[ $(jq '.cmdline | contains(["'"${LBR}"'"])' "${METADATA_FILE}") = true ] # Install the referenced configuration "${JUST_MR}" --rc "${RC}" install-cas -o "${REPORTED_CONFIG}" \ - $(jq -r '.configuration' "${META_DATA_FILE}") 2>&1 + $(jq -r '.configuration' "${METADATA_FILE}") 2>&1 echo cat "${REPORTED_CONFIG}" diff --git a/test/end-to-end/profile/TARGETS b/test/end-to-end/profile/TARGETS new file mode 100644 index 00000000..68d4d088 --- /dev/null +++ b/test/end-to-end/profile/TARGETS @@ -0,0 +1,13 @@ +{ "basic": + { "type": ["@", "rules", "shell/test", "script"] + , "name": ["basic"] + , "test": ["basic.sh"] + , "deps": [["", "mr-tool-under-test"], ["", "tool-under-test"]] + , "keep-dirs": ["log"] + } +, "TESTS": + { "type": ["@", "rules", "test", "suite"] + , "stage": ["profile"] + , "deps": ["basic"] + } +} diff --git a/test/end-to-end/profile/basic.sh b/test/end-to-end/profile/basic.sh new file mode 100644 index 00000000..aeafb9e7 --- /dev/null +++ b/test/end-to-end/profile/basic.sh @@ -0,0 +1,84 @@ +#!/bin/sh +# Copyright 2025 Huawei Cloud Computing Technology Co., Ltd. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +set -eu + +readonly JUST="${PWD}/bin/tool-under-test" +readonly JUST_MR="${PWD}/bin/mr-tool-under-test" +readonly LBR="${TEST_TMPDIR}/local-build-root" +readonly LOG_DIR="${PWD}/log" +readonly ETC_DIR="${PWD}/etc" +readonly WRK_DIR="${PWD}/work" + +# Set up an rc file, requesting invocation logging +mkdir -p "${ETC_DIR}" +readonly RC="${ETC_DIR}/rc.json" +cat > "${RC}" <<EOF +{ "invocation log": + { "directory": {"root": "system", "path": "${LOG_DIR#/}"} + , "--profile": "profile.json" + } +, "rc files": [{"root": "workspace", "path": "rc.json"}] +, "just": {"root": "system", "path": "${JUST#/}"} +, "local build root": {"root": "system", "path": "${LBR#/}"} +, "local launcher": ["env", "PATH=${PATH}"] +} +EOF +cat "${RC}" + +# Setup basic project, setting project id +mkdir -p "${WRK_DIR}" +cd "${WRK_DIR}" +touch ROOT +cat > repos.json <<'EOF' +{"repositories": {"": {"repository": {"type": "file", "path": "."}}}} +EOF + +cat > TARGETS <<'EOF' +{ "upper": + { "type": "generic" + , "deps": ["data.txt"] + , "outs": ["upper.txt"] + , "cmds": ["cat data.txt | tr a-z A-Z > upper.txt"] + } +} +EOF +echo blablabla > data.txt + +# Call analyse via just-mr; abuse the project id to distingush the runs +cat > rc.json <<'EOF' +{"invocation log": {"project id": "first-run"}} +EOF +"${JUST_MR}" --rc "${RC}" build upper 2>&1 +INVOCATION_DIR="$(ls -d "${LOG_DIR}"/first-run/*)" +PROFILE="${INVOCATION_DIR}/profile.json" + +cat "${PROFILE}" +[ $(jq '.actions | .[] | .cached' "${PROFILE}") = "false" ] + +# Build again, this time the action should be cached; +# again abuse the project id to distingush the runs +cat > rc.json <<'EOF' +{"invocation log": {"project id": "second-run"}} +EOF +"${JUST_MR}" --rc "${RC}" build upper 2>&1 +INVOCATION_DIR="$(ls -d "${LOG_DIR}"/second-run/*)" +PROFILE="${INVOCATION_DIR}/profile.json" + +cat "${PROFILE}" +[ $(jq '.actions | .[] | .cached' "${PROFILE}") = "true" ] + +echo OK |