diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 18:45:59 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 18:45:59 +0000 |
commit | 19fcec84d8d7d21e796c7624e521b60d28ee21ed (patch) | |
tree | 42d26aa27d1e3f7c0b8bd3fd14e7d7082f5008dc /src/jaegertracing/thrift/lib/cpp/test/qt/TQTcpServerTest.cpp | |
parent | Initial commit. (diff) | |
download | ceph-upstream.tar.xz ceph-upstream.zip |
Adding upstream version 16.2.11+ds.upstream/16.2.11+dsupstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '')
-rw-r--r-- | src/jaegertracing/thrift/lib/cpp/test/qt/TQTcpServerTest.cpp | 113 |
1 files changed, 113 insertions, 0 deletions
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" |