From d274e63c9a1033c14f3e9cf747000cc52f5ee315 Mon Sep 17 00:00:00 2001 From: Svyatoslav Nikolsky Date: Fri, 25 Nov 2016 11:09:18 +0300 Subject: [PATCH] relay_new_transaction_with_feefilter --- sync/src/synchronization_client.rs | 51 ++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/sync/src/synchronization_client.rs b/sync/src/synchronization_client.rs index b1377302..f33a8ebd 100644 --- a/sync/src/synchronization_client.rs +++ b/sync/src/synchronization_client.rs @@ -1303,6 +1303,7 @@ pub mod tests { use tokio_core::reactor::{Core, Handle}; use chain::{Block, Transaction}; use message::common::{InventoryVector, InventoryType}; + use message::types; use super::{Client, Config, SynchronizationClient, SynchronizationClientCore}; use connection_filter::tests::*; use synchronization_executor::Task; @@ -2162,4 +2163,54 @@ pub mod tests { Task::SendInventory(3, inventory, ServerTaskIndex::None), ]); } + + #[test] + fn relay_new_transaction_with_feefilter() { + let (_, _, executor, chain, sync) = create_sync(None, None); + + let b1 = test_data::block_builder().header().parent(test_data::genesis().hash()).build() + .transaction().output().value(1_000_000).build().build() + .build(); // genesis -> b1 + let tx0 = b1.transactions[0].clone(); + let tx1: Transaction = test_data::TransactionBuilder::with_output(800_000).add_input(&tx0, 0).into(); + let tx1_hash = tx1.hash(); + + let mut sync = sync.lock(); + sync.on_peer_connected(1); + sync.on_peer_connected(2); + sync.on_peer_connected(3); + sync.on_peer_connected(4); + + sync.on_peer_block(1, b1); + + { + use miner::transaction_fee_rate; + let chain = chain.read(); + assert_eq!(transaction_fee_rate(&*chain, &tx1), 3333); // 200_000 / 60 + } + + sync.on_peer_feefilter(2, &types::FeeFilter { fee_rate: 3000, }); + sync.on_peer_feefilter(3, &types::FeeFilter { fee_rate: 4000, }); + + // forget previous tasks + { executor.lock().take_tasks(); } + + sync.on_peer_transaction(1, tx1); + + let tasks = executor.lock().take_tasks(); + assert_eq!(tasks, vec![ + Task::SendInventory(2, vec![ + InventoryVector { + inv_type: InventoryType::MessageTx, + hash: tx1_hash.clone(), + } + ], ServerTaskIndex::None), + Task::SendInventory(4, vec![ + InventoryVector { + inv_type: InventoryType::MessageTx, + hash: tx1_hash.clone(), + } + ], ServerTaskIndex::None), + ]); + } }