summaryrefslogtreecommitdiffstats
path: root/tests/auto/network/socket/qtcpsocket/tst_qtcpsocket.cpp
diff options
context:
space:
mode:
authorAlex Trotsenko <alex1973tr@gmail.com>2015-09-03 10:12:02 +0300
committerAlex Trotsenko <alex1973tr@gmail.com>2015-09-05 18:12:00 +0000
commit5237b97f26caa1493128a68f70429292fb422543 (patch)
tree440de3b8081c81bd95ee64f3aa521afda2f1cd92 /tests/auto/network/socket/qtcpsocket/tst_qtcpsocket.cpp
parent353b160a4af276eb554679756f23436face00927 (diff)
QAbstractSocket: discard input data when opened only for writing
A buffered TCP socket might be open only for writing purpose. As a possible use case of the API, this patch avoids accumulation of unwanted data in the internal read buffer. Change-Id: I2759c1e04968d24e2ae71f3eca05e7e560cd8a41 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'tests/auto/network/socket/qtcpsocket/tst_qtcpsocket.cpp')
-rw-r--r--tests/auto/network/socket/qtcpsocket/tst_qtcpsocket.cpp32
1 files changed, 32 insertions, 0 deletions
diff --git a/tests/auto/network/socket/qtcpsocket/tst_qtcpsocket.cpp b/tests/auto/network/socket/qtcpsocket/tst_qtcpsocket.cpp
index abbc560414..44b2a5c40e 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 setSocketOption();
void clientSendDataOnDelayedDisconnect();
void serverDisconnectWithBuffered();
+ void socketDiscardDataInWriteMode();
protected slots:
void nonBlockingIMAP_hostFound();
@@ -3028,5 +3029,36 @@ void tst_QTcpSocket::serverDisconnectWithBuffered()
delete socket;
}
+// Test buffered sockets discard input when opened in WriteOnly mode
+void tst_QTcpSocket::socketDiscardDataInWriteMode()
+{
+ QFETCH_GLOBAL(bool, setProxy);
+ if (setProxy)
+ return;
+
+ QTcpServer tcpServer;
+ QTcpSocket *socket = newSocket();
+
+ QVERIFY(tcpServer.listen(QHostAddress::LocalHost));
+ socket->connectToHost(tcpServer.serverAddress(), tcpServer.serverPort(),
+ QIODevice::WriteOnly);
+ QVERIFY(socket->waitForConnected(5000)); // ready for write
+ QCOMPARE(socket->state(), QAbstractSocket::ConnectedState);
+
+ // Accept connection on server side
+ QVERIFY2(tcpServer.waitForNewConnection(5000), "Network timeout");
+ QTcpSocket *newConnection = tcpServer.nextPendingConnection();
+ // Send one char and drop link
+ QVERIFY(newConnection != NULL);
+ QVERIFY(newConnection->putChar(0));
+ QVERIFY(newConnection->flush());
+ delete newConnection;
+
+ QVERIFY(socket->waitForReadyRead(5000)); // discard input
+ QVERIFY(socket->atEnd());
+
+ delete socket;
+}
+
QTEST_MAIN(tst_QTcpSocket)
#include "tst_qtcpsocket.moc"