]> git.ipfire.org Git - thirdparty/pdns.git/blame - pdns/test-sholder_hh.cc
rec: ensure correct service user on debian
[thirdparty/pdns.git] / pdns / test-sholder_hh.cc
CommitLineData
ca77577f 1#define BOOST_TEST_DYN_LINK
2#define BOOST_TEST_NO_MAIN
3
4#include <boost/test/unit_test.hpp>
5#include "sholder.hh"
6#include <thread>
7
8using std::string;
9
10struct TestObject
11{
12 string name;
13 uint64_t number;
14};
15
16static GlobalStateHolder<TestObject> g_to;
17std::atomic<bool> g_failed;
18
c7f29d3e 19BOOST_AUTO_TEST_SUITE(test_sholder_hh)
ca77577f 20
21void treader()
22{
23 auto local = g_to.getLocal();
24 for(int n=0; n < 10000000; ++n) {
25 auto g = *local;
26 if(g.name != std::to_string(g.number)) {
27 g_failed=1;
28 break;
29 }
30 }
31}
32
33BOOST_AUTO_TEST_CASE(test_sholder) {
34 g_to.setState({"1", 1});
35
36 std::thread t1(treader);
37 for(unsigned int n=0; n < 1000000; ++n) {
38 g_to.setState({std::to_string(n), n});
39 g_to.modify([n](TestObject& to) { to.number = 2*n; to.name=std::to_string(to.number);} );
40 }
41 t1.join();
42 BOOST_CHECK_EQUAL(g_failed, 0);
43}
44
45
46BOOST_AUTO_TEST_SUITE_END()
47