Skip to content

Commit b50e256

Browse files
committed
Test JDC pool fallback functionality
1 parent 63e5b3d commit b50e256

File tree

1 file changed

+56
-0
lines changed

1 file changed

+56
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
use std::convert::TryInto;
2+
3+
use const_sv2::{
4+
MESSAGE_TYPE_MINING_SET_NEW_PREV_HASH, MESSAGE_TYPE_SETUP_CONNECTION,
5+
MESSAGE_TYPE_SETUP_CONNECTION_SUCCESS, MESSAGE_TYPE_SUBMIT_SHARES_ERROR,
6+
};
7+
use integration_tests_sv2::*;
8+
use sniffer::InterceptMessage;
9+
10+
use crate::sniffer::MessageDirection;
11+
use roles_logic_sv2::{
12+
mining_sv2::SubmitSharesError,
13+
parsers::{CommonMessages, Mining, PoolMessages},
14+
};
15+
16+
// Start JDClient with two pools in the pool list config. The test forces the first pool to send a
17+
// share submission rejection by altering a message(MINING_SET_NEW_PREV_HASH) sent by the pool. The
18+
// test verifies that the second pool will be used as a fallback.
19+
#[tokio::test]
20+
async fn test_jdc_pool_fallback_after_submit_rejection() {
21+
let (_tp, tp_addr) = start_template_provider(None).await;
22+
let (_pool, pool_addr) = start_pool(Some(tp_addr)).await;
23+
let (sniffer_1, sniffer_addr) = start_sniffer(
24+
"0".to_string(),
25+
pool_addr,
26+
false,
27+
Some(vec![InterceptMessage::new(
28+
MessageDirection::ToDownstream,
29+
MESSAGE_TYPE_MINING_SET_NEW_PREV_HASH,
30+
PoolMessages::Mining(Mining::SubmitSharesError(SubmitSharesError {
31+
channel_id: 0,
32+
sequence_number: 0,
33+
error_code: "invalid-nonce".to_string().into_bytes().try_into().unwrap(),
34+
})),
35+
MESSAGE_TYPE_SUBMIT_SHARES_ERROR,
36+
false,
37+
)]),
38+
)
39+
.await;
40+
let (_pool_2, pool_addr_2) = start_pool(Some(tp_addr)).await;
41+
let (sniffer_2, sniffer_addr_2) =
42+
start_sniffer("1".to_string(), pool_addr_2, false, None).await;
43+
let (_jds, jds_addr) = start_jds(tp_addr).await;
44+
let (_jdc, jdc_addr) = start_jdc(vec![sniffer_addr, sniffer_addr_2], tp_addr, jds_addr).await;
45+
assert_common_message!(&sniffer_1.next_message_from_downstream(), SetupConnection);
46+
let (_translator, _sv2_translator_addr) = start_sv2_translator(jdc_addr).await;
47+
sniffer_2
48+
.wait_for_message_type(MessageDirection::ToUpstream, MESSAGE_TYPE_SETUP_CONNECTION)
49+
.await;
50+
sniffer_2
51+
.wait_for_message_type(
52+
MessageDirection::ToDownstream,
53+
MESSAGE_TYPE_SETUP_CONNECTION_SUCCESS,
54+
)
55+
.await;
56+
}

0 commit comments

Comments
 (0)