diff options
author | Klaus Aehlig <klaus.aehlig@huawei.com> | 2024-04-09 12:06:50 +0200 |
---|---|---|
committer | Klaus Aehlig <klaus.aehlig@huawei.com> | 2024-04-10 16:18:07 +0200 |
commit | 7034d65c652e6cf5d66e7f17787f359f304d2637 (patch) | |
tree | 6382b414492a6c27bfff56bed35d7e90e1eac63b /test | |
parent | 7ec3c01395304c47a8643610a4cfa7a9aa1f7b31 (diff) | |
download | justbuild-7034d65c652e6cf5d66e7f17787f359f304d2637.tar.gz |
Add end-to-end test verifying restricted console logging
Diffstat (limited to 'test')
-rw-r--r-- | test/end-to-end/cli/TARGETS | 9 | ||||
-rwxr-xr-x | test/end-to-end/cli/log-limit.sh | 216 |
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 |