summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorPaul Cristian Sarbu <paul.cristian.sarbu@huawei.com>2023-09-11 18:18:54 +0200
committerKlaus Aehlig <klaus.aehlig@huawei.com>2023-09-13 16:14:43 +0200
commit2f3e0f9ab2847d7bbd00a220f74e8b4acd7ae079 (patch)
tree0ce34a489b60331b1f63e0f1b1265f92476bcd9c /test
parent669d1d8714b258ffd19f1610028374233a143f4b (diff)
downloadjustbuild-2f3e0f9ab2847d7bbd00a220f74e8b4acd7ae079.tar.gz
test: Check that just-mr creates correct absent roots
Diffstat (limited to 'test')
-rw-r--r--test/end-to-end/just-mr/TARGETS8
-rw-r--r--test/end-to-end/just-mr/absent-roots.sh111
2 files changed, 119 insertions, 0 deletions
diff --git a/test/end-to-end/just-mr/TARGETS b/test/end-to-end/just-mr/TARGETS
index 9f29bd03..e6017fc6 100644
--- a/test/end-to-end/just-mr/TARGETS
+++ b/test/end-to-end/just-mr/TARGETS
@@ -73,6 +73,13 @@
, "test": ["fetch-remote.sh"]
, "deps": [["end-to-end", "mr-tool-under-test"]]
}
+, "absent-roots":
+ { "type": ["@", "rules", "shell/test", "script"]
+ , "name": ["absent-roots"]
+ , "test": ["absent-roots.sh"]
+ , "deps":
+ [["end-to-end", "mr-tool-under-test"], ["end-to-end", "tool-under-test"]]
+ }
, "TESTS":
{ "type": "install"
, "tainted": ["test"]
@@ -91,6 +98,7 @@
, "just_mr_mp"
, "git-tree-verbosity"
, "defaults"
+ , "absent-roots"
]
, { "type": "if"
, "cond": {"type": "var", "name": "TEST_COMPATIBLE_REMOTE"}
diff --git a/test/end-to-end/just-mr/absent-roots.sh b/test/end-to-end/just-mr/absent-roots.sh
new file mode 100644
index 00000000..ff3b738f
--- /dev/null
+++ b/test/end-to-end/just-mr/absent-roots.sh
@@ -0,0 +1,111 @@
+#!/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.
+
+
+set -eu
+
+readonly JUST="${PWD}/bin/tool-under-test"
+readonly JUST_MR="${PWD}/bin/mr-tool-under-test"
+
+readonly INFOFILE="${PWD}/info.json"
+readonly PIDFILE="${PWD}/pid.txt"
+
+readonly LBR="${TEST_TMPDIR}/local-build-root"
+
+readonly REPO_ROOT="${PWD}/serve_repo"
+readonly TEST_DATA="The content of the data file in foo"
+readonly LINK_TARGET="dummy"
+
+# Set up sample repository
+mkdir -p "${REPO_ROOT}/foo/bar"
+echo -n "${TEST_DATA}" > "${REPO_ROOT}/foo/bar/data.txt"
+ln -s "${LINK_TARGET}" "${REPO_ROOT}/foo/bar/link"
+{
+ cd "${REPO_ROOT}"
+ git init
+ git config user.name 'N.O.Body'
+ git config user.email 'nobody@example.org'
+ git add -f .
+ git commit -m 'Test repo' 2>&1
+}
+readonly GIT_COMMIT_ID=$(cd "${REPO_ROOT}" && git log -n 1 --format='%H')
+readonly GIT_ROOT_ID=$(cd "${REPO_ROOT}" && git log -n 1 --format='%T')
+
+# Setup sample repository config
+touch ROOT
+cat > repos.json <<EOF
+{ "repositories":
+ { "test":
+ { "repository":
+ { "type": "git"
+ , "repository": "http://non-existent.example.org/dummy.git"
+ , "commit": "${GIT_COMMIT_ID}"
+ , "branch": "main"
+ , "subdir": "."
+ , "pragma": {"absent": true}
+ }
+ }
+ }
+}
+EOF
+echo "Repository configuration:"
+cat repos.json
+
+# Make the repository available via 'just serve'
+cat > .just-servec <<EOF
+{ "repositories": ["${REPO_ROOT}"]
+, "remote service": {"info file": "${INFOFILE}", "pid file": "${PIDFILE}"}
+}
+EOF
+echo "Serve service configuration:"
+cat .just-servec
+
+"${JUST}" serve .just-servec 2>&1 &
+
+for _ in `seq 1 10`
+do
+ if test -f "${INFOFILE}"
+ then
+ break
+ fi
+ sleep 1;
+done
+
+if ! test -f "${INFOFILE}"
+then
+ echo "Did not find ${INFOFILE}"
+ exit 1
+fi
+
+readonly PORT=$(jq '."port"' "${INFOFILE}")
+
+cleanup() {
+ kill $(cat "${PIDFILE}")
+}
+trap cleanup EXIT
+
+# Compute the repository configuration
+CONF=$("${JUST_MR}" --norc --local-build-root "${LBR}" --remote-serve-address localhost:${PORT} setup)
+cat "${CONF}"
+echo
+
+# Check that an absent root was created
+test "$(jq -r '.repositories.test.workspace_root[0]' "${CONF}")" = "git tree"
+test $(jq -r '.repositories.test.workspace_root | length' "${CONF}") = 2
+
+# Check the tree was correctly set via 'just serve' remote
+test "$(jq -r '.repositories.test.workspace_root[1]' "${CONF}")" = "${GIT_ROOT_ID}"
+
+echo OK