summaryrefslogtreecommitdiffstats
path: root/tests/auto/network/socket/qlocalsocket
diff options
context:
space:
mode:
authorJoerg Bornemann <joerg.bornemann@theqtcompany.com>2016-03-23 15:45:12 +0100
committerOswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>2016-03-24 16:12:46 +0000
commit24411e9743735d6323f1d3686f8b989a5122f83b (patch)
tree67323f338eb7b189dfce88aa1419cf63cd96ef4e /tests/auto/network/socket/qlocalsocket
parentf75d950bd4353c436f9863d06af65b6cbc672c76 (diff)
Add a write buffer to QLocalSocket/Win
Commit 0307c008 removed the buffering of data-to-be-written from QWindowsPipeWriter, because it was assumed that users of this class (QProcess and QLocalSocket) already buffer data internally. This assumption was wrong for QLocalSocket. The following sequence localSocket->write(someData); localSocket->write(someMoreData); would not write anything on the second write. Add a write buffer to the Windows implementation of QLocalSocket. Task-number: QTBUG-52073 Change-Id: I6d0f03a722ec48138cbde3e2f69aae7dafe790d3 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
Diffstat (limited to 'tests/auto/network/socket/qlocalsocket')
-rw-r--r--tests/auto/network/socket/qlocalsocket/tst_qlocalsocket.cpp20
1 files changed, 17 insertions, 3 deletions
diff --git a/tests/auto/network/socket/qlocalsocket/tst_qlocalsocket.cpp b/tests/auto/network/socket/qlocalsocket/tst_qlocalsocket.cpp
index d12a6b53c3..bfe43673d2 100644
--- a/tests/auto/network/socket/qlocalsocket/tst_qlocalsocket.cpp
+++ b/tests/auto/network/socket/qlocalsocket/tst_qlocalsocket.cpp
@@ -102,7 +102,10 @@ private slots:
void multiConnect();
void writeOnlySocket();
+
+ void writeToClientAndDisconnect_data();
void writeToClientAndDisconnect();
+
void debug();
void bytesWrittenSignal();
void syncDisconnectNotify();
@@ -1034,8 +1037,16 @@ void tst_QLocalSocket::writeOnlySocket()
QCOMPARE(client.state(), QLocalSocket::ConnectedState);
}
+void tst_QLocalSocket::writeToClientAndDisconnect_data()
+{
+ QTest::addColumn<int>("chunks");
+ QTest::newRow("one chunk") << 1;
+ QTest::newRow("several chunks") << 20;
+}
+
void tst_QLocalSocket::writeToClientAndDisconnect()
{
+ QFETCH(int, chunks);
QLocalServer server;
QLocalSocket client;
QSignalSpy readChannelFinishedSpy(&client, SIGNAL(readChannelFinished()));
@@ -1049,14 +1060,17 @@ void tst_QLocalSocket::writeToClientAndDisconnect()
char buffer[100];
memset(buffer, 0, sizeof(buffer));
- QCOMPARE(clientSocket->write(buffer, sizeof(buffer)), (qint64)sizeof(buffer));
- clientSocket->waitForBytesWritten();
+ for (int i = 0; i < chunks; ++i)
+ QCOMPARE(clientSocket->write(buffer, sizeof(buffer)), qint64(sizeof(buffer)));
+ while (clientSocket->bytesToWrite())
+ QVERIFY(clientSocket->waitForBytesWritten());
clientSocket->close();
server.close();
client.waitForDisconnected();
QCOMPARE(readChannelFinishedSpy.count(), 1);
- QCOMPARE(client.read(buffer, sizeof(buffer)), (qint64)sizeof(buffer));
+ const QByteArray received = client.readAll();
+ QCOMPARE(received.size(), qint64(sizeof(buffer) * chunks));
QCOMPARE(client.state(), QLocalSocket::UnconnectedState);
}