fn parse()

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()
                })
            ))
        );
    }