aboutsummaryrefslogtreecommitdiffstats
path: root/storage/src/tests/storageserver/rpc/message_codec_provider_test.cpp
diff options
context:
space:
mode:
authorTor Brede Vekterli <vekterli@verizonmedia.com>2020-09-10 15:16:42 +0000
committerTor Brede Vekterli <vekterli@verizonmedia.com>2020-09-14 13:22:15 +0000
commit06a0f822bc6f90e64e6d8510e1b3f5ef3cc037ab (patch)
tree56aaac5105874d8b1dcf3d2f7b765866f7163ff2 /storage/src/tests/storageserver/rpc/message_codec_provider_test.cpp
parentd4cc122432a835a18588c053d3f3f2043b92b831 (diff)
Add thread-safe encapsulation of protocol codec and live dependency updates
Diffstat (limited to 'storage/src/tests/storageserver/rpc/message_codec_provider_test.cpp')
-rw-r--r--storage/src/tests/storageserver/rpc/message_codec_provider_test.cpp46
1 files changed, 46 insertions, 0 deletions
diff --git a/storage/src/tests/storageserver/rpc/message_codec_provider_test.cpp b/storage/src/tests/storageserver/rpc/message_codec_provider_test.cpp
new file mode 100644
index 00000000000..0d4e3b8df93
--- /dev/null
+++ b/storage/src/tests/storageserver/rpc/message_codec_provider_test.cpp
@@ -0,0 +1,46 @@
+// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+#include <vespa/storage/storageserver/rpc/message_codec_provider.h>
+#include <vespa/storageapi/mbusprot/protocolserialization7.h>
+#include <vespa/document/base/testdocman.h>
+#include <vespa/documentapi/loadtypes/loadtypeset.h>
+#include <vespa/vespalib/gtest/gtest.h>
+
+using namespace ::testing;
+
+namespace storage::rpc {
+
+struct MessageCodecProviderTest : Test {
+ std::shared_ptr<const document::DocumentTypeRepo> _repo1;
+ std::shared_ptr<const document::DocumentTypeRepo> _repo2;
+ std::shared_ptr<const documentapi::LoadTypeSet> _load_types1;
+ std::shared_ptr<const documentapi::LoadTypeSet> _load_types2;
+ MessageCodecProvider _provider;
+
+ // We don't care about repo/set contents, just their pointer identities
+ MessageCodecProviderTest()
+ : _repo1(document::TestDocRepo().getTypeRepoSp()),
+ _repo2(document::TestDocRepo().getTypeRepoSp()),
+ _load_types1(std::make_shared<documentapi::LoadTypeSet>()),
+ _load_types2(std::make_shared<documentapi::LoadTypeSet>()),
+ _provider(_repo1, _load_types1)
+ {}
+ ~MessageCodecProviderTest() override;
+};
+
+MessageCodecProviderTest::~MessageCodecProviderTest() = default;
+
+TEST_F(MessageCodecProviderTest, initially_provides_constructed_repos) {
+ auto wrapped = _provider.wrapped_codec();
+ EXPECT_EQ(&wrapped->codec().type_repo(), _repo1.get());
+ EXPECT_EQ(&wrapped->codec().load_type_set(), _load_types1.get());
+}
+
+TEST_F(MessageCodecProviderTest, updated_repos_reflected_in_new_wrapped_codec) {
+ _provider.update_atomically(_repo2, _load_types2);
+
+ auto wrapped = _provider.wrapped_codec();
+ EXPECT_EQ(&wrapped->codec().type_repo(), _repo2.get());
+ EXPECT_EQ(&wrapped->codec().load_type_set(), _load_types2.get());
+}
+
+}