]> git.proxmox.com Git - ceph.git/blame - ceph/src/jaegertracing/opentelemetry-cpp/api/test/common/kv_properties_test.cc
update ceph source to reef 18.1.2
[ceph.git] / ceph / src / jaegertracing / opentelemetry-cpp / api / test / common / kv_properties_test.cc
CommitLineData
1e59de90
TL
1
2// Copyright The OpenTelemetry Authors
3// SPDX-License-Identifier: Apache-2.0
4
5#include <gtest/gtest.h>
6#include <opentelemetry/common/kv_properties.h>
7
8#include <string>
9#include <utility>
10#include <vector>
11
12// ------------------------- Entry class tests ---------------------------------
13
14using namespace opentelemetry;
15using opentelemetry::common::KeyValueProperties;
16// Test constructor that takes a key-value pair
17TEST(EntryTest, KeyValueConstruction)
18{
19 opentelemetry::nostd::string_view key = "test_key";
20 opentelemetry::nostd::string_view val = "test_value";
21 KeyValueProperties::Entry e(key, val);
22
23 EXPECT_EQ(key.size(), e.GetKey().size());
24 EXPECT_EQ(key, e.GetKey());
25
26 EXPECT_EQ(val.size(), e.GetValue().size());
27 EXPECT_EQ(val, e.GetValue());
28}
29
30// Test copy constructor
31TEST(EntryTest, Copy)
32{
33 KeyValueProperties::Entry e("test_key", "test_value");
34 KeyValueProperties::Entry copy(e);
35 EXPECT_EQ(copy.GetKey(), e.GetKey());
36 EXPECT_EQ(copy.GetValue(), e.GetValue());
37}
38
39// Test assignment operator
40TEST(EntryTest, Assignment)
41{
42 KeyValueProperties::Entry e("test_key", "test_value");
43 KeyValueProperties::Entry empty;
44 empty = e;
45 EXPECT_EQ(empty.GetKey(), e.GetKey());
46 EXPECT_EQ(empty.GetValue(), e.GetValue());
47}
48
49TEST(EntryTest, SetValue)
50{
51 KeyValueProperties::Entry e("test_key", "test_value");
52 opentelemetry::nostd::string_view new_val = "new_value";
53 e.SetValue(new_val);
54
55 EXPECT_EQ(new_val.size(), e.GetValue().size());
56 EXPECT_EQ(new_val, e.GetValue());
57}
58
59// ------------------------- KeyValueStringTokenizer tests ---------------------------------
60
61using opentelemetry::common::KeyValueStringTokenizer;
62using opentelemetry::common::KeyValueStringTokenizerOptions;
63
64TEST(KVStringTokenizer, SinglePair)
65{
66 bool valid_kv;
67 nostd::string_view key, value;
68 opentelemetry::nostd::string_view str = "k1=v1";
69 KeyValueStringTokenizerOptions opts;
70 KeyValueStringTokenizer tk(str, opts);
71 EXPECT_TRUE(tk.next(valid_kv, key, value));
72 EXPECT_TRUE(valid_kv);
73 EXPECT_EQ(key, "k1");
74 EXPECT_EQ(value, "v1");
75 EXPECT_FALSE(tk.next(valid_kv, key, value));
76}
77
78TEST(KVStringTokenizer, AcceptEmptyEntries)
79{
80 bool valid_kv;
81 nostd::string_view key, value;
82 opentelemetry::nostd::string_view str = ":k1=v1::k2=v2: ";
83 KeyValueStringTokenizerOptions opts;
84 opts.member_separator = ':';
85 opts.ignore_empty_members = false;
86
87 KeyValueStringTokenizer tk(str, opts);
88 EXPECT_TRUE(tk.next(valid_kv, key, value)); // empty pair
89 EXPECT_TRUE(tk.next(valid_kv, key, value));
90 EXPECT_TRUE(valid_kv);
91 EXPECT_EQ(key, "k1");
92 EXPECT_EQ(value, "v1");
93 EXPECT_TRUE(tk.next(valid_kv, key, value)); // empty pair
94 EXPECT_EQ(key, "");
95 EXPECT_EQ(value, "");
96 EXPECT_TRUE(tk.next(valid_kv, key, value));
97 EXPECT_TRUE(tk.next(valid_kv, key, value)); // empty pair
98 EXPECT_FALSE(tk.next(valid_kv, key, value));
99}
100
101TEST(KVStringTokenizer, ValidPairsWithEmptyEntries)
102{
103 opentelemetry::nostd::string_view str = "k1:v1===k2:v2==";
104 bool valid_kv;
105 nostd::string_view key, value;
106 KeyValueStringTokenizerOptions opts;
107 opts.member_separator = '=';
108 opts.key_value_separator = ':';
109
110 KeyValueStringTokenizer tk(str, opts);
111 EXPECT_TRUE(tk.next(valid_kv, key, value));
112 EXPECT_TRUE(valid_kv);
113 EXPECT_EQ(key, "k1");
114 EXPECT_EQ(value, "v1");
115
116 EXPECT_TRUE(tk.next(valid_kv, key, value));
117 EXPECT_TRUE(valid_kv);
118 EXPECT_EQ(key, "k2");
119 EXPECT_EQ(value, "v2");
120
121 EXPECT_FALSE(tk.next(valid_kv, key, value));
122}
123
124TEST(KVStringTokenizer, InvalidPairs)
125{
126 opentelemetry::nostd::string_view str = "k1=v1,invalid ,, k2=v2 ,invalid";
127 KeyValueStringTokenizer tk(str);
128 bool valid_kv;
129 nostd::string_view key, value;
130 EXPECT_TRUE(tk.next(valid_kv, key, value));
131
132 EXPECT_TRUE(valid_kv);
133 EXPECT_EQ(key, "k1");
134 EXPECT_EQ(value, "v1");
135
136 EXPECT_TRUE(tk.next(valid_kv, key, value));
137 EXPECT_FALSE(valid_kv);
138
139 EXPECT_TRUE(tk.next(valid_kv, key, value));
140 EXPECT_TRUE(valid_kv);
141 EXPECT_EQ(key, "k2");
142 EXPECT_EQ(value, "v2");
143
144 EXPECT_TRUE(tk.next(valid_kv, key, value));
145 EXPECT_FALSE(valid_kv);
146
147 EXPECT_FALSE(tk.next(valid_kv, key, value));
148}
149
150TEST(KVStringTokenizer, NumTokens)
151{
152 struct
153 {
154 const char *input;
155 size_t expected;
156 } testcases[] = {{"k1=v1", 1},
157 {" ", 1},
158 {"k1=v1,k2=v2,k3=v3", 3},
159 {"k1=v1,", 1},
160 {"k1=v1,k2=v2,invalidmember", 3},
161 {"", 0}};
162 for (auto &testcase : testcases)
163 {
164 KeyValueStringTokenizer tk(testcase.input);
165 EXPECT_EQ(tk.NumTokens(), testcase.expected);
166 }
167}
168
169//------------------------- KeyValueProperties tests ---------------------------------
170
171TEST(KeyValueProperties, PopulateKVIterableContainer)
172{
173 std::vector<std::pair<std::string, std::string>> kv_pairs = {{"k1", "v1"}, {"k2", "v2"}};
174
175 auto kv_properties = KeyValueProperties(kv_pairs);
176 EXPECT_EQ(kv_properties.Size(), 2);
177
178 std::string value;
179 bool present = kv_properties.GetValue("k1", value);
180 EXPECT_TRUE(present);
181 EXPECT_EQ(value, "v1");
182
183 present = kv_properties.GetValue("k2", value);
184 EXPECT_TRUE(present);
185 EXPECT_EQ(value, "v2");
186}
187
188TEST(KeyValueProperties, AddEntry)
189{
190 auto kv_properties = KeyValueProperties(1);
191 kv_properties.AddEntry("k1", "v1");
192 std::string value;
193 bool present = kv_properties.GetValue("k1", value);
194 EXPECT_TRUE(present);
195 EXPECT_EQ(value, "v1");
196
197 kv_properties.AddEntry("k2", "v2"); // entry will not be added as max size reached.
198 EXPECT_EQ(kv_properties.Size(), 1);
199 present = kv_properties.GetValue("k2", value);
200 EXPECT_FALSE(present);
201}
202
203TEST(KeyValueProperties, GetValue)
204{
205 auto kv_properties = KeyValueProperties(1);
206 kv_properties.AddEntry("k1", "v1");
207 std::string value;
208 bool present = kv_properties.GetValue("k1", value);
209 EXPECT_TRUE(present);
210 EXPECT_EQ(value, "v1");
211
212 present = kv_properties.GetValue("k3", value);
213 EXPECT_FALSE(present);
214}
215
216TEST(KeyValueProperties, GetAllEntries)
217{
218 std::vector<std::pair<std::string, std::string>> kv_pairs = {
219 {"k1", "v1"}, {"k2", "v2"}, {"k3", "v3"}};
220 const size_t kNumPairs = 3;
221 opentelemetry::nostd::string_view keys[kNumPairs] = {"k1", "k2", "k3"};
222 opentelemetry::nostd::string_view values[kNumPairs] = {"v1", "v2", "v3"};
223 auto kv_properties = KeyValueProperties(kv_pairs);
224
225 size_t index = 0;
226 kv_properties.GetAllEntries(
227 [&keys, &values, &index](nostd::string_view key, nostd::string_view value) {
228 EXPECT_EQ(key, keys[index]);
229 EXPECT_EQ(value, values[index]);
230 index++;
231 return true;
232 });
233
234 EXPECT_EQ(index, kNumPairs);
235}