36 REQUIRE_THROWS(
states.registerState({
"dummy_metric", DummyMetric2}));
38 REQUIRE_THROWS(
states.registerState({
"dummy_metric2", DummyMetric}));
43 INFO(
"Next state is " <<
states.nextState.load());
45 memcpy(&header,
states.store.data() +
states.nextState.load(),
sizeof(header));
46 REQUIRE(header.
size == 3);
48 INFO(
"Timestamp is " << header.
timestamp);
49 REQUIRE_THROWS(
states.updateState({Missing, int(strlen(
"foo")),
"foo"}));
50 INFO(
"Next state is " <<
states.nextState.load());
52 REQUIRE(
states.updatedMetricsLapse.load() == 1);
53 REQUIRE(
states.pushedMetricsLapse == 0);
54 REQUIRE(
states.publishedMetricsLapse == 0);
56 INFO(
"Next state is " <<
states.nextState.load());
58 INFO(
"Next state is " <<
states.nextState.load());
60 memcpy(&header,
states.store.data() +
states.nextState.load(),
sizeof(header));
61 REQUIRE(header.
size == 6);
63 INFO(
"Timestamp is " << header.
timestamp);
64 REQUIRE(std::string_view(
states.store.data() +
states.nextState.load() +
sizeof(header), header.
size) ==
"barbar");
65 REQUIRE(
states.updatedMetricsLapse.load() == 2);
66 REQUIRE(
states.pushedMetricsLapse == 0);
67 REQUIRE(
states.publishedMetricsLapse == 0);
69 REQUIRE(
states.statesViews[0].first == 0);
70 REQUIRE(
states.statesViews[0].capacity == 0);
71 REQUIRE(
states.statesViews[0].size == 0);
73 states.processCommandQueue();
74 REQUIRE(
states.nextState.load() == (1 << 18));
76 REQUIRE(
states.statesViews[0].first == 0);
77 REQUIRE(
states.statesViews[0].size == 6);
78 REQUIRE(
states.statesViews[0].capacity == 64);
80 std::vector<std::string> updated;
81 std::vector<std::string>
values;
82 auto simpleFlush = [&updated, &
values](std::string
const&
name, int64_t timestamp, std::string_view
value) {
83 updated.emplace_back(
name);
87 states.flushChangedStates(simpleFlush);
88 REQUIRE(
states.updatedMetricsLapse.load() == 2);
91 REQUIRE(updated.size() == 1);
92 REQUIRE(updated[0] ==
"dummy_metric");
93 REQUIRE(
values.size() == 1);
94 REQUIRE(
values[0] ==
"barbar");
98 memcpy(&header,
states.store.data() +
states.nextState.load(),
sizeof(header));
99 REQUIRE(header.
size == 5);
101 INFO(
"Timestamp is " << header.
timestamp);
102 states.processCommandQueue();
104 REQUIRE(
states.nextState.load() == (1 << 18));
106 REQUIRE(
states.statesViews[0].first == 0);
107 REQUIRE(
states.statesViews[0].size == 5);
108 REQUIRE(
states.statesViews[0].capacity == 64);
112 memcpy(&header,
states.store.data() +
states.nextState.load(),
sizeof(header));
113 REQUIRE(header.
size == 5);
115 INFO(
"Timestamp is " << header.
timestamp);
116 states.processCommandQueue();
118 REQUIRE(
states.nextState.load() == (1 << 18));
119 REQUIRE(
states.statesViews[0].first == 0);
120 REQUIRE(
states.statesViews[0].size == 5);
121 REQUIRE(
states.statesViews[0].capacity == 64);
122 REQUIRE(
states.statesViews[1].first == 64);
123 REQUIRE(
states.statesViews[1].size == 5);
124 REQUIRE(
states.statesViews[1].capacity == 64);
127 SECTION(
"Test capacity handling")
130 states.updateState({
DummyMetric, 70,
"01234567890123456789012345678901234567890123456789012345678901234567890123456789"});
131 states.processCommandQueue();
132 REQUIRE(
states.nextState.load() == (1 << 18));
139 states.updateState({
DummyMetric2, 70,
"01234567890123456789012345678901234567890123456789012345678901234567890123456789"});
140 states.processCommandQueue();
147 states.updateState({
DummyMetric2, 70,
"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"});
148 states.processCommandQueue();
152 states.updateState({
DummyMetric2, 68,
"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"});
153 states.processCommandQueue();
166 SECTION(
"Test inserting many states")
168 for (
size_t i = 0;
i < 5000;
i++) {
169 INFO(
"Inserting state " <<
i);
170 auto foo = fmt::format(
"foo{}",
i);
173 auto foo = fmt::format(
"foo{}", 2897);
175 foo = fmt::format(
"foo{}", 2898);
181 for (
size_t i = 0;
i < 5000;
i++) {
182 auto foo = fmt::format(
"foo{}",
i);
186 states.processCommandQueue();
190 for (
size_t i = 0;
i < 50;
i++) {
191 auto foo = fmt::format(
"foo{}",
i);