tests/auto/qhttpnetworkconnection/tst_qhttpnetworkconnection.cpp
changeset 25 e24348a560a6
parent 23 89e065397ea6
--- a/tests/auto/qhttpnetworkconnection/tst_qhttpnetworkconnection.cpp	Thu May 27 13:40:48 2010 +0300
+++ b/tests/auto/qhttpnetworkconnection/tst_qhttpnetworkconnection.cpp	Fri Jun 11 14:24:45 2010 +0300
@@ -109,6 +109,9 @@
     void getMultipleWithPriorities();
 
     void getEmptyWithPipelining();
+
+    void getAndThenDeleteObject();
+    void getAndThenDeleteObject_data();
 };
 
 tst_QHttpNetworkConnection::tst_QHttpNetworkConnection()
@@ -1033,6 +1036,47 @@
     qDeleteAll(replies);
 }
 
+void tst_QHttpNetworkConnection::getAndThenDeleteObject_data()
+{
+    QTest::addColumn<bool>("replyFirst");
+
+    QTest::newRow("delete-reply-first") << true;
+    QTest::newRow("delete-connection-first") << false;
+}
+
+void tst_QHttpNetworkConnection::getAndThenDeleteObject()
+{
+    // yes, this will leak if the testcase fails. I don't care. It must not fail then :P
+    QHttpNetworkConnection *connection = new QHttpNetworkConnection(QtNetworkSettings::serverName());
+    QHttpNetworkRequest request("http://" + QtNetworkSettings::serverName() + "/qtest/bigfile");
+    QHttpNetworkReply *reply = connection->sendRequest(request);
+    reply->setDownstreamLimited(true);
+
+    QTime stopWatch;
+    stopWatch.start();
+    forever {
+        QCoreApplication::instance()->processEvents();
+        if (reply->bytesAvailable())
+            break;
+        if (stopWatch.elapsed() >= 30000)
+            break;
+    }
+
+    QVERIFY(reply->bytesAvailable());
+    QCOMPARE(reply->statusCode() ,200);
+    QVERIFY(!reply->isFinished()); // must not be finished
+
+    QFETCH(bool, replyFirst);
+
+    if (replyFirst) {
+        delete reply;
+        delete connection;
+    } else {
+        delete connection;
+        delete reply;
+    }
+}
+
 
 
 QTEST_MAIN(tst_QHttpNetworkConnection)