mirror of
https://gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/snowflake.git
synced 2025-10-13 20:11:19 -04:00
Add integration testing with shadow
This change uses the Shadow network simulator[0] to run a minimal snowflake network and pass data between a client and a server. [0] https://shadow.github.io/
This commit is contained in:
parent
b130151b24
commit
b3b03d1a56
1 changed files with 76 additions and 0 deletions
|
@ -154,6 +154,82 @@ debian-testing:
|
|||
script:
|
||||
- *go-test
|
||||
|
||||
shadow-integration:
|
||||
# Need golang 1.21 from unstable to build snowflake
|
||||
image: debian:sid-slim
|
||||
variables:
|
||||
SHADOW_VERSION: "v3.1.0"
|
||||
TGEN_VERSION: "v1.1.2"
|
||||
cache:
|
||||
key: sf-integration-$SHADOW_VERSION-$TGEN_VERSION
|
||||
paths:
|
||||
- /opt/
|
||||
script:
|
||||
- apt-get update
|
||||
- apt-get install -y git tor
|
||||
- mkdir -p ~/.local/bin
|
||||
- mkdir -p ~/.local/src
|
||||
- export PATH=$PATH:$CI_PROJECT_DIR/opt/bin/
|
||||
|
||||
# Install shadow and tgen
|
||||
- pushd ~/.local/src
|
||||
- |
|
||||
if [ ! -f opt/shadow/bin/shadow ]
|
||||
then
|
||||
echo "The required version of shadow was not cached, building from source"
|
||||
git clone --branch $SHADOW_VERSION --depth 1 https://github.com/shadow/shadow.git
|
||||
pushd shadow/
|
||||
CONTAINER=debian:sid-slim ci/container_scripts/install_deps.sh
|
||||
CC=gcc CONTAINER=debian:sid-slim ci/container_scripts/install_extra_deps.sh
|
||||
apt-get install -y zlib1g
|
||||
export PATH="$HOME/.cargo/bin:${PATH}"
|
||||
./setup build --jobs $(nproc) --prefix $CI_PROJECT_DIR/opt/
|
||||
./setup install
|
||||
popd
|
||||
fi
|
||||
- |
|
||||
if [ ! -f opt/shadow/bin/tgen ]
|
||||
then
|
||||
echo "The required version of tgen was not cached, building from source"
|
||||
git clone --branch $TGEN_VERSION --depth 1 https://github.com/shadow/tgen.git
|
||||
pushd tgen/
|
||||
apt-get install -y cmake libglib2.0-dev libigraph-dev
|
||||
mkdir build && cd build
|
||||
cmake .. -DCMAKE_INSTALL_PREFIX=$CI_PROJECT_DIR/opt/
|
||||
make
|
||||
make install
|
||||
popd
|
||||
fi
|
||||
install $CI_PROJECT_DIR/opt/bin/tgen ~/.local/bin/tgen
|
||||
- popd
|
||||
|
||||
# Install snowflake binaries to .local folder
|
||||
- |
|
||||
for app in "proxy" "client" "server" "broker" "probetest"; do
|
||||
pushd $app
|
||||
go build
|
||||
install $app ~/.local/bin/snowflake-$app
|
||||
popd
|
||||
done
|
||||
|
||||
# Install stun server
|
||||
- GOBIN=~/.local/bin go install github.com/gortc/stund@latest
|
||||
|
||||
# Run a minimal snowflake shadow experiment
|
||||
- git clone --depth 1 https://github.com/cohosh/shadow-snowflake-minimal
|
||||
- pushd shadow-snowflake-minimal/
|
||||
- shadow --log-level=debug --model-unblocked-syscall-latency=true snowflake-minimal.yaml > shadow.log
|
||||
|
||||
# Check to make sure streams succeeded
|
||||
- |
|
||||
if [ $(grep -c "stream-success" shadow.data/hosts/snowflakeclient/tgen.1006.stdout) = 10 ]
|
||||
then
|
||||
echo "All streams in shadow completed successfully"
|
||||
else
|
||||
echo "Shadow simulation failed"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
generate_tarball:
|
||||
stage: deploy
|
||||
image: golang:1.21-$DEBIAN_STABLE
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue