From b91f89fea254824e4915478a598f128a01ba6dc2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Wed, 12 Jun 2019 20:00:54 +0200 Subject: [PATCH] Add TCP to Websocket test and new coverage report script --- create-coverage-html.sh | 36 ------- generate-coverage.sh | 12 +++ .../nymea-remoteproxy-tests-offline.cpp | 94 +++++++++++++++++++ .../nymea-remoteproxy-tests-offline.h | 1 + 4 files changed, 107 insertions(+), 36 deletions(-) delete mode 100755 create-coverage-html.sh create mode 100755 generate-coverage.sh diff --git a/create-coverage-html.sh b/create-coverage-html.sh deleted file mode 100755 index a6908b8..0000000 --- a/create-coverage-html.sh +++ /dev/null @@ -1,36 +0,0 @@ -#!/bin/bash - -# Export the library path for now -export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$(pwd)/libnymea-remoteproxy:$(pwd)/libnymea-remoteproxyclient - -# Build -qmake CONFIG+=coverage CONFIG+=ccache -make -j$(nproc) -#make test -make coverage-html - -# Clean build -make clean - -# Clean source directory -rm -v Makefile - -rm -v libnymea-remoteproxy/libnymea-remoteproxy.so* -rm -v libnymea-remoteproxy/Makefile - -rm -v libnymea-remoteproxyclient/libnymea-remoteproxyclient.so* -rm -v libnymea-remoteproxyclient/Makefile - -rm -v server/nymea-remoteproxy -rm -v server/Makefile - -rm -v tests/Makefile - -rm -v tests/test-offline/nymea-remoteproxy-tests-offline -rm -v tests/test-offline/Makefile - -#rm -v tests/test-online/nymea-remoteproxy-tests-online -#rm -v tests/test-online/Makefile - -rm -v client/nymea-remoteproxy-client -rm -v client/Makefile diff --git a/generate-coverage.sh b/generate-coverage.sh new file mode 100755 index 0000000..9fd4ac4 --- /dev/null +++ b/generate-coverage.sh @@ -0,0 +1,12 @@ +#!/bin/sh +SCRIPT_DIR=$(dirname $0) +SRC_DIR="$SCRIPT_DIR/../build-nymea-remoteproxy-Desktop-Debug/" +COV_DIR="$SRC_DIR/coverage" +HTML_RESULTS="${COV_DIR}/html" + +# Build code coverage html report +mkdir -p ${HTML_RESULTS} +lcov -d "${SRC_DIR}" -c -o "${COV_DIR}/coverage.info" +lcov -r "${COV_DIR}/coverage.info" "*.h" "*/tests/*" "*.moc" "*moc_*.cpp" "*/test/*" "/usr/include/*" "*/build*/*" "*libnymea-remoteproxy/authentication/aws*" -o "${COV_DIR}/coverage-filtered.info" +genhtml -o "${HTML_RESULTS}" "${COV_DIR}/coverage-filtered.info" +lcov -d "${COV_DIR}" -z diff --git a/tests/test-offline/nymea-remoteproxy-tests-offline.cpp b/tests/test-offline/nymea-remoteproxy-tests-offline.cpp index 5773a92..8d373ab 100644 --- a/tests/test-offline/nymea-remoteproxy-tests-offline.cpp +++ b/tests/test-offline/nymea-remoteproxy-tests-offline.cpp @@ -1306,4 +1306,98 @@ void RemoteProxyOfflineTests::tcpRemoteConnection() stopServer(); } +void RemoteProxyOfflineTests::tcpWebsocketRemoteConnection() +{ + // Start the server + startServer(); + + // Configure mock authenticator + m_mockAuthenticator->setTimeoutDuration(100); + m_mockAuthenticator->setExpectedAuthenticationError(); + + QString nameConnectionOne = "Test client one"; + QUuid uuidConnectionOne = QUuid::createUuid(); + + QString nameConnectionTwo = "Test client two"; + QUuid uuidConnectionTwo = QUuid::createUuid(); + + QByteArray dataOne = "Hello from client one :-)"; + QByteArray dataTwo = "Hello from client two :-)"; + + // Create two connection + RemoteProxyConnection *connectionOne = new RemoteProxyConnection(uuidConnectionOne, nameConnectionOne, RemoteProxyConnection::ConnectionTypeWebSocket, this); + connect(connectionOne, &RemoteProxyConnection::sslErrors, this, &BaseTest::ignoreConnectionSslError); + + RemoteProxyConnection *connectionTwo = new RemoteProxyConnection(uuidConnectionTwo, nameConnectionTwo, RemoteProxyConnection::ConnectionTypeTcpSocket, this); + connect(connectionTwo, &RemoteProxyConnection::sslErrors, this, &BaseTest::ignoreConnectionSslError); + + // Connect one + QSignalSpy connectionOneReadySpy(connectionOne, &RemoteProxyConnection::ready); + QVERIFY(connectionOne->connectServer(m_serverUrl)); + connectionOneReadySpy.wait(); + QVERIFY(connectionOneReadySpy.count() == 1); + QVERIFY(connectionOne->isConnected()); + + // Connect two + QSignalSpy connectionTwoReadySpy(connectionTwo, &RemoteProxyConnection::ready); + QVERIFY(connectionTwo->connectServer(m_serverUrlTcp)); + connectionTwoReadySpy.wait(); + QVERIFY(connectionTwoReadySpy.count() == 1); + QVERIFY(connectionTwo->isConnected()); + + // Authenticate one + QSignalSpy remoteConnectionEstablishedOne(connectionOne, &RemoteProxyConnection::remoteConnectionEstablished); + QSignalSpy connectionOneAuthenticatedSpy(connectionOne, &RemoteProxyConnection::authenticated); + QVERIFY(connectionOne->authenticate(m_testToken)); + connectionOneAuthenticatedSpy.wait(); + QVERIFY(connectionOneAuthenticatedSpy.count() == 1); + QVERIFY(connectionOne->isConnected()); + QVERIFY(connectionOne->isAuthenticated()); + QVERIFY(connectionOne->state() == RemoteProxyConnection::StateAuthenticated); + + // Authenticate two + QSignalSpy remoteConnectionEstablishedTwo(connectionTwo, &RemoteProxyConnection::remoteConnectionEstablished); + QSignalSpy connectionTwoAuthenticatedSpy(connectionTwo, &RemoteProxyConnection::authenticated); + QVERIFY(connectionTwo->authenticate(m_testToken)); + connectionTwoAuthenticatedSpy.wait(); + qDebug() << connectionTwoAuthenticatedSpy.count(); + QVERIFY(connectionTwoAuthenticatedSpy.count() == 1); + QVERIFY(connectionTwo->isConnected()); + QVERIFY(connectionTwo->isAuthenticated()); + + // Wait for both to be connected + remoteConnectionEstablishedOne.wait(500); + remoteConnectionEstablishedTwo.wait(500); + + QVERIFY(remoteConnectionEstablishedOne.count() == 1); + QVERIFY(remoteConnectionEstablishedTwo.count() == 1); + QVERIFY(connectionOne->state() == RemoteProxyConnection::StateRemoteConnected); + QVERIFY(connectionTwo->state() == RemoteProxyConnection::StateRemoteConnected); + + QCOMPARE(connectionOne->tunnelPartnerName(), nameConnectionTwo); + QCOMPARE(connectionOne->tunnelPartnerUuid(), uuidConnectionTwo.toString()); + QCOMPARE(connectionTwo->tunnelPartnerName(), nameConnectionOne); + QCOMPARE(connectionTwo->tunnelPartnerUuid(), uuidConnectionOne.toString()); + + // Pipe data trought the tunnel + QSignalSpy remoteConnectionDataOne(connectionOne, &RemoteProxyConnection::dataReady); + QSignalSpy remoteConnectionDataTwo(connectionTwo, &RemoteProxyConnection::dataReady); + + connectionOne->sendData(dataOne); + remoteConnectionDataTwo.wait(500); + QVERIFY(remoteConnectionDataTwo.count() == 1); + QCOMPARE(remoteConnectionDataTwo.at(0).at(0).toByteArray().trimmed(), dataOne); + + connectionTwo->sendData(dataTwo); + remoteConnectionDataOne.wait(500); + QVERIFY(remoteConnectionDataOne.count() == 1); + QCOMPARE(remoteConnectionDataOne.at(0).at(0).toByteArray().trimmed(), dataTwo); + + connectionOne->deleteLater(); + connectionTwo->deleteLater(); + + // Clean up + stopServer(); +} + QTEST_MAIN(RemoteProxyOfflineTests) diff --git a/tests/test-offline/nymea-remoteproxy-tests-offline.h b/tests/test-offline/nymea-remoteproxy-tests-offline.h index da858e0..dc0a233 100644 --- a/tests/test-offline/nymea-remoteproxy-tests-offline.h +++ b/tests/test-offline/nymea-remoteproxy-tests-offline.h @@ -83,6 +83,7 @@ private slots: // TCP Websocket combinations void tcpRemoteConnection(); + void tcpWebsocketRemoteConnection(); };