summaryrefslogtreecommitdiff
path: root/test/end-to-end/serve-service
diff options
context:
space:
mode:
authorPaul Cristian Sarbu <paul.cristian.sarbu@huawei.com>2024-03-18 17:04:29 +0100
committerPaul Cristian Sarbu <paul.cristian.sarbu@huawei.com>2024-03-19 10:31:33 +0100
commit57404865c81582f891c64213f48af72b559d4802 (patch)
treec9b3fe4fa2997950411e4ec8f69868e9c55ffc50 /test/end-to-end/serve-service
parentf3039bc31d32b27ba92fdc534c191acf889db302 (diff)
downloadjustbuild-57404865c81582f891c64213f48af72b559d4802.tar.gz
Add test to check handling of failed serve endpoint builds
Diffstat (limited to 'test/end-to-end/serve-service')
-rw-r--r--test/end-to-end/serve-service/TARGETS39
-rw-r--r--test/end-to-end/serve-service/data/rules/RULES.dummy1
-rw-r--r--test/end-to-end/serve-service/serve_target_failed_build.sh155
-rw-r--r--test/end-to-end/serve-service/serve_target_remote_build.sh2
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"