diff options
Diffstat (limited to 'tests/auto/qtcpsocket/stressTest')
-rw-r--r-- | tests/auto/qtcpsocket/stressTest/Test.cpp | 240 | ||||
-rw-r--r-- | tests/auto/qtcpsocket/stressTest/Test.h | 137 | ||||
-rw-r--r-- | tests/auto/qtcpsocket/stressTest/main.cpp | 73 | ||||
-rw-r--r-- | tests/auto/qtcpsocket/stressTest/stressTest.pro | 12 |
4 files changed, 462 insertions, 0 deletions
diff --git a/tests/auto/qtcpsocket/stressTest/Test.cpp b/tests/auto/qtcpsocket/stressTest/Test.cpp new file mode 100644 index 0000000..305cf72 --- /dev/null +++ b/tests/auto/qtcpsocket/stressTest/Test.cpp @@ -0,0 +1,240 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at qt-sales@nokia.com. +** $QT_END_LICENSE$ +** +****************************************************************************/ +// Qt +#include <QByteArray> +#include <QCoreApplication> +#include <QDataStream> +#include <QTimer> + +// Test +#include "Test.h" + +#ifdef QT3_SUPPORT +//------------------------------------------------------------------------------ +My3Socket::My3Socket(QObject *parent) + : Q3Socket(parent), safeShutDown(false) +{ + connect(this, SIGNAL(readyRead()), this, SLOT(read())); + connect(this, SIGNAL(delayedCloseFinished()), this, SLOT(closed())); + connect(this, SIGNAL(connectionClosed()), this, SLOT(closed())); +} + +//------------------------------------------------------------------------------ +void My3Socket::read() +{ + QDataStream in(this); + + quint32 num, reply; + + while (bytesAvailable()) { + in >> num; + if (num == 42) { + qDebug("SUCCESS"); + safeShutDown = true; + QCoreApplication::instance()->quit(); + return; + } + reply = num + 1; + if (reply == 42) + ++reply; + } + + // Reply with a bigger number + sendTest(reply); +} + +//------------------------------------------------------------------------------ +void My3Socket::closed() +{ + if (!safeShutDown) + qDebug("FAILED"); + QCoreApplication::instance()->quit(); +} + +//------------------------------------------------------------------------------ +void My3Socket::sendTest(quint32 num) +{ + QByteArray block; + QDataStream out(&block, QIODevice::WriteOnly); + out << num; + writeBlock(block, block.size()); +} + +//------------------------------------------------------------------------------ +My3Server::My3Server(QObject *parent) + : Q3ServerSocket(7700, 1, parent), m_socket(0) +{ + if (ok()) + qDebug("qt3server"); + + QTimer::singleShot(5000, this, SLOT(stopServer())); +} + +//------------------------------------------------------------------------------ +void My3Server::newConnection(int socketId) +{ + m_socket = new My3Socket(this); + m_socket->setSocket(socketId); +} + +//------------------------------------------------------------------------------ +void My3Server::stopServer() +{ + if (m_socket) { + qDebug("SUCCESS"); + m_socket->safeShutDown = true; + m_socket->sendTest(42); + } else { + QCoreApplication::instance()->quit(); + } +} +#endif + +//------------------------------------------------------------------------------ +My4Socket::My4Socket(QObject *parent) + : QTcpSocket(parent), safeShutDown(false) +{ + connect(this, SIGNAL(readyRead()), this, SLOT(read())); + connect(this, SIGNAL(disconnected()), this, SLOT(closed())); +} + +//------------------------------------------------------------------------------ +void My4Socket::read(void) +{ + QDataStream in(this); + + quint32 num, reply; + + while (bytesAvailable()) { + in >> num; + if (num == 42) { + safeShutDown = true; + qDebug("SUCCESS"); + QCoreApplication::instance()->quit(); + return; + } + reply = num + 1; + if (reply == 42) + ++reply; + } + + // Reply with a bigger number + sendTest(reply); +} + +//------------------------------------------------------------------------------ +void My4Socket::closed(void) +{ + if (!safeShutDown) + qDebug("FAILED"); + QCoreApplication::instance()->quit(); +} + +//------------------------------------------------------------------------------ +void My4Socket::sendTest(quint32 num) +{ + QByteArray block; + QDataStream out(&block, QIODevice::WriteOnly); + out << num; + + write(block, block.size()); +} + +//------------------------------------------------------------------------------ +My4Server::My4Server(QObject *parent) + : QTcpServer(parent) +{ + if (listen(QHostAddress::Any, 7700)) + qDebug("qt4server"); + QTimer::singleShot(5000, this, SLOT(stopServer())); +} + +//------------------------------------------------------------------------------ +void My4Server::incomingConnection(int socketId) +{ + m_socket = new My4Socket(this); + m_socket->setSocketDescriptor(socketId); +} + +//------------------------------------------------------------------------------ +void My4Server::stopServer() +{ + if (m_socket) { + qDebug("SUCCESS"); + m_socket->safeShutDown = true; + m_socket->sendTest(42); + } else { + QCoreApplication::instance()->quit(); + } +} + +//------------------------------------------------------------------------------ +Test::Test(Type type) +{ + switch (type) { +#ifdef QT3_SUPPORT + case Qt3Server: { + new My3Server(this); + break; + } + case Qt3Client: { + qDebug("qt3client"); + My3Socket *s = new My3Socket(this); + s->connectToHost("localhost", 7700); + s->sendTest(1); + break; + } +#endif + case Qt4Client: { + qDebug("qt4client"); + My4Socket *s = new My4Socket(this); + s->connectToHost("localhost", 7700); + s->sendTest(1); + break; + } + case Qt4Server: { + new My4Server(this); + break; + } + default: + break; + } +} diff --git a/tests/auto/qtcpsocket/stressTest/Test.h b/tests/auto/qtcpsocket/stressTest/Test.h new file mode 100644 index 0000000..eb44cca --- /dev/null +++ b/tests/auto/qtcpsocket/stressTest/Test.h @@ -0,0 +1,137 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at qt-sales@nokia.com. +** $QT_END_LICENSE$ +** +****************************************************************************/ +#ifndef TEST_H +#define TEST_H + +//------------------------------------------------------------------------------ +// Qt +#ifdef QT3_SUPPORT +#include <Q3ServerSocket> +#include <Q3Socket> +#endif + +#include <QTcpServer> +#include <QTcpSocket> + +//------------------------------------------------------------------------------ +#ifdef QT3_SUPPORT +class My3Socket : public Q3Socket +{ + Q_OBJECT +public: + My3Socket(QObject *parent); + + void sendTest(Q_UINT32 num); + bool safeShutDown; + +private slots: + void read(); + void closed(); +}; + +//------------------------------------------------------------------------------ +class My3Server : public Q3ServerSocket +{ + Q_OBJECT +public: + My3Server(QObject *parent = 0); + + void newConnection(int socket); + +private slots: + void stopServer(); + +private: + My3Socket *m_socket; +}; +#endif + +//------------------------------------------------------------------------------ +class My4Socket : public QTcpSocket +{ + Q_OBJECT +public: + My4Socket(QObject *parent); + + void sendTest(quint32 num); + bool safeShutDown; + +private slots: + void read(); + void closed(); +}; + +//------------------------------------------------------------------------------ +class My4Server : public QTcpServer +{ + Q_OBJECT +public: + My4Server(QObject *parent = 0); + +protected: + void incomingConnection(int socket); + +private slots: + void stopServer(); + +private: + My4Socket *m_socket; +}; + +//------------------------------------------------------------------------------ +class Test : public QObject +{ + Q_OBJECT + +public: + enum Type { + Qt4Client, + Qt4Server, +#ifdef QT3_SUPPORT + Qt3Client, + Qt3Server +#endif + }; + Test(Type type); +}; + +//------------------------------------------------------------------------------ +#endif // TEST_H diff --git a/tests/auto/qtcpsocket/stressTest/main.cpp b/tests/auto/qtcpsocket/stressTest/main.cpp new file mode 100644 index 0000000..73e04e2 --- /dev/null +++ b/tests/auto/qtcpsocket/stressTest/main.cpp @@ -0,0 +1,73 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at qt-sales@nokia.com. +** $QT_END_LICENSE$ +** +****************************************************************************/ +#include "Test.h" + +#include <QCoreApplication> +#include <QStringList> + +int main(int argc, char **argv) +{ + QCoreApplication app(argc, argv); + + QString arg; + if (app.arguments().size() > 1) + arg = app.arguments().at(1).toLower().trimmed(); + + Test::Type type; + if (arg == QLatin1String("qt4client")) + type = Test::Qt4Client; + else if (arg == QLatin1String("qt4server")) + type = Test::Qt4Server; +#ifdef QT3_SUPPORT + else if (arg == QLatin1String("qt3client")) + type = Test::Qt3Client; + else if (arg == QLatin1String("qt3server")) + type = Test::Qt3Server; +#endif + else { + qDebug("usage: ./stressTest <qt3client|qt3server|qt4client|qt4server>"); + return 0; + } + + Test test(type); + + return app.exec(); +} diff --git a/tests/auto/qtcpsocket/stressTest/stressTest.pro b/tests/auto/qtcpsocket/stressTest/stressTest.pro new file mode 100644 index 0000000..9a653c6 --- /dev/null +++ b/tests/auto/qtcpsocket/stressTest/stressTest.pro @@ -0,0 +1,12 @@ +HEADERS += Test.h +SOURCES += main.cpp Test.cpp +QT += network +contains(QT_CONFIG, qt3support): QT += qt3support + +CONFIG -= app_bundle +CONFIG += console +DESTDIR = ./ +MOC_DIR = .moc/ +TMP_DIR = .tmp/ + + |