summaryrefslogtreecommitdiffstats
path: root/tests/auto/qtcpsocket/tst_qtcpsocket.cpp
diff options
context:
space:
mode:
authorGeir Vattekar <geir.vattekar@nokia.com>2010-10-08 07:21:51 (GMT)
committerGeir Vattekar <geir.vattekar@nokia.com>2010-10-08 07:21:51 (GMT)
commit904b56a9cc810b340d1b7db81199fc0e15b4aab6 (patch)
tree5792edd70546f6500210164327d0014f147d1ffe /tests/auto/qtcpsocket/tst_qtcpsocket.cpp
parent91396846206e6b41d32fa8a30888261581bd28dc (diff)
parent8130fcbffe365c0e019f45baae7f1b273d8e17e7 (diff)
downloadQt-904b56a9cc810b340d1b7db81199fc0e15b4aab6.zip
Qt-904b56a9cc810b340d1b7db81199fc0e15b4aab6.tar.gz
Qt-904b56a9cc810b340d1b7db81199fc0e15b4aab6.tar.bz2
Merge branch '4.7' of git@scm.dev.nokia.troll.no:qt/qt-doc-team into 4.7
Diffstat (limited to 'tests/auto/qtcpsocket/tst_qtcpsocket.cpp')
-rw-r--r--tests/auto/qtcpsocket/tst_qtcpsocket.cpp72
1 files changed, 72 insertions, 0 deletions
diff --git a/tests/auto/qtcpsocket/tst_qtcpsocket.cpp b/tests/auto/qtcpsocket/tst_qtcpsocket.cpp
index 31cae40..2dbe5b7 100644
--- a/tests/auto/qtcpsocket/tst_qtcpsocket.cpp
+++ b/tests/auto/qtcpsocket/tst_qtcpsocket.cpp
@@ -201,6 +201,9 @@ private slots:
void proxyFactory_data();
void proxyFactory();
+ void qtbug14268_peek();
+
+
protected slots:
void nonBlockingIMAP_hostFound();
void nonBlockingIMAP_connected();
@@ -251,6 +254,41 @@ enum ProxyTests {
int tst_QTcpSocket::loopLevel = 0;
+class SocketPair: public QObject
+{
+ Q_OBJECT
+public:
+ QTcpSocket *endPoints[2];
+
+ SocketPair(QObject *parent = 0)
+ : QObject(parent)
+ {
+ endPoints[0] = endPoints[1] = 0;
+ }
+
+ bool create()
+ {
+ QTcpServer server;
+ server.listen();
+
+ QTcpSocket *active = new QTcpSocket(this);
+ active->connectToHost("127.0.0.1", server.serverPort());
+
+ if (!active->waitForConnected(1000))
+ return false;
+
+ if (!server.waitForNewConnection(1000))
+ return false;
+
+ QTcpSocket *passive = server.nextPendingConnection();
+ passive->setParent(this);
+
+ endPoints[0] = active;
+ endPoints[1] = passive;
+ return true;
+ }
+};
+
tst_QTcpSocket::tst_QTcpSocket()
{
Q_SET_DEFAULT_IAP
@@ -2467,6 +2505,40 @@ void tst_QTcpSocket::proxyFactory()
delete socket;
}
+// there is a similar test inside tst_qtcpserver that uses the event loop instead
+void tst_QTcpSocket::qtbug14268_peek()
+{
+ QFETCH_GLOBAL(bool, setProxy);
+ if (setProxy)
+ return;
+
+ SocketPair socketPair;
+ QVERIFY(socketPair.create());
+ QTcpSocket *outgoing = socketPair.endPoints[0];
+ QTcpSocket *incoming = socketPair.endPoints[1];
+
+ QVERIFY(incoming->state() == QTcpSocket::ConnectedState);
+ QVERIFY(outgoing->state() == QTcpSocket::ConnectedState);
+
+ outgoing->write("abc\n");
+ QVERIFY(outgoing->waitForBytesWritten(2000));
+ QVERIFY(incoming->waitForReadyRead(2000));
+ QVERIFY(incoming->peek(128*1024) == QByteArray("abc\n"));
+
+ outgoing->write("def\n");
+ QVERIFY(outgoing->waitForBytesWritten(2000));
+ QVERIFY(incoming->waitForReadyRead(2000));
+ QVERIFY(incoming->peek(128*1024) == QByteArray("abc\ndef\n"));
+
+ outgoing->write("ghi\n");
+ QVERIFY(outgoing->waitForBytesWritten(2000));
+ QVERIFY(incoming->waitForReadyRead(2000));
+ QVERIFY(incoming->peek(128*1024) == QByteArray("abc\ndef\nghi\n"));
+
+ QVERIFY(incoming->read(128*1024) == QByteArray("abc\ndef\nghi\n"));
+}
+
+
QTEST_MAIN(tst_QTcpSocket)
#include "tst_qtcpsocket.moc"