Skip to content

Commit

Permalink
Testcase for reading block from file
Browse files Browse the repository at this point in the history
  • Loading branch information
dr-orlovsky committed Aug 19, 2019
1 parent aae4a10 commit 5eadf3c
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 4 deletions.
1 change: 1 addition & 0 deletions Cargo.toml
Expand Up @@ -36,6 +36,7 @@ version = "=0.3.2"


[dev-dependencies]
tempfile = "3.1.0"
serde_derive = "=1.0.98"
serde_json = "1"
serde_test = "1"
Expand Down
51 changes: 47 additions & 4 deletions src/network/stream_reader.rs
Expand Up @@ -21,8 +21,7 @@
//!

use std::fmt;
use std::io;
use std::io::BufRead;
use std::io::{self, BufRead};

use consensus::{encode, Decodable};

Expand Down Expand Up @@ -82,11 +81,13 @@ impl<R: BufRead> StreamReader<R> {
}

#[cfg(test)]
mod test {
extern crate tempfile;

#[cfg(test)]
mod test {
use std::thread;
use std::time::Duration;
use std::io::{self, BufReader, Write};
use std::io::{self, BufReader, Write, Seek, SeekFrom};
use std::net::{TcpListener, TcpStream, Shutdown};
use std::thread::JoinHandle;

Expand Down Expand Up @@ -312,4 +313,46 @@ mod test {
// Waiting TCP server thread to terminate
handle.join().unwrap();
}

#[test]
fn read_block_from_file_test() {
use super::tempfile::tempfile;
use std::io::{self, Write};
use consensus::serialize;
use hex::decode as hex_decode;
use Block;

let normal_data = hex_decode("010000004ddccd549d28f385ab457e98d1b11ce80bfea2c5ab93015ade4973e400000000bf4473e53794beae34e64fccc471dace6ae544180816f89591894e0f417a914cd74d6e49ffff001d323b3a7b0201000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0804ffff001d026e04ffffffff0100f2052a0100000043410446ef0102d1ec5240f0d061a4246c1bdef63fc3dbab7733052fbbf0ecd8f41fc26bf049ebb4f9527f374280259e7cfa99c48b0e3f39c51347a19a5819651503a5ac00000000010000000321f75f3139a013f50f315b23b0c9a2b6eac31e2bec98e5891c924664889942260000000049483045022100cb2c6b346a978ab8c61b18b5e9397755cbd17d6eb2fe0083ef32e067fa6c785a02206ce44e613f31d9a6b0517e46f3db1576e9812cc98d159bfdaf759a5014081b5c01ffffffff79cda0945903627c3da1f85fc95d0b8ee3e76ae0cfdc9a65d09744b1f8fc85430000000049483045022047957cdd957cfd0becd642f6b84d82f49b6cb4c51a91f49246908af7c3cfdf4a022100e96b46621f1bffcf5ea5982f88cef651e9354f5791602369bf5a82a6cd61a62501fffffffffe09f5fe3ffbf5ee97a54eb5e5069e9da6b4856ee86fc52938c2f979b0f38e82000000004847304402204165be9a4cbab8049e1af9723b96199bfd3e85f44c6b4c0177e3962686b26073022028f638da23fc003760861ad481ead4099312c60030d4cb57820ce4d33812a5ce01ffffffff01009d966b01000000434104ea1feff861b51fe3f5f8a3b12d0f4712db80e919548a80839fc47c6a21e66d957e9c5d8cd108c7a2d2324bad71f9904ac0ae7336507d785b17a2c115e427a32fac00000000").unwrap();
let cutoff_data = hex_decode("010000004ddccd549d28f385ab457e98d1b11ce80bfea2c5ab93015ade4973e400000000bf4473e53794beae34e64fccc471dace6ae544180816f89591894e0f417a914cd74d6e49ffff001d323b3a7b0201000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0804ffff001d026e04ffffffff0100f2052a0100000043410446ef0102d1ec5240f0d061a4246c1bdef63fc3dbab7733052fbbf0ecd8f41fc26bf049ebb4f9527f374280259e7cfa99c48b0e3f39c51347a19a5819651503a5ac00000000010000000321f75f3139a013f50f315b23b0c9a2b6eac31e2bec98e5891c924664889942260000000049483045022100cb2c6b346a978ab8c61b18b5e9397755cbd17d6eb2fe0083ef32e067fa6c785a02206ce44e613f31d9a6b0517e46f3db1576e9812cc98d159bfdaf759a5014081b5c01ffffffff79cda0945903627c3da1f85fc95d0b8ee3e76ae0cfdc9a65d09744b1f8fc85430000000049483045022047957cdd957cfd0becd642f6b84d82f49b6cb4c51a91f49246908af7c3cfdf4a022100e96b46621f1bffcf5ea5982f88cef651e9354f5791602369bf5a82a6cd61a62501fffffffffe09f5fe3ffbf5ee97a54eb5e5069e9da6b4856ee86fc52938c2f979b0f38e82000000004847304402204165be9a4cbab8049e1af9723b96199bfd3e85f44c6b4c0177e3962686b26073022028f638da23fc003760861ad481ead4099312c60030d4cb57820ce4d33812a5ce01ffffffff01009d966b01000000434104ea1feff861b51fe3f5f8a3b12d0f4712db80e919548a80839fc47c6a21e66d957e9c5d8cd108c7a2d2324bad71f9904ac0ae7336507d785b17a2c115e427a32fac").unwrap();
let prevhash = hex_decode("4ddccd549d28f385ab457e98d1b11ce80bfea2c5ab93015ade4973e400000000").unwrap();
let merkle = hex_decode("bf4473e53794beae34e64fccc471dace6ae544180816f89591894e0f417a914c").unwrap();

let mut normal_file = tempfile().unwrap();
let mut cutoff_file = tempfile().unwrap();
normal_file.write_all(&normal_data).unwrap();
cutoff_file.write_all(&cutoff_data).unwrap();
normal_file.seek(SeekFrom::Start(0)).unwrap();
cutoff_file.seek(SeekFrom::Start(0)).unwrap();

let stream = io::BufReader::new(normal_file);
let mut reader = StreamReader::new(Box::new(stream), None);
let normal_block = reader.read_next::<Block>();

let stream = io::BufReader::new(cutoff_file);
let mut reader = StreamReader::new(Box::new(stream), None);
let cutoff_block = reader.read_next::<Block>();

assert!(normal_block.is_ok());
assert!(cutoff_block.is_err());
let block = normal_block.unwrap();
assert_eq!(block.header.version, 1);
assert_eq!(serialize(&block.header.prev_blockhash), prevhash);
assert_eq!(serialize(&block.header.merkle_root), merkle);
assert_eq!(block.header.time, 1231965655);
assert_eq!(block.header.bits, 486604799);
assert_eq!(block.header.nonce, 2067413810);

// should be also ok for a non-witness block as commitment is optional in that case
assert!(block.check_witness_commitment());
}
}

0 comments on commit 5eadf3c

Please sign in to comment.