]>
Commit | Line | Data |
---|---|---|
fd46d305 DK |
1 | #!/bin/sh |
2 | set -e | |
3 | ||
4 | TESTDIR=$(readlink -f $(dirname $0)) | |
5 | . $TESTDIR/framework | |
6 | setupenvironment | |
7 | configarchitecture 'amd64' | |
8 | ||
9 | changetowebserver | |
10 | ||
11 | copysource() { | |
12 | dd if="$1" bs=1 count="$2" of="$3" 2>/dev/null | |
13 | touch -d "$(stat --format '%y' "${TESTFILE}")" "$3" | |
14 | } | |
15 | ||
16 | testdownloadfile() { | |
17 | local DOWNLOG='download-testfile.log' | |
18 | rm -f "$DOWNLOG" | |
19 | msgtest "Testing download of file $2 with" "$1" | |
20 | if ! downloadfile "$2" "$3" > "$DOWNLOG"; then | |
23af9f40 | 21 | cat >&2 "$DOWNLOG" |
fd46d305 DK |
22 | msgfail |
23 | else | |
24 | msgpass | |
25 | fi | |
26 | cat "$DOWNLOG" | while read field hash; do | |
27 | local EXPECTED | |
28 | case "$field" in | |
29 | 'MD5Sum-Hash:') EXPECTED="$(md5sum "$TESTFILE" | cut -d' ' -f 1)";; | |
30 | 'SHA1-Hash:') EXPECTED="$(sha1sum "$TESTFILE" | cut -d' ' -f 1)";; | |
31 | 'SHA256-Hash:') EXPECTED="$(sha256sum "$TESTFILE" | cut -d' ' -f 1)";; | |
32 | 'SHA512-Hash:') EXPECTED="$(sha512sum "$TESTFILE" | cut -d' ' -f 1)";; | |
33 | *) continue;; | |
34 | esac | |
35 | if [ "$4" = '=' ]; then | |
36 | msgtest 'Test downloaded file for correct' "$field" | |
37 | else | |
38 | msgtest 'Test downloaded file does not match in' "$field" | |
39 | fi | |
40 | if [ "$EXPECTED" "$4" "$hash" ]; then | |
41 | msgpass | |
42 | else | |
23af9f40 | 43 | cat >&2 "$DOWNLOG" |
fd46d305 DK |
44 | msgfail "expected: $EXPECTED ; got: $hash" |
45 | fi | |
46 | done | |
47 | } | |
48 | ||
49 | testwebserverlaststatuscode() { | |
23af9f40 DK |
50 | local DOWNLOG='download-testfile.log' |
51 | rm -f "$DOWNLOG" | |
52 | local STATUS="$(mktemp)" | |
fd46d305 DK |
53 | addtrap "rm $STATUS;" |
54 | msgtest 'Test last status code from the webserver was' "$1" | |
23af9f40 | 55 | downloadfile "http://localhost:8080/_config/find/aptwebserver::last-status-code" "$STATUS" > "$DOWNLOG" |
fd46d305 DK |
56 | if [ "$(cat "$STATUS")" = "$1" ]; then |
57 | msgpass | |
58 | else | |
23af9f40 | 59 | cat >&2 "$DOWNLOG" |
fd46d305 DK |
60 | msgfail "Status was $(cat "$STATUS")" |
61 | fi | |
62 | } | |
63 | ||
64 | ||
65 | TESTFILE='aptarchive/testfile' | |
66 | cp -a ${TESTDIR}/framework $TESTFILE | |
67 | ||
68 | testrun() { | |
69 | downloadfile "$1/_config/set/aptwebserver::support::range/true" '/dev/null' >/dev/null | |
70 | testwebserverlaststatuscode '200' | |
71 | ||
72 | copysource $TESTFILE 0 ./testfile | |
73 | testdownloadfile 'no data' "${1}/testfile" './testfile' '=' | |
74 | testwebserverlaststatuscode '200' | |
75 | ||
76 | copysource $TESTFILE 20 ./testfile | |
77 | testdownloadfile 'valid partial data' "${1}/testfile" './testfile' '=' | |
78 | testwebserverlaststatuscode '206' | |
79 | ||
80 | copysource /dev/zero 20 ./testfile | |
81 | testdownloadfile 'invalid partial data' "${1}/testfile" './testfile' '!=' | |
82 | testwebserverlaststatuscode '206' | |
83 | ||
84 | copysource $TESTFILE 1M ./testfile | |
85 | testdownloadfile 'completely downloaded file' "${1}/testfile" './testfile' '=' | |
86 | testwebserverlaststatuscode '416' | |
87 | ||
88 | copysource /dev/zero 1M ./testfile | |
89 | testdownloadfile 'too-big partial file' "${1}/testfile" './testfile' '=' | |
90 | testwebserverlaststatuscode '200' | |
91 | ||
92 | copysource /dev/zero 20 ./testfile | |
93 | touch ./testfile | |
94 | testdownloadfile 'old data' "${1}/testfile" './testfile' '=' | |
95 | testwebserverlaststatuscode '200' | |
96 | ||
97 | downloadfile "$1/_config/set/aptwebserver::support::range/false" '/dev/null' >/dev/null | |
98 | testwebserverlaststatuscode '200' | |
99 | ||
100 | copysource $TESTFILE 20 ./testfile | |
101 | testdownloadfile 'no server support' "${1}/testfile" './testfile' '=' | |
102 | testwebserverlaststatuscode '200' | |
103 | } | |
104 | ||
105 | testrun 'http://localhost:8080' | |
106 | ||
107 | changetohttpswebserver | |
108 | ||
109 | testrun 'https://localhost:4433' |