]> git.ipfire.org Git - thirdparty/pdns.git/blame - pdns/test-statbag_cc.cc
Merge pull request #14021 from Habbie/auth-lua-join-whitespace
[thirdparty/pdns.git] / pdns / test-statbag_cc.cc
CommitLineData
1c2d079d 1#ifndef BOOST_TEST_DYN_LINK
1566533a 2#define BOOST_TEST_DYN_LINK
1c2d079d
FM
3#endif
4
1566533a 5#define BOOST_TEST_NO_MAIN
6
870a0fe4
AT
7#ifdef HAVE_CONFIG_H
8#include "config.h"
9#endif
1566533a 10#include <boost/test/unit_test.hpp>
11#include <boost/assign/list_of.hpp>
fa8fd4d2 12
3fb6cb1e 13#include <stdint.h>
0ddde5fb 14#include <thread>
1566533a 15#include "misc.hh"
16#include "dns.hh"
17#include "statbag.hh"
18
19using std::string;
20
0ddde5fb 21static void threadMangler(AtomicCounter* ac)
1566533a 22{
2d3c55f6 23 for(unsigned int n=0; n < 1000000; ++n)
1566533a 24 (*ac)++;
1566533a 25}
26
0ddde5fb 27static void threadMangler2(StatBag* S)
305cbc49 28{
2d3c55f6 29 for(unsigned int n=0; n < 1000000; ++n)
305cbc49 30 S->inc("c");
305cbc49 31}
32
33
34
c7f29d3e 35BOOST_AUTO_TEST_SUITE(test_misc_hh)
1566533a 36
37BOOST_AUTO_TEST_CASE(test_StatBagBasic) {
38 StatBag s;
39 s.declare("a", "description");
40 s.declare("b", "description");
41 s.declare("c", "description");
42 s.inc("a");
690b86b7 43 BOOST_CHECK_EQUAL(s.read("a"), 1UL);
d5ef463e 44
690b86b7 45 unsigned long n;
1566533a 46 for(n=0; n < 1000000; ++n)
47 s.inc("b");
48
49 BOOST_CHECK_EQUAL(s.read("b"), n);
50
51 AtomicCounter* ac = s.getPointer("a");
52 for(n=0; n < 1000000; ++n)
53 (*ac)++;
54
55 BOOST_CHECK_EQUAL(s.read("a"), n+1);
56
57 AtomicCounter* acc = s.getPointer("c");
0ddde5fb
RG
58 std::vector<std::thread> manglers;
59 for (int i=0; i < 4; ++i) {
60 manglers.push_back(std::thread(threadMangler, acc));
61 }
62
63 for (auto& t : manglers) {
64 t.join();
65 }
66 manglers.clear();
1566533a 67
2d3c55f6 68 BOOST_CHECK_EQUAL(s.read("c"), 4000000U);
d5ef463e 69
305cbc49 70 s.set("c", 0);
71
0ddde5fb
RG
72 for (int i=0; i < 4; ++i) {
73 manglers.push_back(std::thread(threadMangler2, &s));
74 }
305cbc49 75
0ddde5fb
RG
76 for (auto& t : manglers) {
77 t.join();
78 }
79 manglers.clear();
305cbc49 80
2d3c55f6 81 BOOST_CHECK_EQUAL(s.read("c"), 4000000U);
305cbc49 82
83
84 s.set("c", 1ULL<<31);
85 BOOST_CHECK_EQUAL(s.read("c"), (1ULL<<31) );
86 s.inc("c");
87 BOOST_CHECK_EQUAL(s.read("c"), (1ULL<<31) +1 );
da043807 88
d5ef463e 89#ifdef UINTPTR_MAX
305cbc49 90#if UINTPTR_MAX > 0xffffffffULL
690b86b7 91 BOOST_CHECK_EQUAL(sizeof(AtomicCounterInner), 8U);
305cbc49 92 s.set("c", 1ULL<<33);
93 BOOST_CHECK_EQUAL(s.read("c"), (1ULL<<33) );
94 s.inc("c");
95 BOOST_CHECK_EQUAL(s.read("c"), (1ULL<<33) +1 );
96
97 s.set("c", ~0ULL);
98 BOOST_CHECK_EQUAL(s.read("c"), 0xffffffffffffffffULL );
99 s.inc("c");
690b86b7 100 BOOST_CHECK_EQUAL(s.read("c"), 0UL );
305cbc49 101#else
690b86b7 102 BOOST_CHECK_EQUAL(sizeof(AtomicCounterInner), 4U);
007d8bdb 103 BOOST_CHECK_EQUAL(~0UL, 0xffffffffUL);
305cbc49 104 s.set("c", ~0UL);
105 BOOST_CHECK_EQUAL(s.read("c"), 0xffffffffUL );
106 s.inc("c");
690b86b7 107 BOOST_CHECK_EQUAL(s.read("c"), 0UL );
305cbc49 108#endif
da043807 109#endif
1566533a 110}
111
112
113BOOST_AUTO_TEST_SUITE_END()