MCPcopy Create free account
hub / github.com/ElementsProject/elements / BuildTimeBackwardsTest

Function BuildTimeBackwardsTest

src/test/txrequest_tests.cpp:560–603  ·  view source on GitHub ↗

Add to scenario a test that exercises clocks that go backwards. */

Source from the content-addressed store, hash-verified

558
559/** Add to scenario a test that exercises clocks that go backwards. */
560void BuildTimeBackwardsTest(Scenario& scenario)
561{
562 auto peer1 = scenario.NewPeer();
563 auto peer2 = scenario.NewPeer();
564 auto gtxid = scenario.NewGTxid({{peer1, peer2}});
565
566 // Announce from peer2.
567 auto reqtime = scenario.Now() + RandomTime8s();
568 scenario.ReceivedInv(peer2, gtxid, true, reqtime);
569 scenario.Check(peer2, {}, 1, 0, 0, "r1");
570 scenario.AdvanceTime(reqtime - scenario.Now());
571 scenario.Check(peer2, {gtxid}, 1, 0, 0, "r2");
572 // Check that if the clock goes backwards by 1us, the transaction would stop being requested.
573 scenario.Check(peer2, {}, 1, 0, 0, "r3", -MICROSECOND);
574 // But it reverts to being requested if time goes forward again.
575 scenario.Check(peer2, {gtxid}, 1, 0, 0, "r4");
576
577 // Announce from peer1.
578 if (InsecureRandBool()) scenario.AdvanceTime(RandomTime8s());
579 scenario.ReceivedInv(peer1, gtxid, true, MAX_TIME);
580 scenario.Check(peer2, {gtxid}, 1, 0, 0, "r5");
581 scenario.Check(peer1, {}, 1, 0, 0, "r6");
582
583 // Request from peer1.
584 if (InsecureRandBool()) scenario.AdvanceTime(RandomTime8s());
585 auto expiry = scenario.Now() + RandomTime8s();
586 scenario.RequestedTx(peer1, gtxid.GetHash(), expiry);
587 scenario.Check(peer1, {}, 0, 1, 0, "r7");
588 scenario.Check(peer2, {}, 1, 0, 0, "r8");
589
590 // Expiration passes.
591 scenario.AdvanceTime(expiry - scenario.Now());
592 scenario.Check(peer1, {}, 0, 0, 1, "r9");
593 scenario.Check(peer2, {gtxid}, 1, 0, 0, "r10"); // Request goes back to peer2.
594 scenario.CheckExpired(peer1, gtxid);
595 scenario.Check(peer1, {}, 0, 0, 1, "r11", -MICROSECOND); // Going back does not unexpire.
596 scenario.Check(peer2, {gtxid}, 1, 0, 0, "r12", -MICROSECOND);
597
598 // Peer2 goes offline, meaning no viable announcements remain.
599 if (InsecureRandBool()) scenario.AdvanceTime(RandomTime8s());
600 scenario.DisconnectedPeer(peer2);
601 scenario.Check(peer1, {}, 0, 0, 0, "r13");
602 scenario.Check(peer2, {}, 0, 0, 0, "r14");
603}
604
605/** Add to scenario a test that involves RequestedTx() calls for txhashes not returned by GetRequestable. */
606void BuildWeirdRequestsTest(Scenario& scenario)

Callers 1

TestInterleavedScenariosFunction · 0.85

Calls 12

RandomTime8sFunction · 0.85
InsecureRandBoolFunction · 0.85
NewPeerMethod · 0.80
NewGTxidMethod · 0.80
CheckExpiredMethod · 0.80
NowMethod · 0.45
ReceivedInvMethod · 0.45
CheckMethod · 0.45
AdvanceTimeMethod · 0.45
RequestedTxMethod · 0.45
GetHashMethod · 0.45
DisconnectedPeerMethod · 0.45

Tested by

no test coverage detected