summaryrefslogtreecommitdiffstats
path: root/tests/auto/network/socket
diff options
context:
space:
mode:
authorJoão Abecasis <joao.abecasis@nokia.com>2012-02-21 14:58:57 +0100
committerJoão Abecasis <joao.abecasis@nokia.com>2012-02-21 14:58:57 +0100
commit31a0358afb4fde998d1eeeaa80fc32e4420266c7 (patch)
tree938455353474196c1f49b0529b5b644e19c21f3e /tests/auto/network/socket
parent4c8a4058c359c8d163c643120426079fc80c8214 (diff)
parent69da8588d41bbf5ab785f5ad7c1fce76deefc7d0 (diff)
Merge remote-tracking branch 'gerrit/master' into containers
Conflicts: src/corelib/tools/qbytearray.h Change-Id: I03b1f3e05c9b7a45130887c522fcd9b7aa387129
Diffstat (limited to 'tests/auto/network/socket')
-rw-r--r--tests/auto/network/socket/qhttpsocketengine/tst_qhttpsocketengine.cpp14
-rw-r--r--tests/auto/network/socket/qlocalsocket/tst_qlocalsocket.cpp179
-rw-r--r--tests/auto/network/socket/qtcpserver/tst_qtcpserver.cpp15
-rw-r--r--tests/auto/network/socket/qtcpsocket/tst_qtcpsocket.cpp17
4 files changed, 194 insertions, 31 deletions
diff --git a/tests/auto/network/socket/qhttpsocketengine/tst_qhttpsocketengine.cpp b/tests/auto/network/socket/qhttpsocketengine/tst_qhttpsocketengine.cpp
index 9b8391d6be..43b1f225c4 100644
--- a/tests/auto/network/socket/qhttpsocketengine/tst_qhttpsocketengine.cpp
+++ b/tests/auto/network/socket/qhttpsocketengine/tst_qhttpsocketengine.cpp
@@ -294,7 +294,7 @@ void tst_QHttpSocketEngine::errorTest()
connect(&socket, SIGNAL(error(QAbstractSocket::SocketError)),
&QTestEventLoop::instance(), SLOT(exitLoop()));
- QTestEventLoop::instance().enterLoop(5);
+ QTestEventLoop::instance().enterLoop(30);
QVERIFY(!QTestEventLoop::instance().timeout());
QCOMPARE(int(socket.error()), expectedError);
@@ -371,7 +371,7 @@ void tst_QHttpSocketEngine::simpleErrorsAndStates()
QVERIFY(socketDevice.state() == QAbstractSocket::UnconnectedState);
QVERIFY(!socketDevice.connectToHost(QHostAddress(QtNetworkSettings::serverName()), 8088));
QVERIFY(socketDevice.state() == QAbstractSocket::ConnectingState);
- if (socketDevice.waitForWrite(15000)) {
+ if (socketDevice.waitForWrite(30000)) {
QVERIFY(socketDevice.state() == QAbstractSocket::ConnectedState ||
socketDevice.state() == QAbstractSocket::UnconnectedState);
} else {
@@ -425,7 +425,7 @@ void tst_QHttpSocketEngine::tcpLoopbackPerformance()
QTime timer;
timer.start();
qlonglong readBytes = 0;
- while (timer.elapsed() < 5000) {
+ while (timer.elapsed() < 30000) {
qlonglong written = serverSocket.write(message1.data(), message1.size());
while (written > 0) {
client.waitForRead();
@@ -458,7 +458,7 @@ void tst_QHttpSocketEngine::tcpSocketBlockingTest()
QCOMPARE(socket.state(), QTcpSocket::ConnectedState);
// Read greeting
- QVERIFY(socket.waitForReadyRead(5000));
+ QVERIFY(socket.waitForReadyRead(30000));
QString s = socket.readLine();
QVERIFY2(QtNetworkSettings::compareReplyIMAP(s.toLatin1()), qPrintable(s));
@@ -466,7 +466,7 @@ void tst_QHttpSocketEngine::tcpSocketBlockingTest()
QCOMPARE((int) socket.write("1 NOOP\r\n", 8), 8);
if (!socket.canReadLine())
- QVERIFY(socket.waitForReadyRead(5000));
+ QVERIFY(socket.waitForReadyRead(30000));
// Read response
s = socket.readLine();
@@ -476,14 +476,14 @@ void tst_QHttpSocketEngine::tcpSocketBlockingTest()
QCOMPARE((int) socket.write("2 LOGOUT\r\n", 10), 10);
if (!socket.canReadLine())
- QVERIFY(socket.waitForReadyRead(5000));
+ QVERIFY(socket.waitForReadyRead(30000));
// Read two lines of respose
s = socket.readLine();
QCOMPARE(s.toLatin1().constData(), "* BYE LOGOUT received\r\n");
if (!socket.canReadLine())
- QVERIFY(socket.waitForReadyRead(5000));
+ QVERIFY(socket.waitForReadyRead(30000));
s = socket.readLine();
QCOMPARE(s.toLatin1().constData(), "2 OK Completed\r\n");
diff --git a/tests/auto/network/socket/qlocalsocket/tst_qlocalsocket.cpp b/tests/auto/network/socket/qlocalsocket/tst_qlocalsocket.cpp
index 221ef602a1..72fa9f74a4 100644
--- a/tests/auto/network/socket/qlocalsocket/tst_qlocalsocket.cpp
+++ b/tests/auto/network/socket/qlocalsocket/tst_qlocalsocket.cpp
@@ -46,17 +46,21 @@
#include <QtNetwork/qlocalsocket.h>
#include <QtNetwork/qlocalserver.h>
+#ifdef Q_OS_UNIX
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <sys/un.h>
+#endif
+
Q_DECLARE_METATYPE(QLocalSocket::LocalSocketError)
Q_DECLARE_METATYPE(QLocalSocket::LocalSocketState)
+Q_DECLARE_METATYPE(QLocalServer::SocketOption)
+Q_DECLARE_METATYPE(QFile::Permissions)
class tst_QLocalSocket : public QObject
{
Q_OBJECT
-public:
- tst_QLocalSocket();
- virtual ~tst_QLocalSocket();
-
public Q_SLOTS:
void init();
void cleanup();
@@ -108,26 +112,21 @@ private slots:
void bytesWrittenSignal();
void syncDisconnectNotify();
void asyncDisconnectNotify();
-};
-tst_QLocalSocket::tst_QLocalSocket()
-{
- if (!QFile::exists("lackey/lackey"
-#ifdef Q_OS_WIN
- ".exe"
-#endif
- ))
- qWarning() << "lackey executable doesn't exists!";
-}
+ void verifySocketOptions();
+ void verifySocketOptions_data();
-tst_QLocalSocket::~tst_QLocalSocket()
-{
-}
+ void verifyListenWithDescriptor();
+ void verifyListenWithDescriptor_data();
+
+};
void tst_QLocalSocket::init()
{
qRegisterMetaType<QLocalSocket::LocalSocketState>("QLocalSocket::LocalSocketState");
qRegisterMetaType<QLocalSocket::LocalSocketError>("QLocalSocket::LocalSocketError");
+ qRegisterMetaType<QLocalServer::SocketOption>("QLocalServer::SocketOption");
+ qRegisterMetaType<QFile::Permissions>("QFile::Permissions");
}
void tst_QLocalSocket::cleanup()
@@ -749,6 +748,16 @@ void tst_QLocalSocket::processConnection_data()
*/
void tst_QLocalSocket::processConnection()
{
+#ifdef Q_OS_WIN
+# define EXE_SUFFIX ".exe"
+#else
+# define EXE_SUFFIX
+#endif
+
+// ### lackey is currently not build
+ QEXPECT_FAIL("", "lackey is currently not built due to qscript dependency, QTBUG-24142", Abort);
+ QVERIFY(QFile::exists("lackey/lackey" EXE_SUFFIX));
+
QFETCH(int, processes);
QStringList serverArguments = QStringList() << SRCDIR "lackey/scripts/server.js" << QString::number(processes);
QProcess producer;
@@ -758,7 +767,7 @@ void tst_QLocalSocket::processConnection()
#endif
QList<QProcess*> consumers;
producer.start("lackey/lackey", serverArguments);
- QVERIFY(producer.waitForStarted(-1));
+ QVERIFY2(producer.waitForStarted(-1), qPrintable(producer.errorString()));
QTest::qWait(2000);
for (int i = 0; i < processes; ++i) {
QStringList arguments = QStringList() << SRCDIR "lackey/scripts/client.js";
@@ -1018,6 +1027,140 @@ void tst_QLocalSocket::asyncDisconnectNotify()
QTRY_VERIFY(!disconnectedSpy.isEmpty());
}
+void tst_QLocalSocket::verifySocketOptions_data()
+{
+#ifdef Q_OS_LINUX
+ QTest::addColumn<QString>("service");
+ QTest::addColumn<QLocalServer::SocketOption>("opts");
+ QTest::addColumn<QFile::Permissions>("perms");
+
+ QFile::Permissions p = QFile::ExeOwner|QFile::WriteOwner|QFile::ReadOwner |
+ QFile::ExeUser|QFile::WriteUser|QFile::ReadUser;
+ QTest::newRow("user") << "userPerms" << QLocalServer::UserAccessOption << p;
+
+ p = QFile::ExeGroup|QFile::WriteGroup|QFile::ReadGroup;
+ QTest::newRow("group") << "groupPerms" << QLocalServer::GroupAccessOption << p;
+
+ p = QFile::ExeOther|QFile::WriteOther|QFile::ReadOther;
+ QTest::newRow("other") << "otherPerms" << QLocalServer::OtherAccessOption << p;
+
+ p = QFile::ExeOwner|QFile::WriteOwner|QFile::ReadOwner|
+ QFile::ExeUser|QFile::WriteUser|QFile::ReadUser |
+ QFile::ExeGroup|QFile::WriteGroup|QFile::ReadGroup|
+ QFile::ExeOther|QFile::WriteOther|QFile::ReadOther;
+ QTest::newRow("all") << "worldPerms" << QLocalServer::WorldAccessOption << p;
+#endif
+}
+
+void tst_QLocalSocket::verifySocketOptions()
+{
+ // These are only guaranteed to be useful on linux at this time
+#ifdef Q_OS_LINUX
+ QFETCH(QString, service);
+ QFETCH(QLocalServer::SocketOption, opts);
+ QFETCH(QFile::Permissions, perms);
+
+
+ QLocalServer::removeServer(service);
+ QLocalServer server;
+ server.setSocketOptions(opts);
+ QVERIFY2(server.listen(service), "service failed to start listening");
+
+ // find the socket
+ QString fullServerPath = QDir::cleanPath(QDir::tempPath());
+ fullServerPath += QLatin1Char('/') + service;
+
+ QFile socketFile(fullServerPath);
+ QVERIFY2(perms == socketFile.permissions(), "permissions on the socket don't match");
+#endif
+}
+
+void tst_QLocalSocket::verifyListenWithDescriptor()
+{
+#ifdef Q_OS_UNIX
+ QFETCH(QString, path);
+ QFETCH(bool, abstract);
+ QFETCH(bool, bound);
+
+ qDebug() << "socket" << path << abstract;
+
+ int listenSocket;
+
+ if (bound) {
+ // create the unix socket
+ listenSocket = ::socket(PF_UNIX, SOCK_STREAM, 0);
+ QVERIFY2(listenSocket != -1, "failed to create test socket");
+
+ // Construct the unix address
+ struct ::sockaddr_un addr;
+ addr.sun_family = PF_UNIX;
+
+ QVERIFY2(sizeof(addr.sun_path) > ((uint)path.size() + 1), "path to large to create socket");
+
+ ::memset(addr.sun_path, 0, sizeof(addr.sun_path));
+ if (abstract)
+ ::memcpy(addr.sun_path+1, path.toLatin1().data(), path.toLatin1().size());
+ else
+ ::memcpy(addr.sun_path, path.toLatin1().data(), path.toLatin1().size());
+
+ if (path.startsWith(QLatin1Char('/'))) {
+ ::unlink(path.toLatin1());
+ }
+
+ QVERIFY2(-1 != ::bind(listenSocket, (sockaddr *)&addr, sizeof(sockaddr_un)), "failed to bind test socket to address");
+
+ // listen for connections
+ QVERIFY2(-1 != ::listen(listenSocket, 50), "failed to call listen on test socket");
+ } else {
+ int fds[2];
+ QVERIFY2(-1 != ::socketpair(PF_UNIX, SOCK_STREAM, 0, fds), "failed to create socket pair");
+
+ listenSocket = fds[0];
+ close(fds[1]);
+ }
+
+ QLocalServer server;
+ QVERIFY2(server.listen(listenSocket), "failed to start create QLocalServer with local socket");
+
+#ifdef Q_OS_LINUX
+ if (!bound) {
+ QVERIFY(server.serverName().at(0) == QLatin1Char('@'));
+ QVERIFY(server.fullServerName().at(0) == QLatin1Char('@'));
+ } else if (abstract) {
+ QVERIFY2(server.fullServerName().at(0) == QLatin1Char('@'), "abstract sockets should start with a '@'");
+ } else {
+ QVERIFY2(server.fullServerName() == path, "full server path doesn't match patch provided");
+ if (path.contains(QLatin1String("/"))) {
+ QVERIFY2(server.serverName() == path.mid(path.lastIndexOf(QLatin1Char('/'))+1), "server name invalid short name");
+ } else {
+ QVERIFY2(server.serverName() == path, "servier name doesn't match the path provided");
+ }
+ }
+#else
+ QVERIFY(server.serverName().isEmpty());
+ QVERIFY(server.fullServerName().isEmpty());
+#endif
+
+
+#endif
+}
+
+void tst_QLocalSocket::verifyListenWithDescriptor_data()
+{
+#ifdef Q_OS_UNIX
+ QTest::addColumn<QString>("path");
+ QTest::addColumn<bool>("abstract");
+ QTest::addColumn<bool>("bound");
+
+ QTest::newRow("normal") << QDir::tempPath() + QLatin1Literal("/testsocket") << false << true;
+ QTest::newRow("absrtact") << QString::fromLatin1("abstractsocketname") << true << true;
+ QTest::newRow("abstractwithslash") << QString::fromLatin1("abstractsocketwitha/inthename") << true << true;
+ QTest::newRow("no path") << QString::fromLatin1("/invalid/no path name speficied") << true << false;
+
+#endif
+
+}
+
QTEST_MAIN(tst_QLocalSocket)
#include "tst_qlocalsocket.moc"
diff --git a/tests/auto/network/socket/qtcpserver/tst_qtcpserver.cpp b/tests/auto/network/socket/qtcpserver/tst_qtcpserver.cpp
index 941e0b2142..ac27a621bb 100644
--- a/tests/auto/network/socket/qtcpserver/tst_qtcpserver.cpp
+++ b/tests/auto/network/socket/qtcpserver/tst_qtcpserver.cpp
@@ -119,6 +119,7 @@ private:
#ifndef QT_NO_BEARERMANAGEMENT
QNetworkSession *networkSession;
#endif
+ QString crashingServerDir;
};
// Testing get/set functions
@@ -150,6 +151,10 @@ void tst_QTcpServer::initTestCase_data()
QTest::newRow("WithoutProxy") << false << 0;
QTest::newRow("WithSocks5Proxy") << true << int(QNetworkProxy::Socks5Proxy);
+
+ crashingServerDir = QFINDTESTDATA("crashingServer");
+ QVERIFY2(!crashingServerDir.isEmpty(), qPrintable(
+ QString::fromLatin1("Couldn't find crashingServer dir starting from %1.").arg(QDir::currentPath())));
}
void tst_QTcpServer::initTestCase()
@@ -538,7 +543,10 @@ void tst_QTcpServer::addressReusable()
QFile::remove(signalName);
// The crashingServer process will crash once it gets a connection.
QProcess process;
- process.start("crashingServer/crashingServer");
+ QString processExe = crashingServerDir + "/crashingServer";
+ process.start(processExe);
+ QVERIFY2(process.waitForStarted(), qPrintable(
+ QString::fromLatin1("Could not start %1: %2").arg(processExe, process.errorString())));
int waitCount = 5;
while (waitCount-- && !QFile::exists(signalName))
QTest::qWait(1000);
@@ -547,7 +555,10 @@ void tst_QTcpServer::addressReusable()
#else
// The crashingServer process will crash once it gets a connection.
QProcess process;
- process.start("crashingServer/crashingServer");
+ QString processExe = crashingServerDir + "/crashingServer";
+ process.start(processExe);
+ QVERIFY2(process.waitForStarted(), qPrintable(
+ QString::fromLatin1("Could not start %1: %2").arg(processExe, process.errorString())));
QVERIFY(process.waitForReadyRead(5000));
#endif
diff --git a/tests/auto/network/socket/qtcpsocket/tst_qtcpsocket.cpp b/tests/auto/network/socket/qtcpsocket/tst_qtcpsocket.cpp
index 829ddd2054..abeb1ed06d 100644
--- a/tests/auto/network/socket/qtcpsocket/tst_qtcpsocket.cpp
+++ b/tests/auto/network/socket/qtcpsocket/tst_qtcpsocket.cpp
@@ -246,6 +246,7 @@ private:
SocketPair *earlyConstructedSockets;
int earlyBytesWrittenCount;
int earlyReadyReadCount;
+ QString stressTestDir;
};
enum ProxyTests {
@@ -340,6 +341,10 @@ void tst_QTcpSocket::initTestCase_data()
QTest::newRow("WithHttpProxyBasicAuth SSL") << true << int(HttpProxy | AuthBasic) << true;
// QTest::newRow("WithHttpProxyNtlmAuth SSL") << true << int(HttpProxy | AuthNtlm) << true;
#endif
+
+ stressTestDir = QFINDTESTDATA("stressTest");
+ QVERIFY2(!stressTestDir.isEmpty(), qPrintable(
+ QString::fromLatin1("Couldn't find stressTest dir starting from %1.").arg(QDir::currentPath())));
}
void tst_QTcpSocket::initTestCase()
@@ -2225,11 +2230,14 @@ void tst_QTcpSocket::suddenRemoteDisconnect()
if (ssl)
return;
+ QString processExe = stressTestDir + "/stressTest";
+
// Start server
QProcess serverProcess;
serverProcess.setReadChannel(QProcess::StandardError);
- serverProcess.start(QString::fromLatin1("stressTest/stressTest %1").arg(server),
- QIODevice::ReadWrite | QIODevice::Text);
+ serverProcess.start(processExe, QStringList(server), QIODevice::ReadWrite | QIODevice::Text);
+ QVERIFY2(serverProcess.waitForStarted(), qPrintable(
+ QString::fromLatin1("Could not start %1: %2").arg(processExe, serverProcess.errorString())));
while (!serverProcess.canReadLine())
QVERIFY(serverProcess.waitForReadyRead(10000));
QCOMPARE(serverProcess.readLine().data(), (server.toLatin1() + "\n").data());
@@ -2237,8 +2245,9 @@ void tst_QTcpSocket::suddenRemoteDisconnect()
// Start client
QProcess clientProcess;
clientProcess.setReadChannel(QProcess::StandardError);
- clientProcess.start(QString::fromLatin1("stressTest/stressTest %1").arg(client),
- QIODevice::ReadWrite | QIODevice::Text);
+ clientProcess.start(processExe, QStringList(client), QIODevice::ReadWrite | QIODevice::Text);
+ QVERIFY2(clientProcess.waitForStarted(), qPrintable(
+ QString::fromLatin1("Could not start %1: %2").arg(processExe, clientProcess.errorString())));
while (!clientProcess.canReadLine())
QVERIFY(clientProcess.waitForReadyRead(10000));
QCOMPARE(clientProcess.readLine().data(), (client.toLatin1() + "\n").data());