diff options
Diffstat (limited to '')
-rw-r--r-- | src/jaegertracing/thrift/lib/cpp/test/qt/CMakeLists.txt | 32 | ||||
-rw-r--r-- | src/jaegertracing/thrift/lib/cpp/test/qt/TQTcpServerTest.cpp | 113 |
2 files changed, 145 insertions, 0 deletions
diff --git a/src/jaegertracing/thrift/lib/cpp/test/qt/CMakeLists.txt b/src/jaegertracing/thrift/lib/cpp/test/qt/CMakeLists.txt new file mode 100644 index 000000000..7f341cc4c --- /dev/null +++ b/src/jaegertracing/thrift/lib/cpp/test/qt/CMakeLists.txt @@ -0,0 +1,32 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# + +set(CMAKE_AUTOMOC ON) +find_package(Qt5 REQUIRED COMPONENTS Test Network) +set(TQTcpServerTest_Qt5_SOURCES + TQTcpServerTest.cpp +) +add_executable(TQTcpServerTest_Qt5 ${TQTcpServerTest_Qt5_SOURCES}) +target_link_libraries(TQTcpServerTest_Qt5 testgencpp_cob) +LINK_AGAINST_THRIFT_LIBRARY(TQTcpServerTest_Qt5 thriftqt5) +LINK_AGAINST_THRIFT_LIBRARY(TQTcpServerTest_Qt5 thrift) +target_link_libraries(TQTcpServerTest_Qt5 Qt5::Test Qt5::Network) + +add_test(NAME TQTcpServerTest_Qt5 COMMAND TQTcpServerTest_Qt5) + diff --git a/src/jaegertracing/thrift/lib/cpp/test/qt/TQTcpServerTest.cpp b/src/jaegertracing/thrift/lib/cpp/test/qt/TQTcpServerTest.cpp new file mode 100644 index 000000000..3371a9ae8 --- /dev/null +++ b/src/jaegertracing/thrift/lib/cpp/test/qt/TQTcpServerTest.cpp @@ -0,0 +1,113 @@ +#define BOOST_TEST_MODULE TQTcpServerTest +#include <QTest> +#include <iostream> + +#include <QTcpServer> +#include <QTcpSocket> +#include <QHostAddress> +#include <QThread> + +#ifndef Q_MOC_RUN + #include "thrift/protocol/TBinaryProtocol.h" + #include "thrift/async/TAsyncProcessor.h" + #include "thrift/qt/TQTcpServer.h" + #include "thrift/qt/TQIODeviceTransport.h" + + #include "gen-cpp/ParentService.h" +#endif + +using namespace apache::thrift; + +struct AsyncHandler : public test::ParentServiceCobSvIf { + std::vector<std::string> strings; + void addString(std::function<void()> cob, const std::string& s) override { + strings.push_back(s); + cob(); + } + void getStrings(std::function<void(std::vector<std::string> const& _return)> cob) override { + cob(strings); + } + + // Overrides not used in this test + void incrementGeneration(std::function<void(int32_t const& _return)> cob) override {} + void getGeneration(std::function<void(int32_t const& _return)> cob) override {} + void getDataWait(std::function<void(std::string const& _return)> cob, + const int32_t length) override {} + void onewayWait(std::function<void()> cob) override {} + void exceptionWait( + std::function<void()> cob, + std::function<void(::apache::thrift::TDelayedException* _throw)> /* exn_cob */, + const std::string& message) override {} + void unexpectedExceptionWait(std::function<void()> cob, const std::string& message) override {} +}; + +class TQTcpServerTest : public QObject { + Q_OBJECT + +private slots: + void initTestCase(); + void cleanupTestCase(); + void test_communicate(); + +private: + std::shared_ptr<QThread> serverThread; + std::shared_ptr<async::TQTcpServer> server; + std::shared_ptr<test::ParentServiceClient> client; +}; + +void TQTcpServerTest::initTestCase() { + // setup server + std::shared_ptr<QTcpServer> serverSocket = std::make_shared<QTcpServer>(); + server.reset(new async::TQTcpServer(serverSocket, + std::make_shared<test::ParentServiceAsyncProcessor>( + std::make_shared<AsyncHandler>()), + std::make_shared<protocol::TBinaryProtocolFactory>())); + QVERIFY(serverSocket->listen(QHostAddress::LocalHost)); + int port = serverSocket->serverPort(); + QVERIFY(port > 0); + + //setup server thread and move server to it + serverThread.reset(new QThread()); + serverSocket->moveToThread(serverThread.get()); + server->moveToThread(serverThread.get()); + serverThread->start(); + + // setup client + std::shared_ptr<QTcpSocket> socket = std::make_shared<QTcpSocket>(); + client.reset(new test::ParentServiceClient(std::make_shared<protocol::TBinaryProtocol>( + std::make_shared<transport::TQIODeviceTransport>(socket)))); + socket->connectToHost(QHostAddress::LocalHost, port); + QVERIFY(socket->waitForConnected()); +} + +void TQTcpServerTest::cleanupTestCase() { + //first, stop the thread which holds the server + serverThread->quit(); + serverThread->wait(); + // now, it is safe to delete the server + server.reset(); + // delete thread now + serverThread.reset(); + + // cleanup client + client.reset(); +} + +void TQTcpServerTest::test_communicate() { + client->addString("foo"); + client->addString("bar"); + + std::vector<std::string> reply; + client->getStrings(reply); + QCOMPARE(QString::fromStdString(reply[0]), QString("foo")); + QCOMPARE(QString::fromStdString(reply[1]), QString("bar")); +} + + +#if (QT_VERSION >= QT_VERSION_CHECK(5, 0, 0)) +QTEST_GUILESS_MAIN(TQTcpServerTest); +#else +#undef QT_GUI_LIB +QTEST_MAIN(TQTcpServerTest); +#endif +#include "TQTcpServerTest.moc" |