aboutsummaryrefslogtreecommitdiffstats
path: root/library/cpp/monlib/counters/counters_ut.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'library/cpp/monlib/counters/counters_ut.cpp')
-rw-r--r--library/cpp/monlib/counters/counters_ut.cpp49
1 files changed, 49 insertions, 0 deletions
diff --git a/library/cpp/monlib/counters/counters_ut.cpp b/library/cpp/monlib/counters/counters_ut.cpp
new file mode 100644
index 0000000000..2845efb97b
--- /dev/null
+++ b/library/cpp/monlib/counters/counters_ut.cpp
@@ -0,0 +1,49 @@
+#include "counters.h"
+
+#include <library/cpp/testing/unittest/registar.h>
+
+#include <util/generic/set.h>
+#include <util/thread/pool.h>
+
+using namespace NMonitoring;
+
+Y_UNIT_TEST_SUITE(TDeprecatedCountersTest) {
+ Y_UNIT_TEST(CounterGroupsAreThreadSafe) {
+ const static ui32 GROUPS_COUNT = 1000;
+ const static ui32 THREADS_COUNT = 10;
+
+ TDeprecatedCounterGroups<ui32, ui32> groups;
+
+ auto adder = [&groups]() {
+ for (ui32 id = 0; id < GROUPS_COUNT; id++) {
+ groups.Get(id);
+
+ // adds contention
+ ::NanoSleep(42);
+ }
+ };
+
+ TThreadPool q;
+ q.Start(THREADS_COUNT);
+ for (ui32 i = 0; i < THREADS_COUNT; i++) {
+ q.SafeAddFunc(adder);
+ }
+ q.Stop();
+
+ // each group id is present
+ for (ui32 id = 0; id < GROUPS_COUNT; id++) {
+ UNIT_ASSERT(groups.Has(id));
+ }
+
+ // group names contains only appropriate ids
+ auto ids = groups.GetGroupsNames();
+ for (ui32 id : *ids) {
+ UNIT_ASSERT(id < GROUPS_COUNT);
+ }
+
+ // no duplication in group names
+ TSet<ui32> uniqueIds(ids->begin(), ids->end());
+ UNIT_ASSERT_EQUAL(ids->size(), uniqueIds.size());
+ UNIT_ASSERT_EQUAL(ids->size(), GROUPS_COUNT);
+ }
+}