summaryrefslogtreecommitdiff
path: root/test/end-to-end
diff options
context:
space:
mode:
Diffstat (limited to 'test/end-to-end')
-rw-r--r--test/end-to-end/TARGETS42
-rw-r--r--test/end-to-end/just-mr/invocation-log.sh14
-rw-r--r--test/end-to-end/profile/TARGETS13
-rw-r--r--test/end-to-end/profile/basic.sh84
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