diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2017-09-20 13:23:12 +0200 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2017-09-20 13:23:12 +0200 |
commit | 9e290c2d9fa4c539fcbb268d6e4084bf42250fa5 (patch) | |
tree | 07ab6782b17e759b4845d8de5c4761171c4d44d1 /messagebus | |
parent | 6708c5f296d0c80bb64ad7ba7a2e949969d35753 (diff) |
Update and test among all version transitions that we are aware of.
Diffstat (limited to 'messagebus')
-rw-r--r-- | messagebus/src/tests/sendadapter/sendadapter.cpp | 101 | ||||
-rw-r--r-- | messagebus/src/vespa/messagebus/network/rpcnetwork.cpp | 8 | ||||
-rw-r--r-- | messagebus/src/vespa/messagebus/network/rpcnetwork.h | 18 |
3 files changed, 51 insertions, 76 deletions
diff --git a/messagebus/src/tests/sendadapter/sendadapter.cpp b/messagebus/src/tests/sendadapter/sendadapter.cpp index e3fa3278300..1daf84a6ce8 100644 --- a/messagebus/src/tests/sendadapter/sendadapter.cpp +++ b/messagebus/src/tests/sendadapter/sendadapter.cpp @@ -1,11 +1,12 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. #include <vespa/messagebus/testlib/receptor.h> -#include <vespa/messagebus/testlib/simplemessage.h> #include <vespa/messagebus/testlib/simpleprotocol.h> #include <vespa/messagebus/testlib/simplereply.h> #include <vespa/messagebus/testlib/slobrok.h> #include <vespa/messagebus/testlib/testserver.h> +#include <vespa/messagebus/network/rpcsendv1.h> +#include <vespa/messagebus/network/rpcsendv2.h> #include <vespa/vespalib/testkit/testapp.h> #include <vespa/log/log.h> @@ -58,21 +59,7 @@ public: bool start(); }; -class Test : public vespalib::TestApp { -private: - static const int TIMEOUT_SECS = 60; - - bool testVersionedSend(TestData &data, - const vespalib::Version &srcVersion, - const vespalib::Version &itrVersion, - const vespalib::Version &dstVersion); - void testSendAdapters(TestData &data); - -public: - int Main() override; -}; - -TEST_APPHOOK(Test); +static const int TIMEOUT_SECS = 6; TestData::TestData() : _slobrok(), @@ -116,55 +103,8 @@ TestData::start() return true; } -int -Test::Main() -{ - TEST_INIT("sendadapter_test"); - - TestData data; - ASSERT_TRUE(data.start()); - - testSendAdapters(data); TEST_FLUSH(); - - TEST_DONE(); -} - -//////////////////////////////////////////////////////////////////////////////// -// -// Tests -// -//////////////////////////////////////////////////////////////////////////////// - -void -Test::testSendAdapters(TestData &data) -{ - std::vector<vespalib::Version> versions; - versions.push_back(vespalib::Version(5, 0)); - versions.push_back(vespalib::Version(5, 1)); - - for (std::vector<vespalib::Version>::const_iterator srcVersion = versions.begin(); - srcVersion != versions.end(); ++srcVersion) - { - for (std::vector<vespalib::Version>::const_iterator itrVersion = versions.begin(); - itrVersion != versions.end(); ++itrVersion) - { - for (std::vector<vespalib::Version>::const_iterator dstVersion = versions.begin(); - dstVersion != versions.end(); ++dstVersion) - { - EXPECT_TRUE(testVersionedSend(data, *srcVersion, *itrVersion, *dstVersion)); - } - } - } -} - -//////////////////////////////////////////////////////////////////////////////// -// -// Utilities -// -//////////////////////////////////////////////////////////////////////////////// - bool -Test::testVersionedSend(TestData &data, +testVersionedSend(TestData &data, const vespalib::Version &srcVersion, const vespalib::Version &itrVersion, const vespalib::Version &dstVersion) @@ -250,3 +190,36 @@ Test::testVersionedSend(TestData &data, } return true; } + + +void +testSendAdapters(TestData &data, const std::vector<vespalib::Version> & versions) +{ + for (vespalib::Version src : versions) { + for (vespalib::Version intermediate : versions) { + for (vespalib::Version dst : versions) { + EXPECT_TRUE(testVersionedSend(data, src, intermediate, dst)); + } + } + } +} + +TEST("test that all known versions are present") { + TestData data; + ASSERT_TRUE(data.start()); + EXPECT_TRUE(data._srcServer.net.getSendAdapter(vespalib::Version(5, 0)) != nullptr); + EXPECT_TRUE(dynamic_cast<mbus::RPCSendV1 *>(data._srcServer.net.getSendAdapter(vespalib::Version(5, 0))) != nullptr); + EXPECT_TRUE(data._srcServer.net.getSendAdapter(vespalib::Version(6, 147)) != nullptr); + EXPECT_TRUE(dynamic_cast<mbus::RPCSendV1 *>(data._srcServer.net.getSendAdapter(vespalib::Version(6, 147))) != nullptr); + EXPECT_TRUE(data._srcServer.net.getSendAdapter(vespalib::Version(6, 148)) != nullptr); + EXPECT_TRUE(dynamic_cast<mbus::RPCSendV2 *>(data._srcServer.net.getSendAdapter(vespalib::Version(6, 148))) != nullptr); + +} + +TEST("test that ee can send between multiple versions") { + TestData data; + ASSERT_TRUE(data.start()); + TEST_DO(testSendAdapters(data, {vespalib::Version(5, 0), vespalib::Version(6, 147), vespalib::Version(6, 148)})); +} + +TEST_MAIN() { TEST_RUN_ALL(); } diff --git a/messagebus/src/vespa/messagebus/network/rpcnetwork.cpp b/messagebus/src/vespa/messagebus/network/rpcnetwork.cpp index 4b4b23a75db..ad34ab2caff 100644 --- a/messagebus/src/vespa/messagebus/network/rpcnetwork.cpp +++ b/messagebus/src/vespa/messagebus/network/rpcnetwork.cpp @@ -181,7 +181,7 @@ RPCNetwork::attach(INetworkOwner &owner) _sendV1->attach(*this); _sendV2->attach(*this); _sendAdapters[vespalib::Version(5)] = _sendV1.get(); - _sendAdapters[vespalib::Version(6, 142)] = _sendV2.get(); + _sendAdapters[vespalib::Version(6, 148)] = _sendV2.get(); FRT_ReflectionBuilder builder(_orb.get()); builder.DefineMethod("mbus.getVersion", "", "s", true, FRT_METHOD(RPCNetwork::invoke), this); @@ -204,8 +204,10 @@ RPCNetwork::getConnectionSpec() const RPCSendAdapter * RPCNetwork::getSendAdapter(const vespalib::Version &version) { - auto lower = _sendAdapters.lower_bound(version); - return (lower != _sendAdapters.end()) ? lower->second : nullptr; + if (version < _sendAdapters.begin()->first) { + return nullptr; + } + return (--_sendAdapters.upper_bound(version))->second; } bool diff --git a/messagebus/src/vespa/messagebus/network/rpcnetwork.h b/messagebus/src/vespa/messagebus/network/rpcnetwork.h index 0cda6ffecb7..5e762f1a2a9 100644 --- a/messagebus/src/vespa/messagebus/network/rpcnetwork.h +++ b/messagebus/src/vespa/messagebus/network/rpcnetwork.h @@ -93,15 +93,6 @@ private: Error resolveServiceAddress(RoutingNode &recipient, const string &serviceName); /** - * Determines and returns the send adapter that is compatible with the given - * version. If no adapter can be found, this method returns null. - * - * @param version The version for which to return an adapter. - * @return The compatible adapter. - */ - RPCSendAdapter *getSendAdapter(const vespalib::Version &version); - - /** * This method is a callback invoked after {@link #send(Message, List)} once * the version of all recipients have been resolved. If all versions were * resolved ahead of time, this method is invoked by the same thread as the @@ -220,6 +211,15 @@ public: */ void replyError(const SendContext &ctx, uint32_t errCode, const string &errMsg); + /** + * Determines and returns the send adapter that is compatible with the given + * version. If no adapter can be found, this method returns null. + * + * @param version The version for which to return an adapter. + * @return The compatible adapter. + */ + RPCSendAdapter *getSendAdapter(const vespalib::Version &version); + void attach(INetworkOwner &owner) override; const string getConnectionSpec() const override; bool start() override; |