summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-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
-rwxr-xr-xtest/end-to-end/with_serve_test_runner.py1
3 files changed, 161 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
diff --git a/test/end-to-end/with_serve_test_runner.py b/test/end-to-end/with_serve_test_runner.py
index b76aefd9..6176c876 100755
--- a/test/end-to-end/with_serve_test_runner.py
+++ b/test/end-to-end/with_serve_test_runner.py
@@ -226,6 +226,7 @@ ENV = dict(
TEST_TMPDIR=TEMP_DIR,
TMPDIR=TEMP_DIR,
REMOTE_EXECUTION_ADDRESS=g_REMOTE_EXECUTION_ADDRESS,
+ REMOTE_LBR=REMOTE_LBR, # expose the execution build root to the test env
SERVE=SERVE_ADDRESS,
SERVE_LBR=SERVE_LBR, # expose the serve build root to the test env
**repos_env)