Skip to content

Commit 9d211f6

Browse files
authored
Fix encode TalkRequest regression during library transition (#276)
* Fix encode TalkRequest regression during library transition * fix: clippy
1 parent 2fb3bea commit 9d211f6

File tree

2 files changed

+51
-7
lines changed

2 files changed

+51
-7
lines changed

src/kbucket/bucket.rs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -410,9 +410,7 @@ where
410410
// Adjust `first_connected_pos` accordingly.
411411
match old_status.state {
412412
ConnectionState::Connected => {
413-
if self.first_connected_pos.map_or(false, |p| p == pos.0)
414-
&& pos.0 == self.nodes.len()
415-
{
413+
if (self.first_connected_pos == Some(pos.0)) && pos.0 == self.nodes.len() {
416414
// It was the last connected node.
417415
self.first_connected_pos = None
418416
}

src/rpc.rs

Lines changed: 50 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -155,8 +155,8 @@ impl Request {
155155
RequestBody::Talk { protocol, request } => {
156156
let mut list = Vec::<u8>::new();
157157
id.as_bytes().encode(&mut list);
158-
protocol.encode(&mut list);
159-
request.encode(&mut list);
158+
protocol.as_slice().encode(&mut list);
159+
request.as_slice().encode(&mut list);
160160
let header = Header {
161161
list: true,
162162
payload_length: list.len(),
@@ -479,8 +479,8 @@ impl Message {
479479
}
480480
5 => {
481481
// Talk Request
482-
let protocol = Vec::<u8>::decode(payload)?;
483-
let request = Vec::<u8>::decode(payload)?;
482+
let protocol = Bytes::decode(payload)?.to_vec();
483+
let request = Bytes::decode(payload)?.to_vec();
484484
if !payload.is_empty() {
485485
return Err(DecoderError::Custom("Payload should be empty"));
486486
}
@@ -812,4 +812,50 @@ mod tests {
812812
let data6 = [6, 193, 128, 128];
813813
Message::decode(&data6).expect_err("should reject extra data");
814814
}
815+
816+
#[test]
817+
fn test_encode_request_talk_request() {
818+
// reference input
819+
let id = RequestId(vec![113, 236, 255, 66, 31, 191, 221, 86]);
820+
let message = Message::Request(Request {
821+
id,
822+
body: RequestBody::Talk {
823+
protocol: hex::decode("757470").unwrap(),
824+
request: hex::decode("0100a028839e1549000003ef001000007619dde7").unwrap(),
825+
},
826+
});
827+
828+
// expected hex output
829+
let expected_output =
830+
hex::decode("05e28871ecff421fbfdd5683757470940100a028839e1549000003ef001000007619dde7")
831+
.unwrap();
832+
dbg!(hex::encode(message.clone().encode()));
833+
834+
let encoded_message = message.clone().encode();
835+
assert_eq!(encoded_message.clone(), expected_output);
836+
assert_eq!(Message::decode(&encoded_message).unwrap(), message);
837+
}
838+
839+
#[test]
840+
fn test_encode_request_talk_response() {
841+
// reference input
842+
let id = RequestId(vec![113, 236, 255, 66, 31, 191, 221, 86]);
843+
let message = Message::Response(Response {
844+
id,
845+
body: ResponseBody::Talk {
846+
response: hex::decode("0100a028839e1549000003ef001000007619dde7").unwrap(),
847+
},
848+
});
849+
850+
// expected hex output
851+
let expected_output =
852+
hex::decode("06de8871ecff421fbfdd56940100a028839e1549000003ef001000007619dde7")
853+
.unwrap();
854+
855+
dbg!(hex::encode(message.clone().encode()));
856+
857+
let encoded_message = message.clone().encode();
858+
assert_eq!(encoded_message.clone(), expected_output);
859+
assert_eq!(Message::decode(&encoded_message).unwrap(), message);
860+
}
815861
}

0 commit comments

Comments
 (0)