Skip to content

Commit 3bb0255

Browse files
committed
Additional unit tests
1 parent 90b2fc6 commit 3bb0255

File tree

1 file changed

+53
-1
lines changed

1 file changed

+53
-1
lines changed

src/test/sparkname_tests.cpp

Lines changed: 53 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ class SparkNameTests : public SparkTestingSetup
4040
void Initialize() {
4141
std::vector<CMutableTransaction> mintTxs;
4242
GenerateBlocks(2000-1);
43-
GenerateMints({50 * COIN, 60 * COIN, 10*COIN, 10*COIN, 10*COIN}, mintTxs);
43+
GenerateMints({50 * COIN, 60 * COIN, 10*COIN, 10*COIN, 10*COIN, 10*COIN, 10*COIN, 10*COIN, 10*COIN, 10*COIN, 10*COIN}, mintTxs);
4444
GenerateBlock(mintTxs);
4545
pwalletMain->SetBroadcastTransactions(true);
4646
}
@@ -99,6 +99,23 @@ class SparkNameTests : public SparkTestingSetup
9999
InvalidateBlock(state, chainparams, pindex);
100100
}
101101

102+
void ModifySparkNameTx(CMutableTransaction &tx, std::function<void(CSparkNameTxData &)> modify) {
103+
const spark::Params *params = spark::Params::get_default();
104+
spark::SpendTransaction sparkTx(params);
105+
106+
CSparkNameTxData sparkNameData;
107+
size_t sparkNameDataPos;
108+
BOOST_CHECK(sparkNameManager->ParseSparkNameTxData(tx, sparkTx, sparkNameData, sparkNameDataPos));
109+
110+
modify(sparkNameData);
111+
112+
CDataStream serializedSpark(SER_NETWORK, PROTOCOL_VERSION);
113+
serializedSpark << sparkNameData;
114+
115+
tx.vExtraPayload.erase(tx.vExtraPayload.begin() + sparkNameDataPos, tx.vExtraPayload.end());
116+
tx.vExtraPayload.insert(tx.vExtraPayload.end(), serializedSpark.begin(), serializedSpark.end());
117+
}
118+
102119
CSparkState *sparkState;
103120
Consensus::Params const &consensus;
104121

@@ -199,6 +216,41 @@ BOOST_AUTO_TEST_CASE(general)
199216
// tx3 should go ahead now
200217
GenerateBlock({tx3});
201218
BOOST_CHECK_EQUAL(chainActive.Height(), oldHeight+1);
219+
220+
// check insufficient fee
221+
CMutableTransaction tx4 = CreateSparkNameTx("tt", GenerateSparkAddress(), 3, "x", true, 1*COIN);
222+
BOOST_CHECK(!lastState.IsValid());
223+
// check the block is not generated as well
224+
oldHeight = chainActive.Height();
225+
GenerateBlock({tx4});
226+
BOOST_CHECK_EQUAL(chainActive.Height(), oldHeight);
227+
228+
// now check the number of years is calculated correctly and yearly fee is checked
229+
CMutableTransaction tx5 = CreateSparkNameTx("testname5", GenerateSparkAddress(), 24*24*365*2, "x", true, 2*COIN);
230+
BOOST_CHECK(lastState.IsValid());
231+
232+
CMutableTransaction tx6 = CreateSparkNameTx("testname6", GenerateSparkAddress(), 24*24*365*2, "x", true, 1*COIN);
233+
BOOST_CHECK(!lastState.IsValid());
234+
235+
// check that address ownership proof is checked
236+
CMutableTransaction tx7 = CreateSparkNameTx("testname7", GenerateSparkAddress(), 3, "x", false);
237+
ModifySparkNameTx(tx7, [](CSparkNameTxData &sparkNameData) {
238+
sparkNameData.addressOwnershipProof[50] ^= 0x01;
239+
});
240+
241+
oldHeight = chainActive.Height();
242+
GenerateBlock({tx7});
243+
BOOST_CHECK_EQUAL(chainActive.Height(), oldHeight);
244+
245+
// change back the ownership proof but modify the name, the ownership proof should fail again
246+
ModifySparkNameTx(tx7, [](CSparkNameTxData &sparkNameData) {
247+
sparkNameData.addressOwnershipProof[50] ^= 0x01;
248+
sparkNameData.name = "testname8";
249+
});
250+
251+
oldHeight = chainActive.Height();
252+
GenerateBlock({tx7});
253+
BOOST_CHECK_EQUAL(chainActive.Height(), oldHeight);
202254
}
203255

204256
BOOST_AUTO_TEST_SUITE_END()

0 commit comments

Comments
 (0)