157 using namespace test::jtx;
159 auto toStr = [](
PublicKey const& publicKey) {
168 for (
auto const& val : validators)
169 expectedKeys.
insert(toStr(val.masterPublic));
173 using namespace std::chrono_literals;
178 worker.get_io_context(),
181 {{validFrom2, validUntil2}},
190 using namespace std::string_literals;
197 cfg->section(SECTION_VALIDATOR_LIST_SITES).append(siteURI);
198 cfg->section(SECTION_VALIDATOR_LIST_KEYS)
199 .append(
strHex(server->publisherPublic()));
205 env.app().validatorSites().join();
208 auto const jrr = env.rpc(
"server_info")[jss::result];
210 jrr[jss::info][jss::validator_list][jss::expiration] ==
214 auto const jrr = env.rpc(
"server_state")[jss::result];
216 jrr[jss::state][jss::validator_list_expires].asInt() == 0);
219 auto const jrr = env.rpc(
"validators")[jss::result];
221 jrr[jss::validation_quorum].
asUInt() ==
223 BEAST_EXPECT(jrr[jss::local_static_keys].
size() == 0);
224 BEAST_EXPECT(jrr[jss::trusted_validator_keys].
size() == 0);
226 jrr[jss::validator_list][jss::expiration] ==
"unknown");
228 if (BEAST_EXPECT(jrr[jss::publisher_lists].
size() == 1))
230 auto jp = jrr[jss::publisher_lists][0u];
231 BEAST_EXPECT(jp[jss::available] ==
false);
232 BEAST_EXPECT(jp[jss::list].
size() == 0);
233 BEAST_EXPECT(!jp.isMember(jss::seq));
234 BEAST_EXPECT(!jp.isMember(jss::expiration));
235 BEAST_EXPECT(!jp.isMember(jss::version));
237 jp[jss::pubkey_publisher] ==
238 strHex(server->publisherPublic()));
240 BEAST_EXPECT(jrr[jss::signing_keys].
size() == 0);
243 auto const jrr = env.rpc(
"validator_list_sites")[jss::result];
244 if (BEAST_EXPECT(jrr[jss::validator_sites].
size() == 1))
246 auto js = jrr[jss::validator_sites][0u];
247 BEAST_EXPECT(js[jss::refresh_interval_min].
asUInt() == 5);
248 BEAST_EXPECT(js[jss::uri] == siteURI);
249 BEAST_EXPECT(js.isMember(jss::last_refresh_time));
250 BEAST_EXPECT(js[jss::last_refresh_status] ==
"invalid");
257 using namespace std::string_literals;
264 cfg->section(SECTION_VALIDATOR_LIST_SITES).append(siteURI);
265 cfg->section(SECTION_VALIDATOR_LIST_KEYS)
266 .append(
strHex(server->publisherPublic()));
271 env.app().validatorSites().start();
272 env.app().validatorSites().join();
275 auto const jrr = env.rpc(
"server_info")[jss::result];
277 jrr[jss::info][jss::validator_list][jss::expiration] ==
281 auto const jrr = env.rpc(
"server_state")[jss::result];
283 jrr[jss::state][jss::validator_list_expires].asInt() == 0);
286 auto const jrr = env.rpc(
"validators")[jss::result];
288 jrr[jss::validation_quorum].
asUInt() ==
290 BEAST_EXPECT(jrr[jss::local_static_keys].
size() == 0);
291 BEAST_EXPECT(jrr[jss::trusted_validator_keys].
size() == 0);
293 jrr[jss::validator_list][jss::expiration] ==
"unknown");
295 if (BEAST_EXPECT(jrr[jss::publisher_lists].
size() == 1))
297 auto jp = jrr[jss::publisher_lists][0u];
298 BEAST_EXPECT(jp[jss::available] ==
false);
299 BEAST_EXPECT(jp[jss::list].
size() == 0);
300 BEAST_EXPECT(!jp.isMember(jss::seq));
301 BEAST_EXPECT(!jp.isMember(jss::expiration));
302 BEAST_EXPECT(!jp.isMember(jss::version));
304 jp[jss::pubkey_publisher] ==
305 strHex(server->publisherPublic()));
307 BEAST_EXPECT(jrr[jss::signing_keys].
size() == 0);
310 auto const jrr = env.rpc(
"validator_list_sites")[jss::result];
311 if (BEAST_EXPECT(jrr[jss::validator_sites].
size() == 1))
313 auto js = jrr[jss::validator_sites][0u];
314 BEAST_EXPECT(js[jss::refresh_interval_min].
asUInt() == 5);
315 BEAST_EXPECT(js[jss::uri] == siteURI);
316 BEAST_EXPECT(js.isMember(jss::last_refresh_time));
317 BEAST_EXPECT(js[jss::last_refresh_status] ==
"invalid");
327 uri <<
"http://" << server->local_endpoint() <<
"/validators";
328 auto siteURI = uri.
str();
333 cfg->section(SECTION_VALIDATOR_LIST_SITES).append(siteURI);
334 cfg->section(SECTION_VALIDATOR_LIST_KEYS)
335 .append(
strHex(server->publisherPublic()));
340 env.app().validatorSites().start();
341 env.app().validatorSites().join();
342 hash_set<NodeID> startKeys;
343 for (
auto const& val : validators)
344 startKeys.insert(
calcNodeID(val.masterPublic));
346 env.app().validators().updateTrusted(
348 env.timeKeeper().now(),
351 env.app().getHashRouter());
354 auto const jrr = env.rpc(
"server_info")[jss::result];
356 jrr[jss::info][jss::validator_list][jss::expiration] ==
360 auto const jrr = env.rpc(
"server_state")[jss::result];
362 jrr[jss::state][jss::validator_list_expires].
asUInt() ==
363 validUntil.time_since_epoch().count());
366 auto const jrr = env.rpc(
"validators")[jss::result];
367 BEAST_EXPECT(jrr[jss::validation_quorum].
asUInt() == 2);
369 jrr[jss::validator_list][jss::expiration] ==
371 BEAST_EXPECT(jrr[jss::local_static_keys].
size() == 0);
374 jrr[jss::trusted_validator_keys].
size() ==
375 expectedKeys.size());
376 for (
auto const& jKey : jrr[jss::trusted_validator_keys])
378 BEAST_EXPECT(expectedKeys.count(jKey.asString()) == 1);
381 if (BEAST_EXPECT(jrr[jss::publisher_lists].
size() == 1))
383 auto jp = jrr[jss::publisher_lists][0u];
384 BEAST_EXPECT(jp[jss::available] ==
true);
385 if (BEAST_EXPECT(jp[jss::list].
size() == 2))
389 for (
auto const& k : jp[jss::list])
391 foundKeys.
insert(k.asString());
393 BEAST_EXPECT(foundKeys == expectedKeys);
395 BEAST_EXPECT(jp[jss::seq].
asUInt() == 1);
397 jp[jss::pubkey_publisher] ==
398 strHex(server->publisherPublic()));
399 BEAST_EXPECT(jp[jss::expiration] ==
to_string(validUntil));
400 BEAST_EXPECT(jp[jss::version] == 1);
402 auto jsk = jrr[jss::signing_keys];
403 BEAST_EXPECT(jsk.size() == 2);
404 for (
auto const& val : validators)
406 BEAST_EXPECT(jsk.isMember(toStr(val.masterPublic)));
408 jsk[toStr(val.masterPublic)] ==
409 toStr(val.signingPublic));
413 auto const jrr = env.rpc(
"validator_list_sites")[jss::result];
414 if (BEAST_EXPECT(jrr[jss::validator_sites].
size() == 1))
416 auto js = jrr[jss::validator_sites][0u];
417 BEAST_EXPECT(js[jss::refresh_interval_min].
asUInt() == 5);
418 BEAST_EXPECT(js[jss::uri] == siteURI);
419 BEAST_EXPECT(js[jss::last_refresh_status] ==
"accepted");
422 BEAST_EXPECT(js.isMember(jss::last_refresh_time));
429 uri <<
"http://" << server->local_endpoint() <<
"/validators2";
430 auto siteURI = uri.
str();
435 cfg->section(SECTION_VALIDATOR_LIST_SITES).append(siteURI);
436 cfg->section(SECTION_VALIDATOR_LIST_KEYS)
437 .append(
strHex(server->publisherPublic()));
442 env.app().validatorSites().start();
443 env.app().validatorSites().join();
444 hash_set<NodeID> startKeys;
445 for (
auto const& val : validators)
446 startKeys.insert(
calcNodeID(val.masterPublic));
448 env.app().validators().updateTrusted(
450 env.timeKeeper().now(),
453 env.app().getHashRouter());
456 auto const jrr = env.rpc(
"server_info")[jss::result];
458 jrr[jss::info][jss::validator_list][jss::expiration] ==
462 auto const jrr = env.rpc(
"server_state")[jss::result];
464 jrr[jss::state][jss::validator_list_expires].
asUInt() ==
465 validUntil2.time_since_epoch().count());
468 auto const jrr = env.rpc(
"validators")[jss::result];
469 BEAST_EXPECT(jrr[jss::validation_quorum].
asUInt() == 2);
471 jrr[jss::validator_list][jss::expiration] ==
473 BEAST_EXPECT(jrr[jss::local_static_keys].
size() == 0);
476 jrr[jss::trusted_validator_keys].
size() ==
477 expectedKeys.size());
478 for (
auto const& jKey : jrr[jss::trusted_validator_keys])
480 BEAST_EXPECT(expectedKeys.count(jKey.asString()) == 1);
483 if (BEAST_EXPECT(jrr[jss::publisher_lists].
size() == 1))
485 auto jp = jrr[jss::publisher_lists][0u];
486 BEAST_EXPECT(jp[jss::available] ==
true);
487 if (BEAST_EXPECT(jp[jss::list].
size() == 2))
491 for (
auto const& k : jp[jss::list])
493 foundKeys.
insert(k.asString());
495 BEAST_EXPECT(foundKeys == expectedKeys);
497 BEAST_EXPECT(jp[jss::seq].
asUInt() == 1);
499 jp[jss::pubkey_publisher] ==
500 strHex(server->publisherPublic()));
501 BEAST_EXPECT(jp[jss::expiration] ==
to_string(validUntil));
502 BEAST_EXPECT(jp[jss::version] == 2);
503 if (BEAST_EXPECT(jp.isMember(jss::remaining)) &&
504 BEAST_EXPECT(jp[jss::remaining].isArray()) &&
505 BEAST_EXPECT(jp[jss::remaining].
size() == 1))
507 auto const& r = jp[jss::remaining][0u];
508 if (BEAST_EXPECT(r[jss::list].
size() == 2))
512 for (
auto const& k : r[jss::list])
514 foundKeys.
insert(k.asString());
516 BEAST_EXPECT(foundKeys == expectedKeys);
518 BEAST_EXPECT(r[jss::seq].
asUInt() == 2);
520 r[jss::effective] ==
to_string(validFrom2));
522 r[jss::expiration] ==
to_string(validUntil2));
525 auto jsk = jrr[jss::signing_keys];
526 BEAST_EXPECT(jsk.size() == 2);
527 for (
auto const& val : validators)
529 BEAST_EXPECT(jsk.isMember(toStr(val.masterPublic)));
531 jsk[toStr(val.masterPublic)] ==
532 toStr(val.signingPublic));
536 auto const jrr = env.rpc(
"validator_list_sites")[jss::result];
537 if (BEAST_EXPECT(jrr[jss::validator_sites].
size() == 1))
539 auto js = jrr[jss::validator_sites][0u];
540 BEAST_EXPECT(js[jss::refresh_interval_min].
asUInt() == 5);
541 BEAST_EXPECT(js[jss::uri] == siteURI);
542 BEAST_EXPECT(js[jss::last_refresh_status] ==
"accepted");
545 BEAST_EXPECT(js.isMember(jss::last_refresh_time));