mirror of
https://github.com/matrix-org/dendrite
synced 2024-12-14 11:53:50 +01:00
Add a Sytest blacklist file (#849)
This commit is contained in:
parent
ac96fd565b
commit
0f8d6cc1c1
4 changed files with 70 additions and 23 deletions
|
@ -2,16 +2,17 @@
|
||||||
|
|
||||||
Dendrite uses [SyTest](https://github.com/matrix-org/sytest) for its
|
Dendrite uses [SyTest](https://github.com/matrix-org/sytest) for its
|
||||||
integration testing. When creating a new PR, add the test IDs (see below) that
|
integration testing. When creating a new PR, add the test IDs (see below) that
|
||||||
your PR should allow to pass to `testfile` in dendrite's root directory. Not all
|
your PR should allow to pass to `sytest-whitelist` in dendrite's root
|
||||||
PRs need to make new tests pass. If we find your PR should be making a test pass
|
directory. Not all PRs need to make new tests pass. If we find your PR should
|
||||||
we may ask you to add to that file, as generally Dendrite's progress can be
|
be making a test pass we may ask you to add to that file, as generally
|
||||||
tracked through the amount of SyTest tests it passes.
|
Dendrite's progress can be tracked through the amount of SyTest tests it
|
||||||
|
passes.
|
||||||
|
|
||||||
## Finding out which tests to add
|
## Finding out which tests to add
|
||||||
|
|
||||||
We recommend you run the tests locally by manually setting up SyTest or using a
|
We recommend you run the tests locally by manually setting up SyTest or using a
|
||||||
SyTest docker image. After running the tests, a script will print the tests you
|
SyTest docker image. After running the tests, a script will print the tests you
|
||||||
need to add to `testfile` for you.
|
need to add to `sytest-whitelist`.
|
||||||
|
|
||||||
You should proceed after you see no build problems for dendrite after running:
|
You should proceed after you see no build problems for dendrite after running:
|
||||||
|
|
||||||
|
@ -50,16 +51,16 @@ EOF
|
||||||
Run the tests:
|
Run the tests:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
./run-tests.pl -I Dendrite::Monolith -d ../dendrite/bin -W ../dendrite/testfile -O tap --all | tee results.tap
|
./run-tests.pl -I Dendrite::Monolith -d ../dendrite/bin -W ../dendrite/sytest-whitelist -O tap --all | tee results.tap
|
||||||
```
|
```
|
||||||
|
|
||||||
where `tee` lets you see the results while they're being piped to the file.
|
where `tee` lets you see the results while they're being piped to the file.
|
||||||
|
|
||||||
Once the tests are complete, run the helper script to see if you need to add
|
Once the tests are complete, run the helper script to see if you need to add
|
||||||
any newly passing test names to `testfile` in the project's root directory:
|
any newly passing test names to `sytest-whitelist` in the project's root directory:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
../dendrite/show-expected-fail-tests.sh results.tap ../dendrite/testfile
|
../dendrite/show-expected-fail-tests.sh results.tap ../dendrite/sytest-whitelist ../dendrite/sytest-blacklist
|
||||||
```
|
```
|
||||||
|
|
||||||
If the script prints nothing/exits with 0, then you're good to go.
|
If the script prints nothing/exits with 0, then you're good to go.
|
||||||
|
@ -75,4 +76,4 @@ docker run --rm -v /path/to/dendrite/:/src/ matrixdotorg/sytest-dendrite
|
||||||
|
|
||||||
where `/path/to/dendrite/` should be replaced with the actual path to your
|
where `/path/to/dendrite/` should be replaced with the actual path to your
|
||||||
dendrite source code. The output should tell you if you need to add any tests to
|
dendrite source code. The output should tell you if you need to add any tests to
|
||||||
`testfile`.
|
`sytest-whitelist`.
|
||||||
|
|
|
@ -1,45 +1,89 @@
|
||||||
#! /bin/bash
|
#! /bin/bash
|
||||||
|
#
|
||||||
|
# Parses a results.tap file from SyTest output and a file containing test names (a test whitelist)
|
||||||
|
# and checks whether a test name that exists in the whitelist (that should pass), failed or not.
|
||||||
|
#
|
||||||
|
# An optional blacklist file can be added, also containing test names, where if a test name is
|
||||||
|
# present, the script will not error even if the test is in the whitelist file and failed
|
||||||
|
#
|
||||||
|
# For each of these files, lines starting with '#' are ignored.
|
||||||
|
#
|
||||||
|
# Usage ./show-expected-fail-tests.sh results.tap whitelist [blacklist]
|
||||||
|
|
||||||
results_file=$1
|
results_file=$1
|
||||||
testfile=$2
|
whitelist_file=$2
|
||||||
|
blacklist_file=$3
|
||||||
|
|
||||||
fail_build=0
|
fail_build=0
|
||||||
|
|
||||||
|
if [ $# -lt 2 ]; then
|
||||||
|
echo "Usage: $0 results.tap whitelist [blacklist]"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
if [ ! -f "$results_file" ]; then
|
if [ ! -f "$results_file" ]; then
|
||||||
echo "ERROR: Specified results file ${results_file} doesn't exist."
|
echo "ERROR: Specified results file '${results_file}' doesn't exist."
|
||||||
fail_build=1
|
fail_build=1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ ! -f "$testfile" ]; then
|
if [ ! -f "$whitelist_file" ]; then
|
||||||
echo "ERROR: Specified testfile ${testfile} doesn't exist."
|
echo "ERROR: Specified test whitelist '${whitelist_file}' doesn't exist."
|
||||||
fail_build=1
|
fail_build=1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
blacklisted_tests=()
|
||||||
|
|
||||||
|
# Check if a blacklist file was provided
|
||||||
|
if [ $# -eq 3 ]; then
|
||||||
|
# Read test blacklist file
|
||||||
|
if [ ! -f "$blacklist_file" ]; then
|
||||||
|
echo "ERROR: Specified test blacklist file '${blacklist_file}' doesn't exist."
|
||||||
|
fail_build=1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Read each line, ignoring those that start with '#'
|
||||||
|
blacklisted_tests=""
|
||||||
|
search_non_comments=$(grep -v '^#' ${blacklist_file})
|
||||||
|
while read -r line ; do
|
||||||
|
# Record the blacklisted test name
|
||||||
|
blacklisted_tests+=("${line}")
|
||||||
|
done <<< "${search_non_comments}" # This allows us to edit blacklisted_tests in the while loop
|
||||||
|
fi
|
||||||
|
|
||||||
[ "$fail_build" = 0 ] || exit 1
|
[ "$fail_build" = 0 ] || exit 1
|
||||||
|
|
||||||
passed_but_expected_fail=$(grep ' # TODO passed but expected fail' ${results_file} | sed -E 's/^ok [0-9]+ (\(expected fail\) )?//' | sed -E 's/( \([0-9]+ subtests\))? # TODO passed but expected fail$//')
|
passed_but_expected_fail=$(grep ' # TODO passed but expected fail' ${results_file} | sed -E 's/^ok [0-9]+ (\(expected fail\) )?//' | sed -E 's/( \([0-9]+ subtests\))? # TODO passed but expected fail$//')
|
||||||
tests_to_add=""
|
tests_to_add=""
|
||||||
already_in_testfile=""
|
already_in_whitelist=""
|
||||||
|
|
||||||
while read -r test_id; do
|
while read -r test_name; do
|
||||||
[ "${test_id}" = "" ] && continue
|
# Ignore empty lines
|
||||||
grep "${test_id}" "${testfile}" > /dev/null 2>&1
|
[ "${test_name}" = "" ] && continue
|
||||||
|
|
||||||
|
grep "${test_name}" "${whitelist_file}" > /dev/null 2>&1
|
||||||
if [ "$?" != "0" ]; then
|
if [ "$?" != "0" ]; then
|
||||||
tests_to_add="${tests_to_add}${test_id}\n"
|
# Check if this test name is blacklisted
|
||||||
|
if printf '%s\n' "${blacklisted_tests[@]}" | grep -q -P "^${test_name}$"; then
|
||||||
|
# Don't notify about this test
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Append this test_name to the existing list
|
||||||
|
tests_to_add="${tests_to_add}${test_name}\n"
|
||||||
fail_build=1
|
fail_build=1
|
||||||
else
|
else
|
||||||
already_in_testfile="${already_in_testfile}${test_id}\n"
|
already_in_whitelist="${already_in_whitelist}${test_name}\n"
|
||||||
fi
|
fi
|
||||||
done <<< "${passed_but_expected_fail}"
|
done <<< "${passed_but_expected_fail}"
|
||||||
|
|
||||||
if [ -n "${tests_to_add}" ]; then
|
if [ -n "${tests_to_add}" ]; then
|
||||||
echo "ERROR: The following passed tests are not present in testfile. Please append them to the file:"
|
echo "ERROR: The following passed tests are not present in $2. Please append them to the file:"
|
||||||
echo -e "${tests_to_add}"
|
echo -e "${tests_to_add}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -n "${already_in_testfile}" ]; then
|
if [ -n "${already_in_whitelist}" ]; then
|
||||||
echo "WARN: Tests in testfile still marked as expected fail:"
|
echo "WARN: Tests in the whitelist still marked as expected fail:"
|
||||||
echo -e "${already_in_testfile}"
|
echo -e "${already_in_whitelist}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
exit ${fail_build}
|
exit ${fail_build}
|
||||||
|
|
2
sytest-blacklist
Normal file
2
sytest-blacklist
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
# Blacklisted due to flakiness
|
||||||
|
Remote users can join room by alias
|
Loading…
Reference in a new issue