diff options
4 files changed, 189 insertions, 8 deletions
diff --git a/test/end-to-end/serve-service/TARGETS b/test/end-to-end/serve-service/TARGETS index 47f273ff..6236dab7 100644 --- a/test/end-to-end/serve-service/TARGETS +++ b/test/end-to-end/serve-service/TARGETS @@ -6,7 +6,26 @@ [["end-to-end", "tool-under-test"], ["end-to-end", "mr-tool-under-test"]] , "repos": [ "serve-target-remote-build (repo)" - , "serve-target-remote-build (installed data)" + , "serve-target-remote-build (rule)" + , "serve-target-remote-build (target)" + ] + } +, "serve-target-failed-build": + { "type": ["end-to-end", "with serve"] + , "name": ["serve-target-failed-build"] + , "test": ["serve_target_failed_build.sh"] + , "deps": + [ ["end-to-end", "tool-under-test"] + , ["end-to-end", "mr-tool-under-test"] + , "serve-tree (archive)" + , "data/targets/TARGETS" + , "data/rules/RULES" + , "data/rules/RULES.dummy" + ] + , "repos": + [ "serve-target-remote-build (repo)" + , "serve-target-failed-build (rule)" + , "serve-target-remote-build (target)" ] } , "serve-target-remote-build (repo)": @@ -18,15 +37,20 @@ , "for i in `seq 6 10` ; do echo $i > src/subdir/sub-$i.txt ; done" ] } -, "serve-target-remote-build (data)": +, "serve-target-remote-build (target)": { "type": ["@", "rules", "data", "staged"] - , "srcs": ["data/targets/TARGETS", "data/rules/RULES"] + , "srcs": ["data/targets/TARGETS"] , "stage": ["test", "end-to-end", "serve-service"] } -, "serve-target-remote-build (installed data)": - { "type": "install" - , "tainted": ["test"] - , "dirs": [["serve-target-remote-build (data)", "."]] +, "serve-target-remote-build (rule)": + { "type": ["@", "rules", "data", "staged"] + , "srcs": ["data/rules/RULES"] + , "stage": ["test", "end-to-end", "serve-service"] + } +, "serve-target-failed-build (rule)": + { "type": ["@", "rules", "data", "staged"] + , "srcs": ["data/rules/RULES.dummy"] + , "stage": ["test", "end-to-end", "serve-service"] } , "serve-target-cache-hit": { "type": ["end-to-end", "with serve"] @@ -134,6 +158,7 @@ , "$1": [ [ "serve-target-remote-build" , "serve-target-remote-build-dispatch" + , "serve-target-failed-build" , "serve-many-targets" , "serve-target-cache-hit" , "serve-start-execute" diff --git a/test/end-to-end/serve-service/data/rules/RULES.dummy b/test/end-to-end/serve-service/data/rules/RULES.dummy new file mode 100644 index 00000000..0967ef42 --- /dev/null +++ b/test/end-to-end/serve-service/data/rules/RULES.dummy @@ -0,0 +1 @@ +{} diff --git a/test/end-to-end/serve-service/serve_target_failed_build.sh b/test/end-to-end/serve-service/serve_target_failed_build.sh new file mode 100644 index 00000000..bd0eec6d --- /dev/null +++ b/test/end-to-end/serve-service/serve_target_failed_build.sh @@ -0,0 +1,155 @@ +#!/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. + +########################################################################### +# +# This script aims to test the "remote build capabilities" of a just-serve +# instance. +# +########################################################################### + +set -eu + +env +readonly JUST="${PWD}/bin/tool-under-test" +readonly JUST_MR="${PWD}/bin/mr-tool-under-test" +readonly LBR_1="${TEST_TMPDIR}/local-build-root-1" +readonly LBR_2="${TEST_TMPDIR}/local-build-root-2" +readonly LBR_3="${TEST_TMPDIR}/local-build-root-3" +readonly OUTPUT_1="${TEST_TMPDIR}/output-dir-1" +readonly OUTPUT_2="${TEST_TMPDIR}/output-dir-2" +readonly DISTDIR="${TEST_TMPDIR}/distfiles" + +COMPAT="" +if [ "${COMPATIBLE:-}" = "YES" ]; then + COMPAT="--compatible" +fi + +mkdir -p "${DISTDIR}" +cp src.tar "${DISTDIR}" +HASH=$(git hash-object src.tar) + +readonly TARGETS_ROOT="${PWD}/data/targets" +readonly RULES_ROOT="${PWD}/data/rules" + +mkdir work +cd work +touch ROOT +cat > repos.json <<EOF +{ "main": "main" +, "repositories": + { "main": + { "repository": + { "type": "archive" + , "content": "$HASH" + , "fetch": "http://example.org/src.tar" + , "subdir": "repo" + } + , "target_root": "target" + , "rule_root": "rule" + } + , "rule": + { "repository": + {"type": "file", "path": "$RULES_ROOT", "pragma": {"to_git": true}} + } + , "target": + { "repository": + {"type": "file", "path": "$TARGETS_ROOT", "pragma": {"to_git": true}} + } + } +} +EOF + +CONF=$("${JUST_MR}" --norc --local-build-root "${LBR_1}" \ + --distdir ${DISTDIR} ${COMPAT} \ + setup) +cat $CONF +echo + +# Check that we can build locally correctly +${JUST} install --local-build-root "${LBR_1}" -C "${CONF}" \ + --log-limit 5 \ + -r "${REMOTE_EXECUTION_ADDRESS}" ${COMPAT} \ + -o "${OUTPUT_1}" 2>&1 + +for i in $(seq 5); do + grep "./tree/src/$i.txt" ${OUTPUT_1}/_out +done +echo + +# Check that build succeeds with a serve endpoint present +# +# Reason: serve endpoint does not have the correct targets and rules root and +# thus fails, but locally we can continue. + +${JUST} install --local-build-root "${LBR_2}" -C "${CONF}" \ + --log-limit 5 \ + --remote-serve-address "${SERVE}" \ + -r "${REMOTE_EXECUTION_ADDRESS}" ${COMPAT} \ + -o "${OUTPUT_2}" 2>&1 + +for i in $(seq 5); do + grep "./tree/src/$i.txt" ${OUTPUT_2}/_out +done +echo + +# Check that build fails with a serve endpoint present if the orchestrated build +# actually fails +# +# Reason: the serve endpoint has all the roots to start the analysis/build of +# the target, but we use a dummy rule and thus build fails. This is reported to +# the client and in this case the whole build is expected to fail. + +rm "${RULES_ROOT}/RULES" # to match known rule tree on serve endpoint + +cat > repos.json <<EOF +{ "main": "main" +, "repositories": + { "main": + { "repository": + { "type": "archive" + , "content": "$HASH" + , "fetch": "http://example.org/src.tar" + , "subdir": "repo" + } + , "target_root": "target" + , "rule_root": "rule" + , "rule_file_name": "RULES.dummy" + } + , "rule": + { "repository": + {"type": "file", "path": "$RULES_ROOT", "pragma": {"to_git": true}} + } + , "target": + { "repository": + {"type": "file", "path": "$TARGETS_ROOT", "pragma": {"to_git": true}} + } + } +} +EOF + +CONF=$("${JUST_MR}" --norc --local-build-root "${LBR_3}" \ + --distdir ${DISTDIR} ${COMPAT} \ + setup) +cat $CONF +echo + +${JUST} analyse --local-build-root "${LBR_3}" -C "${CONF}" \ + --log-limit 5 \ + --remote-serve-address "${SERVE}" \ + -r "${REMOTE_EXECUTION_ADDRESS}" ${COMPAT} 2>&1 && exit 1 || : +echo Failed as expected + +echo OK diff --git a/test/end-to-end/serve-service/serve_target_remote_build.sh b/test/end-to-end/serve-service/serve_target_remote_build.sh index fe07d278..278a1de7 100644 --- a/test/end-to-end/serve-service/serve_target_remote_build.sh +++ b/test/end-to-end/serve-service/serve_target_remote_build.sh @@ -64,7 +64,7 @@ cat > repos.json <<EOF , "targets": { "repository": { "type": "git" - , "commit": "$COMMIT_1" + , "commit": "$COMMIT_2" , "pragma": {"absent": true} , "repository": "http://non-existent.example.org/data.git" , "branch": "master" |