more tests

This commit is contained in:
NikVolf 2016-11-11 00:27:25 +03:00
parent b8f38ad121
commit 528c639c20
1 changed files with 76 additions and 6 deletions

View File

@ -278,9 +278,7 @@ mod tests {
let genesis = test_data::block_builder()
.transaction()
.coinbase()
.output()
.value(50)
.build()
.output().value(50).build()
.build()
.merkled_header().build()
.build();
@ -291,9 +289,7 @@ mod tests {
let block = test_data::block_builder()
.transaction().coinbase().build()
.transaction()
.input()
.hash(genesis_coinbase.clone())
.build()
.input().hash(genesis_coinbase.clone()).build()
.build()
.merkled_header().parent(genesis.hash()).build()
.build();
@ -307,4 +303,78 @@ mod tests {
assert_eq!(expected, verifier.verify(&block));
}
#[test]
fn coinbase_happy() {
let path = RandomTempPath::create_dir();
let storage = Storage::new(path.as_path()).unwrap();
let genesis = test_data::block_builder()
.transaction()
.coinbase()
.output().value(50).build()
.build()
.merkled_header().build()
.build();
storage.insert_block(&genesis).unwrap();
let genesis_coinbase = genesis.transactions()[0].hash();
// waiting 100 blocks for genesis coinbase to become valid
for _ in 0..100 {
storage.insert_block(
&test_data::block_builder()
.transaction().coinbase().build()
.merkled_header().parent(genesis.hash()).build()
.build()
).expect("All dummy blocks should be inserted");
}
let best_hash = storage.best_block().expect("Store should have hash after all we pushed there").hash;
let block = test_data::block_builder()
.transaction().coinbase().build()
.transaction()
.input().hash(genesis_coinbase.clone()).build()
.build()
.merkled_header().parent(best_hash).build()
.build();
let verifier = ChainVerifier::new(Arc::new(storage)).pow_skip().signatures_skip();
let expected = Ok(Chain::Main);
assert_eq!(expected, verifier.verify(&block))
}
#[test]
fn coinbase_overspend() {
let path = RandomTempPath::create_dir();
let storage = Storage::new(path.as_path()).unwrap();
let genesis = test_data::block_builder()
.transaction().coinbase().build()
.merkled_header().build()
.build();
storage.insert_block(&genesis).unwrap();
let block = test_data::block_builder()
.transaction()
.coinbase()
.output().value(5000000001).build()
.build()
.merkled_header().parent(genesis.hash()).build()
.build();
let verifier = ChainVerifier::new(Arc::new(storage)).pow_skip().signatures_skip();
let expected = Err(Error::CoinbaseOverspend {
expected_max: 5000000000,
actual: 5000000001
});
assert_eq!(expected, verifier.verify(&block));
}
}