From 8cd9b2dbdc273a845c128940fd90a18272912fc9 Mon Sep 17 00:00:00 2001 From: Svyatoslav Nikolsky Date: Sat, 10 Dec 2016 14:38:51 +0300 Subject: [PATCH] fixed tests --- rpc/src/v1/helpers/errors.rs | 9 +++++++++ rpc/src/v1/impls/blockchain.rs | 17 +++++++++++++---- rpc/src/v1/types/get_block_response.rs | 4 ++-- 3 files changed, 24 insertions(+), 6 deletions(-) diff --git a/rpc/src/v1/helpers/errors.rs b/rpc/src/v1/helpers/errors.rs index 90ab238f..42603189 100644 --- a/rpc/src/v1/helpers/errors.rs +++ b/rpc/src/v1/helpers/errors.rs @@ -3,6 +3,7 @@ mod codes { // NOTE [ToDr] Codes from [-32099, -32000] pub const EXECUTION_ERROR: i64 = -32015; + pub const BLOCK_NOT_FOUND: i64 = -32099; } @@ -36,3 +37,11 @@ pub fn execution(data: T) -> Error { data: Some(Value::String(format!("{:?}", data))), } } + +pub fn block_not_found(data: T) -> Error { + Error { + code: ErrorCode::ServerError(codes::BLOCK_NOT_FOUND), + message: "Block not found".into(), + data: Some(Value::String(format!("{:?}", data))), + } +} diff --git a/rpc/src/v1/impls/blockchain.rs b/rpc/src/v1/impls/blockchain.rs index c5aa2f70..2af30e23 100644 --- a/rpc/src/v1/impls/blockchain.rs +++ b/rpc/src/v1/impls/blockchain.rs @@ -6,6 +6,7 @@ use v1::types::GetTxOutSetInfoResponse; use v1::types::RawBlock; use v1::types::H256; use v1::types::U256; +use v1::helpers::errors::block_not_found; use jsonrpc_core::Error; use db; use verification; @@ -13,7 +14,7 @@ use ser::serialize; use primitives::hash::H256 as GlobalH256; pub struct BlockChainClient { - _core: T, + core: T, } pub trait BlockChainClientCoreApi: Send + Sync + 'static { @@ -79,7 +80,7 @@ impl BlockChainClientCoreApi for BlockChainClientCore { impl BlockChainClient where T: BlockChainClientCoreApi { pub fn new(core: T) -> Self { BlockChainClient { - _core: core, + core: core, } } } @@ -97,8 +98,16 @@ impl BlockChain for BlockChainClient where T: BlockChainClientCoreApi { rpc_unimplemented!() } - fn block(&self, _hash: H256, _verbose: Option) -> Result { - rpc_unimplemented!() + fn block(&self, hash: H256, verbose: Option) -> Result { + let global_hash: GlobalH256 = hash.clone().into(); + if verbose.unwrap_or_default() { + self.core.get_verbose_block(global_hash.reversed()) + .map(|block| GetBlockResponse::Verbose(block)) + } else { + self.core.get_raw_block(global_hash.reversed()) + .map(|block| GetBlockResponse::Raw(block)) + } + .ok_or(block_not_found(hash)) } fn transaction(&self, _hash: H256, _watch_only: Option) -> Result { diff --git a/rpc/src/v1/types/get_block_response.rs b/rpc/src/v1/types/get_block_response.rs index 6c68935c..c48b9c98 100644 --- a/rpc/src/v1/types/get_block_response.rs +++ b/rpc/src/v1/types/get_block_response.rs @@ -75,7 +75,7 @@ mod tests { #[test] fn verbose_block_serialize() { let block = VerboseBlock::default(); - assert_eq!(serde_json::to_string(&block).unwrap(), r#"{"hash":"0000000000000000000000000000000000000000000000000000000000000000","confirmations":0,"size":0,"strippedsize":0,"weight":0,"height":null,"version":0,"versionHex":"","merkleroot":"0000000000000000000000000000000000000000000000000000000000000000","tx":[],"time":0,"mediantime":null,"nonce":0,"bits":0,"difficulty":0.0,"chainwork":"0","previousblockhash":null,"nextblockhash":null}"#); + assert_eq!(serde_json::to_string(&block).unwrap(), r#"{"hash":"0000000000000000000000000000000000000000000000000000000000000000","confirmations":0,"size":0,"strippedsize":0,"weight":0,"height":null,"version":0,"versionHex":"","merkleroot":"0000000000000000000000000000000000000000000000000000000000000000","tx":[],"time":0,"mediantime":null,"nonce":0,"bits":0,"difficulty":0.0,"chainwork":"","previousblockhash":null,"nextblockhash":null}"#); let block = VerboseBlock { hash: H256::from(1), @@ -142,6 +142,6 @@ mod tests { fn get_block_response_verbose_serialize() { let block = VerboseBlock::default(); let verbose_response = GetBlockResponse::Verbose(block); - assert_eq!(serde_json::to_string(&verbose_response).unwrap(), r#"{"hash":"0000000000000000000000000000000000000000000000000000000000000000","confirmations":0,"size":0,"strippedsize":0,"weight":0,"height":null,"version":0,"versionHex":"","merkleroot":"0000000000000000000000000000000000000000000000000000000000000000","tx":[],"time":0,"mediantime":null,"nonce":0,"bits":0,"difficulty":0.0,"chainwork":"0","previousblockhash":null,"nextblockhash":null}"#); + assert_eq!(serde_json::to_string(&verbose_response).unwrap(), r#"{"hash":"0000000000000000000000000000000000000000000000000000000000000000","confirmations":0,"size":0,"strippedsize":0,"weight":0,"height":null,"version":0,"versionHex":"","merkleroot":"0000000000000000000000000000000000000000000000000000000000000000","tx":[],"time":0,"mediantime":null,"nonce":0,"bits":0,"difficulty":0.0,"chainwork":"","previousblockhash":null,"nextblockhash":null}"#); } }