diff --git a/rai/core_test/conflicts.cpp b/rai/core_test/conflicts.cpp index 90f7e36c..97899153 100644 --- a/rai/core_test/conflicts.cpp +++ b/rai/core_test/conflicts.cpp @@ -72,3 +72,38 @@ TEST (votes, contested) votes.rep_votes[rai::test_genesis_key.pub] = block2; ASSERT_FALSE (votes.uncontested ()); } + +TEST (conflicts, rollback_source) +{ + rai::system system (24000, 2); + auto & node1 (*system.nodes[0]); + auto & node2 (*system.nodes[1]); + rai::genesis genesis; + rai::keypair key1; + system.wallet(0)->insert_adhoc (rai::test_genesis_key.prv); + auto send1 (std::make_shared (rai::test_genesis_key.pub, genesis.hash (), rai::test_genesis_key.pub, rai::genesis_amount - rai::Gxrb_ratio, key1.pub, rai::test_genesis_key.prv, rai::test_genesis_key.pub, system.work.generate(genesis.hash ()))); + ASSERT_EQ (rai::process_result::progress, node2.process (*send1).code); + ASSERT_FALSE (node2.active.start (send1)); + ASSERT_EQ (rai::process_result::progress, node1.process (*send1).code); + ASSERT_FALSE (node1.active.start (send1)); + auto send2 (std::make_shared (rai::test_genesis_key.pub, send1->hash (), rai::test_genesis_key.pub, rai::genesis_amount - 2 * rai::Gxrb_ratio, key1.pub, rai::test_genesis_key.prv, rai::test_genesis_key.pub, system.work.generate(send1->hash ()))); + ASSERT_EQ (rai::process_result::progress, node2.process (*send2).code); + ASSERT_FALSE (node2.active.start (send2)); + auto send3 (std::make_shared (key1.pub, 0, key1.pub, rai::Gxrb_ratio, send1->hash (), key1.prv, key1.pub, system.work.generate(key1.pub))); + ASSERT_EQ (rai::process_result::progress, node2.process (*send3).code); + ASSERT_FALSE (node2.active.start (send3)); + auto send4 (std::make_shared (key1.pub, send3->hash (), key1.pub, 2 * rai::Gxrb_ratio, send2->hash (), key1.prv, key1.pub, system.work.generate(send3->hash ()))); + ASSERT_EQ (rai::process_result::progress, node2.process (*send4).code); + ASSERT_FALSE (node2.active.start (send4)); + auto send5 (std::make_shared (rai::test_genesis_key.pub, send1->hash (), rai::test_genesis_key.pub, rai::genesis_amount - 3 * rai::Gxrb_ratio, key1.pub, rai::test_genesis_key.prv, rai::test_genesis_key.pub, system.work.generate(send1->hash ()))); + ASSERT_EQ (rai::process_result::progress, node1.process(*send5).code); + ASSERT_FALSE (node1.active.start (send5)); + while (!node2.active.active(*send4)) + { + system.poll (); + } + while (node2.active.active(*send4)) + { + system.poll (); + } +}