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/pool_integration.rs b/roles/tests-integration/tests/pool_integration.rs index 6230d43249..2be0e94e26 100644 --- a/roles/tests-integration/tests/pool_integration.rs +++ b/roles/tests-integration/tests/pool_integration.rs @@ -3,10 +3,13 @@ mod common; use std::convert::TryInto; use common::{InterceptMessage, MessageDirection}; -use const_sv2::MESSAGE_TYPE_SETUP_CONNECTION_ERROR; +use const_sv2::{ + MESSAGE_TYPE_SETUP_CONNECTION, MESSAGE_TYPE_SETUP_CONNECTION_ERROR, + MESSAGE_TYPE_SUBMIT_SHARES_EXTENDED, +}; use roles_logic_sv2::{ common_messages_sv2::{Protocol, SetupConnection, SetupConnectionError}, - parsers::{CommonMessages, PoolMessages, TemplateDistribution}, + parsers::{CommonMessages, Mining, PoolMessages, TemplateDistribution}, }; // This test starts a Template Provider and a Pool, and checks if they exchange the correct @@ -94,3 +97,54 @@ async fn test_sniffer_interrupter() { assert_common_message!(&sniffer.next_message_from_downstream(), SetupConnection); assert_common_message!(&sniffer.next_message_from_upstream(), SetupConnectionError); } + +// covers +// https://github.com/stratum-mining/stratum/blob/main/test/message-generator/test/translation-proxy/translation-proxy.json +#[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; +}