]> git.saurik.com Git - apt.git/commitdiff
Add regression test for LP: #1445239
authorMichael Vogt <mvo@ubuntu.com>
Fri, 22 May 2015 14:05:05 +0000 (16:05 +0200)
committerMichael Vogt <mvo@ubuntu.com>
Fri, 22 May 2015 14:05:05 +0000 (16:05 +0200)
Add a regression test that reproduced the hang of apt when a
partial file is present.

Git-Dch: ignore

test/integration/test-bug-lp1445239-download-loop [new file with mode: 0755]
test/interactive-helper/aptwebserver.cc

diff --git a/test/integration/test-bug-lp1445239-download-loop b/test/integration/test-bug-lp1445239-download-loop
new file mode 100755 (executable)
index 0000000..342e3c6
--- /dev/null
@@ -0,0 +1,29 @@
+#!/bin/sh
+#
+# this is a regression test for LP: #1445239 where a partial download can
+# trigger an endless hang of the download method
+#
+
+set -e
+
+TESTDIR=$(readlink -f $(dirname $0))
+. $TESTDIR/framework
+setupenvironment
+configarchitecture 'amd64'
+
+changetowebserver
+webserverconfig 'aptwebserver::support::range' 'true'
+
+TESTFILE='aptarchive/testfile'
+dd if=/dev/zero of=$TESTFILE bs=100k count=1 2>/dev/null
+
+DOWNLOADLOG='rootdir/tmp/testdownloadfile.log'
+
+TARGET=testfile-downloaded
+dd if=/dev/zero of=$TARGET bs=99k count=1 2>/dev/null
+if ! downloadfile http://localhost:8080/testfile "$TARGET" > "$DOWNLOADLOG"; then
+    cat >&2 "$DOWNLOADLOG"
+    msgfail
+else
+    msgpass
+fi
index 9c67b67e485716f4d1fd4eadec048971a6a37213..e02caa2b3516df0a248cb482256795b648b9ff6a 100644 (file)
@@ -654,6 +654,8 @@ static void * handleClient(void * voidclient)                               /*{{{*/
                     if (filesize > filestart)
                     {
                        data.Skip(filestart);
+                        // make sure to send content-range before conent-length
+                        // as regression test for LP: #1445239
                        std::ostringstream contentrange;
                        contentrange << "Content-Range: bytes " << filestart << "-"
                           << filesize - 1 << "/" << filesize;