summaryrefslogtreecommitdiff
path: root/tests/autobahn/compliance/tst_compliance.cpp
blob: c1c93181a67092bd1c3a462edfc2022240be2f4f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
#include <QtTest/QtTest>
#include <QtTest/qtestcase.h>
#include <QSignalSpy>
#include <QHostInfo>
#include <QDebug>
#include "qwebsocket.h"

class tst_ComplianceTest : public QObject
{
    Q_OBJECT

public:
    tst_ComplianceTest();

private Q_SLOTS:
    void initTestCase();
    void cleanupTestCase();
    void init();
    void cleanup();
    /**
     * @brief Runs the autobahn tests against our implementation
     */
    void autobahnTest();

private:
    QUrl m_url;

    void runTestCases(int startNbr, int stopNbr = -1);
    void runTestCase(int nbr, int total);
};

tst_ComplianceTest::tst_ComplianceTest() :
    m_url("ws://localhost:9001")
{
}

void tst_ComplianceTest::initTestCase()
{
}

void tst_ComplianceTest::cleanupTestCase()
{
}

void tst_ComplianceTest::init()
{
}

void tst_ComplianceTest::cleanup()
{
}

void tst_ComplianceTest::runTestCase(int nbr, int total)
{
    if (nbr == total)
    {
        return;
    }
    QWebSocket *pWebSocket = new QWebSocket;
    QSignalSpy spy(pWebSocket, SIGNAL(disconnected()));

    //next for every case, connect to url
    //ws://ipaddress:port/runCase?case=<number>&agent=<agentname>
    //where agent name will be QWebSocket
    QObject::connect(pWebSocket, &QWebSocket::textMessageReceived, [=](QString message) {
        pWebSocket->write(message);
    });
    QObject::connect(pWebSocket, &QWebSocket::binaryMessageReceived, [=](QByteArray message) {
        pWebSocket->write(message);
    });

    qDebug() << "Executing test" << (nbr + 1) << "/" << total;
    QUrl url = m_url;
    url.setPath("/runCase?");
    QUrlQuery query;
    query.addQueryItem("case", QString::number(nbr + 1));
    query.addQueryItem("agent", "QWebSockets/0.9");
    url.setQuery(query);
    pWebSocket->open(url);
    spy.wait(60000);
    pWebSocket->close();
    delete pWebSocket;
    pWebSocket = 0;
    runTestCase(nbr + 1, total);
}

void tst_ComplianceTest::runTestCases(int startNbr, int stopNbr)
{
    runTestCase(startNbr, stopNbr);
}

void tst_ComplianceTest::autobahnTest()
{
    //connect to autobahn server at url ws://ipaddress:port/getCaseCount
    QWebSocket *pWebSocket = new QWebSocket;
    QUrl url = m_url;
    int numberOfTestCases = 0;
    QSignalSpy spy(pWebSocket, SIGNAL(disconnected()));
    QObject::connect(pWebSocket, &QWebSocket::textMessageReceived, [&](QString message) {
        numberOfTestCases = message.toInt();
    });

    url.setPath("/getCaseCount");
    pWebSocket->open(url);
    spy.wait(60000);
    QVERIFY(numberOfTestCases > 0);

    QObject::disconnect(pWebSocket, &QWebSocket::textMessageReceived, 0, 0);

    runTestCases(0, numberOfTestCases);

    url.setPath("/updateReports?");
    QUrlQuery query;
    query.addQueryItem("agent", "QWebSockets");
    url.setQuery(query);
    pWebSocket->open(url);
    spy.wait(60000);
    delete pWebSocket;
    pWebSocket = 0;
}

QTEST_MAIN(tst_ComplianceTest)

#include "tst_compliance.moc"