Replace `mock_peer_set` function with `MockService` (#2790)
* Use `MockService` in inbound test Refactor the `mempool_requsets_for_transactions` test so that it uses a `MockService` instead of the `mock_peer_set` function. * Use `MockService` in the basic mempool test Refactor the `mempool_service_basic` test so that it uses a `MockService` instead of the `mock_peer_set` helper function. * Remove the `mock_peer_set` helper function It is not used anymore, since the usages were replaced with `MockService`s. Co-authored-by: Conrado Gouvea <conrado@zfnd.org>
This commit is contained in:
parent
776432978c
commit
1f1bf2ec4d
|
@ -12,8 +12,5 @@ mod sync;
|
||||||
pub mod tokio;
|
pub mod tokio;
|
||||||
pub mod tracing;
|
pub mod tracing;
|
||||||
|
|
||||||
#[cfg(test)]
|
|
||||||
pub(crate) mod tests;
|
|
||||||
|
|
||||||
pub use inbound::Inbound;
|
pub use inbound::Inbound;
|
||||||
pub use sync::ChainSync;
|
pub use sync::ChainSync;
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
use std::{collections::HashSet, net::SocketAddr, str::FromStr, sync::Arc};
|
use std::{collections::HashSet, net::SocketAddr, str::FromStr, sync::Arc};
|
||||||
|
|
||||||
use super::mempool::{unmined_transactions_in_blocks, Mempool};
|
use super::mempool::{unmined_transactions_in_blocks, Mempool};
|
||||||
use crate::components::{sync::SyncStatus, tests::mock_peer_set};
|
use crate::components::sync::SyncStatus;
|
||||||
|
|
||||||
use tokio::sync::oneshot;
|
use tokio::sync::oneshot;
|
||||||
use tower::{builder::ServiceBuilder, util::BoxService, ServiceExt};
|
use tower::{builder::ServiceBuilder, util::BoxService, ServiceExt};
|
||||||
|
@ -14,13 +14,14 @@ use zebra_chain::{
|
||||||
use zebra_consensus::Config as ConsensusConfig;
|
use zebra_consensus::Config as ConsensusConfig;
|
||||||
use zebra_network::{AddressBook, Request, Response};
|
use zebra_network::{AddressBook, Request, Response};
|
||||||
use zebra_state::Config as StateConfig;
|
use zebra_state::Config as StateConfig;
|
||||||
|
use zebra_test::mock_service::MockService;
|
||||||
|
|
||||||
#[tokio::test]
|
#[tokio::test]
|
||||||
async fn mempool_requests_for_transactions() {
|
async fn mempool_requests_for_transactions() {
|
||||||
let network = Network::Mainnet;
|
let network = Network::Mainnet;
|
||||||
let consensus_config = ConsensusConfig::default();
|
let consensus_config = ConsensusConfig::default();
|
||||||
let state_config = StateConfig::ephemeral();
|
let state_config = StateConfig::ephemeral();
|
||||||
let (peer_set, _) = mock_peer_set();
|
let peer_set = MockService::build().for_unit_tests();
|
||||||
let address_book = AddressBook::new(SocketAddr::from_str("0.0.0.0:0").unwrap(), Span::none());
|
let address_book = AddressBook::new(SocketAddr::from_str("0.0.0.0:0").unwrap(), Span::none());
|
||||||
let address_book = Arc::new(std::sync::Mutex::new(address_book));
|
let address_book = Arc::new(std::sync::Mutex::new(address_book));
|
||||||
let (sync_status, _recent_syncs) = SyncStatus::new();
|
let (sync_status, _recent_syncs) = SyncStatus::new();
|
||||||
|
@ -34,9 +35,13 @@ async fn mempool_requests_for_transactions() {
|
||||||
zebra_consensus::chain::init(consensus_config.clone(), network, state_service.clone())
|
zebra_consensus::chain::init(consensus_config.clone(), network, state_service.clone())
|
||||||
.await;
|
.await;
|
||||||
|
|
||||||
|
let peer_set_service = ServiceBuilder::new()
|
||||||
|
.buffer(1)
|
||||||
|
.service(BoxService::new(peer_set));
|
||||||
|
|
||||||
let mut mempool_service = Mempool::new(
|
let mut mempool_service = Mempool::new(
|
||||||
network,
|
network,
|
||||||
peer_set.clone(),
|
peer_set_service.clone(),
|
||||||
state_service.clone(),
|
state_service.clone(),
|
||||||
transaction_verifier,
|
transaction_verifier,
|
||||||
sync_status,
|
sync_status,
|
||||||
|
@ -60,7 +65,7 @@ async fn mempool_requests_for_transactions() {
|
||||||
block_verifier.clone(),
|
block_verifier.clone(),
|
||||||
));
|
));
|
||||||
|
|
||||||
let r = setup_tx.send((peer_set.clone(), address_book, mempool));
|
let r = setup_tx.send((peer_set_service, address_book, mempool));
|
||||||
// We can't expect or unwrap because the returned Result does not implement Debug
|
// We can't expect or unwrap because the returned Result does not implement Debug
|
||||||
assert!(r.is_ok());
|
assert!(r.is_ok());
|
||||||
|
|
||||||
|
|
|
@ -6,8 +6,7 @@ use tower::{ServiceBuilder, ServiceExt};
|
||||||
|
|
||||||
use zebra_consensus::Config as ConsensusConfig;
|
use zebra_consensus::Config as ConsensusConfig;
|
||||||
use zebra_state::Config as StateConfig;
|
use zebra_state::Config as StateConfig;
|
||||||
|
use zebra_test::mock_service::MockService;
|
||||||
use crate::components::tests::mock_peer_set;
|
|
||||||
|
|
||||||
#[tokio::test]
|
#[tokio::test]
|
||||||
async fn mempool_service_basic() -> Result<(), Report> {
|
async fn mempool_service_basic() -> Result<(), Report> {
|
||||||
|
@ -15,7 +14,7 @@ async fn mempool_service_basic() -> Result<(), Report> {
|
||||||
let network = Network::Mainnet;
|
let network = Network::Mainnet;
|
||||||
let consensus_config = ConsensusConfig::default();
|
let consensus_config = ConsensusConfig::default();
|
||||||
let state_config = StateConfig::ephemeral();
|
let state_config = StateConfig::ephemeral();
|
||||||
let (peer_set, _) = mock_peer_set();
|
let peer_set = MockService::build().for_unit_tests();
|
||||||
let (sync_status, _recent_syncs) = SyncStatus::new();
|
let (sync_status, _recent_syncs) = SyncStatus::new();
|
||||||
let (_state_service, _latest_chain_tip, chain_tip_change) =
|
let (_state_service, _latest_chain_tip, chain_tip_change) =
|
||||||
zebra_state::init(state_config.clone(), network);
|
zebra_state::init(state_config.clone(), network);
|
||||||
|
@ -31,7 +30,7 @@ async fn mempool_service_basic() -> Result<(), Report> {
|
||||||
// Start the mempool service
|
// Start the mempool service
|
||||||
let mut service = Mempool::new(
|
let mut service = Mempool::new(
|
||||||
network,
|
network,
|
||||||
peer_set,
|
Buffer::new(BoxService::new(peer_set), 1),
|
||||||
state_service.clone(),
|
state_service.clone(),
|
||||||
tx_verifier,
|
tx_verifier,
|
||||||
sync_status,
|
sync_status,
|
||||||
|
|
|
@ -1,29 +0,0 @@
|
||||||
use tokio::sync::mpsc::{self, UnboundedReceiver};
|
|
||||||
use tower::{buffer::Buffer, util::BoxService};
|
|
||||||
use zebra_network::{BoxError, Request, Response};
|
|
||||||
|
|
||||||
/// Create a mock service to represent a [`PeerSet`][zebra_network::PeerSet] and intercept the
|
|
||||||
/// requests it receives.
|
|
||||||
///
|
|
||||||
/// The intercepted requests are sent through an unbounded channel to the receiver that's also
|
|
||||||
/// returned from this function.
|
|
||||||
pub(crate) fn mock_peer_set() -> (
|
|
||||||
Buffer<BoxService<Request, Response, BoxError>, Request>,
|
|
||||||
UnboundedReceiver<Request>,
|
|
||||||
) {
|
|
||||||
let (sender, receiver) = mpsc::unbounded_channel();
|
|
||||||
|
|
||||||
let proxy_service = tower::service_fn(move |request| {
|
|
||||||
let sender = sender.clone();
|
|
||||||
|
|
||||||
async move {
|
|
||||||
let _ = sender.send(request);
|
|
||||||
|
|
||||||
Ok(Response::TransactionIds(vec![]))
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
let service = Buffer::new(BoxService::new(proxy_service), 10);
|
|
||||||
|
|
||||||
(service, receiver)
|
|
||||||
}
|
|
Loading…
Reference in New Issue