summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorKlaus Aehlig <klaus.aehlig@huawei.com>2024-04-09 12:06:50 +0200
committerKlaus Aehlig <klaus.aehlig@huawei.com>2024-04-10 16:18:07 +0200
commit7034d65c652e6cf5d66e7f17787f359f304d2637 (patch)
tree6382b414492a6c27bfff56bed35d7e90e1eac63b /test
parent7ec3c01395304c47a8643610a4cfa7a9aa1f7b31 (diff)
downloadjustbuild-7034d65c652e6cf5d66e7f17787f359f304d2637.tar.gz
Add end-to-end test verifying restricted console logging
Diffstat (limited to 'test')
-rw-r--r--test/end-to-end/cli/TARGETS9
-rwxr-xr-xtest/end-to-end/cli/log-limit.sh216
2 files changed, 224 insertions, 1 deletions
diff --git a/test/end-to-end/cli/TARGETS b/test/end-to-end/cli/TARGETS
index 58a72ca2..b0c97bc8 100644
--- a/test/end-to-end/cli/TARGETS
+++ b/test/end-to-end/cli/TARGETS
@@ -57,6 +57,13 @@
, "test": ["conflict-report.sh"]
, "deps": [["end-to-end", "tool-under-test"]]
}
+, "log limit":
+ { "type": ["@", "rules", "shell/test", "script"]
+ , "name": ["log-limit"]
+ , "test": ["log-limit.sh"]
+ , "deps":
+ [["end-to-end", "tool-under-test"], ["end-to-end", "mr-tool-under-test"]]
+ }
, "TESTS":
{ "type": "install"
, "tainted": ["test"]
@@ -76,7 +83,7 @@
, { "type": "if"
, "cond": {"type": "var", "name": "TEST_BOOTSTRAP_JUST_MR"}
, "then": []
- , "else": ["just-mr reporting"]
+ , "else": ["just-mr reporting", "log limit"]
}
]
}
diff --git a/test/end-to-end/cli/log-limit.sh b/test/end-to-end/cli/log-limit.sh
new file mode 100755
index 00000000..cfb41498
--- /dev/null
+++ b/test/end-to-end/cli/log-limit.sh
@@ -0,0 +1,216 @@
+#!/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
+
+ROOT="$(pwd)"
+JUST="${ROOT}/bin/tool-under-test"
+JUST_MR="${ROOT}/bin/mr-tool-under-test"
+LBR="${TEST_TMPDIR}/build-root"
+
+mkdir work
+cd work
+touch ROOT
+
+cat > RULES <<'EOF'
+{ "test":
+ { "tainted": ["test"]
+ , "string_fields": ["cmds"]
+ , "expression":
+ { "type": "let*"
+ , "bindings":
+ [ [ "cmd"
+ , { "type": "join"
+ , "separator": "\n"
+ , "$1": {"type": "FIELD", "name": "cmds"}
+ }
+ ]
+ , [ "shell cmd"
+ , { "type": "join_cmd"
+ , "$1": ["sh", "-c", {"type": "var", "name": "cmd"}]
+ }
+ ]
+ , [ "test cmd"
+ , [ "sh"
+ , "-c"
+ , { "type": "join"
+ , "separator": " "
+ , "$1":
+ [ "echo FAIL > RESULT;"
+ , {"type": "var", "name": "shell cmd"}
+ , " && echo PASS > RESULT;"
+ , "if [ $(cat RESULT) != PASS ] ; then exit 1 ; fi"
+ ]
+ }
+ ]
+ ]
+ , [ "result"
+ , { "type": "ACTION"
+ , "cmd": {"type": "var", "name": "test cmd"}
+ , "outs": ["RESULT"]
+ , "may_fail": ["test"]
+ , "fail_message": "TeStFaIlUrE"
+ }
+ ]
+ ]
+ , "body":
+ {"type": "RESULT", "artifacts": {"type": "var", "name": "result"}}
+ }
+ }
+}
+EOF
+
+cat > TARGETS <<'EOF'
+{ "verbose":
+ { "type": "generic"
+ , "outs": ["out.txt"]
+ , "cmds":
+ [ "echo -n Running the VeR"
+ , "echo bOsE command now"
+ , "echo Hello WoRlD > out.txt"
+ ]
+ }
+, "test": {"type": "test", "cmds": ["echo TeStRuN", "false"]}
+, "":
+ { "type": "install"
+ , "tainted": ["test"]
+ , "files": {"verbose": "verbose", "test": "test"}
+ }
+}
+EOF
+
+"${JUST}" build --local-build-root "${LBR}" -f file.log \
+ -L '["env", "PATH='"${PATH}"'"]' \
+ --restrict-stderr-log-limit 1 2>console.log || :
+
+echo
+echo Console
+cat console.log
+echo
+echo Log file
+cat file.log
+
+echo
+echo verifying log limits ...
+echo
+
+# stdout/stderr of actions are reported at INFO level (included in the default,
+# but lower than WARN, which the console is restricted to.
+grep VeRbOsE file.log
+echo
+grep VeRbOsE console.log && exit 1 || :
+echo
+grep TeStRuN file.log
+echo
+grep TeStRuN console.log && exit 1 || :
+
+# Failed actions are reported at WARN level, hence should be present in both
+echo
+grep TeStFaIlUrE file.log
+grep TeStFaIlUrE console.log
+
+
+echo
+echo
+echo Same test using the launcher
+echo
+touch ROOT
+cat > repos.json <<'EOF'
+{"repositories": {"": {"repository": {"type": "file", "path": "."}}}}
+EOF
+rm -f file.log console.log
+"${JUST_MR}" --norc --just "${JUST}" --local-build-root "${LBR}" -f file.log \
+ -L '["env", "PATH='"${PATH}"'"]' \
+ --restrict-stderr-log-limit 1 build 2>console.log || :
+echo
+echo Console
+cat console.log
+echo
+echo Log file
+cat file.log
+
+echo
+echo verifying log limits ...
+echo
+# The information of the launch invocation is logged at INFO level, hence should
+# be visible in the file log, but not in the console log
+grep tool-under-test file.log
+echo
+grep tool-under-test console.log && exit 1 || :
+echo
+# stdout/stderr of actions are reported at INFO level (included in the default,
+# but lower than WARN, which the console is restricted to.
+grep VeRbOsE file.log
+echo
+grep VeRbOsE console.log && exit 1 || :
+echo
+grep TeStRuN file.log
+echo
+grep TeStRuN console.log && exit 1 || :
+
+# Failed actions are reported at WARN level, hence should be present in both
+echo
+grep TeStFaIlUrE file.log
+grep TeStFaIlUrE console.log
+
+
+echo
+echo
+echo Same test using the launcher, with information taken from rc file
+echo
+cat > rc.json <<EOF
+{ "local build root": {"root": "system", "path": "${LBR}"}
+, "just": {"root": "system", "path": "${JUST}"}
+, "restrict stderr log limit": 1
+, "local launcher": ["env", "PATH=${PATH}"]
+}
+EOF
+cat rc.json
+rm -f file.log console.log
+"${JUST_MR}" --rc rc.json -f file.log build 2>console.log || :
+echo
+echo Console
+cat console.log
+echo
+echo Log file
+cat file.log
+
+
+echo
+echo verifying log limits ...
+echo
+# The information of the launch invocation is logged at INFO level, hence should
+# be visible in the file log, but not in the console log
+grep tool-under-test file.log
+echo
+grep tool-under-test console.log && exit 1 || :
+echo
+# stdout/stderr of actions are reported at INFO level (included in the default,
+# but lower than WARN, which the console is restricted to.
+grep VeRbOsE file.log
+echo
+grep VeRbOsE console.log && exit 1 || :
+echo
+grep TeStRuN file.log
+echo
+grep TeStRuN console.log && exit 1 || :
+
+# Failed actions are reported at WARN level, hence should be present in both
+echo
+grep TeStFaIlUrE file.log
+grep TeStFaIlUrE console.log
+
+echo
+echo OK