Add GitHub Docker action for testing UDP and HTTP file transfers

The Dockerfile works when run locally. The GitHub action
plumbing may or not work in this state.
This commit is contained in:
Joakim Frostegård 2020-08-17 00:49:12 +02:00
parent a2eff88bcb
commit de2b7cb187
5 changed files with 159 additions and 0 deletions

View file

@ -0,0 +1,119 @@
#!/bin/bash
# IPv6 is unfortunately disabled by default in Docker
# (see sysctl net.ipv6.conf.lo.disable_ipv6)
set -e
# Install programs and build dependencies
if command -v sudo; then
SUDO="sudo "
else
SUDO=""
fi
$SUDO apt-get update
$SUDO apt-get install -y cmake libssl-dev screen rtorrent mktorrent
rtorrent -h
# Build and start tracker
if [[ -z "${GITHUB_WORKSPACE}" ]]; then
cd "$HOME"
git clone https://github.com/greatest-ape/aquatic.git
cd aquatic
else
cd "$GITHUB_WORKSPACE"
fi
cargo build --bin aquatic
echo "log_level = 'debug'
[network]
address = '127.0.0.1:3000'" > http.toml
./target/debug/aquatic http -c http.toml &
echo "[network]
address = '127.0.0.1:3000'" > udp.toml
screen -dmS aquatic-udp ./target/debug/aquatic udp -c udp.toml
# Setup directories
cd "$HOME"
mkdir seed
mkdir leech
mkdir torrents
# Create torrents
echo "http-test-ipv4" > seed/http-test-ipv4
echo "udp-test-ipv4" > seed/udp-test-ipv4
mktorrent -p -o "torrents/http-ipv4.torrent" -a "http://127.0.0.1:3000/announce" "seed/http-test-ipv4"
mktorrent -p -o "torrents/udp-ipv4.torrent" -a "udp://127.0.0.1:3000" "seed/udp-test-ipv4"
cp -r torrents torrents-seed
cp -r torrents torrents-leech
# Start seeding client
echo "directory.default.set = $HOME/seed
schedule2 = watch_directory,5,5,load.start=$HOME/torrents-seed/*.torrent" > ~/.rtorrent.rc
echo "Starting seeding client"
screen -dmS rtorrent-seed rtorrent
sleep 10 # Give seeding rtorrent time to load its config file
# Start leeching client
echo "directory.default.set = $HOME/leech
schedule2 = watch_directory,5,5,load.start=$HOME/torrents-leech/*.torrent" > ~/.rtorrent.rc
echo "Starting leeching client.."
screen -dmS rtorrent-leech rtorrent
# Check for completion
HTTP_IPv4="Failed"
UDP_IPv4="Failed"
i="0"
echo "Watching for finished files.."
while [ $i -lt 300 ]
do
if test -f "leech/http-test-ipv4"; then
if grep -q "http-test-ipv4" "leech/http-test-ipv4"; then
HTTP_IPv4="Ok"
fi
fi
if test -f "leech/udp-test-ipv4"; then
if grep -q "udp-test-ipv4" "leech/udp-test-ipv4"; then
UDP_IPv4="Ok"
fi
fi
if [ "$HTTP_IPv4" = "Ok" ] && [ "$UDP_IPv4" = "Ok" ]; then
break
fi
sleep 1
i=$[$i+1]
done
echo "Waited for $i seconds"
echo "::set-output name=http_ipv4::$HTTP_IPv4"
echo "::set-output name=udp_ipv4::$UDP_IPv4"
if [ "$HTTP_IPv4" != "Ok" ] || [ "$UDP_IPv4" != "Ok" ]; then
exit 1
fi