149 using namespace test::jtx;
157 for (
auto const& val : validators)
158 expectedKeys.
insert(toStr(val.masterPublic));
162 using namespace std::chrono_literals;
167 worker.get_io_context(), validators, validUntil, {{validFrom2, validUntil2}},
false, 1,
false);
173 using namespace std::string_literals;
179 cfg->section(SECTION_VALIDATOR_LIST_SITES).append(siteURI);
180 cfg->section(SECTION_VALIDATOR_LIST_KEYS).append(
strHex(server->publisherPublic()));
186 env.app().validatorSites().join();
189 auto const jrr = env.rpc(
"server_info")[jss::result];
190 BEAST_EXPECT(jrr[jss::info][jss::validator_list][jss::expiration] ==
"unknown");
193 auto const jrr = env.rpc(
"server_state")[jss::result];
194 BEAST_EXPECT(jrr[jss::state][jss::validator_list_expires].asInt() == 0);
197 auto const jrr = env.rpc(
"validators")[jss::result];
199 BEAST_EXPECT(jrr[jss::local_static_keys].
size() == 0);
200 BEAST_EXPECT(jrr[jss::trusted_validator_keys].
size() == 0);
201 BEAST_EXPECT(jrr[jss::validator_list][jss::expiration] ==
"unknown");
203 if (BEAST_EXPECT(jrr[jss::publisher_lists].
size() == 1))
205 auto jp = jrr[jss::publisher_lists][0u];
206 BEAST_EXPECT(jp[jss::available] ==
false);
207 BEAST_EXPECT(jp[jss::list].
size() == 0);
208 BEAST_EXPECT(!jp.isMember(jss::seq));
209 BEAST_EXPECT(!jp.isMember(jss::expiration));
210 BEAST_EXPECT(!jp.isMember(jss::version));
211 BEAST_EXPECT(jp[jss::pubkey_publisher] ==
strHex(server->publisherPublic()));
213 BEAST_EXPECT(jrr[jss::signing_keys].
size() == 0);
216 auto const jrr = env.rpc(
"validator_list_sites")[jss::result];
217 if (BEAST_EXPECT(jrr[jss::validator_sites].
size() == 1))
219 auto js = jrr[jss::validator_sites][0u];
220 BEAST_EXPECT(js[jss::refresh_interval_min].
asUInt() == 5);
221 BEAST_EXPECT(js[jss::uri] == siteURI);
222 BEAST_EXPECT(js.isMember(jss::last_refresh_time));
223 BEAST_EXPECT(js[jss::last_refresh_status] ==
"invalid");
230 using namespace std::string_literals;
236 cfg->section(SECTION_VALIDATOR_LIST_SITES).append(siteURI);
237 cfg->section(SECTION_VALIDATOR_LIST_KEYS).append(
strHex(server->publisherPublic()));
242 env.app().validatorSites().start();
243 env.app().validatorSites().join();
246 auto const jrr = env.rpc(
"server_info")[jss::result];
247 BEAST_EXPECT(jrr[jss::info][jss::validator_list][jss::expiration] ==
"unknown");
250 auto const jrr = env.rpc(
"server_state")[jss::result];
251 BEAST_EXPECT(jrr[jss::state][jss::validator_list_expires].asInt() == 0);
254 auto const jrr = env.rpc(
"validators")[jss::result];
256 BEAST_EXPECT(jrr[jss::local_static_keys].
size() == 0);
257 BEAST_EXPECT(jrr[jss::trusted_validator_keys].
size() == 0);
258 BEAST_EXPECT(jrr[jss::validator_list][jss::expiration] ==
"unknown");
260 if (BEAST_EXPECT(jrr[jss::publisher_lists].
size() == 1))
262 auto jp = jrr[jss::publisher_lists][0u];
263 BEAST_EXPECT(jp[jss::available] ==
false);
264 BEAST_EXPECT(jp[jss::list].
size() == 0);
265 BEAST_EXPECT(!jp.isMember(jss::seq));
266 BEAST_EXPECT(!jp.isMember(jss::expiration));
267 BEAST_EXPECT(!jp.isMember(jss::version));
268 BEAST_EXPECT(jp[jss::pubkey_publisher] ==
strHex(server->publisherPublic()));
270 BEAST_EXPECT(jrr[jss::signing_keys].
size() == 0);
273 auto const jrr = env.rpc(
"validator_list_sites")[jss::result];
274 if (BEAST_EXPECT(jrr[jss::validator_sites].
size() == 1))
276 auto js = jrr[jss::validator_sites][0u];
277 BEAST_EXPECT(js[jss::refresh_interval_min].
asUInt() == 5);
278 BEAST_EXPECT(js[jss::uri] == siteURI);
279 BEAST_EXPECT(js.isMember(jss::last_refresh_time));
280 BEAST_EXPECT(js[jss::last_refresh_status] ==
"invalid");
290 uri <<
"http://" << server->local_endpoint() <<
"/validators";
291 auto siteURI = uri.
str();
296 cfg->section(SECTION_VALIDATOR_LIST_SITES).append(siteURI);
297 cfg->section(SECTION_VALIDATOR_LIST_KEYS).append(
strHex(server->publisherPublic()));
302 env.app().validatorSites().start();
303 env.app().validatorSites().join();
304 hash_set<NodeID> startKeys;
305 for (
auto const& val : validators)
306 startKeys.insert(
calcNodeID(val.masterPublic));
308 env.app().validators().updateTrusted(
309 startKeys, env.timeKeeper().now(), env.app().getOPs(), env.app().overlay(), env.app().getHashRouter());
312 auto const jrr = env.rpc(
"server_info")[jss::result];
313 BEAST_EXPECT(jrr[jss::info][jss::validator_list][jss::expiration] ==
to_string(validUntil));
316 auto const jrr = env.rpc(
"server_state")[jss::result];
318 jrr[jss::state][jss::validator_list_expires].
asUInt() == validUntil.time_since_epoch().count());
321 auto const jrr = env.rpc(
"validators")[jss::result];
322 BEAST_EXPECT(jrr[jss::validation_quorum].
asUInt() == 2);
323 BEAST_EXPECT(jrr[jss::validator_list][jss::expiration] ==
to_string(validUntil));
324 BEAST_EXPECT(jrr[jss::local_static_keys].
size() == 0);
326 BEAST_EXPECT(jrr[jss::trusted_validator_keys].
size() == expectedKeys.size());
327 for (
auto const& jKey : jrr[jss::trusted_validator_keys])
329 BEAST_EXPECT(expectedKeys.count(jKey.asString()) == 1);
332 if (BEAST_EXPECT(jrr[jss::publisher_lists].
size() == 1))
334 auto jp = jrr[jss::publisher_lists][0u];
335 BEAST_EXPECT(jp[jss::available] ==
true);
336 if (BEAST_EXPECT(jp[jss::list].
size() == 2))
340 for (
auto const& k : jp[jss::list])
342 foundKeys.
insert(k.asString());
344 BEAST_EXPECT(foundKeys == expectedKeys);
346 BEAST_EXPECT(jp[jss::seq].
asUInt() == 1);
347 BEAST_EXPECT(jp[jss::pubkey_publisher] ==
strHex(server->publisherPublic()));
348 BEAST_EXPECT(jp[jss::expiration] ==
to_string(validUntil));
349 BEAST_EXPECT(jp[jss::version] == 1);
351 auto jsk = jrr[jss::signing_keys];
352 BEAST_EXPECT(jsk.size() == 2);
353 for (
auto const& val : validators)
355 BEAST_EXPECT(jsk.isMember(toStr(val.masterPublic)));
356 BEAST_EXPECT(jsk[toStr(val.masterPublic)] == toStr(val.signingPublic));
360 auto const jrr = env.rpc(
"validator_list_sites")[jss::result];
361 if (BEAST_EXPECT(jrr[jss::validator_sites].
size() == 1))
363 auto js = jrr[jss::validator_sites][0u];
364 BEAST_EXPECT(js[jss::refresh_interval_min].
asUInt() == 5);
365 BEAST_EXPECT(js[jss::uri] == siteURI);
366 BEAST_EXPECT(js[jss::last_refresh_status] ==
"accepted");
369 BEAST_EXPECT(js.isMember(jss::last_refresh_time));
376 uri <<
"http://" << server->local_endpoint() <<
"/validators2";
377 auto siteURI = uri.
str();
382 cfg->section(SECTION_VALIDATOR_LIST_SITES).append(siteURI);
383 cfg->section(SECTION_VALIDATOR_LIST_KEYS).append(
strHex(server->publisherPublic()));
388 env.app().validatorSites().start();
389 env.app().validatorSites().join();
390 hash_set<NodeID> startKeys;
391 for (
auto const& val : validators)
392 startKeys.insert(
calcNodeID(val.masterPublic));
394 env.app().validators().updateTrusted(
395 startKeys, env.timeKeeper().now(), env.app().getOPs(), env.app().overlay(), env.app().getHashRouter());
398 auto const jrr = env.rpc(
"server_info")[jss::result];
399 BEAST_EXPECT(jrr[jss::info][jss::validator_list][jss::expiration] ==
to_string(validUntil2));
402 auto const jrr = env.rpc(
"server_state")[jss::result];
404 jrr[jss::state][jss::validator_list_expires].
asUInt() == validUntil2.time_since_epoch().count());
407 auto const jrr = env.rpc(
"validators")[jss::result];
408 BEAST_EXPECT(jrr[jss::validation_quorum].
asUInt() == 2);
409 BEAST_EXPECT(jrr[jss::validator_list][jss::expiration] ==
to_string(validUntil2));
410 BEAST_EXPECT(jrr[jss::local_static_keys].
size() == 0);
412 BEAST_EXPECT(jrr[jss::trusted_validator_keys].
size() == expectedKeys.size());
413 for (
auto const& jKey : jrr[jss::trusted_validator_keys])
415 BEAST_EXPECT(expectedKeys.count(jKey.asString()) == 1);
418 if (BEAST_EXPECT(jrr[jss::publisher_lists].
size() == 1))
420 auto jp = jrr[jss::publisher_lists][0u];
421 BEAST_EXPECT(jp[jss::available] ==
true);
422 if (BEAST_EXPECT(jp[jss::list].
size() == 2))
426 for (
auto const& k : jp[jss::list])
428 foundKeys.
insert(k.asString());
430 BEAST_EXPECT(foundKeys == expectedKeys);
432 BEAST_EXPECT(jp[jss::seq].
asUInt() == 1);
433 BEAST_EXPECT(jp[jss::pubkey_publisher] ==
strHex(server->publisherPublic()));
434 BEAST_EXPECT(jp[jss::expiration] ==
to_string(validUntil));
435 BEAST_EXPECT(jp[jss::version] == 2);
436 if (BEAST_EXPECT(jp.isMember(jss::remaining)) && BEAST_EXPECT(jp[jss::remaining].isArray()) &&
437 BEAST_EXPECT(jp[jss::remaining].
size() == 1))
439 auto const& r = jp[jss::remaining][0u];
440 if (BEAST_EXPECT(r[jss::list].
size() == 2))
444 for (
auto const& k : r[jss::list])
446 foundKeys.
insert(k.asString());
448 BEAST_EXPECT(foundKeys == expectedKeys);
450 BEAST_EXPECT(r[jss::seq].
asUInt() == 2);
451 BEAST_EXPECT(r[jss::effective] ==
to_string(validFrom2));
452 BEAST_EXPECT(r[jss::expiration] ==
to_string(validUntil2));
455 auto jsk = jrr[jss::signing_keys];
456 BEAST_EXPECT(jsk.size() == 2);
457 for (
auto const& val : validators)
459 BEAST_EXPECT(jsk.isMember(toStr(val.masterPublic)));
460 BEAST_EXPECT(jsk[toStr(val.masterPublic)] == toStr(val.signingPublic));
464 auto const jrr = env.rpc(
"validator_list_sites")[jss::result];
465 if (BEAST_EXPECT(jrr[jss::validator_sites].
size() == 1))
467 auto js = jrr[jss::validator_sites][0u];
468 BEAST_EXPECT(js[jss::refresh_interval_min].
asUInt() == 5);
469 BEAST_EXPECT(js[jss::uri] == siteURI);
470 BEAST_EXPECT(js[jss::last_refresh_status] ==
"accepted");
473 BEAST_EXPECT(js.isMember(jss::last_refresh_time));