33 std::cout <<
"TestRealm" << std::endl;
34 auto realm = realmStore.getRealm(
"SingleRealm");
36 auto b = realm->getVersion(ctk::async::DataConsistencyKey(42));
37 auto c = realm->getVersion(ctk::async::DataConsistencyKey(42));
40 auto d = realm->getVersion(ctk::async::DataConsistencyKey(43));
44 for(uint64_t i = 1; i < 42; ++i) {
45 auto a = realm->getVersion(ctk::async::DataConsistencyKey(i));
54 auto b2 = realm->getVersion(ctk::async::DataConsistencyKey(42));
57 auto x = realm->getVersion(ctk::async::DataConsistencyKey(1000000000));
60 auto y = realm->getVersion(ctk::async::DataConsistencyKey(42));
82 std::cout <<
"TestVersionConsistencyBetweenAccessors" << std::endl;
86 auto realm = realmStore.getRealm(
"MyIdRealm");
94 BOOST_REQUIRE(!dataA.readNonBlocking());
95 BOOST_REQUIRE(!dataB.readNonBlocking());
102 BOOST_REQUIRE(dataA.readNonBlocking());
103 BOOST_REQUIRE(dataB.readNonBlocking());
105 BOOST_REQUIRE(!dataA.readNonBlocking());
106 BOOST_REQUIRE(!dataB.readNonBlocking());
109 auto v1 = realm->getVersion(ctk::async::DataConsistencyKey(key));
110 BOOST_REQUIRE(v1 > v0);
111 BOOST_TEST(dataA.getVersionNumber() == v1);
112 BOOST_TEST(dataB.getVersionNumber() == v1);
113 BOOST_TEST(
interrupt6.getVersionNumber() == v1);
114 BOOST_TEST(dataA.dataValidity() == ctk::DataValidity::ok);
115 BOOST_TEST(dataB.dataValidity() == ctk::DataValidity::ok);
116 BOOST_TEST(
interrupt6.dataValidity() == ctk::DataValidity::ok);
120 dummy->triggerInterrupt(6);
122 BOOST_REQUIRE(dataA.readNonBlocking());
123 BOOST_REQUIRE(dataB.readNonBlocking());
125 BOOST_REQUIRE(!dataA.readNonBlocking());
126 BOOST_REQUIRE(!dataB.readNonBlocking());
129 auto v2 = realm->getVersion(ctk::async::DataConsistencyKey(key));
130 BOOST_REQUIRE(v2 > v1);
131 BOOST_TEST(dataA.getVersionNumber() == v2);
132 BOOST_TEST(dataB.getVersionNumber() == v2);
133 BOOST_TEST(
interrupt6.getVersionNumber() == v2);
134 BOOST_TEST(dataA.dataValidity() == ctk::DataValidity::ok);
135 BOOST_TEST(dataB.dataValidity() == ctk::DataValidity::ok);
136 BOOST_TEST(
interrupt6.dataValidity() == ctk::DataValidity::ok);
139 dummy->triggerInterrupt(6);
141 BOOST_REQUIRE(dataA.readNonBlocking());
142 BOOST_REQUIRE(dataB.readNonBlocking());
144 BOOST_REQUIRE(!dataA.readNonBlocking());
145 BOOST_REQUIRE(!dataB.readNonBlocking());
148 BOOST_TEST(dataA.getVersionNumber() == v2);
149 BOOST_TEST(dataB.getVersionNumber() == v2);
150 BOOST_TEST(
interrupt6.getVersionNumber() == v2);
151 BOOST_TEST(dataA.dataValidity() == ctk::DataValidity::ok);
152 BOOST_TEST(dataB.dataValidity() == ctk::DataValidity::ok);
153 BOOST_TEST(
interrupt6.dataValidity() == ctk::DataValidity::ok);
157 dummy->triggerInterrupt(6);
159 BOOST_REQUIRE(dataA.readNonBlocking());
160 BOOST_REQUIRE(dataB.readNonBlocking());
162 BOOST_REQUIRE(!dataA.readNonBlocking());
163 BOOST_REQUIRE(!dataB.readNonBlocking());
166 auto v3 = realm->getVersion(ctk::async::DataConsistencyKey(key));
167 BOOST_REQUIRE(v3 < v2);
168 BOOST_REQUIRE(v3 > v1);
169 BOOST_TEST(dataA.getVersionNumber() == v2);
170 BOOST_TEST(dataB.getVersionNumber() == v2);
171 BOOST_TEST(
interrupt6.getVersionNumber() == v2);
172 BOOST_TEST(dataA.dataValidity() == ctk::DataValidity::faulty);
173 BOOST_TEST(dataB.dataValidity() == ctk::DataValidity::faulty);
174 BOOST_TEST(
interrupt6.dataValidity() == ctk::DataValidity::ok);
182 std::cout <<
"TestMultiInterrupt" << std::endl;
186 auto realm = realmStore.getRealm(
"MyIdRealm");
197 BOOST_REQUIRE(!dataA.readNonBlocking());
198 BOOST_REQUIRE(!dataB.readNonBlocking());
199 BOOST_REQUIRE(!intA.readNonBlocking());
200 BOOST_REQUIRE(!intB.readNonBlocking());
203 keyA.setAndWrite(12);
204 keyB.setAndWrite(15);
207 BOOST_REQUIRE(dataA.readNonBlocking());
208 BOOST_REQUIRE(dataB.readNonBlocking());
209 BOOST_REQUIRE(intA.readNonBlocking());
210 BOOST_REQUIRE(intB.readNonBlocking());
211 BOOST_REQUIRE(!dataA.readNonBlocking());
212 BOOST_REQUIRE(!dataB.readNonBlocking());
213 BOOST_REQUIRE(!intA.readNonBlocking());
214 BOOST_REQUIRE(!intB.readNonBlocking());
216 auto v1 = realm->getVersion(ctk::async::DataConsistencyKey(keyA));
217 auto v2 = realm->getVersion(ctk::async::DataConsistencyKey(keyB));
218 BOOST_REQUIRE(v1 > v0);
219 BOOST_REQUIRE(v2 > v1);
220 BOOST_TEST(dataA.getVersionNumber() == v1);
221 BOOST_TEST(intA.getVersionNumber() == v1);
222 BOOST_TEST(dataB.getVersionNumber() == v2);
223 BOOST_TEST(intB.getVersionNumber() == v2);
226 keyA.setAndWrite(15);
227 dummy->triggerInterrupt(6);
229 BOOST_REQUIRE(dataA.readNonBlocking());
230 BOOST_REQUIRE(intA.readNonBlocking());
231 BOOST_REQUIRE(!dataA.readNonBlocking());
232 BOOST_REQUIRE(!dataB.readNonBlocking());
233 BOOST_REQUIRE(!intA.readNonBlocking());
234 BOOST_REQUIRE(!intB.readNonBlocking());
236 BOOST_TEST(dataA.getVersionNumber() == v2);
237 BOOST_TEST(intA.getVersionNumber() == v2);
296 std::cout <<
"TestDataConsistencyKeyDoubleBuffer: running the plain key configuration" << std::endl;
297 std::string plainKeyCdd =
298 R
"((ExceptionDummy:1?map=muxedDataAccessor.jmap&DataConsistencyKeys={"/TEST.KEY":"DoubleBufferKeyRealm"}))";
299 runDoubleBufferScenario(plainKeyCdd, "DoubleBufferKeyRealm",
"TEST.KEY", std::vector<uint16_t>{100, 101, 102, 103});
301 std::cout <<
"TestDataConsistencyKeyDoubleBuffer: running the correlated key configuration" << std::endl;
302 std::string correlatedKeyCdd =
303 R
"((ExceptionDummy:1?map=muxedDataAccessor.jmap&DataConsistencyKeys={"/TEST.KEYDB":"DoubleBufferKeyRealm"}))";
304 runDoubleBufferScenario(
305 correlatedKeyCdd, "DoubleBufferKeyRealm",
"TEST.KEYDB.BUF1", std::vector<uint16_t>{200, 201, 202, 203});