tests and fixes for message serialization
This commit is contained in:
parent
3e373acd23
commit
28f6abb63e
|
@ -1,7 +1,7 @@
|
|||
use bytes::Bytes;
|
||||
use crypto::checksum;
|
||||
use ser::{
|
||||
Serializable, Stream, CompactInteger,
|
||||
Serializable, Stream,
|
||||
Deserializable, Reader, Error as ReaderError
|
||||
};
|
||||
use Command;
|
||||
|
@ -25,7 +25,7 @@ impl Serializable for Message {
|
|||
stream
|
||||
.append(&self.magic)
|
||||
.append(&self.command)
|
||||
.append(&CompactInteger::from(self.payload.len()))
|
||||
.append(&(self.payload.len() as u32))
|
||||
.append_slice(&self.payload_checksum())
|
||||
.append_slice(&self.payload);
|
||||
}
|
||||
|
@ -35,9 +35,9 @@ impl Deserializable for Message {
|
|||
fn deserialize(reader: &mut Reader) -> Result<Self, ReaderError> where Self: Sized {
|
||||
let magic = try!(reader.read());
|
||||
let command = try!(reader.read());
|
||||
let len: CompactInteger = try!(reader.read());
|
||||
let len: u32 = try!(reader.read());
|
||||
let cs = try!(reader.read_slice(4));
|
||||
let payload = try!(reader.read_slice(len.into()));
|
||||
let payload = try!(reader.read_slice(len as usize));
|
||||
|
||||
if cs != &checksum(payload) {
|
||||
return Err(ReaderError::MalformedData);
|
||||
|
@ -55,4 +55,35 @@ impl Deserializable for Message {
|
|||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use bytes::Bytes;
|
||||
use ser::{serialize, deserialize};
|
||||
use super::Message;
|
||||
|
||||
#[test]
|
||||
fn test_message_serialization() {
|
||||
let expected: Bytes = "f9beb4d976657273696f6e000000000064000000358d493262ea0000010000000000000011b2d05000000000010000000000000000000000000000000000ffff000000000000000000000000000000000000000000000000ffff0000000000003b2eb35d8ce617650f2f5361746f7368693a302e372e322fc03e0300".into();
|
||||
let payload: Bytes = "62ea0000010000000000000011b2d05000000000010000000000000000000000000000000000ffff000000000000000000000000000000000000000000000000ffff0000000000003b2eb35d8ce617650f2f5361746f7368693a302e372e322fc03e0300".into();
|
||||
|
||||
let message = Message {
|
||||
magic: 0xd9b4bef9,
|
||||
command: "version".into(),
|
||||
payload: payload,
|
||||
};
|
||||
|
||||
assert_eq!(serialize(&message), expected);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_message_deserialization() {
|
||||
let raw: Bytes = "f9beb4d976657273696f6e000000000064000000358d493262ea0000010000000000000011b2d05000000000010000000000000000000000000000000000ffff000000000000000000000000000000000000000000000000ffff0000000000003b2eb35d8ce617650f2f5361746f7368693a302e372e322fc03e0300".into();
|
||||
let payload: Bytes = "62ea0000010000000000000011b2d05000000000010000000000000000000000000000000000ffff000000000000000000000000000000000000000000000000ffff0000000000003b2eb35d8ce617650f2f5361746f7368693a302e372e322fc03e0300".into();
|
||||
|
||||
let expected = Message {
|
||||
magic: 0xd9b4bef9,
|
||||
command: "version".into(),
|
||||
payload: payload,
|
||||
};
|
||||
|
||||
assert_eq!(expected, deserialize(&raw).unwrap());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -241,4 +241,13 @@ mod tests {
|
|||
let expected: String = "".into();
|
||||
assert_eq!(expected, deserialize::<String>(&raw).unwrap());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_steam_append_slice() {
|
||||
let mut slice = [0u8; 4];
|
||||
slice[0] = 0x64;
|
||||
let mut stream = Stream::default();
|
||||
stream.append_slice(&slice);
|
||||
assert_eq!(stream.out(), "64000000".into());
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue