summaryrefslogtreecommitdiffstats
path: root/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp')
-rw-r--r--tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp121
1 files changed, 103 insertions, 18 deletions
diff --git a/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp b/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp
index 963955e038..6450d2a5d2 100644
--- a/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp
+++ b/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp
@@ -511,6 +511,8 @@ private Q_SLOTS:
void autoDeleteReplies_data();
void autoDeleteReplies();
+ void getWithTimeout();
+ void postWithTimeout();
// NOTE: This test must be last!
void parentingRepliesToTheApp();
private:
@@ -589,6 +591,7 @@ public:
bool multiple;
int totalConnections;
+ bool stopTransfer = false;
bool hasContent = false;
int contentRead = 0;
int contentLength = 0;
@@ -655,7 +658,7 @@ protected:
// we need to emulate the bytesWrittenSlot call if the data is empty.
if (dataToTransmit.size() == 0) {
emit client->bytesWritten(0);
- } else {
+ } else if (!stopTransfer) {
client->write(dataToTransmit);
// FIXME: For SSL connections, if we don't flush the socket, the
// client never receives the data and since we're doing a disconnect
@@ -671,7 +674,7 @@ private:
//qDebug() << "connectSocketSignals" << client;
connect(client.data(), SIGNAL(readyRead()), this, SLOT(readyReadSlot()));
connect(client.data(), SIGNAL(bytesWritten(qint64)), this, SLOT(bytesWrittenSlot()));
- connect(client.data(), SIGNAL(error(QAbstractSocket::SocketError)),
+ connect(client.data(), SIGNAL(errorOccurred(QAbstractSocket::SocketError)),
this, SLOT(slotError(QAbstractSocket::SocketError)));
}
@@ -711,7 +714,8 @@ public slots:
Q_ASSERT(currentClient);
if (currentClient != client)
client = currentClient;
-
+ if (stopTransfer)
+ return;
receivedData += client->readAll();
const int doubleEndlPos = receivedData.indexOf("\r\n\r\n");
@@ -1367,7 +1371,7 @@ QString tst_QNetworkReply::runMultipartRequest(const QNetworkRequest &request,
// the code below is copied from tst_QNetworkReply::runSimpleRequest, see below
reply->setParent(this);
connect(reply, SIGNAL(finished()), SLOT(finished()));
- connect(reply, SIGNAL(error(QNetworkReply::NetworkError)), SLOT(gotError()));
+ connect(reply, SIGNAL(errorOccurred(QNetworkReply::NetworkError)), SLOT(gotError()));
multiPart->setParent(reply.data());
returnCode = Timeout;
@@ -1427,7 +1431,7 @@ QString tst_QNetworkReply::runSimpleRequest(QNetworkAccessManager::Operation op,
code = Failure;
} else {
connect(reply, SIGNAL(finished()), SLOT(finished()));
- connect(reply, SIGNAL(error(QNetworkReply::NetworkError)), SLOT(gotError()));
+ connect(reply, SIGNAL(errorOccurred(QNetworkReply::NetworkError)), SLOT(gotError()));
int count = 0;
loop = new QEventLoop;
@@ -1462,7 +1466,7 @@ QString tst_QNetworkReply::runCustomRequest(const QNetworkRequest &request,
reply.reset(manager.sendCustomRequest(request, verb, data));
reply->setParent(this);
connect(reply, SIGNAL(finished()), SLOT(finished()));
- connect(reply, SIGNAL(error(QNetworkReply::NetworkError)), SLOT(gotError()));
+ connect(reply, SIGNAL(errorOccurred(QNetworkReply::NetworkError)), SLOT(gotError()));
returnCode = Timeout;
loop = new QEventLoop;
@@ -1499,7 +1503,7 @@ int tst_QNetworkReply::waitForFinish(QNetworkReplyPtr &reply)
int count = 0;
connect(reply, SIGNAL(finished()), SLOT(finished()));
- connect(reply, SIGNAL(error(QNetworkReply::NetworkError)), SLOT(gotError()));
+ connect(reply, SIGNAL(errorOccurred(QNetworkReply::NetworkError)), SLOT(gotError()));
returnCode = Success;
loop = new QEventLoop;
QSignalSpy spy(reply.data(), SIGNAL(downloadProgress(qint64,qint64)));
@@ -1886,7 +1890,7 @@ void tst_QNetworkReply::getFromFtpAfterError()
QNetworkRequest invalidRequest(QUrl("ftp://" + QtNetworkSettings::ftpServerName() + "/qtest/invalid.txt"));
QNetworkReplyPtr invalidReply;
invalidReply.reset(manager.get(invalidRequest));
- QSignalSpy spy(invalidReply.data(), SIGNAL(error(QNetworkReply::NetworkError)));
+ QSignalSpy spy(invalidReply.data(), SIGNAL(errorOccurred(QNetworkReply::NetworkError)));
QVERIFY(spy.wait());
QCOMPARE(invalidReply->error(), QNetworkReply::ContentNotFoundError);
@@ -3907,7 +3911,7 @@ void tst_QNetworkReply::ioGetFromHttpBrokenServer()
QNetworkRequest request(QUrl("http://localhost:" + QString::number(server.serverPort())));
QNetworkReplyPtr reply(manager.get(request));
- QSignalSpy spy(reply.data(), SIGNAL(error(QNetworkReply::NetworkError)));
+ QSignalSpy spy(reply.data(), SIGNAL(errorOccurred(QNetworkReply::NetworkError)));
QCOMPARE(waitForFinish(reply), int(Failure));
@@ -5443,7 +5447,7 @@ void tst_QNetworkReply::rateControl()
QNetworkRequest request("debugpipe://localhost:" + QString::number(sender.serverPort()));
QNetworkReplyPtr reply(manager.get(request));
reply->setReadBufferSize(32768);
- QSignalSpy errorSpy(reply.data(), SIGNAL(error(QNetworkReply::NetworkError)));
+ QSignalSpy errorSpy(reply.data(), SIGNAL(errorOccurred(QNetworkReply::NetworkError)));
RateControlledReader reader(sender, reply.data(), rate, 20);
@@ -5857,7 +5861,7 @@ void tst_QNetworkReply::nestedEventLoops()
QNetworkReplyPtr reply(manager.get(request));
QSignalSpy finishedspy(reply.data(), SIGNAL(finished()));
- QSignalSpy errorspy(reply.data(), SIGNAL(error(QNetworkReply::NetworkError)));
+ QSignalSpy errorspy(reply.data(), SIGNAL(errorOccurred(QNetworkReply::NetworkError)));
connect(reply, SIGNAL(finished()), SLOT(nestedEventLoops_slot()));
QTestEventLoop::instance().enterLoop(20);
@@ -6090,7 +6094,7 @@ void tst_QNetworkReply::authorizationError()
QCOMPARE(reply->error(), QNetworkReply::NoError);
- QSignalSpy errorSpy(reply.data(), SIGNAL(error(QNetworkReply::NetworkError)));
+ QSignalSpy errorSpy(reply.data(), SIGNAL(errorOccurred(QNetworkReply::NetworkError)));
QSignalSpy finishedSpy(reply.data(), SIGNAL(finished()));
// now run the request:
QCOMPARE(waitForFinish(reply), int(Failure));
@@ -6486,6 +6490,9 @@ void tst_QNetworkReply::sslSessionSharing()
QNetworkRequest warmupRequest(urlString);
QFETCH(bool, sessionSharingEnabled);
warmupRequest.setAttribute(QNetworkRequest::User, sessionSharingEnabled); // so we can read it from the slot
+ // Make sure the socket is closed when the request is finished to guarantee that
+ // the _socket_ is not reused, but rather the ssl session
+ warmupRequest.setRawHeader("Connection", "close");
if (! sessionSharingEnabled) {
QSslConfiguration configuration(QSslConfiguration::defaultConfiguration());
configuration.setSslOption(QSsl::SslOptionDisableSessionSharing, true);
@@ -7046,7 +7053,7 @@ void tst_QNetworkReply::qtbug4121unknownAuthentication()
QSignalSpy authSpy(&manager, SIGNAL(authenticationRequired(QNetworkReply*,QAuthenticator*)));
QSignalSpy finishedSpy(&manager, SIGNAL(finished(QNetworkReply*)));
- QSignalSpy errorSpy(reply.data(), SIGNAL(error(QNetworkReply::NetworkError)));
+ QSignalSpy errorSpy(reply.data(), SIGNAL(errorOccurred(QNetworkReply::NetworkError)));
connect(reply, SIGNAL(finished()), &QTestEventLoop::instance(), SLOT(exitLoop()), Qt::QueuedConnection);
QTestEventLoop::instance().enterLoop(10);
@@ -7367,7 +7374,7 @@ void tst_QNetworkReply::httpWithNoCredentialUsage()
request.setAttribute(QNetworkRequest::AuthenticationReuseAttribute, QNetworkRequest::Manual);
QNetworkReplyPtr reply(manager.get(request));
- QSignalSpy errorSpy(reply.data(), SIGNAL(error(QNetworkReply::NetworkError)));
+ QSignalSpy errorSpy(reply.data(), SIGNAL(errorOccurred(QNetworkReply::NetworkError)));
connect(reply, SIGNAL(finished()), &QTestEventLoop::instance(), SLOT(exitLoop()), Qt::QueuedConnection);
QTestEventLoop::instance().enterLoop(10);
@@ -8079,7 +8086,7 @@ void tst_QNetworkReply::emitErrorForAllReplies() // QTBUG-36890
QNetworkRequest request(urls.at(a));
QNetworkReply *reply = manager.get(request);
replies.append(reply);
- QSignalSpy *errorSpy = new QSignalSpy(reply, SIGNAL(error(QNetworkReply::NetworkError)));
+ QSignalSpy *errorSpy = new QSignalSpy(reply, SIGNAL(errorOccurred(QNetworkReply::NetworkError)));
errorSpies.append(errorSpy);
QSignalSpy *finishedSpy = new QSignalSpy(reply, SIGNAL(finished()));
finishedSpies.append(finishedSpy);
@@ -8470,7 +8477,7 @@ void tst_QNetworkReply::ioHttpChangeMaxRedirects()
QNetworkReplyPtr reply(manager.get(request));
QSignalSpy redSpy(reply.data(), SIGNAL(redirected(QUrl)));
- QSignalSpy spy(reply.data(), SIGNAL(error(QNetworkReply::NetworkError)));
+ QSignalSpy spy(reply.data(), SIGNAL(errorOccurred(QNetworkReply::NetworkError)));
QCOMPARE(waitForFinish(reply), int(Failure));
@@ -8534,7 +8541,7 @@ void tst_QNetworkReply::ioHttpRedirectErrors()
QTimer watchDog;
watchDog.setSingleShot(true);
- reply->connect(reply.data(), QOverload<QNetworkReply::NetworkError>().of(&QNetworkReply::error),
+ reply->connect(reply.data(), &QNetworkReply::errorOccurred,
[&eventLoop](QNetworkReply::NetworkError){
eventLoop.exit(Failure);
});
@@ -8700,7 +8707,7 @@ void tst_QNetworkReply::ioHttpRedirectPolicyErrors()
if (ssl)
reply->ignoreSslErrors();
- QSignalSpy spy(reply.data(), SIGNAL(error(QNetworkReply::NetworkError)));
+ QSignalSpy spy(reply.data(), SIGNAL(errorOccurred(QNetworkReply::NetworkError)));
QCOMPARE(waitForFinish(reply), int(Failure));
QCOMPARE(spy.count(), 1);
@@ -9342,6 +9349,84 @@ void tst_QNetworkReply::autoDeleteReplies()
}
}
+void tst_QNetworkReply::getWithTimeout()
+{
+ MiniHttpServer server(tst_QNetworkReply::httpEmpty200Response, false);
+
+ QNetworkRequest request(QUrl("http://localhost:" + QString::number(server.serverPort())));
+ QNetworkReplyPtr reply(manager.get(request));
+ QSignalSpy spy(reply.data(), SIGNAL(errorOccurred(QNetworkReply::NetworkError)));
+
+ QCOMPARE(waitForFinish(reply), int(Success));
+
+ QCOMPARE(spy.count(), 0);
+ QVERIFY(reply->error() == QNetworkReply::NoError);
+
+ request.setTransferTimeout(1000);
+ server.stopTransfer = true;
+
+ QNetworkReplyPtr reply2(manager.get(request));
+ QSignalSpy spy2(reply2.data(), SIGNAL(errorOccurred(QNetworkReply::NetworkError)));
+
+ QCOMPARE(waitForFinish(reply2), int(Failure));
+
+ QCOMPARE(spy2.count(), 1);
+ QVERIFY(reply2->error() == QNetworkReply::OperationCanceledError);
+
+ request.setTransferTimeout(0);
+ manager.setTransferTimeout(1000);
+
+ QNetworkReplyPtr reply3(manager.get(request));
+ QSignalSpy spy3(reply3.data(), SIGNAL(errorOccurred(QNetworkReply::NetworkError)));
+
+ QCOMPARE(waitForFinish(reply3), int(Failure));
+
+ QCOMPARE(spy3.count(), 1);
+ QVERIFY(reply3->error() == QNetworkReply::OperationCanceledError);
+
+ manager.setTransferTimeout(0);
+}
+
+void tst_QNetworkReply::postWithTimeout()
+{
+ MiniHttpServer server(tst_QNetworkReply::httpEmpty200Response, false);
+
+ QNetworkRequest request(QUrl("http://localhost:" + QString::number(server.serverPort())));
+ request.setRawHeader("Content-Type", "application/octet-stream");
+ QByteArray postData("Just some nonsense");
+ QNetworkReplyPtr reply(manager.post(request, postData));
+ QSignalSpy spy(reply.data(), SIGNAL(errorOccurred(QNetworkReply::NetworkError)));
+
+ QCOMPARE(waitForFinish(reply), int(Success));
+
+ QCOMPARE(spy.count(), 0);
+ QVERIFY(reply->error() == QNetworkReply::NoError);
+
+ request.setTransferTimeout(1000);
+ server.stopTransfer = true;
+
+ QNetworkReplyPtr reply2(manager.post(request, postData));
+ QSignalSpy spy2(reply2.data(), SIGNAL(errorOccurred(QNetworkReply::NetworkError)));
+
+ QCOMPARE(waitForFinish(reply2), int(Failure));
+
+ QCOMPARE(spy2.count(), 1);
+ QVERIFY(reply2->error() == QNetworkReply::OperationCanceledError);
+
+ request.setTransferTimeout(0);
+ manager.setTransferTimeout(1000);
+
+ QNetworkReplyPtr reply3(manager.post(request, postData));
+ QSignalSpy spy3(reply3.data(), SIGNAL(errorOccurred(QNetworkReply::NetworkError)));
+
+ QCOMPARE(waitForFinish(reply3), int(Failure));
+
+ QCOMPARE(spy3.count(), 1);
+ QVERIFY(reply3->error() == QNetworkReply::OperationCanceledError);
+
+ manager.setTransferTimeout(0);
+}
+
// NOTE: This test must be last testcase in tst_qnetworkreply!
void tst_QNetworkReply::parentingRepliesToTheApp()
{