MCPcopy Create free account
hub / github.com/apache/brpc / test_doubly_buffered_data

Function test_doubly_buffered_data

test/brpc_load_balancer_unittest.cpp:95–136  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

93
94template <typename DBD>
95void test_doubly_buffered_data() {
96 // test doubly_buffered_data TLS limits
97 {
98 std::cout << "current PTHREAD_KEYS_MAX: " << PTHREAD_KEYS_MAX << std::endl;
99 DBD data[PTHREAD_KEYS_MAX + 1];
100 typename DBD::ScopedPtr ptr;
101 ASSERT_EQ(0, data[PTHREAD_KEYS_MAX].Read(&ptr));
102 ASSERT_EQ(0, ptr->x);
103 }
104
105 DBD d;
106 {
107 typename DBD::ScopedPtr ptr;
108 ASSERT_EQ(0, d.Read(&ptr));
109 ASSERT_EQ(0, ptr->x);
110 }
111 {
112 ASSERT_EQ(0, d.Read([](const Foo& f) {
113 ASSERT_EQ(0, f.x);
114 }));
115 ASSERT_EQ(0, d.Read(read_cb));
116 ASSERT_EQ(0, d.Read(CallableObj()));
117 CallableObj co;
118 ASSERT_EQ(0, d.Read(co));
119 }
120 {
121 typename DBD::ScopedPtr ptr;
122 ASSERT_EQ(0, d.Read(&ptr));
123 ASSERT_EQ(0, ptr->x);
124 }
125
126 d.Modify(AddN, 10);
127 d.Modify([](Foo& f, int n) -> size_t {
128 f.x += n;
129 return 1;
130 }, 10);
131 {
132 typename DBD::ScopedPtr ptr;
133 ASSERT_EQ(0, d.Read(&ptr));
134 ASSERT_EQ(20, ptr->x);
135 }
136}
137
138TEST_F(LoadBalancerTest, doubly_buffered_data) {
139 test_doubly_buffered_data<butil::DoublyBufferedData<Foo>>();

Callers

nothing calls this directly

Calls 3

CallableObjClass · 0.85
ModifyMethod · 0.80
ReadMethod · 0.45

Tested by

no test coverage detected