1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0
#ifndef ENABLE_METRICS_PREVIEW
# include "opentelemetry/sdk/metrics/state/attributes_hashmap.h"
# include <gtest/gtest.h>
# include "opentelemetry/sdk/metrics/aggregation/drop_aggregation.h"
# include "opentelemetry/sdk/metrics/instruments.h"
# include <functional>
using namespace opentelemetry::sdk::metrics;
namespace nostd = opentelemetry::nostd;
TEST(AttributesHashMap, BasicTests)
{
// Empty map
AttributesHashMap hash_map;
EXPECT_EQ(hash_map.Size(), 0);
MetricAttributes m1 = {{"k1", "v1"}};
EXPECT_EQ(hash_map.Get(m1), nullptr);
EXPECT_EQ(hash_map.Has(m1), false);
// Set
std::unique_ptr<Aggregation> aggregation1(
new DropAggregation()); // = std::unique_ptr<Aggregation>(new DropAggregation);
hash_map.Set(m1, std::move(aggregation1));
EXPECT_NO_THROW(hash_map.Get(m1)->Aggregate(1l));
EXPECT_EQ(hash_map.Size(), 1);
EXPECT_EQ(hash_map.Has(m1), true);
// Set same key again
auto aggregation2 = std::unique_ptr<Aggregation>(new DropAggregation());
hash_map.Set(m1, std::move(aggregation2));
EXPECT_NO_THROW(hash_map.Get(m1)->Aggregate(1l));
EXPECT_EQ(hash_map.Size(), 1);
EXPECT_EQ(hash_map.Has(m1), true);
// Set more enteria
auto aggregation3 = std::unique_ptr<Aggregation>(new DropAggregation());
MetricAttributes m3 = {{"k1", "v1"}, {"k2", "v2"}};
hash_map.Set(m3, std::move(aggregation3));
EXPECT_EQ(hash_map.Has(m1), true);
EXPECT_EQ(hash_map.Has(m3), true);
EXPECT_NO_THROW(hash_map.Get(m3)->Aggregate(1l));
EXPECT_EQ(hash_map.Size(), 2);
// GetOrSetDefault
std::function<std::unique_ptr<Aggregation>()> create_default_aggregation =
[]() -> std::unique_ptr<Aggregation> {
return std::unique_ptr<Aggregation>(new DropAggregation);
};
MetricAttributes m4 = {{"k1", "v1"}, {"k2", "v2"}, {"k3", "v3"}};
EXPECT_NO_THROW(hash_map.GetOrSetDefault(m4, create_default_aggregation)->Aggregate(1l));
EXPECT_EQ(hash_map.Size(), 3);
// Set attributes with different order - shouldn't create a new entry.
MetricAttributes m5 = {{"k2", "v2"}, {"k1", "v1"}};
EXPECT_EQ(hash_map.Has(m5), true);
// GetAllEnteries
size_t count = 0;
hash_map.GetAllEnteries([&count](const MetricAttributes &attributes, Aggregation &aggregation) {
count++;
return true;
});
EXPECT_EQ(count, hash_map.Size());
}
#endif
|