in src/protocol/memcache/src/request/gets.rs [98:156]
fn parse() {
let parser = RequestParser::new();
// test parsing a simple request
assert_eq!(
parser.parse_request(b"gets key \r\n"),
Ok((
&b""[..],
Request::Gets(Gets {
keys: vec![b"key".to_vec().into_boxed_slice()].into_boxed_slice(),
})
))
);
// command name is not case sensitive
assert_eq!(
parser.parse_request(b"gets key \r\n"),
parser.parse_request(b"GETS key \r\n"),
);
// trailing spaces don't matter
assert_eq!(
parser.parse_request(b"gets key\r\n"),
parser.parse_request(b"gets key \r\n"),
);
// multiple trailing spaces is fine too
assert_eq!(
parser.parse_request(b"gets key\r\n"),
parser.parse_request(b"gets key \r\n"),
);
// request can have multiple keys
assert_eq!(
parser.parse_request(b"gets a b c\r\n"),
Ok((
&b""[..],
Request::Gets(Gets {
keys: vec![
b"a".to_vec().into_boxed_slice(),
b"b".to_vec().into_boxed_slice(),
b"c".to_vec().into_boxed_slice(),
]
.into_boxed_slice(),
})
))
);
// key is binary safe
assert_eq!(
parser.parse_request(b"gets evil\0key \r\n"),
Ok((
&b""[..],
Request::Gets(Gets {
keys: vec![b"evil\0key".to_vec().into_boxed_slice(),].into_boxed_slice()
})
))
);
}