Skip to content

Commit eb27cbe

Browse files
committed
Test JDC fallback feature
Add a test to validate the behavior of JDC upon receiving a SubmitShareError message from the connected Pool. JDC is expected to switch to a different pool/jds pair if specfied in the config, otherwise it should do solo mining. + Remove jdc-upstream-change MG test
1 parent 20ce9cc commit eb27cbe

File tree

7 files changed

+72
-314
lines changed

7 files changed

+72
-314
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
use const_sv2::{MESSAGE_TYPE_SETUP_CONNECTION, MESSAGE_TYPE_SUBMIT_SHARES_SUCCESS};
2+
use integration_tests_sv2::*;
3+
use roles_logic_sv2::{
4+
mining_sv2::SubmitSharesError,
5+
parsers::{AnyMessage, CommonMessages, Mining},
6+
};
7+
use sniffer::{MessageDirection, ReplaceMessage};
8+
use std::convert::TryInto;
9+
10+
// Tests whether JDC will switch to a new pool after receiving a `SubmitSharesError` message from
11+
// the currently connected pool.
12+
#[tokio::test]
13+
async fn test_jdc_pool_fallback_after_submit_rejection() {
14+
start_tracing();
15+
let (tp, tp_addr) = start_template_provider(None);
16+
let (_pool_1, pool_addr_1) = start_pool(Some(tp_addr)).await;
17+
// Sniffer between JDC and first pool
18+
let (sniffer_1, sniffer_addr_1) = start_sniffer(
19+
"0".to_string(),
20+
pool_addr_1,
21+
false,
22+
Some(
23+
// Should trigger Fallback process in JDC
24+
ReplaceMessage::new(
25+
MessageDirection::ToDownstream,
26+
MESSAGE_TYPE_SUBMIT_SHARES_SUCCESS,
27+
AnyMessage::Mining(Mining::SubmitSharesError(SubmitSharesError {
28+
channel_id: 0,
29+
sequence_number: 0,
30+
error_code: "invalid-nonce".to_string().into_bytes().try_into().unwrap(),
31+
})),
32+
)
33+
.into(),
34+
),
35+
)
36+
.await;
37+
let (_pool_2, pool_addr_2) = start_pool(Some(tp_addr)).await;
38+
// Sniffer between JDC and second pool
39+
let (sniffer_2, sniffer_addr_2) =
40+
start_sniffer("1".to_string(), pool_addr_2, false, None).await;
41+
let (_jds_1, jds_addr_1) = start_jds(tp.rpc_info()).await;
42+
// Sniffer between JDC and first JDS
43+
let (sniffer_3, sniffer_addr_3) = start_sniffer("2".to_string(), jds_addr_1, false, None).await;
44+
let (_jds_2, jds_addr_2) = start_jds(tp.rpc_info()).await;
45+
// Sniffer between JDC and second JDS
46+
let (sniffer_4, sniffer_addr_4) = start_sniffer("3".to_string(), jds_addr_2, false, None).await;
47+
let (_jdc, jdc_addr) = start_jdc(
48+
&[
49+
(sniffer_addr_1, sniffer_addr_3),
50+
(sniffer_addr_2, sniffer_addr_4),
51+
],
52+
tp_addr,
53+
)
54+
.await;
55+
// Assert that JDC has connected to the first (Pool,JDS) pair
56+
sniffer_1
57+
.wait_for_message_type(MessageDirection::ToUpstream, MESSAGE_TYPE_SETUP_CONNECTION)
58+
.await;
59+
sniffer_3
60+
.wait_for_message_type(MessageDirection::ToUpstream, MESSAGE_TYPE_SETUP_CONNECTION)
61+
.await;
62+
let (_translator, sv2_translator_addr) = start_sv2_translator(jdc_addr).await;
63+
let _ = start_mining_device_sv1(sv2_translator_addr, true, None).await;
64+
// Assert that JDC switched to the second (Pool,JDS) pair
65+
sniffer_2
66+
.wait_for_message_type(MessageDirection::ToUpstream, MESSAGE_TYPE_SETUP_CONNECTION)
67+
.await;
68+
sniffer_4
69+
.wait_for_message_type(MessageDirection::ToUpstream, MESSAGE_TYPE_SETUP_CONNECTION)
70+
.await;
71+
}

scripts/message-generator-tests.sh

+1-6
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,8 @@
33
search_dir="test/message-generator/test/"
44

55
for entry in `ls $search_dir`; do
6-
if [ "$entry" = "interop-jdc-change-upstream" ]; then
7-
echo "Skipping $entry"
8-
continue
9-
fi
10-
116
echo $entry
12-
$search_dir$entry/$entry.sh
7+
$search_dir$entry/$entry.sh
138
done
149

1510
cd roles

test/config/interop-jd-change-upstream/jdc-config.toml

-49
This file was deleted.

test/config/interop-jd-change-upstream/jds-config.toml

-20
This file was deleted.

test/config/interop-jd-change-upstream/proxy-config.toml

-13
This file was deleted.

test/message-generator/test/interop-jdc-change-upstream/interop-jdc-change-upstream.json

-216
This file was deleted.

0 commit comments

Comments
 (0)