diff options
author | Tor Brede Vekterli <vekterli@verizonmedia.com> | 2020-09-10 15:16:42 +0000 |
---|---|---|
committer | Tor Brede Vekterli <vekterli@verizonmedia.com> | 2020-09-14 13:22:15 +0000 |
commit | 06a0f822bc6f90e64e6d8510e1b3f5ef3cc037ab (patch) | |
tree | 56aaac5105874d8b1dcf3d2f7b765866f7163ff2 /storage/src/tests/storageserver/rpc/message_codec_provider_test.cpp | |
parent | d4cc122432a835a18588c053d3f3f2043b92b831 (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.cpp | 46 |
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()); +} + +} |