From eb5749863ca24bbb7d217285dd255bcfabc94e36 Mon Sep 17 00:00:00 2001 From: Svyatoslav Nikolsky Date: Fri, 9 Dec 2016 12:02:30 +0300 Subject: [PATCH] added tests for ser/deser BlockTemplateRequest --- rpc/src/v1/types/block_template_request.rs | 54 ++++++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/rpc/src/v1/types/block_template_request.rs b/rpc/src/v1/types/block_template_request.rs index 7b66d883..0684de0c 100644 --- a/rpc/src/v1/types/block_template_request.rs +++ b/rpc/src/v1/types/block_template_request.rs @@ -4,12 +4,15 @@ use std::collections::HashSet; /// Block template request mode +#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Clone, Copy)] pub enum BlockTemplateRequestMode { /// Work as described in BIP0022: /// https://github.com/bitcoin/bips/blob/master/bip-0022.mediawiki + #[serde(rename="template")] Template, /// Work as described in BIP0023: /// https://github.com/bitcoin/bips/blob/master/bip-0023.mediawiki + #[serde(rename="proposal")] Proposal, } @@ -18,6 +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)] pub struct BlockTemplateRequest { /// Request mode pub mode: Option, @@ -26,3 +30,53 @@ pub struct BlockTemplateRequest { /// Softfork deployments, supported by client pub rules: Option>, } + +#[cfg(test)] +mod tests { + use serde_json; + use super::*; + + #[test] + fn block_template_request_mode_serialize() { + assert_eq!(serde_json::to_string(&BlockTemplateRequestMode::Template).unwrap(), r#""template""#); + assert_eq!(serde_json::to_string(&BlockTemplateRequestMode::Proposal).unwrap(), r#""proposal""#); + } + + #[test] + fn block_template_request_mode_deserialize() { + assert_eq!(serde_json::from_str::(r#""template""#).unwrap(), BlockTemplateRequestMode::Template); + assert_eq!(serde_json::from_str::(r#""proposal""#).unwrap(), BlockTemplateRequestMode::Proposal); + } + + #[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 { + mode: Some(BlockTemplateRequestMode::Template), + capabilities: Some(vec!["a".to_owned()].into_iter().collect()), + rules: Some(vec!["b".to_owned()].into_iter().collect()), + }).unwrap(), r#"{"mode":"template","capabilities":["a"],"rules":["b"]}"#); + } + + #[test] + fn block_template_request_deserialize() { + assert_eq!( + serde_json::from_str::(r#"{"mode":null,"capabilities":null,"rules":null}"#).unwrap(), + BlockTemplateRequest { + mode: None, + capabilities: None, + rules: None, + }); + assert_eq!( + serde_json::from_str::(r#"{"mode":"template","capabilities":["a"],"rules":["b"]}"#).unwrap(), + BlockTemplateRequest { + mode: Some(BlockTemplateRequestMode::Template), + capabilities: Some(vec!["a".to_owned()].into_iter().collect()), + rules: Some(vec!["b".to_owned()].into_iter().collect()), + }); + } +}