1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156
|
#!/bin/sh
set -e
TESTDIR="$(readlink -f "$(dirname "$0")")"
. "$TESTDIR/framework"
setupenvironment
configarchitecture 'i386'
changetohttpswebserver
echo 'foo' > aptarchive/foo
echo 'bar' > aptarchive/foo2
test_apt_helper_download() {
msgmsg 'Test with' "$1"
msgtest 'apt-file download-file' 'md5sum'
testsuccess --nomsg apthelper download-file "${1}/foo" './downloaded/foo2' 'MD5Sum:d3b07384d113edec49eaa6238ad5ff00'
testfileequal ./downloaded/foo2 'foo'
msgtest 'apt-file download-file' 'sha1'
testsuccess --nomsg apthelper download-file "${1}/foo" './downloaded/foo1' 'SHA1:f1d2d2f924e986ac86fdf7b36c94bcdf32beec15'
testfileequal ./downloaded/foo1 'foo'
msgtest 'apt-file download-file' 'sha256'
testsuccess --nomsg apthelper download-file "${1}/foo" './downloaded/foo3' 'SHA256:b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c'
testfileequal ./downloaded/foo3 'foo'
msgtest 'apt-file download-file' 'no-hash'
testsuccess --nomsg apthelper download-file "${1}/foo" './downloaded/foo4'
testfileequal ./downloaded/foo4 'foo'
msgtest 'apt-file download-file' 'wrong md5sum'
testfailure --nomsg apthelper -qq download-file "${1}/foo" './downloaded/foo5' 'MD5Sum:aabbcc'
testfileequal rootdir/tmp/testfailure.output "E: Failed to fetch ${1}/foo Hash Sum mismatch
Hashes of expected file:
- MD5Sum:aabbcc [weak]
Hashes of received file:
- SHA512:0cf9180a764aba863a67b6d72f0918bc131c6772642cb2dce5a34f0a702f9470ddc2bf125c12198b1995c233c34b4afd346c54a2334c350a948a51b6e8b4e6b6
- SHA256:b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c
- SHA1:f1d2d2f924e986ac86fdf7b36c94bcdf32beec15 [weak]
- MD5Sum:d3b07384d113edec49eaa6238ad5ff00 [weak]
- Filesize:4 [weak]
Last modification reported: $(lastmodification 'aptarchive/foo')
E: Download Failed"
testfileequal ./downloaded/foo5.FAILED 'foo'
msgtest 'apt-file download-file' 'wrong sha256'
testfailure --nomsg apthelper -qq download-file "${1}/foo" './downloaded/foo6' 'SHA256:aabbcc'
testfileequal rootdir/tmp/testfailure.output "E: Failed to fetch ${1}/foo Hash Sum mismatch
Hashes of expected file:
- SHA256:aabbcc
Hashes of received file:
- SHA256:b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c
- Filesize:4 [weak]
Last modification reported: $(lastmodification 'aptarchive/foo')
E: Download Failed"
testfileequal './downloaded/foo6.FAILED' 'foo'
msgtest 'apt-file download-file' 'sha256 sha1'
testsuccess --nomsg apthelper download-file "${1}/foo" './downloaded/foo8' 'SHA256:b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c' \
"${1}/foo2" './downloaded/foo7' 'SHA1:e242ed3bffccdf271b7fbaf34ed72d089537b42f'
testfileequal './downloaded/foo8' 'foo'
testfileequal './downloaded/foo7' 'bar'
msgtest 'apt-file download-file' 'md5sum sha1'
testsuccess --nomsg apthelper download-file "${1}/foo" './downloaded/foo9' 'MD5Sum:d3b07384d113edec49eaa6238ad5ff00' \
"${1}/foo2" './downloaded/foo10' 'SHA1:e242ed3bffccdf271b7fbaf34ed72d089537b42f'
testfileequal './downloaded/foo9' 'foo'
testfileequal './downloaded/foo10' 'bar'
}
setupproxydetect() {
local METH="$1"
shift
cat >"${TMPWORKINGDIRECTORY}/apt-proxy-detect" <<EOF
#!/bin/sh
set -e
$*
EOF
chmod 755 "${TMPWORKINGDIRECTORY}/apt-proxy-detect"
echo "Acquire::${METH}::${CONFNAME} \"${TMPWORKINGDIRECTORY}/apt-proxy-detect\";" > rootdir/etc/apt/apt.conf.d/02proxy-detect
}
test_apt_helper_detect_proxy() {
msgmsg "apt-helper $CONFNAME" 'no proxy'
testsuccessequal "Using proxy '' for URL 'http://example.com/'" apthelper auto-detect-proxy http://example.com/
setupproxydetect 'http' 'exit 0'
testsuccessequal "Using proxy '' for URL 'http://example.com/'" apthelper auto-detect-proxy http://example.com/
setupproxydetect 'http' 'exit 1'
testfailureequal 'E: Sub-process ProxyAutoDetect returned an error code (1)' apthelper auto-detect-proxy http://example.com/
setupproxydetect 'http' 'echo'
testwarningequal "Using proxy '' for URL 'http://example.com/'
W: ProxyAutoDetect command returned an empty line" apthelper auto-detect-proxy http://example.com/
setupproxydetect 'http' 'echo DIRECT'
testsuccessequal "Using proxy 'DIRECT' for URL 'http://example.com/'" apthelper auto-detect-proxy http://example.com/
chmod -x "${TMPWORKINGDIRECTORY}/apt-proxy-detect"
testfailureequal "E: ProxyAutoDetect command '${TMPWORKINGDIRECTORY}/apt-proxy-detect' can not be executed! - access (13: Permission denied)" apthelper auto-detect-proxy http://example.com/
for meth in 'http' 'https'; do
msgmsg "apt-helper $CONFNAME" "${meth} proxy"
for type in 'http' 'https' 'socks5h'; do
setupproxydetect "$meth" "echo '${type}://some-proxy'"
testsuccessequal "Using proxy '${type}://some-proxy' for URL '${meth}://www.example.com/'" apthelper auto-detect-proxy "${meth}://www.example.com"
if [ "$meth" = 'http' ]; then
testsuccessequal "Using proxy '' for URL 'https://ssl.example.com/'" apthelper auto-detect-proxy 'https://ssl.example.com'
else
testsuccessequal "Using proxy '' for URL 'http://no-ssl.example.com/'" apthelper auto-detect-proxy 'http://no-ssl.example.com'
fi
done
done
msgmsg "apt-helper $CONFNAME" 'no strange proxy'
for meth in gpgv copy store file; do
setupproxydetect "$meth" "echo '${meth}://some-proxy'"
testsuccessequal "Using proxy '' for URL '${meth}:/foo/bar'" apthelper auto-detect-proxy "${meth}:/foo/bar"
testsuccessequal "Using proxy '' for URL '${meth}://./foo/bar'" apthelper auto-detect-proxy "${meth}://./foo/bar"
done
for url in 'cdrom://Moo Cow Rom/debian' 'cdrom://[The Debian 1.2 disk, 1/2 R16]/debian/'; do
setupproxydetect "${url%%:*}" "echo 'cdrom://some-proxy'"
testsuccessequal "Using proxy '' for URL '${url}'" apthelper auto-detect-proxy "$url"
done
for meth in tor tor+http tor+https; do
setupproxydetect "$meth" "echo 'socks5h://some-proxy'"
testsuccessequal "Using proxy 'socks5h://some-proxy' for URL '${meth}://example.org/'" apthelper auto-detect-proxy "${meth}://example.org"
setupproxydetect "$meth" "echo 'DIRECT'"
testwarningequal "Using proxy '' for URL '${meth}://example.org/'
W: ProxyAutoDetect command returned incompatible proxy 'DIRECT' for access type ${meth}" apthelper auto-detect-proxy "${meth}://example.org"
done
rm -f rootdir/etc/apt/apt.conf.d/02proxy-detect "${TMPWORKINGDIRECTORY}/apt-proxy-detect"
}
test_apt_helper_download "http://localhost:${APTHTTPPORT}"
test_apt_helper_download "https://localhost:${APTHTTPSPORT}"
for CONFNAME in 'ProxyAutoDetect' 'Proxy-Auto-Detect' ; do
test_apt_helper_detect_proxy
done
msgmsg 'test various failure modes'
testfailureequal 'E: Invalid operation download' apthelper download
testfailureequal 'E: Must specify at least one pair url/filename' apthelper download-file
testfailureequal 'E: Must specify at least one pair url/filename' apthelper download-file 'http://example.org/'
testfailureequal 'E: Need one URL as argument' apthelper auto-detect-proxy
testfailureequal 'E: Must specify at least one SRV record' apthelper srv-lookup
testfailureequal 'E: GetSrvRec failed for localhost' apthelper -q=1 srv-lookup 'localhost'
testfailureequal "E: GetSrvRec failed for localhost:${APTHTTPPORT}" apthelper -q=1 srv-lookup "localhost:${APTHTTPPORT}"
testfailureequal "E: GetSrvRec failed for localhost:${APTHTTPSPORT}" apthelper -q=1 srv-lookup "localhost:${APTHTTPSPORT}"
msgmsg 'apt-helper' 'drop-privs'
testfailureequal "E: No command given to run without privileges" apthelper drop-privs
testsuccess apthelper -- drop-privs true
testsuccess apthelper drop-privs -- true
DATE="$(date -u +'%Y-%m-%d')"
testsuccessequal "$DATE" apthelper drop-privs -- date -u -d "$DATE" +'%Y-%m-%d'
|