aquatic/.github/actions/test-transfer-udp-http/entrypoint.sh
Joakim Frostegård de2b7cb187 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.
2020-08-17 00:49:12 +02:00

119 lines
No EOL
2.4 KiB
Bash
Executable file

#!/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