Cours:ClasseTestTcpServer

De troyesGEII
Révision datée du 20 octobre 2025 à 16:19 par Bjacquot (discussion | contributions)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Aller à : navigation, rechercher

testtcpserver.h

#ifndef TESTTCPSERVER_H
#define TESTTCPSERVER_H

#include <QtTest/QTest>
#include <QObject>
#include <QDataStream>

class TestTcpServer : public QObject
{
    Q_OBJECT
public:
    explicit TestTcpServer(QObject *parent = nullptr);
private:
    QString data;
    QDataStream dataIn;
public slots:
    void getData(QString _data);
    void readyRead();

private slots:
    void sendData_data();
    void sendData();
signals:
};

#endif // TESTTCPSERVER_H

testtcpserver.cpp

#include "testtcpserver.h"
#include "tcpserver.h"
#include <QTcpSocket>

TestTcpServer::TestTcpServer(QObject *parent)
    : QObject{parent}
{}

void TestTcpServer::sendData_data()
{
    QTest::addColumn<QString>("message");

    QTest::newRow("") << "hello";
    QTest::newRow("") << "coucou";
    QTest::newRow("") << "100";
    QTest::newRow("") << "10.4";
    QTest::newRow("") << "0.5;-0.3";
}

void TestTcpServer::sendData()
{
    QFETCH(QString, message);

    int port=rand()%1000+9000;
    TcpServer monServer(port);
    QTcpSocket monClient;

    monClient.connectToHost("127.0.0.1",port);
    QTest::qWait(100);

    QVERIFY(monClient.state()==QAbstractSocket::ConnectedState);


    // vérif client vers server
    QByteArray block;
    QDataStream out(&block, QIODevice::WriteOnly);
    out << message;
    connect(&monServer,&TcpServer::newDatas,
            this,&TestTcpServer::getData);
    monClient.write(block);

    QTest::qWait(100);
    QCOMPARE(data,message);
    disconnect(&monServer,&TcpServer::newDatas,
               this,&TestTcpServer::getData);


    // vérif server vers client
    dataIn.setDevice(&monClient);
    connect(&monClient,&QTcpSocket::readyRead,
            this,&TestTcpServer::readyRead);
    monServer.sendData(message);

    QTest::qWait(100);

    QCOMPARE(data,message);
    disconnect(&monClient,&QTcpSocket::readyRead,
               this,&TestTcpServer::readyRead);
    monClient.disconnect();
    dataIn.setDevice(nullptr);
    QTest::qWait(100);


}

void TestTcpServer::getData(QString _data)
{
    data=_data;
}

void TestTcpServer::readyRead()
{
    dataIn.startTransaction();
    if (!dataIn.commitTransaction()) return;
    dataIn >> data;
}
//main.cpp
#include "testtcpserver.h"
QTEST_MAIN(TestTcpServer);