diff options
author | Klaus Aehlig <klaus.aehlig@huawei.com> | 2024-03-22 10:52:52 +0100 |
---|---|---|
committer | Klaus Aehlig <klaus.aehlig@huawei.com> | 2024-03-22 19:01:03 +0100 |
commit | e555d27ccfdddcec9bee97263a2fea265ee0d0aa (patch) | |
tree | 1684cdd783658d6f761ea00ae18afb61a6914b23 /test | |
parent | df07927f2837986fe7d9c6a9313fa8b759870b1b (diff) | |
download | justbuild-e555d27ccfdddcec9bee97263a2fea265ee0d0aa.tar.gz |
Add a test verifying that absent export targets are deduplicated correctly
Diffstat (limited to 'test')
-rw-r--r-- | test/end-to-end/serve-service/TARGETS | 9 | ||||
-rw-r--r-- | test/end-to-end/serve-service/deduplication_of_serve_requests.sh | 103 |
2 files changed, 112 insertions, 0 deletions
diff --git a/test/end-to-end/serve-service/TARGETS b/test/end-to-end/serve-service/TARGETS index 7eeecafe..a26a208b 100644 --- a/test/end-to-end/serve-service/TARGETS +++ b/test/end-to-end/serve-service/TARGETS @@ -149,6 +149,14 @@ [["end-to-end", "tool-under-test"], ["end-to-end", "mr-tool-under-test"]] , "repos": ["serve-many-targets (data)"] } +, "deduplication-of-serve-requests": + { "type": ["end-to-end", "with serve"] + , "name": ["deduplication-of-serve-requests"] + , "test": ["deduplication_of_serve_requests.sh"] + , "deps": + [["end-to-end", "tool-under-test"], ["end-to-end", "mr-tool-under-test"]] + , "repos": ["serve-many-targets (data)"] + } , "TESTS (unconfigured)": { "type": "install" , "tainted": ["test"] @@ -166,6 +174,7 @@ , "serve-export-deps" , "serve-query-target-cache-value" , "describe" + , "deduplication-of-serve-requests" ] , { "type": "if" , "cond": {"type": "var", "name": "TEST_COMPATIBLE_REMOTE"} diff --git a/test/end-to-end/serve-service/deduplication_of_serve_requests.sh b/test/end-to-end/serve-service/deduplication_of_serve_requests.sh new file mode 100644 index 00000000..362c01be --- /dev/null +++ b/test/end-to-end/serve-service/deduplication_of_serve_requests.sh @@ -0,0 +1,103 @@ +#!/bin/sh +# Copyright 2024 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 + +env +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="${TEST_TMPDIR}/log.txt" + +COMPAT="" +if [ "${COMPATIBLE:-}" = "YES" ]; then + COMPAT="--compatible" +fi + +mkdir work +cd work +touch ROOT +cat > repos.json <<EOF +{ "repositories": + { "": + { "repository": {"type": "file", "path": "."} + , "bindings": {"transform": "transform"} + } + , "transform": + { "repository": + { "type": "git" + , "commit": "$COMMIT_0" + , "pragma": {"absent": true} + , "repository": "http://non-existent.example.org/data.git" + , "branch": "master" + } + } + } +} +EOF +cat repos.json + + +cat > TARGETS <<'EOF' +{ "": {"type": "install", "files": {"a-1": "a-1", "a-2": "a-2", "b": "b"}} +, "a-1": + { "type": "configure" + , "target": ["@", "transform", "", ""] + , "config": + { "type": "let*" + , "bindings": [["DATA", "a"], ["unrelated", "foo"]] + , "body": {"type": "env", "vars": ["DATA", "unrelated"]} + } + } +, "a-2": + { "type": "configure" + , "target": ["@", "transform", "", ""] + , "config": + { "type": "let*" + , "bindings": [["DATA", "a"], ["unrelated", "bar"]] + , "body": {"type": "env", "vars": ["DATA", "unrelated"]} + } + } +, "b": + { "type": "configure" + , "target": ["@", "transform", "", ""] + , "config": + { "type": "let*" + , "bindings": [["DATA", "b"], ["unrelated", "foo"]] + , "body": {"type": "env", "vars": ["DATA", "unrelated"]} + } + } +} +EOF + +# As from the 3 absent export targets two coincide on the flexible +# variables, we should only get two export targets served. +"${JUST_MR}" --norc --local-build-root "${LBR}" --just "${JUST}" \ + -R "${SERVE}" -r "${REMOTE_EXECUTION_ADDRESS}" ${COMPAT} \ + build -f "${LOG}" --log-limit 4 2>&1 +echo +grep 'xport.*2 served' "${LOG}" +echo + +# The same should be true on the second run, when everything is in +# the cache of serve. +"${JUST_MR}" --norc --local-build-root "${LBR}" --just "${JUST}" \ + -R "${SERVE}" -r "${REMOTE_EXECUTION_ADDRESS}" ${COMPAT} \ + build -f "${LOG}" --log-limit 4 2>&1 +echo +grep 'xport.*2 served' "${LOG}" +echo + +echo OK |