]> git.saurik.com Git - apt.git/blobdiff - test/integration/test-partial-file-support
add a testcase for support of various build-dependency types
[apt.git] / test / integration / test-partial-file-support
index 160d451b6c85dc9b2a4906d5c3654009d18ecd89..9b5eed1e540fa50dd01b6d18579e16370b11da09 100755 (executable)
@@ -1,8 +1,8 @@
 #!/bin/sh
 set -e
 
-TESTDIR=$(readlink -f $(dirname $0))
-. $TESTDIR/framework
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
 setupenvironment
 configarchitecture 'amd64'
 
@@ -17,8 +17,8 @@ DOWNLOADLOG='rootdir/tmp/testdownloadfile.log'
 
 testdownloadfile() {
        rm -f "$DOWNLOADLOG"
-       msgtest "Testing download of file $2 with" "$1"
-       if ! downloadfile "$2" "$3" > "$DOWNLOADLOG"; then
+       msgtest "Testing download of file $2 with" "$1 $5"
+       if ! downloadfile "$2" "$3" "$5" > "$DOWNLOADLOG"; then
                cat >&2 "$DOWNLOADLOG"
                msgfail
        else
@@ -68,16 +68,22 @@ testdownloadfile() {
 }
 
 TESTFILE='aptarchive/testfile'
-cp -a ${TESTDIR}/framework $TESTFILE
-cp -a ${TESTDIR}/framework "${TESTFILE}2"
+cp -a "${TESTDIR}/framework" "$TESTFILE"
+cp -a "${TESTDIR}/framework" "${TESTFILE}2"
 
 followuprequest() {
-       local DOWN='./testfile'
+       local DOWN='./downloaded/testfile'
 
        copysource $TESTFILE 1M $DOWN
        testdownloadfile 'completely downloaded file' "${1}/testfile" "$DOWN" '='
        testwebserverlaststatuscode '416' "$DOWNLOADLOG"
 
+       webserverconfig 'aptwebserver::support::content-range' 'false'
+       copysource $TESTFILE 1M $DOWN
+       testdownloadfile 'completely downloaded file' "${1}/testfile" "$DOWN" '=' "SHA256:$(sha256sum "$TESTFILE" | cut -d' ' -f 1)"
+       testwebserverlaststatuscode '416' "$DOWNLOADLOG"
+       webserverconfig 'aptwebserver::support::content-range' 'true'
+
        copysource $TESTFILE 1M $DOWN
        copysource "${TESTFILE}2" 20 "${DOWN}2"
        msgtest 'Testing download of files with' 'completely downloaded file + partial file'
@@ -90,17 +96,19 @@ followuprequest() {
 
 testrun() {
        webserverconfig 'aptwebserver::support::range' 'true'
+       webserverconfig 'aptwebserver::response-header::Accept-Ranges' 'bytes'
+       local DOWN='./downloaded/testfile'
 
-       copysource $TESTFILE 0 ./testfile
-       testdownloadfile 'no data' "${1}/testfile" './testfile' '='
+       copysource $TESTFILE 0 $DOWN
+       testdownloadfile 'no data' "${1}/testfile" "$DOWN" '='
        testwebserverlaststatuscode '200' "$DOWNLOADLOG"
 
-       copysource $TESTFILE 20 ./testfile
-       testdownloadfile 'valid partial data' "${1}/testfile" './testfile' '='
+       copysource $TESTFILE 20 $DOWN
+       testdownloadfile 'valid partial data' "${1}/testfile" "$DOWN" '='
        testwebserverlaststatuscode '206' "$DOWNLOADLOG"
 
-       copysource /dev/zero 20 ./testfile
-       testdownloadfile 'invalid partial data' "${1}/testfile" './testfile' '!='
+       copysource /dev/zero 20 $DOWN
+       testdownloadfile 'invalid partial data' "${1}/testfile" "$DOWN" '!='
        testwebserverlaststatuscode '206' "$DOWNLOADLOG"
 
        webserverconfig 'aptwebserver::closeOnError' 'false'
@@ -109,34 +117,41 @@ testrun() {
        followuprequest "$1"
        webserverconfig 'aptwebserver::closeOnError' 'false'
 
-       copysource /dev/zero 1M ./testfile
-       testdownloadfile 'too-big partial file' "${1}/testfile" './testfile' '='
+       copysource /dev/zero 1M $DOWN
+       testdownloadfile 'too-big partial file' "${1}/testfile" "$DOWN" '='
        testwebserverlaststatuscode '200' "$DOWNLOADLOG"
 
-       copysource /dev/zero 20 ./testfile
-       touch ./testfile
-       testdownloadfile 'old data' "${1}/testfile" './testfile' '='
+       copysource /dev/zero 20 $DOWN
+       touch $DOWN
+       testdownloadfile 'old data' "${1}/testfile" "$DOWN" '='
        testwebserverlaststatuscode '200' "$DOWNLOADLOG"
 
-       webserverconfig 'aptwebserver::support::range' 'false'
+       if [ "${1%%:*}" = 'https' ] && expr match "$1" "^.*/redirectme$" >/dev/null; then
+               webserverconfig 'aptwebserver::response-header::Accept-Ranges' 'none'
+       else
+               webserverconfig 'aptwebserver::support::range' 'false'
+       fi
 
-       copysource $TESTFILE 20 ./testfile
-       testdownloadfile 'no server support' "${1}/testfile" './testfile' '='
+       copysource $TESTFILE 20 $DOWN
+       testdownloadfile 'no server support' "${1}/testfile" "$DOWN" '='
        testwebserverlaststatuscode '200' "$DOWNLOADLOG"
 }
 
-msgmsg 'http: Test with Content-Length'
-webserverconfig 'aptwebserver::chunked-transfer-encoding' 'false'
-testrun 'http://localhost:8080'
-msgmsg 'http: Test with Transfer-Encoding: chunked'
-webserverconfig 'aptwebserver::chunked-transfer-encoding' 'true'
-testrun 'http://localhost:8080'
+serverconfigs() {
+       msgmsg "${1%%:*}: Test with Content-Length"
+       webserverconfig 'aptwebserver::chunked-transfer-encoding' 'false'
+       testrun "$1"
+       msgmsg "${1%%:*}: Test with Transfer-Encoding: chunked"
+       webserverconfig 'aptwebserver::chunked-transfer-encoding' 'true'
+       testrun "$1"
+}
+
+serverconfigs "http://localhost:${APTHTTPPORT}"
 
 changetohttpswebserver
 
-msgmsg 'https: Test with Content-Length'
-webserverconfig 'aptwebserver::chunked-transfer-encoding' 'false'
-testrun 'https://localhost:4433'
-msgmsg 'https: Test with Transfer-Encoding: chunked'
-webserverconfig 'aptwebserver::chunked-transfer-encoding' 'true'
-testrun 'https://localhost:4433'
+serverconfigs "https://localhost:${APTHTTPSPORT}"
+
+webserverconfig 'aptwebserver::redirect::replace::/redirectme/' "https://localhost:${APTHTTPSPORT}/"
+serverconfigs "https://localhost:${APTHTTPSPORT}/redirectme"
+serverconfigs "http://localhost:${APTHTTPPORT}/redirectme"