From e2243e0709e86b7a90ebcff1e0d863ed40bf65d9 Mon Sep 17 00:00:00 2001 From: Tor Egge Date: Mon, 11 Mar 2024 15:27:21 +0100 Subject: Rewrite messagebus resender unit test to gtest. --- messagebus/src/tests/resender/CMakeLists.txt | 1 + messagebus/src/tests/resender/resender.cpp | 152 ++++++++++++--------------- 2 files changed, 66 insertions(+), 87 deletions(-) diff --git a/messagebus/src/tests/resender/CMakeLists.txt b/messagebus/src/tests/resender/CMakeLists.txt index 2d0e5dbbb61..c364806b2dd 100644 --- a/messagebus/src/tests/resender/CMakeLists.txt +++ b/messagebus/src/tests/resender/CMakeLists.txt @@ -5,5 +5,6 @@ vespa_add_executable(messagebus_resender_test_app TEST DEPENDS messagebus_messagebus-test messagebus + GTest::gtest ) vespa_add_test(NAME messagebus_resender_test_app COMMAND messagebus_resender_test_app) diff --git a/messagebus/src/tests/resender/resender.cpp b/messagebus/src/tests/resender/resender.cpp index b9c75c36dd0..e61d3704909 100644 --- a/messagebus/src/tests/resender/resender.cpp +++ b/messagebus/src/tests/resender/resender.cpp @@ -9,26 +9,11 @@ #include #include #include -#include +#include using namespace mbus; -//////////////////////////////////////////////////////////////////////////////// -// -// Utilities -// -//////////////////////////////////////////////////////////////////////////////// - -class StringList : public std::vector { -public: - StringList &add(const string &str); -}; - -StringList & -StringList::add(const string &str) -{ - std::vector::push_back(str); return *this; -} +namespace { static const duration GET_MESSAGE_TIMEOUT = 60s; @@ -55,35 +40,17 @@ public: bool start(); }; -class Test : public vespalib::TestApp { -private: - Message::UP createMessage(const string &msg); - void replyFromDestination(TestData &data, Message::UP msg, uint32_t errorCode, double retryDelay); - -public: - int Main() override; - void testRetryTag(TestData &data); - void testRetryEnabledTag(TestData &data); - void testTransientError(TestData &data); - void testFatalError(TestData &data); - void testDisableRetry(TestData &data); - void testRetryDelay(TestData &data); - void testRequestRetryDelay(TestData &data); -}; - -TEST_APPHOOK(Test); - -TestData::TestData() : - _slobrok(), - _retryPolicy(new RetryTransientErrorsPolicy()), - _srcServer(MessageBusParams().setRetryPolicy(_retryPolicy).addProtocol(std::make_shared()), - RPCNetworkParams(_slobrok.config())), - _srcSession(), - _srcHandler(), - _dstServer(MessageBusParams().addProtocol(std::make_shared()), - RPCNetworkParams(_slobrok.config()).setIdentity(Identity("dst"))), - _dstSession(), - _dstHandler() +TestData::TestData() + : _slobrok(), + _retryPolicy(new RetryTransientErrorsPolicy()), + _srcServer(MessageBusParams().setRetryPolicy(_retryPolicy).addProtocol(std::make_shared()), + RPCNetworkParams(_slobrok.config())), + _srcSession(), + _srcHandler(), + _dstServer(MessageBusParams().addProtocol(std::make_shared()), + RPCNetworkParams(_slobrok.config()).setIdentity(Identity("dst"))), + _dstSession(), + _dstHandler() { } TestData::~TestData() = default; @@ -105,35 +72,16 @@ TestData::start() return true; } -Message::UP -Test::createMessage(const string &msg) +std::unique_ptr +createMessage(const string &msg) { Message::UP ret(new SimpleMessage(msg)); ret->getTrace().setLevel(9); return ret; } -int -Test::Main() -{ - TEST_INIT("resender_test"); - - TestData data; - ASSERT_TRUE(data.start()); - - testRetryTag(data); TEST_FLUSH(); - testRetryEnabledTag(data); TEST_FLUSH(); - testTransientError(data); TEST_FLUSH(); - testFatalError(data); TEST_FLUSH(); - testDisableRetry(data); TEST_FLUSH(); - testRetryDelay(data); TEST_FLUSH(); - testRequestRetryDelay(data); TEST_FLUSH(); - - TEST_DONE(); -} - void -Test::replyFromDestination(TestData &data, Message::UP msg, uint32_t errorCode, double retryDelay) +replyFromDestination(TestData &data, Message::UP msg, uint32_t errorCode, double retryDelay) { Reply::UP reply(new EmptyReply()); reply->swapState(*msg); @@ -144,22 +92,51 @@ Test::replyFromDestination(TestData &data, Message::UP msg, uint32_t errorCode, data._dstSession->reply(std::move(reply)); } +} + +class ResenderTest : public testing::Test { +protected: + static std::shared_ptr _data; + ResenderTest(); + ~ResenderTest() override; + static void SetUpTestSuite(); + static void TearDownTestSuite(); +}; + +std::shared_ptr ResenderTest::_data; + +ResenderTest::ResenderTest() = default; +ResenderTest::~ResenderTest() = default; + +void +ResenderTest::SetUpTestSuite() +{ + _data = std::make_shared(); + ASSERT_TRUE(_data->start()); +} + +void +ResenderTest::TearDownTestSuite() +{ + _data.reset(); +} + //////////////////////////////////////////////////////////////////////////////// // // Tests // //////////////////////////////////////////////////////////////////////////////// -void -Test::testRetryTag(TestData &data) +TEST_F(ResenderTest, test_retry_tag) { + auto& data = *_data; data._retryPolicy->setEnabled(true); EXPECT_TRUE(data._srcSession->send(createMessage("msg"), Route::parse("dst/session")).isAccepted()); Message::UP msg = data._dstHandler.getMessage(GET_MESSAGE_TIMEOUT); ASSERT_TRUE(msg); for (uint32_t i = 0; i < 5; ++i) { - EXPECT_EQUAL(i, msg->getRetry()); - EXPECT_EQUAL(true, msg->getRetryEnabled()); + EXPECT_EQ(i, msg->getRetry()); + EXPECT_EQ(true, msg->getRetryEnabled()); replyFromDestination(data, std::move(msg), ErrorCode::APP_TRANSIENT_ERROR, 0); msg = data._dstHandler.getMessage(GET_MESSAGE_TIMEOUT); ASSERT_TRUE(msg); @@ -173,16 +150,16 @@ Test::testRetryTag(TestData &data) printf("%s", reply->getTrace().toString().c_str()); } -void -Test::testRetryEnabledTag(TestData &data) +TEST_F(ResenderTest, test_retry_enabled_tag) { + auto& data = *_data; data._retryPolicy->setEnabled(true); Message::UP msg = createMessage("msg"); msg->setRetryEnabled(false); EXPECT_TRUE(data._srcSession->send(std::move(msg), Route::parse("dst/session")).isAccepted()); msg = data._dstHandler.getMessage(GET_MESSAGE_TIMEOUT); ASSERT_TRUE(msg); - EXPECT_EQUAL(false, msg->getRetryEnabled()); + EXPECT_EQ(false, msg->getRetryEnabled()); replyFromDestination(data, std::move(msg), ErrorCode::APP_TRANSIENT_ERROR, 0); Reply::UP reply = data._srcHandler.getReply(); ASSERT_TRUE(reply); @@ -192,9 +169,9 @@ Test::testRetryEnabledTag(TestData &data) printf("%s", reply->getTrace().toString().c_str()); } -void -Test::testTransientError(TestData &data) +TEST_F(ResenderTest, test_transient_error) { + auto& data = *_data; data._retryPolicy->setEnabled(true); EXPECT_TRUE(data._srcSession->send(createMessage("msg"), Route::parse("dst/session")).isAccepted()); Message::UP msg = data._dstHandler.getMessage(GET_MESSAGE_TIMEOUT); @@ -211,9 +188,9 @@ Test::testTransientError(TestData &data) printf("%s", reply->getTrace().toString().c_str()); } -void -Test::testFatalError(TestData &data) +TEST_F(ResenderTest, test_fatal_error) { + auto& data = *_data; data._retryPolicy->setEnabled(true); EXPECT_TRUE(data._srcSession->send(createMessage("msg"), Route::parse("dst/session")).isAccepted()); Message::UP msg = data._dstHandler.getMessage(GET_MESSAGE_TIMEOUT); @@ -227,9 +204,9 @@ Test::testFatalError(TestData &data) printf("%s", reply->getTrace().toString().c_str()); } -void -Test::testDisableRetry(TestData &data) +TEST_F(ResenderTest, test_disable_retry) { + auto& data = *_data; data._retryPolicy->setEnabled(false); EXPECT_TRUE(data._srcSession->send(createMessage("msg"), Route::parse("dst/session")).isAccepted()); Message::UP msg = data._dstHandler.getMessage(GET_MESSAGE_TIMEOUT); @@ -244,16 +221,16 @@ Test::testDisableRetry(TestData &data) printf("%s", reply->getTrace().toString().c_str()); } -void -Test::testRetryDelay(TestData &data) +TEST_F(ResenderTest, test_retry_delay) { + auto& data = *_data; data._retryPolicy->setEnabled(true); data._retryPolicy->setBaseDelay(0.01); EXPECT_TRUE(data._srcSession->send(createMessage("msg"), Route::parse("dst/session")).isAccepted()); Message::UP msg = data._dstHandler.getMessage(GET_MESSAGE_TIMEOUT); ASSERT_TRUE(msg); for (uint32_t i = 0; i < 5; ++i) { - EXPECT_EQUAL(i, msg->getRetry()); + EXPECT_EQ(i, msg->getRetry()); replyFromDestination(data, std::move(msg), ErrorCode::APP_TRANSIENT_ERROR, -1); msg = data._dstHandler.getMessage(GET_MESSAGE_TIMEOUT); ASSERT_TRUE(msg); @@ -273,16 +250,16 @@ Test::testRetryDelay(TestData &data) EXPECT_TRUE(trace.find("retry 5 in 0.160") != string::npos); } -void -Test::testRequestRetryDelay(TestData &data) +TEST_F(ResenderTest, test_request_retry_delay) { + auto& data = *_data; data._retryPolicy->setEnabled(true); data._retryPolicy->setBaseDelay(1); EXPECT_TRUE(data._srcSession->send(createMessage("msg"), Route::parse("dst/session")).isAccepted()); Message::UP msg = data._dstHandler.getMessage(GET_MESSAGE_TIMEOUT); ASSERT_TRUE(msg); for (uint32_t i = 0; i < 5; ++i) { - EXPECT_EQUAL(i, msg->getRetry()); + EXPECT_EQ(i, msg->getRetry()); replyFromDestination(data, std::move(msg), ErrorCode::APP_TRANSIENT_ERROR, i / 50.0); msg = data._dstHandler.getMessage(GET_MESSAGE_TIMEOUT); ASSERT_TRUE(msg); @@ -302,3 +279,4 @@ Test::testRequestRetryDelay(TestData &data) EXPECT_TRUE(trace.find("retry 5 in 0.080") != string::npos); } +GTEST_MAIN_RUN_ALL_TESTS() -- cgit v1.2.3