From 31c52f1639e13f2c0e44bc66e653c4524534a91e Mon Sep 17 00:00:00 2001 From: jbesraa Date: Thu, 14 Nov 2024 10:30:09 +0200 Subject: [PATCH] Add `translator_sv2` test --- roles/tests-integration/tests/common/mod.rs | 2 +- .../tests/translator_integration.rs | 57 +++++++++++++++++++ 2 files changed, 58 insertions(+), 1 deletion(-) create mode 100644 roles/tests-integration/tests/translator_integration.rs diff --git a/roles/tests-integration/tests/common/mod.rs b/roles/tests-integration/tests/common/mod.rs index 508b48a1c2..a0e061afa9 100644 --- a/roles/tests-integration/tests/common/mod.rs +++ b/roles/tests-integration/tests/common/mod.rs @@ -395,7 +395,7 @@ pub async fn start_sv2_translator(upstream: SocketAddr) -> SocketAddr { .expect("failed"); let listening_address = get_available_address(); let listening_port = listening_address.port(); - let hashrate = measure_hashrate(3) as f32 / 100.0; + let hashrate = measure_hashrate(1) as f32 / 100.0; let min_individual_miner_hashrate = hashrate; let shares_per_minute = 60.0; let channel_diff_update_interval = 60; diff --git a/roles/tests-integration/tests/translator_integration.rs b/roles/tests-integration/tests/translator_integration.rs new file mode 100644 index 0000000000..fa4aac086b --- /dev/null +++ b/roles/tests-integration/tests/translator_integration.rs @@ -0,0 +1,57 @@ +mod common; + +use common::MessageDirection; +use const_sv2::{MESSAGE_TYPE_SETUP_CONNECTION, MESSAGE_TYPE_SUBMIT_SHARES_EXTENDED}; +use roles_logic_sv2::parsers::{CommonMessages, Mining, PoolMessages}; + +// This test runs an sv2 translator between an sv1 mining device and a pool. the connection between +// the translator and the pool is intercepted by a sniffer. The test checks if the translator and +// the pool exchange the correct messages upon connection. And that the miner is able to submit +// shares. +#[tokio::test] +async fn translation_proxy() { + let pool_translator_sniffer_addr = common::get_available_address(); + let tp_addr = common::get_available_address(); + let pool_addr = common::get_available_address(); + let pool_translator_sniffer = common::start_sniffer( + "0".to_string(), + pool_translator_sniffer_addr, + pool_addr, + false, + None, + ) + .await; + let _tp = common::start_template_provider(tp_addr.port()).await; + let _pool = common::start_pool(Some(pool_addr), Some(tp_addr)).await; + let tproxy_addr = common::start_sv2_translator(pool_translator_sniffer_addr).await; + let _mining_device = common::start_mining_device_sv1(tproxy_addr).await; + pool_translator_sniffer + .wait_for_message_type(MessageDirection::ToUpstream, MESSAGE_TYPE_SETUP_CONNECTION) + .await; + assert_common_message!( + &pool_translator_sniffer.next_message_from_downstream(), + SetupConnection + ); + assert_common_message!( + &pool_translator_sniffer.next_message_from_upstream(), + SetupConnectionSuccess + ); + assert_mining_message!( + &pool_translator_sniffer.next_message_from_downstream(), + OpenExtendedMiningChannel + ); + assert_mining_message!( + &pool_translator_sniffer.next_message_from_upstream(), + OpenExtendedMiningChannelSuccess + ); + assert_mining_message!( + &pool_translator_sniffer.next_message_from_upstream(), + NewExtendedMiningJob + ); + pool_translator_sniffer + .wait_for_message_type( + MessageDirection::ToUpstream, + MESSAGE_TYPE_SUBMIT_SHARES_EXTENDED, + ) + .await; +}