summaryrefslogtreecommitdiff
path: root/test/tst_compliance.cpp
blob: b45088789d9646642ebb024e8b303bd52b7f9eb8 (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
126
#include <QtTest/QtTest>
#include <QtTest/qtestcase.h>
#include <QSignalSpy>
#include <QHostInfo>
#include <QDebug>
#include "qwebsocket.h"
#include "unittests.h"

class ComplianceTest : public QObject
{
	Q_OBJECT

public:
	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);
};

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

void ComplianceTest::initTestCase()
{
}

void ComplianceTest::cleanupTestCase()
{
}

void ComplianceTest::init()
{
}

void ComplianceTest::cleanup()
{
}

void 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->send(message);
	});
	QObject::connect(pWebSocket, &QWebSocket::binaryMessageReceived, [=](QByteArray message) {
		pWebSocket->send(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 ComplianceTest::runTestCases(int startNbr, int stopNbr)
{
	runTestCase(startNbr, stopNbr);
}

void 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;
}

DECLARE_TEST(ComplianceTest)

#include "tst_compliance.moc"