Convert the QSocks5SocketEngine test to use Docker
Change-Id: I5d223758471a72c93ad57d250001c1de51a208cd Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
This commit is contained in:
parent
2ec47d6cb5
commit
1844f011f6
@ -72,15 +72,20 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef QT_NETWORK_LIB
|
#ifdef QT_NETWORK_LIB
|
||||||
static QHostAddress serverIP()
|
static QHostAddress getServerIpImpl(const QString &serverName)
|
||||||
{
|
{
|
||||||
const QHostInfo info = QHostInfo::fromName(serverName());
|
const QHostInfo info = QHostInfo::fromName(serverName);
|
||||||
if (info.error()) {
|
if (info.error()) {
|
||||||
QTest::qFail(qPrintable(info.errorString()), __FILE__, __LINE__);
|
QTest::qFail(qPrintable(info.errorString()), __FILE__, __LINE__);
|
||||||
return QHostAddress();
|
return QHostAddress();
|
||||||
}
|
}
|
||||||
return info.addresses().constFirst();
|
return info.addresses().constFirst();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static QHostAddress serverIP()
|
||||||
|
{
|
||||||
|
return getServerIpImpl(serverName());
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static bool compareReplyIMAP(QByteArray const& actual)
|
static bool compareReplyIMAP(QByteArray const& actual)
|
||||||
@ -214,4 +219,19 @@ public:
|
|||||||
return serverName();
|
return serverName();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
static QString imapServerName()
|
||||||
|
{
|
||||||
|
#ifdef QT_TEST_SERVER_NAME
|
||||||
|
return QString("cyrus.") % serverDomainName();
|
||||||
|
#else
|
||||||
|
return serverName();
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef QT_NETWORK_LIB
|
||||||
|
static QHostAddress imapServerIp()
|
||||||
|
{
|
||||||
|
return getServerIpImpl(imapServerName());
|
||||||
|
}
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
@ -11,3 +11,9 @@ MOC_DIR=tmp
|
|||||||
QT = core-private network-private testlib
|
QT = core-private network-private testlib
|
||||||
|
|
||||||
requires(qtConfig(private_tests))
|
requires(qtConfig(private_tests))
|
||||||
|
|
||||||
|
# Only on Linux until cyrus has been added to docker-compose-for-{windows,macOS}.yml and tested
|
||||||
|
linux {
|
||||||
|
QT_TEST_SERVER_LIST = danted apache2 cyrus
|
||||||
|
include($$dirname(_QMAKE_CONF_)/tests/auto/testserver.pri)
|
||||||
|
}
|
||||||
|
@ -137,7 +137,13 @@ private slots:
|
|||||||
|
|
||||||
void tst_QSocks5SocketEngine::initTestCase()
|
void tst_QSocks5SocketEngine::initTestCase()
|
||||||
{
|
{
|
||||||
|
#ifdef QT_TEST_SERVER
|
||||||
|
QVERIFY(QtNetworkSettings::verifyConnection(QtNetworkSettings::socksProxyServerName(), 1080));
|
||||||
|
QVERIFY(QtNetworkSettings::verifyConnection(QtNetworkSettings::httpServerName(), 80));
|
||||||
|
QVERIFY(QtNetworkSettings::verifyConnection(QtNetworkSettings::imapServerName(), 143));
|
||||||
|
#else
|
||||||
QVERIFY(QtNetworkSettings::verifyTestNetworkSettings());
|
QVERIFY(QtNetworkSettings::verifyTestNetworkSettings());
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
@ -293,13 +299,13 @@ void tst_QSocks5SocketEngine::simpleConnectToIMAP()
|
|||||||
QVERIFY(socketDevice.initialize(QAbstractSocket::TcpSocket, QAbstractSocket::IPv4Protocol));
|
QVERIFY(socketDevice.initialize(QAbstractSocket::TcpSocket, QAbstractSocket::IPv4Protocol));
|
||||||
QCOMPARE(socketDevice.state(), QAbstractSocket::UnconnectedState);
|
QCOMPARE(socketDevice.state(), QAbstractSocket::UnconnectedState);
|
||||||
|
|
||||||
socketDevice.setProxy(QNetworkProxy(QNetworkProxy::Socks5Proxy, QtNetworkSettings::serverName(), 1080));
|
socketDevice.setProxy(QNetworkProxy(QNetworkProxy::Socks5Proxy, QtNetworkSettings::socksProxyServerName(), 1080));
|
||||||
|
|
||||||
QVERIFY(!socketDevice.connectToHost(QtNetworkSettings::serverIP(), 143));
|
QVERIFY(!socketDevice.connectToHost(QtNetworkSettings::imapServerIp(), 143));
|
||||||
QCOMPARE(socketDevice.state(), QAbstractSocket::ConnectingState);
|
QCOMPARE(socketDevice.state(), QAbstractSocket::ConnectingState);
|
||||||
QVERIFY(socketDevice.waitForWrite());
|
QVERIFY(socketDevice.waitForWrite());
|
||||||
QCOMPARE(socketDevice.state(), QAbstractSocket::ConnectedState);
|
QCOMPARE(socketDevice.state(), QAbstractSocket::ConnectedState);
|
||||||
QCOMPARE(socketDevice.peerAddress(), QtNetworkSettings::serverIP());
|
QCOMPARE(socketDevice.peerAddress(), QtNetworkSettings::imapServerIp());
|
||||||
|
|
||||||
// Wait for the greeting
|
// Wait for the greeting
|
||||||
QVERIFY(socketDevice.waitForRead());
|
QVERIFY(socketDevice.waitForRead());
|
||||||
@ -347,10 +353,10 @@ void tst_QSocks5SocketEngine::simpleErrorsAndStates()
|
|||||||
// Initialize device
|
// Initialize device
|
||||||
QVERIFY(socketDevice.initialize(QAbstractSocket::TcpSocket, QAbstractSocket::IPv4Protocol));
|
QVERIFY(socketDevice.initialize(QAbstractSocket::TcpSocket, QAbstractSocket::IPv4Protocol));
|
||||||
|
|
||||||
socketDevice.setProxy(QNetworkProxy(QNetworkProxy::Socks5Proxy, QtNetworkSettings::serverName(), 1080));
|
socketDevice.setProxy(QNetworkProxy(QNetworkProxy::Socks5Proxy, QtNetworkSettings::socksProxyServerName(), 1080));
|
||||||
|
|
||||||
QCOMPARE(socketDevice.state(), QAbstractSocket::UnconnectedState);
|
QCOMPARE(socketDevice.state(), QAbstractSocket::UnconnectedState);
|
||||||
QVERIFY(!socketDevice.connectToHost(QHostInfo::fromName(QtNetworkSettings::serverName()).addresses().first(), 8088));
|
QVERIFY(!socketDevice.connectToHost(QHostInfo::fromName(QtNetworkSettings::socksProxyServerName()).addresses().first(), 8088));
|
||||||
QCOMPARE(socketDevice.state(), QAbstractSocket::ConnectingState);
|
QCOMPARE(socketDevice.state(), QAbstractSocket::ConnectingState);
|
||||||
if (socketDevice.waitForWrite(15000)) {
|
if (socketDevice.waitForWrite(15000)) {
|
||||||
QVERIFY(socketDevice.state() == QAbstractSocket::UnconnectedState ||
|
QVERIFY(socketDevice.state() == QAbstractSocket::UnconnectedState ||
|
||||||
@ -433,7 +439,7 @@ void tst_QSocks5SocketEngine::serverTest()
|
|||||||
// Initialize a Tcp socket
|
// Initialize a Tcp socket
|
||||||
QVERIFY(server.initialize(QAbstractSocket::TcpSocket));
|
QVERIFY(server.initialize(QAbstractSocket::TcpSocket));
|
||||||
|
|
||||||
QNetworkProxy proxy(QNetworkProxy::Socks5Proxy, QtNetworkSettings::serverName(), 1080);
|
QNetworkProxy proxy(QNetworkProxy::Socks5Proxy, QtNetworkSettings::socksProxyServerName(), 1080);
|
||||||
|
|
||||||
server.setProxy(proxy);
|
server.setProxy(proxy);
|
||||||
|
|
||||||
@ -510,7 +516,7 @@ void tst_QSocks5SocketEngine::udpTest()
|
|||||||
QVERIFY(udpSocket.initialize(QAbstractSocket::UdpSocket));
|
QVERIFY(udpSocket.initialize(QAbstractSocket::UdpSocket));
|
||||||
QVERIFY(udpSocket.isValid());
|
QVERIFY(udpSocket.isValid());
|
||||||
|
|
||||||
QNetworkProxy proxy(QNetworkProxy::Socks5Proxy, QtNetworkSettings::serverName(), 1080);
|
QNetworkProxy proxy(QNetworkProxy::Socks5Proxy, QtNetworkSettings::socksProxyServerName(), 1080);
|
||||||
|
|
||||||
udpSocket.setProxy(proxy);
|
udpSocket.setProxy(proxy);
|
||||||
|
|
||||||
@ -564,7 +570,7 @@ void tst_QSocks5SocketEngine::tcpSocketBlockingTest()
|
|||||||
QTcpSocket socket;
|
QTcpSocket socket;
|
||||||
|
|
||||||
// Connect
|
// Connect
|
||||||
socket.connectToHost(QtNetworkSettings::serverName(), 143);
|
socket.connectToHost(QtNetworkSettings::imapServerName(), 143);
|
||||||
QVERIFY(socket.waitForConnected());
|
QVERIFY(socket.waitForConnected());
|
||||||
QCOMPARE(socket.state(), QTcpSocket::ConnectedState);
|
QCOMPARE(socket.state(), QTcpSocket::ConnectedState);
|
||||||
|
|
||||||
@ -635,7 +641,7 @@ void tst_QSocks5SocketEngine::tcpSocketNonBlockingTest()
|
|||||||
});
|
});
|
||||||
|
|
||||||
// Connect
|
// Connect
|
||||||
socket.connectToHost(QtNetworkSettings::serverName(), 143);
|
socket.connectToHost(QtNetworkSettings::imapServerName(), 143);
|
||||||
QVERIFY(socket.state() == QTcpSocket::HostLookupState ||
|
QVERIFY(socket.state() == QTcpSocket::HostLookupState ||
|
||||||
socket.state() == QTcpSocket::ConnectingState);
|
socket.state() == QTcpSocket::ConnectingState);
|
||||||
|
|
||||||
@ -754,13 +760,13 @@ void tst_QSocks5SocketEngine::downloadBigFile()
|
|||||||
<< " (" << stopWatch.elapsed() << "ms)";
|
<< " (" << stopWatch.elapsed() << "ms)";
|
||||||
});
|
});
|
||||||
|
|
||||||
socket.connectToHost(QtNetworkSettings::serverName(), 80);
|
socket.connectToHost(QtNetworkSettings::httpServerName(), 80);
|
||||||
|
|
||||||
QTestEventLoop::instance().enterLoop(30);
|
QTestEventLoop::instance().enterLoop(30);
|
||||||
if (QTestEventLoop::instance().timeout())
|
if (QTestEventLoop::instance().timeout())
|
||||||
QFAIL("Network operation timed out");
|
QFAIL("Network operation timed out");
|
||||||
|
|
||||||
QByteArray hostName = QtNetworkSettings::serverName().toLatin1();
|
QByteArray hostName = QtNetworkSettings::httpServerName().toLatin1();
|
||||||
QCOMPARE(socket.state(), QAbstractSocket::ConnectedState);
|
QCOMPARE(socket.state(), QAbstractSocket::ConnectedState);
|
||||||
QVERIFY(socket.write("GET /qtest/mediumfile HTTP/1.0\r\n") > 0);
|
QVERIFY(socket.write("GET /qtest/mediumfile HTTP/1.0\r\n") > 0);
|
||||||
QVERIFY(socket.write("HOST: ") > 0);
|
QVERIFY(socket.write("HOST: ") > 0);
|
||||||
@ -791,13 +797,13 @@ void tst_QSocks5SocketEngine::passwordAuth()
|
|||||||
QVERIFY(socketDevice.initialize(QAbstractSocket::TcpSocket, QAbstractSocket::IPv4Protocol));
|
QVERIFY(socketDevice.initialize(QAbstractSocket::TcpSocket, QAbstractSocket::IPv4Protocol));
|
||||||
QCOMPARE(socketDevice.state(), QAbstractSocket::UnconnectedState);
|
QCOMPARE(socketDevice.state(), QAbstractSocket::UnconnectedState);
|
||||||
|
|
||||||
socketDevice.setProxy(QNetworkProxy(QNetworkProxy::Socks5Proxy, QtNetworkSettings::serverName(), 1080, "qsockstest", "password"));
|
socketDevice.setProxy(QNetworkProxy(QNetworkProxy::Socks5Proxy, QtNetworkSettings::socksProxyServerName(), 1080, "qsockstest", "password"));
|
||||||
|
|
||||||
// Connect to imap.trolltech.com's IP
|
// Connect to imap.trolltech.com's IP
|
||||||
QVERIFY(!socketDevice.connectToHost(QtNetworkSettings::serverIP(), 143));
|
QVERIFY(!socketDevice.connectToHost(QtNetworkSettings::imapServerIp(), 143));
|
||||||
QCOMPARE(socketDevice.state(), QAbstractSocket::ConnectingState);
|
QCOMPARE(socketDevice.state(), QAbstractSocket::ConnectingState);
|
||||||
QVERIFY(socketDevice.waitForWrite());
|
QVERIFY(socketDevice.waitForWrite());
|
||||||
if (!socketDevice.connectToHost(QtNetworkSettings::serverIP(), 143)) {
|
if (!socketDevice.connectToHost(QtNetworkSettings::imapServerIp(), 143)) {
|
||||||
qDebug("%d, %s", socketDevice.error(), socketDevice.errorString().toLatin1().constData());
|
qDebug("%d, %s", socketDevice.error(), socketDevice.errorString().toLatin1().constData());
|
||||||
}
|
}
|
||||||
QCOMPARE(socketDevice.state(), QAbstractSocket::ConnectedState);
|
QCOMPARE(socketDevice.state(), QAbstractSocket::ConnectedState);
|
||||||
@ -857,19 +863,19 @@ void tst_QSocks5SocketEngine::passwordAuth2()
|
|||||||
QVERIFY(socketDevice.initialize(QAbstractSocket::TcpSocket, QAbstractSocket::IPv4Protocol));
|
QVERIFY(socketDevice.initialize(QAbstractSocket::TcpSocket, QAbstractSocket::IPv4Protocol));
|
||||||
QCOMPARE(socketDevice.state(), QAbstractSocket::UnconnectedState);
|
QCOMPARE(socketDevice.state(), QAbstractSocket::UnconnectedState);
|
||||||
|
|
||||||
socketDevice.setProxy(QNetworkProxy(QNetworkProxy::Socks5Proxy, QtNetworkSettings::serverName(), 1081));
|
socketDevice.setProxy(QNetworkProxy(QNetworkProxy::Socks5Proxy, QtNetworkSettings::socksProxyServerName(), 1081));
|
||||||
socketDevice.setReceiver(this);
|
socketDevice.setReceiver(this);
|
||||||
|
|
||||||
QVERIFY(!socketDevice.connectToHost(QtNetworkSettings::serverIP(), 143));
|
QVERIFY(!socketDevice.connectToHost(QtNetworkSettings::imapServerIp(), 143));
|
||||||
QCOMPARE(socketDevice.state(), QAbstractSocket::ConnectingState);
|
QCOMPARE(socketDevice.state(), QAbstractSocket::ConnectingState);
|
||||||
while (socketDevice.state() == QAbstractSocket::ConnectingState) {
|
while (socketDevice.state() == QAbstractSocket::ConnectingState) {
|
||||||
QVERIFY(socketDevice.waitForWrite());
|
QVERIFY(socketDevice.waitForWrite());
|
||||||
socketDevice.connectToHost(QtNetworkSettings::serverIP(), 143);
|
socketDevice.connectToHost(QtNetworkSettings::imapServerIp(), 143);
|
||||||
}
|
}
|
||||||
if (socketDevice.state() != QAbstractSocket::ConnectedState)
|
if (socketDevice.state() != QAbstractSocket::ConnectedState)
|
||||||
qDebug("%d, %s", socketDevice.error(), socketDevice.errorString().toLatin1().constData());
|
qDebug("%d, %s", socketDevice.error(), socketDevice.errorString().toLatin1().constData());
|
||||||
QCOMPARE(socketDevice.state(), QAbstractSocket::ConnectedState);
|
QCOMPARE(socketDevice.state(), QAbstractSocket::ConnectedState);
|
||||||
QCOMPARE(socketDevice.peerAddress(), QtNetworkSettings::serverIP());
|
QCOMPARE(socketDevice.peerAddress(), QtNetworkSettings::imapServerIp());
|
||||||
|
|
||||||
// Wait for the greeting
|
// Wait for the greeting
|
||||||
QVERIFY(socketDevice.waitForRead());
|
QVERIFY(socketDevice.waitForRead());
|
||||||
|
34
tests/testserver/cyrus/cyrus.sh
Executable file
34
tests/testserver/cyrus/cyrus.sh
Executable file
@ -0,0 +1,34 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
#############################################################################
|
||||||
|
##
|
||||||
|
## Copyright (C) 2019 The Qt Company Ltd.
|
||||||
|
## Contact: https://www.qt.io/licensing/
|
||||||
|
##
|
||||||
|
## This file is part of the test suite of the Qt Toolkit.
|
||||||
|
##
|
||||||
|
## $QT_BEGIN_LICENSE:GPL$
|
||||||
|
## Commercial License Usage
|
||||||
|
## Licensees holding valid commercial Qt licenses may use this file in
|
||||||
|
## accordance with the commercial license agreement provided with the
|
||||||
|
## Software or, alternatively, in accordance with the terms contained in
|
||||||
|
## a written agreement between you and The Qt Company. For licensing terms
|
||||||
|
## and conditions see https://www.qt.io/terms-conditions. For further
|
||||||
|
## information use the contact form at https://www.qt.io/contact-us.
|
||||||
|
##
|
||||||
|
## GNU General Public License Usage
|
||||||
|
## Alternatively, this file may be used under the terms of the GNU
|
||||||
|
## General Public License version 3 or (at your option) any later version
|
||||||
|
## approved by the KDE Free Qt Foundation. The licenses are as published by
|
||||||
|
## the Free Software Foundation and appearing in the file LICENSE.GPL3
|
||||||
|
## included in the packaging of this file. Please review the following
|
||||||
|
## information to ensure the GNU General Public License requirements will
|
||||||
|
## be met: https://www.gnu.org/licenses/gpl-3.0.html.
|
||||||
|
##
|
||||||
|
## $QT_END_LICENSE$
|
||||||
|
##
|
||||||
|
#############################################################################
|
||||||
|
|
||||||
|
set -ex
|
||||||
|
|
||||||
|
service cyrus-imapd start
|
@ -76,8 +76,20 @@ services:
|
|||||||
- apache2:apache2.${TEST_DOMAIN}
|
- apache2:apache2.${TEST_DOMAIN}
|
||||||
- vsftpd:vsftpd.${TEST_DOMAIN}
|
- vsftpd:vsftpd.${TEST_DOMAIN}
|
||||||
- ftp-proxy:ftp-proxy.${TEST_DOMAIN}
|
- ftp-proxy:ftp-proxy.${TEST_DOMAIN}
|
||||||
|
- cyrus:cyrus.${TEST_DOMAIN}
|
||||||
volumes:
|
volumes:
|
||||||
- ./common:/common:ro
|
- ./common:/common:ro
|
||||||
- ./danted:/service:ro
|
- ./danted:/service:ro
|
||||||
entrypoint: common/startup.sh
|
entrypoint: common/startup.sh
|
||||||
command: service/danted.sh
|
command: service/danted.sh
|
||||||
|
|
||||||
|
cyrus:
|
||||||
|
image: qt-test-server-cyrus:c8d72754abc0e501afd624ce838e4df35505abc9
|
||||||
|
container_name: qt-test-server-cyrus
|
||||||
|
domainname: ${TEST_DOMAIN}
|
||||||
|
hostname: cyrus
|
||||||
|
volumes:
|
||||||
|
- ./common:/common:ro
|
||||||
|
- ./cyrus:/service:ro
|
||||||
|
entrypoint: common/startup.sh
|
||||||
|
command: service/cyrus.sh
|
||||||
|
Loading…
x
Reference in New Issue
Block a user