From 7614137a3f3706d6b2fdf1bdacae9569c683b0b0 Mon Sep 17 00:00:00 2001 From: Jeremy Lainé Date: Mon, 27 Jul 2015 10:31:14 +0200 Subject: add some tests for invalid SOCKS5 handshake from client --- tests/qxmppsocks/tst_qxmppsocks.cpp | 45 +++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) (limited to 'tests') diff --git a/tests/qxmppsocks/tst_qxmppsocks.cpp b/tests/qxmppsocks/tst_qxmppsocks.cpp index 5958f0be..299417ae 100644 --- a/tests/qxmppsocks/tst_qxmppsocks.cpp +++ b/tests/qxmppsocks/tst_qxmppsocks.cpp @@ -35,6 +35,8 @@ private slots: void testClientAndServer(); void testServer(); + void testServerBadHandshake_data(); + void testServerBadHandshake(); private: QTcpSocket *m_connectionSocket; @@ -107,6 +109,9 @@ void tst_QXmppSocks::testServer() loop.exec(); QCOMPARE(client.readAll(), QByteArray::fromHex("050000030e7777772e676f6f676c652e636f6d0050")); + // check client + QCOMPARE(client.state(), QAbstractSocket::ConnectedState); + // check server QVERIFY(m_connectionSocket); QCOMPARE(m_connectionSocket->state(), QAbstractSocket::ConnectedState); @@ -117,5 +122,45 @@ void tst_QXmppSocks::testServer() client.disconnectFromHost(); } +void tst_QXmppSocks::testServerBadHandshake_data() +{ + QTest::addColumn("clientHandshake"); + + QTest::newRow("bad SOCKS version") << QByteArray::fromHex("060100"); + QTest::newRow("no methods") << QByteArray::fromHex("0500"); +} + +void tst_QXmppSocks::testServerBadHandshake() +{ + QFETCH(QByteArray, clientHandshake); + + QXmppSocksServer server; + QVERIFY(server.listen()); + QVERIFY(server.serverPort() != 0); + connect(&server, SIGNAL(newConnection(QTcpSocket*,QString,quint16)), + this, SLOT(newConnectionSlot(QTcpSocket*,QString,quint16))); + + QTcpSocket client; + client.connectToHost(QHostAddress::LocalHost, server.serverPort()); + QVERIFY2(client.waitForConnected(), qPrintable(client.errorString())); + + QEventLoop loop; + connect(&client, SIGNAL(disconnected()), &loop, SLOT(quit())); + + client.write(clientHandshake); + loop.exec(); + + // check client + QCOMPARE(client.state(), QAbstractSocket::UnconnectedState); + + // check server + QVERIFY(!m_connectionSocket); + QVERIFY(m_connectionHostName.isNull()); + QCOMPARE(m_connectionPort, quint16(0)); + + // disconnect + client.disconnectFromHost(); +} + QTEST_MAIN(tst_QXmppSocks) #include "tst_qxmppsocks.moc" -- cgit v1.2.3