diff --git a/src/protocol/binary_packet.rs b/src/protocol/binary_packet.rs index c3366a8..81d2e1c 100644 --- a/src/protocol/binary_packet.rs +++ b/src/protocol/binary_packet.rs @@ -118,9 +118,13 @@ pub fn parse_response(reader: &mut R) -> Result(reader: &mut R) -> Result(reader: &mut R) -> Result { parse_response(reader)?.err().map(|_| true) } + +#[cfg(test)] +mod tests { + use super::*; + + fn response_bytes(key_length: u16, extras_length: u8, total_body_length: u32, body: &[u8]) -> Vec { + let mut bytes = Vec::new(); + PacketHeader { + magic: Magic::Response as u8, + key_length, + extras_length, + total_body_length, + ..Default::default() + } + .write(&mut bytes) + .unwrap(); + bytes.extend_from_slice(body); + bytes + } + + #[test] + fn parse_response_body_length() { + let bytes = response_bytes(3, 4, 10, b"\0\0\0\0keyval"); + let response = parse_response(&mut Cursor::new(bytes)).unwrap(); + assert_eq!(response.extras, b"\0\0\0\0"); + assert_eq!(response.key, b"key"); + assert_eq!(response.value, b"val"); + + let bytes = response_bytes(3, 4, 6, b"\0\0\0\0keyval"); + match parse_response(&mut Cursor::new(bytes)) { + Err(MemcacheError::ServerError(ServerError::BadResponse(_))) => (), + Err(e) => panic!("unexpected error: {:?}", e), + Ok(_) => panic!("expected an error"), + } + } +}