2 Copyright (c) 2018-2019 Nokia.
4 Licensed under the Apache License, Version 2.0 (the "License");
5 you may not use this file except in compliance with the License.
6 You may obtain a copy of the License at
8 http://www.apache.org/licenses/LICENSE-2.0
10 Unless required by applicable law or agreed to in writing, software
11 distributed under the License is distributed on an "AS IS" BASIS,
12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 See the License for the specific language governing permissions and
14 limitations under the License.
18 * This source code is part of the near-RT RIC (RAN Intelligent Controller)
19 * platform project (RICP).
22 #include <gtest/gtest.h>
23 #include "private/redis/contentsbuilder.hpp"
24 #include "private/redis/contents.hpp"
26 using namespace shareddatalayer;
27 using namespace shareddatalayer::redis;
28 using namespace testing;
32 class ContentsBuilderTest: public testing::Test
35 std::unique_ptr<ContentsBuilder> contentsBuilder;
36 AsyncConnection::Namespace ns;
41 AsyncConnection::Key key;
42 AsyncConnection::Key key2;
43 AsyncConnection::Data data;
44 AsyncConnection::Data data2;
45 AsyncConnection::Keys keys;
46 AsyncConnection::DataMap dataMap;
48 ContentsBuilderTest():
59 dataMap({{key,data},{key2,data2}})
61 contentsBuilder.reset(new ContentsBuilder(nsKeySeparator));
64 void expectStringInContents(Contents& contents, std::string& string, int pos)
66 EXPECT_EQ(string, contents.stack[pos]);
67 EXPECT_EQ(string.size(), contents.sizes[pos]);
70 void expectDataMapInContents(Contents& contents, int pos)
72 expectKeyInContents(contents, key, pos);
73 expectDataInContents(contents, data, pos+1);
74 expectKeyInContents(contents, key2, pos+2);
75 expectDataInContents(contents, data2, pos+3);
78 void expectKeyInContents(Contents& contents, AsyncConnection::Key& key, int pos)
80 AsyncConnection::Key keyWithPrefix('{' + ns + '}' + nsKeySeparator + key);
81 EXPECT_EQ(keyWithPrefix, contents.stack[pos]);
82 EXPECT_EQ(keyWithPrefix.size(), contents.sizes[pos]);
85 void expectDataInContents(Contents& contents, AsyncConnection::Data& data, int pos)
87 EXPECT_EQ(data.size(), contents.sizes[pos]);
88 std::string dataAsString(data.begin(), data.end());
89 EXPECT_EQ(dataAsString, contents.stack[pos]);
92 void expectMessageInContents(Contents& contents, int pos)
94 EXPECT_EQ(string2, contents.stack[pos]);
95 EXPECT_EQ(string2.size(), contents.sizes[pos]);
98 void expectKeysInContents(Contents& contents, int pos)
100 expectKeyInContents(contents, key, pos);
101 expectKeyInContents(contents, key2, pos+1);
106 TEST_F(ContentsBuilderTest, BuildWithString)
108 auto contents(contentsBuilder->build(string));
109 EXPECT_EQ(size_t(1), contents.stack.size());
110 EXPECT_EQ(size_t(1), contents.sizes.size());
111 expectStringInContents(contents, string, 0);
114 TEST_F(ContentsBuilderTest, BuildWithStringAndString2)
116 auto contents(contentsBuilder->build(string, string2));
117 EXPECT_EQ(size_t(2), contents.stack.size());
118 EXPECT_EQ(size_t(2), contents.sizes.size());
119 expectStringInContents(contents, string, 0);
120 expectStringInContents(contents, string2, 1);
123 TEST_F(ContentsBuilderTest, BuildWithStringString2AndString3)
125 auto contents(contentsBuilder->build(string, string2, string3));
126 EXPECT_EQ(size_t(3), contents.stack.size());
127 EXPECT_EQ(size_t(3), contents.sizes.size());
128 expectStringInContents(contents, string, 0);
129 expectStringInContents(contents, string2, 1);
130 expectStringInContents(contents, string3, 2);
133 TEST_F(ContentsBuilderTest, BuildWithStringAndDataMap)
135 auto contents(contentsBuilder->build(string, ns, dataMap));
136 EXPECT_EQ(size_t(5), contents.stack.size());
137 EXPECT_EQ(size_t(5), contents.sizes.size());
138 expectStringInContents(contents, string, 0);
139 expectDataMapInContents(contents, 1);
142 TEST_F(ContentsBuilderTest, BuildWithStringDataMapAndTwoStrings)
144 auto contents(contentsBuilder->build(string, ns, dataMap, string2, string3));
145 EXPECT_EQ(size_t(7), contents.stack.size());
146 EXPECT_EQ(size_t(7), contents.sizes.size());
147 expectStringInContents(contents, string, 0);
148 expectDataMapInContents(contents, 1);
149 expectStringInContents(contents, string2, 5);
150 expectStringInContents(contents, string3, 6);
153 TEST_F(ContentsBuilderTest, BuildWithStringKeyAndData)
155 auto contents(contentsBuilder->build(string, ns, key, data));
156 EXPECT_EQ(size_t(3), contents.stack.size());
157 EXPECT_EQ(size_t(3), contents.sizes.size());
158 expectStringInContents(contents, string, 0);
159 expectKeyInContents(contents, key, 1);
160 expectDataInContents(contents, data, 2);
163 TEST_F(ContentsBuilderTest, BuildWithStringKeyDataAndTwoStrings)
165 auto contents(contentsBuilder->build(string, ns, key, data, string2, string3));
166 EXPECT_EQ(size_t(5), contents.stack.size());
167 EXPECT_EQ(size_t(5), contents.sizes.size());
168 expectStringInContents(contents, string, 0);
169 expectKeyInContents(contents, key, 1);
170 expectDataInContents(contents, data, 2);
171 expectStringInContents(contents, string2, 3);
172 expectStringInContents(contents, string3, 4);
175 TEST_F(ContentsBuilderTest, BuildWithStringKeyAndTwoDatas)
177 auto contents(contentsBuilder->build(string, ns, key, data, data2));
178 EXPECT_EQ(size_t(4), contents.stack.size());
179 EXPECT_EQ(size_t(4), contents.sizes.size());
180 expectStringInContents(contents, string, 0);
181 expectKeyInContents(contents, key, 1);
182 expectDataInContents(contents, data, 2);
183 expectDataInContents(contents, data2, 3);
186 TEST_F(ContentsBuilderTest, BuildWithStringKeyTwoDatasAndTwoStrings)
188 auto contents(contentsBuilder->build(string, ns, key, data, data2, string2, string3));
189 EXPECT_EQ(size_t(6), contents.stack.size());
190 EXPECT_EQ(size_t(6), contents.sizes.size());
191 expectStringInContents(contents, string, 0);
192 expectKeyInContents(contents, key, 1);
193 expectDataInContents(contents, data, 2);
194 expectDataInContents(contents, data2, 3);
195 expectStringInContents(contents, string2, 4);
196 expectStringInContents(contents, string3, 5);
199 TEST_F(ContentsBuilderTest, BuildWithStringAndKeys)
201 auto contents(contentsBuilder->build(string, ns, keys));
202 EXPECT_EQ(size_t(3), contents.stack.size());
203 EXPECT_EQ(size_t(3), contents.sizes.size());
204 expectStringInContents(contents, string, 0);
205 expectKeysInContents(contents, 1);
208 TEST_F(ContentsBuilderTest, BuildWithStringKeysAndTwoStrings)
210 auto contents(contentsBuilder->build(string, ns, keys, string2, string3));
211 EXPECT_EQ(size_t(5), contents.stack.size());
212 EXPECT_EQ(size_t(5), contents.sizes.size());
213 expectStringInContents(contents, string, 0);
214 expectKeysInContents(contents, 1);
215 expectStringInContents(contents, string2, 3);
216 expectStringInContents(contents, string3, 4);