summaryrefslogtreecommitdiff
path: root/test/end-to-end/serve-service
diff options
context:
space:
mode:
authorPaul Cristian Sarbu <paul.cristian.sarbu@huawei.com>2023-12-20 12:41:12 +0100
committerPaul Cristian Sarbu <paul.cristian.sarbu@huawei.com>2023-12-20 17:14:53 +0100
commit450bac21b48d70d95865db3874da0b760f1eb93f (patch)
tree694ba74df701c48068518c2ce6b49a03eeb381cc /test/end-to-end/serve-service
parent0d361155bb3ca4539be9282908598f9ea2610fdb (diff)
downloadjustbuild-450bac21b48d70d95865db3874da0b760f1eb93f.tar.gz
test: Serve endpoint provides tc value for cache misses
During the analysis of export targets, if there is a local target cache miss, we should also interrogate the serve endpoint (if given) for the target cache value before proceeding with the analysis. For this test we have extended the "with_serve" runner to expose also the remote-execution build root to the test env.
Diffstat (limited to 'test/end-to-end/serve-service')
-rw-r--r--test/end-to-end/serve-service/TARGETS8
-rw-r--r--test/end-to-end/serve-service/serve_query_target_cache_value.sh152
2 files changed, 160 insertions, 0 deletions
diff --git a/test/end-to-end/serve-service/TARGETS b/test/end-to-end/serve-service/TARGETS
index 774639ef..c2454624 100644
--- a/test/end-to-end/serve-service/TARGETS
+++ b/test/end-to-end/serve-service/TARGETS
@@ -77,6 +77,13 @@
]
, "repos": ["serve-tree (archive)"]
}
+, "serve-query-target-cache-value":
+ { "type": ["end-to-end", "with serve"]
+ , "name": ["serve-query-target-cache-value"]
+ , "test": ["serve_query_target_cache_value.sh"]
+ , "deps":
+ [["end-to-end", "mr-tool-under-test"], ["end-to-end", "tool-under-test"]]
+ }
, "TESTS":
{ "type": "install"
, "tainted": ["test"]
@@ -89,6 +96,7 @@
, "serve-start-execute"
, "serve-start-execute-sharding"
, "serve-export-deps"
+ , "serve-query-target-cache-value"
]
, { "type": "if"
, "cond": {"type": "var", "name": "TEST_COMPATIBLE_REMOTE"}
diff --git a/test/end-to-end/serve-service/serve_query_target_cache_value.sh b/test/end-to-end/serve-service/serve_query_target_cache_value.sh
new file mode 100644
index 00000000..ff688a06
--- /dev/null
+++ b/test/end-to-end/serve-service/serve_query_target_cache_value.sh
@@ -0,0 +1,152 @@
+#!/bin/sh
+# Copyright 2023 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.
+
+###
+# Check that a build will attempt to get the target cache value from just serve
+# during analysis of an export target in the case of a local target cache miss.
+##
+
+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 TOOLS_DIR="${TEST_TMPDIR}/tools"
+readonly OUT="${TEST_TMPDIR}/out"
+
+readonly DISPATCH_FILE="${TEST_TMPDIR}/dispatch.json"
+
+cat > "${DISPATCH_FILE}" <<EOF
+[[{"runner": "node-name"}, "127.0.0.1:1234"]]
+EOF
+
+readonly REMOTE_PROPERTIES="--remote-execution-property foo:bar"
+readonly DISPATCH="--endpoint-configuration ${DISPATCH_FILE}"
+
+COMPAT=""
+if [ "${COMPATIBLE:-}" = "YES" ]; then
+ COMPAT="--compatible"
+fi
+
+# Have tools in the "outside environment"
+mkdir -p "${TOOLS_DIR}"
+cat > "${TOOLS_DIR}/tree" <<'EOF'
+#!/bin/sh
+mkdir -p $1/hello/world/tree
+echo Hello World > $1/hello/world/tree/hello.txt
+echo -n World > $1/hello/world/tree/name.txt
+EOF
+chmod 755 "${TOOLS_DIR}/tree"
+
+mkdir work
+cd work
+
+touch WORKSPACE
+cat > TARGETS <<'EOF'
+{ "tree":
+ { "type": "generic"
+ , "arguments_config": ["ENV"]
+ , "out_dirs": ["out"]
+ , "cmds": ["${TOOLS}/tree out"]
+ , "env": {"type": "var", "name": "ENV"}
+ }
+, "":
+ { "type": "export"
+ , "flexible_config": ["ENV"]
+ , "target": "tree"
+ }
+}
+EOF
+
+cat > repos.json <<'EOF'
+{ "main": ""
+, "repositories":
+ { "":
+ {"repository": {"type": "file", "path": ".", "pragma": {"to_git": true}}}
+ }
+}
+EOF
+
+cat repos.json
+cat TARGETS
+
+# Build to fill the target cache of the serve endpoint
+CONF=$("${JUST_MR}" --norc --local-build-root "${SERVE_LBR}" setup)
+
+echo "generated conf":
+cat "${CONF}"
+echo
+
+"${JUST}" build \
+ --local-build-root "${SERVE_LBR}" \
+ -C "${CONF}" \
+ -r "${REMOTE_EXECUTION_ADDRESS}" \
+ ${COMPAT} \
+ ${REMOTE_PROPERTIES} \
+ ${DISPATCH} \
+ -D '{"ENV": {"TOOLS": "'${TOOLS_DIR}'"}}' 2>&1
+
+ls -R "${SERVE_LBR}"
+
+# Demonstrate that from now on, we don't build anything any more
+rm -rf "${TOOLS_DIR}"
+
+# Setup for a build in a new build root
+CONF=$("${JUST_MR}" --norc --just "${JUST}" --local-build-root "${LBR}" setup)
+
+echo "generated conf":
+cat "${CONF}"
+echo
+
+# Demonstrate that we can analyse, but not build locally
+"${JUST}" analyse \
+ --local-build-root "${LBR}" \
+ -C "${CONF}" \
+ -D '{"ENV": {"TOOLS": "'${TOOLS_DIR}'"}}' 2>&1
+
+"${JUST}" build \
+ --local-build-root "${LBR}" \
+ -C "${CONF}" \
+ -D '{"ENV": {"TOOLS": "'${TOOLS_DIR}'"}}' 2>&1 && echo "this should fail" && exit 1
+echo "failed as expected"
+
+# Demonstrate we cannot build with a clean remote CAS
+"${JUST}" gc --local-build-root ${REMOTE_LBR} 2>&1
+"${JUST}" gc --local-build-root ${REMOTE_LBR} 2>&1
+
+"${JUST}" build \
+ --local-build-root "${LBR}" \
+ -C "${CONF}" \
+ -r "${REMOTE_EXECUTION_ADDRESS}" \
+ ${COMPAT} \
+ ${REMOTE_PROPERTIES} \
+ ${DISPATCH} \
+ -D '{"ENV": {"TOOLS": "'${TOOLS_DIR}'"}}' 2>&1 && echo "this should fail" && exit 1q
+echo "failed as expected"
+
+# Demonstrate that we can build if serve endpoint provides the target cache value
+"${JUST}" build \
+ --local-build-root "${LBR}" \
+ -C "${CONF}" \
+ --remote-serve-address "${SERVE}" \
+ -r "${REMOTE_EXECUTION_ADDRESS}" \
+ ${COMPAT} \
+ ${REMOTE_PROPERTIES} \
+ ${DISPATCH} \
+ --log-limit 5 \
+ -D '{"ENV": {"TOOLS": "'${TOOLS_DIR}'"}}' 2>&1
+
+echo OK