summaryrefslogtreecommitdiffstats
path: root/tests/auto/network
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/network')
-rw-r--r--tests/auto/network/socket/qhttpsocketengine/tst_qhttpsocketengine.cpp47
-rw-r--r--tests/auto/network/socket/qtcpsocket/tst_qtcpsocket.cpp21
2 files changed, 68 insertions, 0 deletions
diff --git a/tests/auto/network/socket/qhttpsocketengine/tst_qhttpsocketengine.cpp b/tests/auto/network/socket/qhttpsocketengine/tst_qhttpsocketengine.cpp
index be0fcb6a08..021893c6c5 100644
--- a/tests/auto/network/socket/qhttpsocketengine/tst_qhttpsocketengine.cpp
+++ b/tests/auto/network/socket/qhttpsocketengine/tst_qhttpsocketengine.cpp
@@ -65,6 +65,7 @@ private slots:
void downloadBigFile();
// void tcpLoopbackPerformance();
void passwordAuth();
+ void ensureEofTriggersNotification();
protected slots:
void tcpSocketNonBlocking_hostFound();
@@ -720,5 +721,51 @@ void tst_QHttpSocketEngine::passwordAuth()
//----------------------------------------------------------------------------------
+void tst_QHttpSocketEngine::ensureEofTriggersNotification()
+{
+ QList<QByteArray> serverData;
+ // Set the handshake and server response data
+ serverData << "HTTP/1.0 200 Connection established\r\n\r\n" << "0";
+ MiniHttpServer server(serverData);
+
+ QTcpSocket socket;
+ connect(&socket, SIGNAL(connected()), SLOT(exitLoopSlot()));
+ socket.setProxy(QNetworkProxy(QNetworkProxy::HttpProxy, server.serverAddress().toString(),
+ server.serverPort()));
+ socket.connectToHost("0.1.2.3", 12345);
+
+ QTestEventLoop::instance().enterLoop(5);
+ if (QTestEventLoop::instance().timeout())
+ QFAIL("Connect timed out");
+
+ QCOMPARE(socket.state(), QTcpSocket::ConnectedState);
+ // Disable read notification on server response
+ socket.setReadBufferSize(1);
+ socket.putChar(0);
+
+ // Wait for the response
+ connect(&socket, SIGNAL(readyRead()), SLOT(exitLoopSlot()));
+ QTestEventLoop::instance().enterLoop(5);
+ if (QTestEventLoop::instance().timeout())
+ QFAIL("Read timed out");
+
+ QCOMPARE(socket.state(), QTcpSocket::ConnectedState);
+ QCOMPARE(socket.bytesAvailable(), 1);
+ // Trigger a read notification
+ socket.readAll();
+ // Check for pending EOF at input
+ QCOMPARE(socket.bytesAvailable(), 0);
+ QCOMPARE(socket.state(), QTcpSocket::ConnectedState);
+
+ // Try to read EOF
+ connect(&socket, SIGNAL(disconnected()), SLOT(exitLoopSlot()));
+ QTestEventLoop::instance().enterLoop(5);
+ if (QTestEventLoop::instance().timeout())
+ QFAIL("Disconnect timed out");
+
+ // Check that it's closed
+ QCOMPARE(socket.state(), QTcpSocket::UnconnectedState);
+}
+
QTEST_MAIN(tst_QHttpSocketEngine)
#include "tst_qhttpsocketengine.moc"
diff --git a/tests/auto/network/socket/qtcpsocket/tst_qtcpsocket.cpp b/tests/auto/network/socket/qtcpsocket/tst_qtcpsocket.cpp
index c7494e6f35..37498fd772 100644
--- a/tests/auto/network/socket/qtcpsocket/tst_qtcpsocket.cpp
+++ b/tests/auto/network/socket/qtcpsocket/tst_qtcpsocket.cpp
@@ -201,6 +201,7 @@ private slots:
void clientSendDataOnDelayedDisconnect();
void serverDisconnectWithBuffered();
void socketDiscardDataInWriteMode();
+ void readNotificationsAfterBind();
protected slots:
void nonBlockingIMAP_hostFound();
@@ -3054,5 +3055,25 @@ void tst_QTcpSocket::socketDiscardDataInWriteMode()
delete socket;
}
+// Test that the socket does not enable the read notifications in bind()
+void tst_QTcpSocket::readNotificationsAfterBind()
+{
+ QFETCH_GLOBAL(bool, setProxy);
+ if (setProxy)
+ return;
+
+ QAbstractSocket socket(QAbstractSocket::TcpSocket, Q_NULLPTR);
+ QVERIFY2(socket.bind(), "Bind error!");
+
+ connect(&socket, SIGNAL(error(QAbstractSocket::SocketError)), &QTestEventLoop::instance(), SLOT(exitLoop()));
+ QSignalSpy spyReadyRead(&socket, SIGNAL(readyRead()));
+ socket.connectToHost(QtNetworkSettings::serverName(), 12346);
+
+ QTestEventLoop::instance().enterLoop(10);
+ QVERIFY2(!QTestEventLoop::instance().timeout(), "Connection to closed port timed out instead of refusing, something is wrong");
+ QVERIFY2(socket.state() == QAbstractSocket::UnconnectedState, "Socket connected unexpectedly!");
+ QCOMPARE(spyReadyRead.count(), 0);
+}
+
QTEST_MAIN(tst_QTcpSocket)
#include "tst_qtcpsocket.moc"