#!/usr/bin/env bash # Drives PrivaPub and each peer (started by run.sh) through each other's federation, as their users would, then checks # that PrivaPub's statistics saw it all without naming anyone. # usage: tools/pasture/interop.sh [peer...] peers: gts (default), mastodon, misskey, sharkey, akkoma, lemmy, # peertube, crawler set -uo pipefail here="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" . "$here/lib/interop.sh" peers=("${@:-gts}") # a run replaces what the peers it runs said last time, and keeps what the others said if [ -s "$INTEROP_JSONL" ]; then python3 - "$INTEROP_JSONL" "${peers[@]}" <<'PY' import json, sys path, peers = sys.argv[1], set(sys.argv[2:]) kept = [line for line in open(path) if line.strip() and json.loads(line).get("peer") not in peers] open(path, "w").writelines(kept) PY fi for peer in "${peers[@]}"; do [ -f "$here/scenarios/$peer.sh" ] || { echo "no scenario for $peer" >&2; exit 2; } INTEROP_PEER=$peer . "$here/scenarios/$peer.sh" done echo; echo "$pass passed, $fail failed, $expected expected failures" [ "$fail" = 0 ]