From 60cafbad6aec50a3e8e2d615329ba0a8523cb8aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joakim=20Frosteg=C3=A5rd?= Date: Mon, 17 Aug 2020 21:49:15 +0200 Subject: [PATCH] github transfer test workflow: test HTTP over TLS too, rename --- .../Dockerfile | 0 .../action.yml | 6 +- .../entrypoint.sh | 69 ++++++++++++++++--- ...dp-http.yml => test-transfer-http-udp.yml} | 6 +- 4 files changed, 68 insertions(+), 13 deletions(-) rename .github/actions/{test-transfer-udp-http => test-transfer-http-udp}/Dockerfile (100%) rename .github/actions/{test-transfer-udp-http => test-transfer-http-udp}/action.yml (50%) rename .github/actions/{test-transfer-udp-http => test-transfer-http-udp}/entrypoint.sh (54%) rename .github/workflows/{test-transfer-udp-http.yml => test-transfer-http-udp.yml} (60%) diff --git a/.github/actions/test-transfer-udp-http/Dockerfile b/.github/actions/test-transfer-http-udp/Dockerfile similarity index 100% rename from .github/actions/test-transfer-udp-http/Dockerfile rename to .github/actions/test-transfer-http-udp/Dockerfile diff --git a/.github/actions/test-transfer-udp-http/action.yml b/.github/actions/test-transfer-http-udp/action.yml similarity index 50% rename from .github/actions/test-transfer-udp-http/action.yml rename to .github/actions/test-transfer-http-udp/action.yml index 927c3aa..9bf3fa2 100644 --- a/.github/actions/test-transfer-udp-http/action.yml +++ b/.github/actions/test-transfer-http-udp/action.yml @@ -1,8 +1,10 @@ -name: 'test-transfer-udp-http' -description: 'test aquatic udp and http file transfer' +name: 'test-transfer-http-udp' +description: 'test aquatic http and udp file transfer' outputs: http_ipv4: description: 'HTTP IPv4 status' + http_tls_ipv4: + description: 'HTTP IPv4 over TLS status' udp_ipv4: description: 'UDP IPv4 status' runs: diff --git a/.github/actions/test-transfer-udp-http/entrypoint.sh b/.github/actions/test-transfer-http-udp/entrypoint.sh similarity index 54% rename from .github/actions/test-transfer-udp-http/entrypoint.sh rename to .github/actions/test-transfer-http-udp/entrypoint.sh index 4a5b326..3618bed 100755 --- a/.github/actions/test-transfer-udp-http/entrypoint.sh +++ b/.github/actions/test-transfer-http-udp/entrypoint.sh @@ -1,4 +1,8 @@ #!/bin/bash +# +# Test that file transfers work with aquatic_http (with and without TLS) +# and aquatic_udp. +# # IPv6 is unfortunately disabled by default in Docker # (see sysctl net.ipv6.conf.lo.disable_ipv6) @@ -13,11 +17,11 @@ else fi $SUDO apt-get update -$SUDO apt-get install -y cmake libssl-dev screen rtorrent mktorrent +$SUDO apt-get install -y cmake libssl-dev screen rtorrent mktorrent ssl-cert ca-certificates rtorrent -h -# Build and start tracker +# Clone repository if necessary, go to repository directory if [[ -z "${GITHUB_WORKSPACE}" ]]; then cd "$HOME" @@ -29,17 +33,42 @@ else cd "$GITHUB_WORKSPACE" fi +# Setup bogus TLS certificate + +$SUDO echo "127.0.0.1 example.com" >> /etc/hosts + +openssl ecparam -genkey -name prime256v1 -out key.pem +openssl req -new -sha256 -key key.pem -out csr.csr -subj "/C=GB/ST=Test/L=Test/O=Test/OU=Test/CN=example.com" +openssl req -x509 -sha256 -nodes -days 365 -key key.pem -in csr.csr -out cert.crt + +$SUDO cp cert.crt /usr/local/share/ca-certificates/snakeoil.crt +$SUDO update-ca-certificates + +openssl pkcs12 -export -passout "pass:p" -out identity.pfx -inkey key.pem -in cert.crt + +# Build and start tracker + cargo build --bin aquatic echo "log_level = 'debug' [network] address = '127.0.0.1:3000'" > http.toml -./target/debug/aquatic http -c http.toml & +./target/debug/aquatic http -c http.toml > "$HOME/http.log" 2>&1 & + +echo "log_level = 'debug' + +[network] +address = '127.0.0.1:3001' +use_tls = true +tls_pkcs12_path = './identity.pfx' +tls_pkcs12_password = 'p' +" > tls.toml +./target/debug/aquatic http -c tls.toml > "$HOME/tls.log" 2>&1 & echo "[network] address = '127.0.0.1:3000'" > udp.toml -screen -dmS aquatic-udp ./target/debug/aquatic udp -c udp.toml +./target/debug/aquatic udp -c udp.toml > "$HOME/udp.log" 2>&1 & # Setup directories @@ -52,9 +81,11 @@ mkdir torrents # Create torrents echo "http-test-ipv4" > seed/http-test-ipv4 +echo "tls-test-ipv4" > seed/tls-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/tls-ipv4.torrent" -a "https://example.com:3001/announce" "seed/tls-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 @@ -81,6 +112,7 @@ screen -dmS rtorrent-leech rtorrent # Check for completion HTTP_IPv4="Failed" +TLS_IPv4="Failed" UDP_IPv4="Failed" i="0" @@ -94,13 +126,18 @@ do HTTP_IPv4="Ok" fi fi + if test -f "leech/tls-test-ipv4"; then + if grep -q "tls-test-ipv4" "leech/tls-test-ipv4"; then + TLS_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 + if [ "$HTTP_IPv4" = "Ok" ] && [ "$TLS_IPv4" = "Ok" ] && [ "$UDP_IPv4" = "Ok" ]; then break fi @@ -112,11 +149,27 @@ done echo "Waited for $i seconds" echo "::set-output name=http_ipv4::$HTTP_IPv4" +echo "::set-output name=http_tls_ipv4::$TLS_IPv4" echo "::set-output name=udp_ipv4::$UDP_IPv4" -echo "UDP IPv4: $UDP_IPv4" -echo "HTTP IPv4: $HTTP_IPv4" +echo "" +echo "# --- HTTP log --- #" +cat "http.log" -if [ "$HTTP_IPv4" != "Ok" ] || [ "$UDP_IPv4" != "Ok" ]; then +echo "" +echo "# --- HTTP over TLS log --- #" +cat "tls.log" + +echo "" +echo "# --- UDP log --- #" +cat "udp.log" + +echo "" +echo "# --- Test results --- #" +echo "HTTP (IPv4): $HTTP_IPv4" +echo "HTTP over TLS (IPv4): $TLS_IPv4" +echo "UDP (IPv4): $UDP_IPv4" + +if [ "$HTTP_IPv4" != "Ok" ] || [ "$TLS_IPv4" != "Ok" ] || [ "$UDP_IPv4" != "Ok" ]; then exit 1 fi \ No newline at end of file diff --git a/.github/workflows/test-transfer-udp-http.yml b/.github/workflows/test-transfer-http-udp.yml similarity index 60% rename from .github/workflows/test-transfer-udp-http.yml rename to .github/workflows/test-transfer-http-udp.yml index 20f49ec..956dd63 100644 --- a/.github/workflows/test-transfer-udp-http.yml +++ b/.github/workflows/test-transfer-http-udp.yml @@ -1,4 +1,4 @@ -name: "Test UDP and HTTP file transfer" +name: "Test HTTP and UDP file transfer" on: push: @@ -9,10 +9,10 @@ on: jobs: test-transfer-http: runs-on: ubuntu-latest - name: Test BitTorrent file transfer over UDP and HTTP + name: "Test BitTorrent file transfer over HTTP (with and without TLS) and UDP" steps: - name: Checkout uses: actions/checkout@v2 - name: Test file transfers - uses: ./.github/actions/test-transfer-udp-http + uses: ./.github/actions/test-transfer-http-udp id: test_transfer_udp_http \ No newline at end of file