Skip to content

Commit

Permalink
Fix encode TalkRequest regression during library transition (#276)
Browse files Browse the repository at this point in the history
* Fix encode TalkRequest regression during library transition

* fix: clippy
  • Loading branch information
KolbyML authored Jan 20, 2025
1 parent 2fb3bea commit 9d211f6
Show file tree
Hide file tree
Showing 2 changed files with 51 additions and 7 deletions.
4 changes: 1 addition & 3 deletions src/kbucket/bucket.rs
Original file line number Diff line number Diff line change
Expand Up @@ -410,9 +410,7 @@ where
// Adjust `first_connected_pos` accordingly.
match old_status.state {
ConnectionState::Connected => {
if self.first_connected_pos.map_or(false, |p| p == pos.0)
&& pos.0 == self.nodes.len()
{
if (self.first_connected_pos == Some(pos.0)) && pos.0 == self.nodes.len() {
// It was the last connected node.
self.first_connected_pos = None
}
Expand Down
54 changes: 50 additions & 4 deletions src/rpc.rs
Original file line number Diff line number Diff line change
Expand Up @@ -155,8 +155,8 @@ impl Request {
RequestBody::Talk { protocol, request } => {
let mut list = Vec::<u8>::new();
id.as_bytes().encode(&mut list);
protocol.encode(&mut list);
request.encode(&mut list);
protocol.as_slice().encode(&mut list);
request.as_slice().encode(&mut list);
let header = Header {
list: true,
payload_length: list.len(),
Expand Down Expand Up @@ -479,8 +479,8 @@ impl Message {
}
5 => {
// Talk Request
let protocol = Vec::<u8>::decode(payload)?;
let request = Vec::<u8>::decode(payload)?;
let protocol = Bytes::decode(payload)?.to_vec();
let request = Bytes::decode(payload)?.to_vec();
if !payload.is_empty() {
return Err(DecoderError::Custom("Payload should be empty"));
}
Expand Down Expand Up @@ -812,4 +812,50 @@ mod tests {
let data6 = [6, 193, 128, 128];
Message::decode(&data6).expect_err("should reject extra data");
}

#[test]
fn test_encode_request_talk_request() {
// reference input
let id = RequestId(vec![113, 236, 255, 66, 31, 191, 221, 86]);
let message = Message::Request(Request {
id,
body: RequestBody::Talk {
protocol: hex::decode("757470").unwrap(),
request: hex::decode("0100a028839e1549000003ef001000007619dde7").unwrap(),
},
});

// expected hex output
let expected_output =
hex::decode("05e28871ecff421fbfdd5683757470940100a028839e1549000003ef001000007619dde7")
.unwrap();
dbg!(hex::encode(message.clone().encode()));

let encoded_message = message.clone().encode();
assert_eq!(encoded_message.clone(), expected_output);
assert_eq!(Message::decode(&encoded_message).unwrap(), message);
}

#[test]
fn test_encode_request_talk_response() {
// reference input
let id = RequestId(vec![113, 236, 255, 66, 31, 191, 221, 86]);
let message = Message::Response(Response {
id,
body: ResponseBody::Talk {
response: hex::decode("0100a028839e1549000003ef001000007619dde7").unwrap(),
},
});

// expected hex output
let expected_output =
hex::decode("06de8871ecff421fbfdd56940100a028839e1549000003ef001000007619dde7")
.unwrap();

dbg!(hex::encode(message.clone().encode()));

let encoded_message = message.clone().encode();
assert_eq!(encoded_message.clone(), expected_output);
assert_eq!(Message::decode(&encoded_message).unwrap(), message);
}
}

0 comments on commit 9d211f6

Please sign in to comment.