diff options
Diffstat (limited to 'messagebus/src/tests')
-rw-r--r-- | messagebus/src/tests/configagent/CMakeLists.txt | 1 | ||||
-rw-r--r-- | messagebus/src/tests/configagent/configagent.cpp | 137 | ||||
-rw-r--r-- | messagebus/src/tests/messagebus/CMakeLists.txt | 1 | ||||
-rw-r--r-- | messagebus/src/tests/messagebus/messagebus.cpp | 112 | ||||
-rw-r--r-- | messagebus/src/tests/resender/CMakeLists.txt | 1 | ||||
-rw-r--r-- | messagebus/src/tests/resender/resender.cpp | 152 | ||||
-rw-r--r-- | messagebus/src/tests/result/CMakeLists.txt | 1 | ||||
-rw-r--r-- | messagebus/src/tests/result/result.cpp | 26 |
8 files changed, 190 insertions, 241 deletions
diff --git a/messagebus/src/tests/configagent/CMakeLists.txt b/messagebus/src/tests/configagent/CMakeLists.txt index 9cc9eacbe1c..9b07222fc74 100644 --- a/messagebus/src/tests/configagent/CMakeLists.txt +++ b/messagebus/src/tests/configagent/CMakeLists.txt @@ -5,5 +5,6 @@ vespa_add_executable(messagebus_configagent_test_app TEST DEPENDS messagebus_messagebus-test messagebus + GTest::gtest ) vespa_add_test(NAME messagebus_configagent_test_app COMMAND messagebus_configagent_test_app) diff --git a/messagebus/src/tests/configagent/configagent.cpp b/messagebus/src/tests/configagent/configagent.cpp index f93bfd6c841..e8cab1e679a 100644 --- a/messagebus/src/tests/configagent/configagent.cpp +++ b/messagebus/src/tests/configagent/configagent.cpp @@ -1,109 +1,113 @@ // Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -#include <vespa/vespalib/testkit/testapp.h> #include <vespa/messagebus/configagent.h> #include <vespa/messagebus/iconfighandler.h> #include <vespa/messagebus/routing/routingspec.h> #include <vespa/messagebus/config-messagebus.h> #include <vespa/config/print/fileconfigreader.hpp> +#include <vespa/vespalib/gtest/gtest.h> +#include <vespa/vespalib/testkit/test_path.h> using namespace mbus; using namespace messagebus; using namespace config; -class Test : public vespalib::TestApp, public IConfigHandler { -private: +class ConfigAgentTest : public testing::Test, public IConfigHandler { +protected: RoutingSpec _spec; + ConfigAgentTest(); + ~ConfigAgentTest() override; bool checkHalf(); bool checkFull(); - bool checkTables(uint32_t numTables); - -public: - ~Test() override; - int Main() override; + void checkTables(uint32_t numTables, bool& success); bool setupRouting(RoutingSpec spec) override; }; -Test::~Test() = default; +ConfigAgentTest::ConfigAgentTest() + : testing::Test(), + IConfigHandler(), + _spec() +{ +} -TEST_APPHOOK(Test); +ConfigAgentTest::~ConfigAgentTest() = default; bool -Test::setupRouting(RoutingSpec spec) +ConfigAgentTest::setupRouting(RoutingSpec spec) { _spec = std::move(spec); return true; } -bool -Test::checkTables(uint32_t numTables) +void +ConfigAgentTest::checkTables(uint32_t numTables, bool& success) { - if (!EXPECT_EQUAL(numTables, _spec.getNumTables())) return false; + ASSERT_EQ(numTables, _spec.getNumTables()); if (numTables > 0) { - if (!EXPECT_EQUAL("foo", _spec.getTable(0).getProtocol())) return false; - if (!EXPECT_EQUAL(2u, _spec.getTable(0).getNumHops())) return false; - if (!EXPECT_EQUAL("foo-h1", _spec.getTable(0).getHop(0).getName())) return false; - if (!EXPECT_EQUAL("foo-h1-sel", _spec.getTable(0).getHop(0).getSelector())) return false; - if (!EXPECT_EQUAL(2u, _spec.getTable(0).getHop(0).getNumRecipients())) return false; - if (!EXPECT_EQUAL("foo-h1-r1", _spec.getTable(0).getHop(0).getRecipient(0))) return false; - if (!EXPECT_EQUAL("foo-h1-r2", _spec.getTable(0).getHop(0).getRecipient(1))) return false; - if (!EXPECT_EQUAL(true, _spec.getTable(0).getHop(0).getIgnoreResult())) return false; - if (!EXPECT_EQUAL("foo-h2", _spec.getTable(0).getHop(1).getName())) return false; - if (!EXPECT_EQUAL("foo-h2-sel", _spec.getTable(0).getHop(1).getSelector())) return false; - if (!EXPECT_EQUAL(2u, _spec.getTable(0).getHop(1).getNumRecipients())) return false; - if (!EXPECT_EQUAL("foo-h2-r1", _spec.getTable(0).getHop(1).getRecipient(0))) return false; - if (!EXPECT_EQUAL("foo-h2-r2", _spec.getTable(0).getHop(1).getRecipient(1))) return false; - if (!EXPECT_EQUAL(2u, _spec.getTable(0).getNumRoutes())) return false; - if (!EXPECT_EQUAL("foo-r1", _spec.getTable(0).getRoute(0).getName())) return false; - if (!EXPECT_EQUAL(2u, _spec.getTable(0).getRoute(0).getNumHops())) return false; - if (!EXPECT_EQUAL("foo-h1", _spec.getTable(0).getRoute(0).getHop(0))) return false; - if (!EXPECT_EQUAL("foo-h2", _spec.getTable(0).getRoute(0).getHop(1))) return false; - if (!EXPECT_EQUAL("foo-r2", _spec.getTable(0).getRoute(1).getName())) return false; - if (!EXPECT_EQUAL(2u, _spec.getTable(0).getRoute(1).getNumHops())) return false; - if (!EXPECT_EQUAL("foo-h2", _spec.getTable(0).getRoute(1).getHop(0))) return false; - if (!EXPECT_EQUAL("foo-h1", _spec.getTable(0).getRoute(1).getHop(1))) return false; + ASSERT_EQ("foo", _spec.getTable(0).getProtocol()); + ASSERT_EQ(2u, _spec.getTable(0).getNumHops()); + ASSERT_EQ("foo-h1", _spec.getTable(0).getHop(0).getName()); + ASSERT_EQ("foo-h1-sel", _spec.getTable(0).getHop(0).getSelector()); + ASSERT_EQ(2u, _spec.getTable(0).getHop(0).getNumRecipients()); + ASSERT_EQ("foo-h1-r1", _spec.getTable(0).getHop(0).getRecipient(0)); + ASSERT_EQ("foo-h1-r2", _spec.getTable(0).getHop(0).getRecipient(1)); + ASSERT_EQ(true, _spec.getTable(0).getHop(0).getIgnoreResult()); + ASSERT_EQ("foo-h2", _spec.getTable(0).getHop(1).getName()); + ASSERT_EQ("foo-h2-sel", _spec.getTable(0).getHop(1).getSelector()); + ASSERT_EQ(2u, _spec.getTable(0).getHop(1).getNumRecipients()); + ASSERT_EQ("foo-h2-r1", _spec.getTable(0).getHop(1).getRecipient(0)); + ASSERT_EQ("foo-h2-r2", _spec.getTable(0).getHop(1).getRecipient(1)); + ASSERT_EQ(2u, _spec.getTable(0).getNumRoutes()); + ASSERT_EQ("foo-r1", _spec.getTable(0).getRoute(0).getName()); + ASSERT_EQ(2u, _spec.getTable(0).getRoute(0).getNumHops()); + ASSERT_EQ("foo-h1", _spec.getTable(0).getRoute(0).getHop(0)); + ASSERT_EQ("foo-h2", _spec.getTable(0).getRoute(0).getHop(1)); + ASSERT_EQ("foo-r2", _spec.getTable(0).getRoute(1).getName()); + ASSERT_EQ(2u, _spec.getTable(0).getRoute(1).getNumHops()); + ASSERT_EQ("foo-h2", _spec.getTable(0).getRoute(1).getHop(0)); + ASSERT_EQ("foo-h1", _spec.getTable(0).getRoute(1).getHop(1)); } if (numTables > 1) { - if (!EXPECT_EQUAL("bar", _spec.getTable(1).getProtocol())) return false; - if (!EXPECT_EQUAL(2u, _spec.getTable(1).getNumHops())) return false; - if (!EXPECT_EQUAL("bar-h1", _spec.getTable(1).getHop(0).getName())) return false; - if (!EXPECT_EQUAL("bar-h1-sel", _spec.getTable(1).getHop(0).getSelector())) return false; - if (!EXPECT_EQUAL(2u, _spec.getTable(1).getHop(0).getNumRecipients())) return false; - if (!EXPECT_EQUAL("bar-h1-r1", _spec.getTable(1).getHop(0).getRecipient(0))) return false; - if (!EXPECT_EQUAL("bar-h1-r2", _spec.getTable(1).getHop(0).getRecipient(1))) return false; - if (!EXPECT_EQUAL("bar-h2", _spec.getTable(1).getHop(1).getName())) return false; - if (!EXPECT_EQUAL("bar-h2-sel", _spec.getTable(1).getHop(1).getSelector())) return false; - if (!EXPECT_EQUAL(2u, _spec.getTable(1).getHop(1).getNumRecipients())) return false; - if (!EXPECT_EQUAL("bar-h2-r1", _spec.getTable(1).getHop(1).getRecipient(0))) return false; - if (!EXPECT_EQUAL("bar-h2-r2", _spec.getTable(1).getHop(1).getRecipient(1))) return false; - if (!EXPECT_EQUAL(2u, _spec.getTable(1).getNumRoutes())) return false; - if (!EXPECT_EQUAL("bar-r1", _spec.getTable(1).getRoute(0).getName())) return false; - if (!EXPECT_EQUAL(2u, _spec.getTable(1).getRoute(0).getNumHops())) return false; - if (!EXPECT_EQUAL("bar-h1", _spec.getTable(1).getRoute(0).getHop(0))) return false; - if (!EXPECT_EQUAL("bar-h2", _spec.getTable(1).getRoute(0).getHop(1))) return false; - if (!EXPECT_EQUAL("bar-r2", _spec.getTable(1).getRoute(1).getName())) return false; - if (!EXPECT_EQUAL(2u, _spec.getTable(1).getRoute(1).getNumHops())) return false; - if (!EXPECT_EQUAL("bar-h2", _spec.getTable(1).getRoute(1).getHop(0))) return false; - if (!EXPECT_EQUAL("bar-h1", _spec.getTable(1).getRoute(1).getHop(1))) return false; + ASSERT_EQ("bar", _spec.getTable(1).getProtocol()); + ASSERT_EQ(2u, _spec.getTable(1).getNumHops()); + ASSERT_EQ("bar-h1", _spec.getTable(1).getHop(0).getName()); + ASSERT_EQ("bar-h1-sel", _spec.getTable(1).getHop(0).getSelector()); + ASSERT_EQ(2u, _spec.getTable(1).getHop(0).getNumRecipients()); + ASSERT_EQ("bar-h1-r1", _spec.getTable(1).getHop(0).getRecipient(0)); + ASSERT_EQ("bar-h1-r2", _spec.getTable(1).getHop(0).getRecipient(1)); + ASSERT_EQ("bar-h2", _spec.getTable(1).getHop(1).getName()); + ASSERT_EQ("bar-h2-sel", _spec.getTable(1).getHop(1).getSelector()); + ASSERT_EQ(2u, _spec.getTable(1).getHop(1).getNumRecipients()); + ASSERT_EQ("bar-h2-r1", _spec.getTable(1).getHop(1).getRecipient(0)); + ASSERT_EQ("bar-h2-r2", _spec.getTable(1).getHop(1).getRecipient(1)); + ASSERT_EQ(2u, _spec.getTable(1).getNumRoutes()); + ASSERT_EQ("bar-r1", _spec.getTable(1).getRoute(0).getName()); + ASSERT_EQ(2u, _spec.getTable(1).getRoute(0).getNumHops()); + ASSERT_EQ("bar-h1", _spec.getTable(1).getRoute(0).getHop(0)); + ASSERT_EQ("bar-h2", _spec.getTable(1).getRoute(0).getHop(1)); + ASSERT_EQ("bar-r2", _spec.getTable(1).getRoute(1).getName()); + ASSERT_EQ(2u, _spec.getTable(1).getRoute(1).getNumHops()); + ASSERT_EQ("bar-h2", _spec.getTable(1).getRoute(1).getHop(0)); + ASSERT_EQ("bar-h1", _spec.getTable(1).getRoute(1).getHop(1)); } - return true; + success = true; } bool -Test::checkHalf() +ConfigAgentTest::checkHalf() { - return _spec.getNumTables() == 1 && EXPECT_TRUE(checkTables(1)); + bool success = false; + return _spec.getNumTables() == 1 && (checkTables(1, success), success); } bool -Test::checkFull() +ConfigAgentTest::checkFull() { - return _spec.getNumTables() == 2 && EXPECT_TRUE(checkTables(2)); + bool success = false; + return _spec.getNumTables() == 2 && (checkTables(2, success), success); } -int -Test::Main() +TEST_F(ConfigAgentTest, test_config_agent) { - TEST_INIT("configagent_test"); EXPECT_TRUE(!checkHalf()); EXPECT_TRUE(!checkFull()); ConfigAgent agent(*this); @@ -118,5 +122,6 @@ Test::Main() agent.configure(FileConfigReader<MessagebusConfig>(TEST_PATH("full.cfg")).read()); EXPECT_TRUE(checkFull()); EXPECT_TRUE(!checkHalf()); - TEST_DONE(); } + +GTEST_MAIN_RUN_ALL_TESTS() diff --git a/messagebus/src/tests/messagebus/CMakeLists.txt b/messagebus/src/tests/messagebus/CMakeLists.txt index 3f79e2ed851..f05141ca28f 100644 --- a/messagebus/src/tests/messagebus/CMakeLists.txt +++ b/messagebus/src/tests/messagebus/CMakeLists.txt @@ -5,5 +5,6 @@ vespa_add_executable(messagebus_messagebus_test_app TEST DEPENDS messagebus_messagebus-test messagebus + GTest::gtest ) vespa_add_test(NAME messagebus_messagebus_test_app COMMAND messagebus_messagebus_test_app) diff --git a/messagebus/src/tests/messagebus/messagebus.cpp b/messagebus/src/tests/messagebus/messagebus.cpp index 5c1bdc54f00..e4d90a3c198 100644 --- a/messagebus/src/tests/messagebus/messagebus.cpp +++ b/messagebus/src/tests/messagebus/messagebus.cpp @@ -11,8 +11,8 @@ #include <vespa/messagebus/testlib/simpleprotocol.h> #include <vespa/messagebus/testlib/slobrok.h> #include <vespa/messagebus/testlib/testserver.h> -#include <vespa/vespalib/testkit/testapp.h> #include <vespa/vespalib/util/stringfmt.h> +#include <vespa/vespalib/gtest/gtest.h> #include <thread> using namespace mbus; @@ -98,8 +98,8 @@ struct Search : public Server { //----------------------------------------------------------------------------- -class Test : public vespalib::TestApp { -private: +class MessageBusTest : public testing::Test { +protected: Slobrok::UP slobrok; Client::UP client; DocProc::UP dp0; @@ -112,44 +112,21 @@ private: std::vector<DocProc*> dpVec; std::vector<Search*> searchVec; -public: - Test(); - ~Test(); - int Main() override; - void testSendToCol(); - void testDirectHop(); - void testDirectRoute(); - void testRoutingPolicyCache(); - -private: - void setup(); - void teardown(); + MessageBusTest(); + ~MessageBusTest(); + void SetUp() override; + void TearDown() override; void assertSrc(Client& src); void assertItr(DocProc& itr); void assertDst(Search& dst); }; -TEST_APPHOOK(Test); - -Test::Test() = default; -Test::~Test() = default; - -int -Test::Main() -{ - TEST_INIT("messagebus_test"); - - testSendToCol(); TEST_FLUSH(); - testDirectHop(); TEST_FLUSH(); - testDirectRoute(); TEST_FLUSH(); - testRoutingPolicyCache(); TEST_FLUSH(); - - TEST_DONE(); -} +MessageBusTest::MessageBusTest() = default; +MessageBusTest::~MessageBusTest() = default; void -Test::setup() +MessageBusTest::SetUp() { slobrok.reset(new Slobrok()); client.reset(new Client(*slobrok)); @@ -188,7 +165,8 @@ Test::setup() ASSERT_TRUE(dp2->server.waitSlobrok("search/r.1/c.1/session")); } -void Test::teardown() +void +MessageBusTest::TearDown() { dpVec.clear(); searchVec.clear(); @@ -203,10 +181,8 @@ void Test::teardown() slobrok.reset(); } -void -Test::testSendToCol() +TEST_F(MessageBusTest, test_send_to_col) { - setup(); ASSERT_TRUE(SimpleMessage("msg").getHash() % 2 == 0); for (uint32_t i = 0; i < 150; ++i) { Message::UP msg(new SimpleMessage("msg")); @@ -244,13 +220,10 @@ Test::testSendToCol() ASSERT_TRUE(reply->isReply()); EXPECT_TRUE(static_cast<Reply&>(*reply).getNumErrors() == 0); } - teardown(); } -void -Test::testDirectHop() +TEST_F(MessageBusTest, test_direct_hop) { - setup(); for (int row = 0; row < 2; row++) { for (int col = 0; col < 2; col++) { Search* dst = searchVec[row * 2 + col]; @@ -260,25 +233,22 @@ Test::testDirectHop() Message::UP(new SimpleMessage("empty")), Route().addHop(vespalib::make_string("search/r.%d/c.%d/session", row, col))) .isAccepted()); - assertDst(*dst); - assertSrc(*client); + ASSERT_NO_FATAL_FAILURE(assertDst(*dst)); + ASSERT_NO_FATAL_FAILURE(assertSrc(*client)); // Send using address. ASSERT_TRUE(client->session->send( Message::UP(new SimpleMessage("empty")), Route().addHop(Hop(dst->session->getConnectionSpec().c_str()))) .isAccepted()); - assertDst(*dst); - assertSrc(*client); + ASSERT_NO_FATAL_FAILURE(assertDst(*dst)); + ASSERT_NO_FATAL_FAILURE(assertSrc(*client)); } } - teardown(); } -void -Test::testDirectRoute() +TEST_F(MessageBusTest, test_direct_route) { - setup(); ASSERT_TRUE(client->session->send( Message::UP(new SimpleMessage("empty")), Route() @@ -290,26 +260,24 @@ Test::testDirectRoute() .addHop(Hop(dp2->session->getConnectionSpec())) .addHop(Hop("search/r.0/c.0/session"))) .isAccepted()); - assertItr(*dp0); - assertItr(*dp0); - assertItr(*dp1); - assertItr(*dp1); - assertItr(*dp2); - assertItr(*dp2); - assertDst(*search00); - assertItr(*dp2); - assertItr(*dp2); - assertItr(*dp1); - assertItr(*dp1); - assertItr(*dp0); - assertItr(*dp0); - assertSrc(*client); - - teardown(); + ASSERT_NO_FATAL_FAILURE(assertItr(*dp0)); + ASSERT_NO_FATAL_FAILURE(assertItr(*dp0)); + ASSERT_NO_FATAL_FAILURE(assertItr(*dp1)); + ASSERT_NO_FATAL_FAILURE(assertItr(*dp1)); + ASSERT_NO_FATAL_FAILURE(assertItr(*dp2)); + ASSERT_NO_FATAL_FAILURE(assertItr(*dp2)); + ASSERT_NO_FATAL_FAILURE(assertDst(*search00)); + ASSERT_NO_FATAL_FAILURE(assertItr(*dp2)); + ASSERT_NO_FATAL_FAILURE(assertItr(*dp2)); + ASSERT_NO_FATAL_FAILURE(assertItr(*dp1)); + ASSERT_NO_FATAL_FAILURE(assertItr(*dp1)); + ASSERT_NO_FATAL_FAILURE(assertItr(*dp0)); + ASSERT_NO_FATAL_FAILURE(assertItr(*dp0)); + ASSERT_NO_FATAL_FAILURE(assertSrc(*client)); } void -Test::assertDst(Search& dst) +MessageBusTest::assertDst(Search& dst) { ASSERT_TRUE(dst.waitQueueSize(1)); Routable::UP msg = dst.queue.dequeue(); @@ -318,7 +286,7 @@ Test::assertDst(Search& dst) } void -Test::assertItr(DocProc& itr) +MessageBusTest::assertItr(DocProc& itr) { ASSERT_TRUE(itr.waitQueueSize(1)); Routable::UP msg = itr.queue.dequeue(); @@ -327,17 +295,15 @@ Test::assertItr(DocProc& itr) } void -Test::assertSrc(Client& src) +MessageBusTest::assertSrc(Client& src) { ASSERT_TRUE(src.waitQueueSize(1)); Routable::UP msg = src.queue.dequeue(); ASSERT_TRUE(msg); } -void -Test::testRoutingPolicyCache() +TEST_F(MessageBusTest, test_routing_policy_cache) { - setup(); MessageBus &bus = client->server.mb; IRoutingPolicy::SP all = bus.getRoutingPolicy(SimpleProtocol::NAME, "All", ""); @@ -354,6 +320,6 @@ Test::testRoutingPolicyCache() IRoutingPolicy::SP refArg = bus.getRoutingPolicy(SimpleProtocol::NAME, "All", "Arg"); ASSERT_TRUE(refArg.get() != NULL); ASSERT_TRUE(allArg.get() == refArg.get()); - - teardown(); } + +GTEST_MAIN_RUN_ALL_TESTS() 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 <vespa/messagebus/testlib/simpleprotocol.h> #include <vespa/messagebus/testlib/slobrok.h> #include <vespa/messagebus/testlib/testserver.h> -#include <vespa/vespalib/testkit/testapp.h> +#include <vespa/vespalib/gtest/gtest.h> using namespace mbus; -//////////////////////////////////////////////////////////////////////////////// -// -// Utilities -// -//////////////////////////////////////////////////////////////////////////////// - -class StringList : public std::vector<string> { -public: - StringList &add(const string &str); -}; - -StringList & -StringList::add(const string &str) -{ - std::vector<string>::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<SimpleProtocol>()), - RPCNetworkParams(_slobrok.config())), - _srcSession(), - _srcHandler(), - _dstServer(MessageBusParams().addProtocol(std::make_shared<SimpleProtocol>()), - RPCNetworkParams(_slobrok.config()).setIdentity(Identity("dst"))), - _dstSession(), - _dstHandler() +TestData::TestData() + : _slobrok(), + _retryPolicy(new RetryTransientErrorsPolicy()), + _srcServer(MessageBusParams().setRetryPolicy(_retryPolicy).addProtocol(std::make_shared<SimpleProtocol>()), + RPCNetworkParams(_slobrok.config())), + _srcSession(), + _srcHandler(), + _dstServer(MessageBusParams().addProtocol(std::make_shared<SimpleProtocol>()), + 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<Message> +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<TestData> _data; + ResenderTest(); + ~ResenderTest() override; + static void SetUpTestSuite(); + static void TearDownTestSuite(); +}; + +std::shared_ptr<TestData> ResenderTest::_data; + +ResenderTest::ResenderTest() = default; +ResenderTest::~ResenderTest() = default; + +void +ResenderTest::SetUpTestSuite() +{ + _data = std::make_shared<TestData>(); + 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() diff --git a/messagebus/src/tests/result/CMakeLists.txt b/messagebus/src/tests/result/CMakeLists.txt index 6aba63fdc41..d4360f3826b 100644 --- a/messagebus/src/tests/result/CMakeLists.txt +++ b/messagebus/src/tests/result/CMakeLists.txt @@ -5,5 +5,6 @@ vespa_add_executable(messagebus_result_test_app TEST DEPENDS messagebus_messagebus-test messagebus + GTest::gtest ) vespa_add_test(NAME messagebus_result_test_app COMMAND messagebus_result_test_app) diff --git a/messagebus/src/tests/result/result.cpp b/messagebus/src/tests/result/result.cpp index 4140e26db95..ce6e19b7dcb 100644 --- a/messagebus/src/tests/result/result.cpp +++ b/messagebus/src/tests/result/result.cpp @@ -1,13 +1,15 @@ // Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -#include <vespa/vespalib/testkit/testapp.h> #include <vespa/messagebus/result.h> #include <vespa/messagebus/error.h> #include <vespa/messagebus/errorcode.h> #include <vespa/messagebus/testlib/simplemessage.h> +#include <vespa/vespalib/gtest/gtest.h> using namespace mbus; +namespace { + struct MyMessage : public SimpleMessage { static int ctorCnt; @@ -22,28 +24,23 @@ struct MyMessage : public SimpleMessage int MyMessage::ctorCnt = 0; int MyMessage::dtorCnt = 0; -struct Test : public vespalib::TestApp -{ - Result sendOk(Message::UP msg); - Result sendFail(Message::UP msg); - int Main() override; -}; - Result -Test::sendOk(Message::UP msg) { +sendOk(Message::UP msg) +{ (void) msg; return Result(); } Result -Test::sendFail(Message::UP msg) { +sendFail(Message::UP msg) +{ return Result(Error(ErrorCode::FATAL_ERROR, "error"), std::move(msg)); } -int -Test::Main() +} + +TEST(ResultTest, test_result) { - TEST_INIT("result_test"); { // test accepted Message::UP msg(new MyMessage("test")); Result res = sendOk(std::move(msg)); @@ -68,7 +65,6 @@ Test::Main() } EXPECT_TRUE(MyMessage::ctorCnt == 2); EXPECT_TRUE(MyMessage::dtorCnt == 2); - TEST_DONE(); } -TEST_APPHOOK(Test); +GTEST_MAIN_RUN_ALL_TESTS() |