mirror of
https://github.com/aphrody-labs/apt.git
synced 2026-10-14 06:09:01 +00:00
We implement a HTTP-only server here (that is wrapped by stunnel for HTTPS support), so if a TLS handshake reaches us it is always wrong and we can just close the connection immediately instead of accepting it and letting the client run into a timeout as we will never receive the message(s) we expect. This happens e.g. with browsers like Firefox that opportunistically try https first (even if you ask for http and specify a port).
43 lines
1.9 KiB
Bash
Executable File
43 lines
1.9 KiB
Bash
Executable File
#!/bin/sh
|
|
set -e
|
|
|
|
TESTDIR="$(readlink -f "$(dirname "$0")")"
|
|
. "$TESTDIR/framework"
|
|
|
|
setupenvironment
|
|
configarchitecture "i386"
|
|
|
|
# Disable sandbox to avoid W: down below
|
|
echo 'APT::Sandbox::User "root";' > rootdir/etc/apt/apt.conf.d/no-acquire-sandbox
|
|
|
|
echo 'alright' > aptarchive/working
|
|
changetohttpswebserver
|
|
|
|
msgtest 'download of a file works via' 'http'
|
|
testsuccess --nomsg downloadfile "http://localhost:${APTHTTPPORT}/working" httpsfile
|
|
testfileequal httpsfile 'alright'
|
|
rm -f httpfile httpsfile
|
|
|
|
msgtest 'download of a file works via' 'https'
|
|
testsuccess --nomsg downloadfile "https://localhost:${APTHTTPSPORT}/working" httpfile
|
|
testfileequal httpfile 'alright'
|
|
rm -f httpfile httpsfile
|
|
|
|
# Speak wrong protocols (https on http port and vice versa). We check that they can be retried.
|
|
msgtest 'protocol negotiation error is transient for' 'https'
|
|
testfailure --nomsg apthelper download-file "https://localhost:${APTHTTPPORT}/working" httpfile -oAcquire::https::Timeout=1 -oAcquire::Retries=1
|
|
cp -a rootdir/tmp/testfailure.output httpsonhttp.output
|
|
# the error details produced seem a bit too internal to hardcode them here:
|
|
# SSL connection failed: error:00000000:lib(0)::reason(0) / Connection reset by peer
|
|
testsuccess grep "^Ign:1 https://localhost:${APTHTTPPORT}/working$" httpsonhttp.output
|
|
testsuccess grep "^Err:1 https://localhost:${APTHTTPPORT}/working$" httpsonhttp.output
|
|
|
|
# Speak wrong protocols (https on http port and vice versa)
|
|
msgtest 'protocol negotiation error is transient for' 'http'
|
|
testfailureequal --nomsg "Ign:1 http://localhost:${APTHTTPSPORT}/working
|
|
Connection failed
|
|
Err:1 http://localhost:${APTHTTPSPORT}/working
|
|
Connection failed
|
|
E: Failed to fetch http://localhost:${APTHTTPSPORT}/working Connection failed
|
|
E: Download Failed" apthelper download-file "http://localhost:${APTHTTPSPORT}/working" httpfile -oAcquire::https::Timeout=1 -oAcquire::Retries=1
|