From 9fe8f4e4c626ae17b2c7ffd978ebb56f8e51763f Mon Sep 17 00:00:00 2001 From: junderw Date: Sun, 7 Aug 2022 10:51:49 +0900 Subject: [PATCH] Tests: Add AddressPaginator test --- src/rest.rs | 67 ++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 66 insertions(+), 1 deletion(-) diff --git a/src/rest.rs b/src/rest.rs index 15549068e..f63bda8bd 100644 --- a/src/rest.rs +++ b/src/rest.rs @@ -603,6 +603,7 @@ pub fn start(config: Arc, query: Arc) -> Handle { /// This enum is used to discern between a txid or a usize that is used /// for pagination on the /api/address|scripthash/:address/txs/chain /// endpoint. +#[cfg_attr(test, derive(Debug, PartialEq))] pub enum AddressPaginator { Txid(Txid), Skip(usize), @@ -1379,7 +1380,8 @@ impl From for HttpError { #[cfg(test)] mod tests { - use crate::rest::HttpError; + use crate::rest::{AddressPaginator, HttpError}; + use bitcoin::{Txid, hashes::hex::FromHex}; use serde_json::Value; use std::collections::HashMap; @@ -1444,4 +1446,67 @@ mod tests { assert!(err.is_err()); } + + #[test] + fn test_address_paginator() { + // Each vector is (result, expected, assert_reason) + let vectors = [ + ( + "".parse::(), + Err("Invalid AddressPaginator".to_string()), + "fails both Txid from_hex and usize parse", + ), + ( + "0".parse::(), + Err("Invalid AddressPaginator".to_string()), + "skipping 0 is pointless, so fails", + ), + ( + "18446744073709551615".parse::(), + Ok(AddressPaginator::Skip(18446744073709551615)), + "valid usize (u64::MAX)", + ), + ( + "1".parse::(), + Ok(AddressPaginator::Skip(1)), + "valid usize", + ), + ( + "0000000000000000000000000000000000000000000000000000000000000001" + .parse::(), + Ok(AddressPaginator::Txid( + Txid::from_hex("0000000000000000000000000000000000000000000000000000000000000001") + .unwrap(), + )), + "64 length is always treated as Txid", + ), + ( + "0000000000000000000000000000000000000000000018446744073709551615" + .parse::(), + Ok(AddressPaginator::Txid( + Txid::from_hex("0000000000000000000000000000000000000000000018446744073709551615") + .unwrap(), + )), + "64 length is always treated as Txid", + ), + ( + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + .parse::(), + Ok(AddressPaginator::Txid( + Txid::from_hex("ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff") + .unwrap(), + )), + "valid Txid", + ), + ( + "ffffffxfffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + .parse::(), + Err("Invalid AddressPaginator".to_string()), + "fails both Txid from_hex and usize parse", + ), + ]; + for vector in vectors { + assert_eq!(vector.0, vector.1, "{}", vector.2); + } + } }