added tests for ser/deser BlockTemplateTransaction

This commit is contained in:
Svyatoslav Nikolsky 2016-12-09 12:30:29 +03:00
parent eb5749863c
commit 61faefb9ce
2 changed files with 68 additions and 9 deletions

View File

@ -10,6 +10,7 @@ use super::raw_transaction::RawTransaction;
/// https://github.com/bitcoin/bips/blob/master/bip-0023.mediawiki
/// https://github.com/bitcoin/bips/blob/master/bip-0009.mediawiki#getblocktemplate_changes
/// https://github.com/bitcoin/bips/blob/master/bip-0145.mediawiki
#[derive(Debug, Default, Serialize, Deserialize, PartialEq, Eq, Clone)]
pub struct BlockTemplate {
/// The preferred block version
pub version: u32,
@ -56,6 +57,7 @@ pub struct BlockTemplate {
}
/// Transaction data as included in `BlockTemplate`
#[derive(Debug, Default, Serialize, Deserialize, PartialEq, Eq, Clone)]
pub struct BlockTemplateTransaction {
/// Transaction data encoded in hexadecimal
pub data: RawTransaction,
@ -68,12 +70,73 @@ pub struct BlockTemplateTransaction {
/// Difference in value between transaction inputs and outputs (in Satoshis).
/// For coinbase transactions, this is a negative Number of the total collected block fees (ie, not including the block subsidy).
/// If key is not present, fee is unknown and clients MUST NOT assume there isn't one
pub fee: Option<Option<i64>>,
pub fee: Option<i64>,
/// Total SigOps cost, as counted for purposes of block limits.
/// If key is not present, sigop cost is unknown and clients MUST NOT assume it is zero.
pub sigops: Option<Option<i64>>,
pub sigops: Option<i64>,
/// Total transaction weight, as counted for purposes of block limits.
pub weight: Option<i64>,
/// If provided and true, this transaction must be in the final block
pub required: Option<Option<bool>>,
pub required: bool,
}
#[cfg(test)]
mod tests {
use serde_json;
use super::super::hash::H256;
use super::super::bytes::Bytes;
use rustc_serialize::hex::FromHex;
use super::*;
#[test]
fn block_template_transaction_serialize() {
assert_eq!(serde_json::to_string(&BlockTemplateTransaction {
data: Bytes("00010203".from_hex().unwrap()),
txid: None,
hash: None,
depends: None,
fee: None,
sigops: None,
weight: None,
required: false,
}).unwrap(), r#"{"data":"00010203","txid":null,"hash":null,"depends":null,"fee":null,"sigops":null,"weight":null,"required":false}"#);
assert_eq!(serde_json::to_string(&BlockTemplateTransaction {
data: Bytes("00010203".from_hex().unwrap()),
txid: Some(H256::from(1)),
hash: Some(H256::from(2)),
depends: Some(vec![1, 2]),
fee: Some(100),
sigops: Some(200),
weight: Some(300),
required: true,
}).unwrap(), r#"{"data":"00010203","txid":"0100000000000000000000000000000000000000000000000000000000000000","hash":"0200000000000000000000000000000000000000000000000000000000000000","depends":[1,2],"fee":100,"sigops":200,"weight":300,"required":true}"#);
}
#[test]
fn block_template_transaction_deserialize() {
assert_eq!(
serde_json::from_str::<BlockTemplateTransaction>(r#"{"data":"00010203","txid":null,"hash":null,"depends":null,"fee":null,"sigops":null,"weight":null,"required":false}"#).unwrap(),
BlockTemplateTransaction {
data: Bytes("00010203".from_hex().unwrap()),
txid: None,
hash: None,
depends: None,
fee: None,
sigops: None,
weight: None,
required: false,
});
assert_eq!(
serde_json::from_str::<BlockTemplateTransaction>(r#"{"data":"00010203","txid":"0100000000000000000000000000000000000000000000000000000000000000","hash":"0200000000000000000000000000000000000000000000000000000000000000","depends":[1,2],"fee":100,"sigops":200,"weight":300,"required":true}"#).unwrap(),
BlockTemplateTransaction {
data: Bytes("00010203".from_hex().unwrap()),
txid: Some(H256::from(1)),
hash: Some(H256::from(2)),
depends: Some(vec![1, 2]),
fee: Some(100),
sigops: Some(200),
weight: Some(300),
required: true,
});
}
}

View File

@ -21,7 +21,7 @@ pub enum BlockTemplateRequestMode {
/// https://github.com/bitcoin/bips/blob/master/bip-0023.mediawiki
/// https://github.com/bitcoin/bips/blob/master/bip-0009.mediawiki#getblocktemplate_changes
/// https://github.com/bitcoin/bips/blob/master/bip-0145.mediawiki
#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Clone)]
#[derive(Debug, Default, Serialize, Deserialize, PartialEq, Eq, Clone)]
pub struct BlockTemplateRequest {
/// Request mode
pub mode: Option<BlockTemplateRequestMode>,
@ -50,11 +50,7 @@ mod tests {
#[test]
fn block_template_request_serialize() {
assert_eq!(serde_json::to_string(&BlockTemplateRequest {
mode: None,
capabilities: None,
rules: None,
}).unwrap(), r#"{"mode":null,"capabilities":null,"rules":null}"#);
assert_eq!(serde_json::to_string(&BlockTemplateRequest::default()).unwrap(), r#"{"mode":null,"capabilities":null,"rules":null}"#);
assert_eq!(serde_json::to_string(&BlockTemplateRequest {
mode: Some(BlockTemplateRequestMode::Template),
capabilities: Some(vec!["a".to_owned()].into_iter().collect()),