forked from continuwuation/continuwuity
I advise no one test this out yet. Just something I scrapped together on my lunch break in response to #1503. Likely needs further work. ------------------------------------------------ **commit msg log:** ``` perf: msc3902 partial joins and memoization for total joins impl partial join worker. batch server discovery and PDU queries enable complement partial join tests memoize full join auth chains (very basic moka LRU impl) unit tests; refactor server query func for testability enable `fast_joins=true` by default in config fix lint with `url_preview` feature. TODO: suggest partial lints to avoid differential results. ```
67 lines
2.6 KiB
Bash
Executable file
67 lines
2.6 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
|
|
set -euo pipefail
|
|
|
|
# The root path where complement is available.
|
|
COMPLEMENT_SRC="${COMPLEMENT_SRC:-$1}"
|
|
|
|
# A `.jsonl` file to write test logs to
|
|
LOG_FILE="${2:-tests/test_results/complement/test_logs.jsonl}"
|
|
|
|
# A `.jsonl` file to write test results to
|
|
RESULTS_FILE="${3:-tests/test_results/complement/test_results.jsonl}"
|
|
|
|
# The base docker image to use for complement tests
|
|
# You can build the default with `docker build -t continuwuity:complement -f ./docker/complement.Dockerfile .`
|
|
# after running `cargo build`. Only the debug binary is used.
|
|
COMPLEMENT_BASE_IMAGE="${COMPLEMENT_BASE_IMAGE:-continuwuity:complement}"
|
|
|
|
# Complement tests that are skipped due to flakiness/reliability issues or we don't implement such features and won't for a long time
|
|
SKIPPED_COMPLEMENT_TESTS='TestRoomDeleteAlias/Parallel/Regular_users_can_add_and_delete_aliases_when_m.*|TestRoomDeleteAlias/Parallel/Can_delete_canonical_alias|TestUnbanViaInvite.*|TestRoomState/Parallel/GET_/publicRooms_lists.*|TestRoomDeleteAlias/Parallel/Users_with_sufficient_power-level_can_delete_other.*'
|
|
|
|
# $COMPLEMENT_SRC needs to be a directory to Complement source code
|
|
if [ -f "$COMPLEMENT_SRC" ]; then
|
|
echo "\$COMPLEMENT_SRC must be a directory/path to Complement source code"
|
|
exit 1
|
|
fi
|
|
|
|
# quick test to make sure we can actually write to $LOG_FILE and $RESULTS_FILE
|
|
touch $LOG_FILE && rm -v $LOG_FILE
|
|
touch $RESULTS_FILE && rm -v $RESULTS_FILE
|
|
|
|
toplevel="$(git rev-parse --show-toplevel)"
|
|
|
|
pushd "$toplevel" > /dev/null
|
|
|
|
|
|
echo ""
|
|
echo "running go test with:"
|
|
echo "\$COMPLEMENT_SRC: $COMPLEMENT_SRC"
|
|
echo "\$COMPLEMENT_BASE_IMAGE: $COMPLEMENT_BASE_IMAGE"
|
|
echo "\$RESULTS_FILE: $RESULTS_FILE"
|
|
echo "\$LOG_FILE: $LOG_FILE"
|
|
echo ""
|
|
|
|
# It's okay (likely, even) that `go test` exits nonzero
|
|
# `COMPLEMENT_ENABLE_DIRTY_RUNS=1` reuses the same complement container for faster complement, at the possible expense of test environment pollution
|
|
set +o pipefail
|
|
env \
|
|
-C "$COMPLEMENT_SRC" \
|
|
COMPLEMENT_BASE_IMAGE="$COMPLEMENT_BASE_IMAGE" \
|
|
go test -tags="conduwuit_blacklist" -skip="$SKIPPED_COMPLEMENT_TESTS" -v -timeout 1h -json ./tests/... | tee "$LOG_FILE"
|
|
set -o pipefail
|
|
|
|
# Post-process the results into an easy-to-compare format, sorted by Test name for reproducible results
|
|
jq -s -c 'sort_by(.Test)[]' < "$LOG_FILE" | jq -c '
|
|
select(
|
|
(.Action == "pass" or .Action == "fail" or .Action == "skip")
|
|
and .Test != null
|
|
) | {Action: .Action, Test: .Test}
|
|
' > "$RESULTS_FILE"
|
|
|
|
echo ""
|
|
echo ""
|
|
echo "complement logs saved at $LOG_FILE"
|
|
echo "complement results saved at $RESULTS_FILE"
|
|
echo ""
|
|
echo ""
|