Skip to content

Commit b734407

Browse files
committed
CRC: add response testing and fix corresponding bug
Signed-off-by: Jacinta Ferrant <[email protected]>
1 parent 3bbedfe commit b734407

File tree

3 files changed

+60
-6
lines changed

3 files changed

+60
-6
lines changed

stackslib/src/net/api/getsigner.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ impl RPCRequestHandler for GetSignerRequestHandler {
151151
)
152152
});
153153

154-
let response = match result {
154+
let blocks_signed = match result {
155155
Ok(response) => response,
156156
Err(error) => {
157157
return StacksHttpResponse::new_error(
@@ -163,6 +163,8 @@ impl RPCRequestHandler for GetSignerRequestHandler {
163163
}
164164
};
165165

166+
let response = GetSignerResponse { blocks_signed };
167+
166168
let mut preamble = HttpResponsePreamble::ok_json(&preamble);
167169
preamble.set_canonical_stacks_tip_height(Some(node.canonical_stacks_tip_height()));
168170
let body = HttpResponseContents::try_from_json(&response)?;

stackslib/src/net/api/tests/getsigner.rs

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,3 +94,56 @@ fn test_try_parse_request() {
9494
}
9595
}
9696
}
97+
98+
#[test]
99+
fn test_try_make_response() {
100+
let addr = SocketAddr::new(IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1)), 33333);
101+
102+
let test_observer = TestEventObserver::new();
103+
let rpc_test = TestRPC::setup_nakamoto(function_name!(), &test_observer);
104+
// Copy pasta of the test setup values
105+
let cycle_num = 5;
106+
let public_key = StacksPublicKey::from_hex(
107+
"0243311589af63c2adda04fcd7792c038a05c12a4fe40351b3eb1612ff6b2e5a0e",
108+
)
109+
.unwrap();
110+
111+
let random_private_key = StacksPrivateKey::new();
112+
let random_public_key = StacksPublicKey::from_private(&random_private_key);
113+
114+
let nakamoto_chain_tip = rpc_test.canonical_tip.clone();
115+
116+
let mut requests = vec![];
117+
118+
// Query existing signer
119+
let info = StacksHttpRequest::new_getsigner(
120+
addr.into(),
121+
&public_key,
122+
cycle_num,
123+
TipRequest::SpecificTip(nakamoto_chain_tip),
124+
);
125+
requests.push(info);
126+
127+
// query random signer that doesn't exist
128+
let request = StacksHttpRequest::new_getsigner(
129+
addr.into(),
130+
&random_public_key,
131+
cycle_num,
132+
TipRequest::SpecificTip(nakamoto_chain_tip),
133+
);
134+
requests.push(request);
135+
136+
let mut responses = rpc_test.run(requests);
137+
138+
// Existing signer
139+
let response = responses.remove(0);
140+
info!("response: {:?}", &response);
141+
let signer_response = response.decode_signer().unwrap();
142+
assert_eq!(signer_response.blocks_signed, 40);
143+
144+
// Signer doesn't exist so it should not have signed anything
145+
let response = responses.remove(0);
146+
info!("response: {:?}", &response);
147+
let signer_response = response.decode_signer().unwrap();
148+
assert_eq!(signer_response.blocks_signed, 0);
149+
}

testnet/stacks-node/src/tests/nakamoto_integrations.rs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ use stacks::core::{
6767
use stacks::libstackerdb::SlotMetadata;
6868
use stacks::net::api::callreadonly::CallReadOnlyRequestBody;
6969
use stacks::net::api::get_tenures_fork_info::TenureForkingInfo;
70+
use stacks::net::api::getsigner::GetSignerResponse;
7071
use stacks::net::api::getstackers::GetStackersResponse;
7172
use stacks::net::api::postblock_proposal::{
7273
BlockValidateReject, BlockValidateResponse, NakamotoBlockProposal, ValidateRejectCode,
@@ -8555,11 +8556,9 @@ fn v3_signer_api_endpoint() {
85558556
info!("Send request: GET {url}");
85568557
reqwest::blocking::get(url)
85578558
.unwrap_or_else(|e| panic!("GET request failed: {e}"))
8558-
.text()
8559-
.inspect(|response| info!("Recieved response: GET {url} -> {response}"))
8560-
.expect("Empty response")
8561-
.parse::<u64>()
8562-
.unwrap_or_else(|e| panic!("Failed to parse response as `u64`: {e}"))
8559+
.json::<GetSignerResponse>()
8560+
.unwrap()
8561+
.blocks_signed
85638562
};
85648563

85658564
// Check reward cycle 1, should be 0 (pre-nakamoto)

0 commit comments

Comments
 (0)