fn parse()

in src/protocol/memcache/src/request/get.rs [142:200]


    fn parse() {
        let parser = RequestParser::new();

        // basic get command
        assert_eq!(
            parser.parse_request(b"get key\r\n"),
            Ok((
                &b""[..],
                Request::Get(Get {
                    keys: vec![b"key".to_vec().into_boxed_slice()].into_boxed_slice(),
                })
            ))
        );

        // command name is not case sensitive
        assert_eq!(
            parser.parse_request(b"get key \r\n"),
            parser.parse_request(b"GET key \r\n"),
        );

        // trailing spaces don't matter
        assert_eq!(
            parser.parse_request(b"get key\r\n"),
            parser.parse_request(b"get key \r\n"),
        );

        // multiple trailing spaces is fine too
        assert_eq!(
            parser.parse_request(b"get key\r\n"),
            parser.parse_request(b"get key      \r\n"),
        );

        // request can have multiple keys
        assert_eq!(
            parser.parse_request(b"get a b c\r\n"),
            Ok((
                &b""[..],
                Request::Get(Get {
                    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"get evil\0key \r\n"),
            Ok((
                &b""[..],
                Request::Get(Get {
                    keys: vec![b"evil\0key".to_vec().into_boxed_slice(),].into_boxed_slice()
                })
            ))
        );
    }