use integration_tests_sv2::{interceptor::MessageDirection, template_provider::DifficultyLevel, *};
use stratum_apps::stratum_core::{common_messages_sv2::*, mining_sv2::*};
#[tokio::test]
async fn jd_non_aggregated_tproxy_integration() {
start_tracing();
let (tp, _tp_addr) = start_template_provider(None, DifficultyLevel::Low);
let (pool, pool_addr, jds_addr, _) =
start_pool_with_jds(tp.bitcoin_core(), vec![], vec![], false).await;
let (jdc_pool_sniffer, jdc_pool_sniffer_addr) =
start_sniffer("0", pool_addr, false, vec![], None);
let (jdc, jdc_addr, _) = start_jdc(
&[(jdc_pool_sniffer_addr, jds_addr)],
ipc_config(
tp.bitcoin_core().data_dir().clone(),
tp.bitcoin_core().is_signet(),
None,
),
vec![],
vec![],
false,
None,
);
let (tproxy_jdc_sniffer, tproxy_jdc_sniffer_addr) =
start_sniffer("1", jdc_addr, false, vec![], None);
let (translator, tproxy_addr, _) = start_sv2_translator(
&[tproxy_jdc_sniffer_addr],
false,
vec![],
vec![],
None,
false,
)
.await;
let (_minerd_process, _minerd_addr) = start_minerd(tproxy_addr, None, None, false).await;
let (_minerd_process, _minerd_addr) = start_minerd(tproxy_addr, None, None, false).await;
{
tproxy_jdc_sniffer
.wait_for_message_type_and_clean_queue(
MessageDirection::ToUpstream,
MESSAGE_TYPE_OPEN_EXTENDED_MINING_CHANNEL,
)
.await;
tproxy_jdc_sniffer
.wait_for_message_type_and_clean_queue(
MessageDirection::ToUpstream,
MESSAGE_TYPE_OPEN_EXTENDED_MINING_CHANNEL,
)
.await;
}
jdc_pool_sniffer
.wait_for_message_type(MessageDirection::ToUpstream, MESSAGE_TYPE_SETUP_CONNECTION)
.await;
jdc_pool_sniffer
.wait_for_message_type(
MessageDirection::ToDownstream,
MESSAGE_TYPE_SETUP_CONNECTION_SUCCESS,
)
.await;
jdc_pool_sniffer
.wait_for_message_type(
MessageDirection::ToUpstream,
MESSAGE_TYPE_OPEN_EXTENDED_MINING_CHANNEL,
)
.await;
jdc_pool_sniffer
.wait_for_message_type(
MessageDirection::ToDownstream,
MESSAGE_TYPE_OPEN_EXTENDED_MINING_CHANNEL_SUCCESS,
)
.await;
jdc_pool_sniffer
.wait_for_message_type(
MessageDirection::ToUpstream,
MESSAGE_TYPE_SUBMIT_SHARES_EXTENDED,
)
.await;
jdc_pool_sniffer
.wait_for_message_type(
MessageDirection::ToDownstream,
MESSAGE_TYPE_SUBMIT_SHARES_SUCCESS,
)
.await;
shutdown_all!(translator, jdc, pool);
}
#[tokio::test]
async fn jd_aggregated_tproxy_integration() {
start_tracing();
let (tp, _tp_addr) = start_template_provider(None, DifficultyLevel::Low);
let (pool, pool_addr, jds_addr, _) =
start_pool_with_jds(tp.bitcoin_core(), vec![], vec![], false).await;
let (jdc_pool_sniffer, jdc_pool_sniffer_addr) =
start_sniffer("0", pool_addr, false, vec![], None);
let (jdc, jdc_addr, _) = start_jdc(
&[(jdc_pool_sniffer_addr, jds_addr)],
ipc_config(
tp.bitcoin_core().data_dir().clone(),
tp.bitcoin_core().is_signet(),
None,
),
vec![],
vec![],
false,
None,
);
let (tproxy_jdc_sniffer, tproxy_jdc_sniffer_addr) =
start_sniffer("1", jdc_addr, false, vec![], None);
let (translator, tproxy_addr, _) = start_sv2_translator(
&[tproxy_jdc_sniffer_addr],
true,
vec![],
vec![],
None,
false,
)
.await;
let (_minerd_process, _minerd_addr) = start_minerd(tproxy_addr, None, None, false).await;
let (_minerd_process, _minerd_addr) = start_minerd(tproxy_addr, None, None, false).await;
{
tproxy_jdc_sniffer
.wait_for_message_type_and_clean_queue(
MessageDirection::ToUpstream,
MESSAGE_TYPE_OPEN_EXTENDED_MINING_CHANNEL,
)
.await;
assert!(
tproxy_jdc_sniffer
.assert_message_not_present(
MessageDirection::ToUpstream,
MESSAGE_TYPE_OPEN_EXTENDED_MINING_CHANNEL,
std::time::Duration::from_secs(2),
)
.await,
"Expected only one OpenExtendedMiningChannel but found another one."
);
}
jdc_pool_sniffer
.wait_for_message_type(MessageDirection::ToUpstream, MESSAGE_TYPE_SETUP_CONNECTION)
.await;
jdc_pool_sniffer
.wait_for_message_type(
MessageDirection::ToDownstream,
MESSAGE_TYPE_SETUP_CONNECTION_SUCCESS,
)
.await;
jdc_pool_sniffer
.wait_for_message_type(
MessageDirection::ToUpstream,
MESSAGE_TYPE_OPEN_EXTENDED_MINING_CHANNEL,
)
.await;
jdc_pool_sniffer
.wait_for_message_type(
MessageDirection::ToDownstream,
MESSAGE_TYPE_OPEN_EXTENDED_MINING_CHANNEL_SUCCESS,
)
.await;
jdc_pool_sniffer
.wait_for_message_type(
MessageDirection::ToUpstream,
MESSAGE_TYPE_SUBMIT_SHARES_EXTENDED,
)
.await;
jdc_pool_sniffer
.wait_for_message_type(
MessageDirection::ToDownstream,
MESSAGE_TYPE_SUBMIT_SHARES_SUCCESS,
)
.await;
shutdown_all!(translator, jdc, pool);
}