diff options
-rw-r--r-- | test/end-to-end/serve-service/TARGETS | 8 | ||||
-rw-r--r-- | test/end-to-end/serve-service/serve_query_target_cache_value.sh | 152 | ||||
-rwxr-xr-x | test/end-to-end/with_serve_test_runner.py | 1 |
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) |