summaryrefslogtreecommitdiffstats
path: root/tests/auto/network
diff options
context:
space:
mode:
authorLiang Qi <liang.qi@theqtcompany.com>2016-03-22 07:24:57 +0100
committerLiang Qi <liang.qi@theqtcompany.com>2016-03-22 07:28:42 +0100
commita02863234d76abb6c9f289026ae4ea3145924f30 (patch)
treeaef6381d0000a78ba69ac80eb03739b1c8ca5fc3 /tests/auto/network
parente77b13621f0057374d83a2b884f03dd2e5b7b88c (diff)
parente4d79e1fdeb6b26ba0b12b578daacf7cd672b960 (diff)
Merge remote-tracking branch 'origin/5.7' into dev
Conflicts: configure mkspecs/common/wince/qplatformdefs.h src/plugins/platforms/directfb/qdirectfbbackingstore.cpp src/plugins/platforms/xcb/qxcbbackingstore.cpp Change-Id: Ied4d31264a9afca9514b51a7eb1494c28712793c
Diffstat (limited to 'tests/auto/network')
-rw-r--r--tests/auto/network/access/qhttpnetworkreply/tst_qhttpnetworkreply.cpp67
-rw-r--r--tests/auto/network/access/qnetworkreply/BLACKLIST4
-rw-r--r--tests/auto/network/socket/qlocalsocket/BLACKLIST2
-rw-r--r--tests/auto/network/socket/qlocalsocket/tst_qlocalsocket.cpp15
-rw-r--r--tests/auto/network/socket/qtcpsocket/tst_qtcpsocket.cpp51
5 files changed, 133 insertions, 6 deletions
diff --git a/tests/auto/network/access/qhttpnetworkreply/tst_qhttpnetworkreply.cpp b/tests/auto/network/access/qhttpnetworkreply/tst_qhttpnetworkreply.cpp
index 3373324c19..ec965a61b2 100644
--- a/tests/auto/network/access/qhttpnetworkreply/tst_qhttpnetworkreply.cpp
+++ b/tests/auto/network/access/qhttpnetworkreply/tst_qhttpnetworkreply.cpp
@@ -28,6 +28,9 @@
#include <QtTest/QtTest>
+#include <QtCore/QBuffer>
+#include <QtCore/QByteArray>
+
#include "private/qhttpnetworkconnection_p.h"
class tst_QHttpNetworkReply: public QObject
@@ -36,6 +39,9 @@ class tst_QHttpNetworkReply: public QObject
private Q_SLOTS:
void parseHeader_data();
void parseHeader();
+
+ void parseEndOfHeader_data();
+ void parseEndOfHeader();
};
void tst_QHttpNetworkReply::parseHeader_data()
@@ -95,5 +101,66 @@ void tst_QHttpNetworkReply::parseHeader()
}
}
+class TestHeaderSocket : public QAbstractSocket
+{
+public:
+ explicit TestHeaderSocket(const QByteArray &input) : QAbstractSocket(QAbstractSocket::TcpSocket, Q_NULLPTR)
+ {
+ inputBuffer.setData(input);
+ inputBuffer.open(QIODevice::ReadOnly | QIODevice::Unbuffered);
+ open(QIODevice::ReadOnly | QIODevice::Unbuffered);
+ }
+
+ qint64 readData(char *data, qint64 maxlen) { return inputBuffer.read(data, maxlen); }
+
+ QBuffer inputBuffer;
+};
+
+class TestHeaderReply : public QHttpNetworkReply
+{
+public:
+ QHttpNetworkReplyPrivate *replyPrivate() { return static_cast<QHttpNetworkReplyPrivate *>(d_ptr.data()); }
+};
+
+void tst_QHttpNetworkReply::parseEndOfHeader_data()
+{
+ QTest::addColumn<QByteArray>("headers");
+ QTest::addColumn<qint64>("lengths");
+
+ QTest::newRow("CRLFCRLF") << QByteArray("Content-Type: text/html; charset=utf-8\r\n"
+ "Content-Length:\r\n 1024\r\n"
+ "Content-Encoding: gzip\r\n\r\nHTTPBODY")
+ << qint64(90);
+
+ QTest::newRow("CRLFLF") << QByteArray("Content-Type: text/html; charset=utf-8\r\n"
+ "Content-Length:\r\n 1024\r\n"
+ "Content-Encoding: gzip\r\n\nHTTPBODY")
+ << qint64(89);
+
+ QTest::newRow("LFCRLF") << QByteArray("Content-Type: text/html; charset=utf-8\r\n"
+ "Content-Length:\r\n 1024\r\n"
+ "Content-Encoding: gzip\n\r\nHTTPBODY")
+ << qint64(89);
+
+ QTest::newRow("LFLF") << QByteArray("Content-Type: text/html; charset=utf-8\r\n"
+ "Content-Length:\r\n 1024\r\n"
+ "Content-Encoding: gzip\n\nHTTPBODY")
+ << qint64(88);
+}
+
+void tst_QHttpNetworkReply::parseEndOfHeader()
+{
+ QFETCH(QByteArray, headers);
+ QFETCH(qint64, lengths);
+
+ TestHeaderSocket socket(headers);
+
+ TestHeaderReply reply;
+
+ QHttpNetworkReplyPrivate *replyPrivate = reply.replyPrivate();
+ qint64 headerBytes = replyPrivate->readHeader(&socket);
+ QCOMPARE(headerBytes, lengths);
+}
+
QTEST_MAIN(tst_QHttpNetworkReply)
#include "tst_qhttpnetworkreply.moc"
diff --git a/tests/auto/network/access/qnetworkreply/BLACKLIST b/tests/auto/network/access/qnetworkreply/BLACKLIST
index 3ec580ddde..0605677e29 100644
--- a/tests/auto/network/access/qnetworkreply/BLACKLIST
+++ b/tests/auto/network/access/qnetworkreply/BLACKLIST
@@ -7,3 +7,7 @@ ubuntu-14.04
*
[backgroundRequestInterruption:ftp, bg, nobg]
*
+[authenticationCacheAfterCancel:http+socksauth]
+rhel-7.1
+[authenticationCacheAfterCancel:https+socksauth]
+rhel-7.1
diff --git a/tests/auto/network/socket/qlocalsocket/BLACKLIST b/tests/auto/network/socket/qlocalsocket/BLACKLIST
deleted file mode 100644
index 11ddef30a5..0000000000
--- a/tests/auto/network/socket/qlocalsocket/BLACKLIST
+++ /dev/null
@@ -1,2 +0,0 @@
-[processConnection:1 client]
-windows
diff --git a/tests/auto/network/socket/qlocalsocket/tst_qlocalsocket.cpp b/tests/auto/network/socket/qlocalsocket/tst_qlocalsocket.cpp
index d037826410..123fbfeb2a 100644
--- a/tests/auto/network/socket/qlocalsocket/tst_qlocalsocket.cpp
+++ b/tests/auto/network/socket/qlocalsocket/tst_qlocalsocket.cpp
@@ -490,7 +490,11 @@ void tst_QLocalSocket::connectWithOldOpen()
void tst_QLocalSocket::sendData_data()
{
- listenAndConnect_data();
+ QTest::addColumn<QString>("name");
+ QTest::addColumn<bool>("canListen");
+
+ QTest::newRow("null") << QString() << false;
+ QTest::newRow("tst_localsocket") << "tst_localsocket" << true;
}
void tst_QLocalSocket::sendData()
@@ -513,6 +517,7 @@ void tst_QLocalSocket::sendData()
// test creating a connection
socket.connectToServer(name);
bool timedOut = true;
+ int expectedReadyReadSignals = 0;
QCOMPARE(server.waitForNewConnection(3000, &timedOut), canListen);
@@ -536,15 +541,17 @@ void tst_QLocalSocket::sendData()
out << testLine << endl;
bool wrote = serverSocket->waitForBytesWritten(3000);
- if (!socket.canReadLine())
+ if (!socket.canReadLine()) {
+ expectedReadyReadSignals = 1;
QVERIFY(socket.waitForReadyRead());
+ }
QVERIFY(socket.bytesAvailable() >= 0);
QCOMPARE(socket.bytesToWrite(), (qint64)0);
QCOMPARE(socket.flush(), false);
QCOMPARE(socket.isValid(), canListen);
QCOMPARE(socket.readBufferSize(), (qint64)0);
- QCOMPARE(spyReadyRead.count(), 1);
+ QCOMPARE(spyReadyRead.count(), expectedReadyReadSignals);
QVERIFY(testLine.startsWith(in.readLine()));
@@ -559,7 +566,7 @@ void tst_QLocalSocket::sendData()
QCOMPARE(spyDisconnected.count(), canListen ? 1 : 0);
QCOMPARE(spyError.count(), canListen ? 0 : 1);
QCOMPARE(spyStateChanged.count(), canListen ? 4 : 2);
- QCOMPARE(spyReadyRead.count(), canListen ? 1 : 0);
+ QCOMPARE(spyReadyRead.count(), canListen ? expectedReadyReadSignals : 0);
server.close();
diff --git a/tests/auto/network/socket/qtcpsocket/tst_qtcpsocket.cpp b/tests/auto/network/socket/qtcpsocket/tst_qtcpsocket.cpp
index 904b26ac73..7565097942 100644
--- a/tests/auto/network/socket/qtcpsocket/tst_qtcpsocket.cpp
+++ b/tests/auto/network/socket/qtcpsocket/tst_qtcpsocket.cpp
@@ -197,6 +197,7 @@ private slots:
void clientSendDataOnDelayedDisconnect();
void serverDisconnectWithBuffered();
void socketDiscardDataInWriteMode();
+ void writeOnReadBufferOverflow();
void readNotificationsAfterBind();
protected slots:
@@ -478,6 +479,8 @@ void tst_QTcpSocket::constructing()
QCOMPARE(socket->localAddress(), QHostAddress());
QCOMPARE((int) socket->peerPort(), 0);
QCOMPARE(socket->peerAddress(), QHostAddress());
+ QCOMPARE(socket->readChannelCount(), 0);
+ QCOMPARE(socket->writeChannelCount(), 0);
QCOMPARE(socket->error(), QTcpSocket::UnknownSocketError);
QCOMPARE(socket->errorString(), QString("Unknown error"));
@@ -594,6 +597,8 @@ void tst_QTcpSocket::bind()
} while (randomPort && attemptsLeft);
QCOMPARE(socket->state(), QAbstractSocket::BoundState);
+ QCOMPARE(socket->readChannelCount(), 0);
+ QCOMPARE(socket->writeChannelCount(), 0);
boundPort = socket->localPort();
if (port)
QCOMPARE(int(boundPort), port);
@@ -729,6 +734,8 @@ void tst_QTcpSocket::setSocketDescriptor()
QCOMPARE(socket->socketDescriptor(), (qintptr)sock);
QVERIFY(socket->waitForConnected(10000));
QCOMPARE(socket->socketDescriptor(), (qintptr)sock);
+ QCOMPARE(socket->readChannelCount(), 1);
+ QCOMPARE(socket->writeChannelCount(), 1);
delete socket;
#ifdef Q_OS_WIN
delete dummy;
@@ -764,6 +771,8 @@ void tst_QTcpSocket::blockingIMAP()
QVERIFY(socket->waitForConnected(10000));
QCOMPARE(socket->state(), QTcpSocket::ConnectedState);
QVERIFY(socket->isValid());
+ QCOMPARE(socket->readChannelCount(), 1);
+ QCOMPARE(socket->writeChannelCount(), 1);
// Read greeting
QVERIFY(socket->waitForReadyRead(5000));
@@ -820,6 +829,8 @@ void tst_QTcpSocket::blockingIMAP()
// Check that it's closed
QCOMPARE(socket->state(), QTcpSocket::UnconnectedState);
+ QCOMPARE(socket->readChannelCount(), 0);
+ QCOMPARE(socket->writeChannelCount(), 0);
delete socket;
}
@@ -860,6 +871,8 @@ void tst_QTcpSocket::timeoutConnect()
QVERIFY(!socket->waitForConnected(1000)); //200ms is too short when using SOCKS proxy authentication
QCOMPARE(socket->state(), QTcpSocket::UnconnectedState);
QCOMPARE(int(socket->error()), int(QTcpSocket::SocketTimeoutError));
+ QCOMPARE(socket->readChannelCount(), 0);
+ QCOMPARE(socket->writeChannelCount(), 0);
timer.start();
socket->connectToHost(address, 1357);
@@ -906,6 +919,8 @@ void tst_QTcpSocket::nonBlockingIMAP()
}
QCOMPARE(socket->state(), QTcpSocket::ConnectedState);
+ QCOMPARE(socket->readChannelCount(), 1);
+ QCOMPARE(socket->writeChannelCount(), 1);
enterLoop(30);
if (timeout()) {
@@ -971,6 +986,8 @@ void tst_QTcpSocket::nonBlockingIMAP()
// Check that it's closed
QCOMPARE(socket->state(), QTcpSocket::UnconnectedState);
+ QCOMPARE(socket->readChannelCount(), 0);
+ QCOMPARE(socket->writeChannelCount(), 0);
delete socket;
}
@@ -3051,6 +3068,40 @@ void tst_QTcpSocket::socketDiscardDataInWriteMode()
delete socket;
}
+// Test waitForBytesWritten() does not fail on read buffer overflow
+void tst_QTcpSocket::writeOnReadBufferOverflow()
+{
+ QFETCH_GLOBAL(bool, setProxy);
+ if (setProxy)
+ return;
+
+ QTcpServer tcpServer;
+ QTcpSocket *socket = newSocket();
+
+ QVERIFY(tcpServer.listen(QHostAddress::LocalHost));
+ socket->setReadBufferSize(1);
+ socket->connectToHost(tcpServer.serverAddress(), tcpServer.serverPort());
+ QVERIFY(socket->waitForConnected(5000));
+ QCOMPARE(socket->state(), QAbstractSocket::ConnectedState);
+
+ // Accept connection on server side
+ QVERIFY2(tcpServer.waitForNewConnection(5000), "Network timeout");
+ QTcpSocket *newConnection = tcpServer.nextPendingConnection();
+ QVERIFY(newConnection != nullptr);
+ QCOMPARE(newConnection->write("1", 2), Q_INT64_C(2));
+ QVERIFY(newConnection->flush());
+
+ // Wait for buffer overflow
+ QVERIFY(socket->waitForReadyRead(5000));
+ QCOMPARE(socket->bytesAvailable(), Q_INT64_C(1));
+ // Write data and wait for successful send
+ QVERIFY(socket->putChar(0));
+ QVERIFY(socket->waitForBytesWritten(5000));
+
+ delete newConnection;
+ delete socket;
+}
+
// Test that the socket does not enable the read notifications in bind()
void tst_QTcpSocket::readNotificationsAfterBind()
{