memcached-protocal 0.1.11

Memcached Text Protocal
Documentation
use std::io::BufReader;
use memcached_protocal::StoreCommand;


#[test]
fn test_parse_with_noreply() {
	let data = "value".as_bytes();
	let key = "key";
	let cmd_str = format!("set {} 0 0 {} 1\r\n", key, data.len());
	let mut store_cmd = Vec::from(cmd_str.as_bytes());
	store_cmd.extend_from_slice(data);
	store_cmd.extend_from_slice("\r\n".as_bytes());

	let cmd1 = StoreCommand::parse(&mut BufReader::new(store_cmd.as_slice())).unwrap();
    assert_eq!(cmd1,
  	 	StoreCommand{
    		command_name: "set".to_owned(),
    		key: key.to_owned(),
    		flags: 0,
    		exptime: 0,
    		bytes: data.len() as u64,
    		cas_unique: None,
    		noreply: Some("1".to_owned()),
    		data_block: Vec::from(data),
    	}
  	);
}

#[test]
fn test_parse_without_noreply() {
  let data = "value".as_bytes();
  let key = "key";
  let cmd_str = format!("set {} 0 0 {}\r\n", key, data.len());
  let mut store_cmd = Vec::from(cmd_str.as_bytes());
  store_cmd.extend_from_slice(data);
  store_cmd.extend_from_slice("\r\n".as_bytes());

  let cmd1 = StoreCommand::parse(&mut BufReader::new(store_cmd.as_slice())).unwrap();
  assert_eq!(cmd1,
      StoreCommand{
        command_name: "set".to_owned(),
        key: key.to_owned(),
        flags: 0,
        exptime: 0,
        bytes: data.len() as u64,
        cas_unique: None,
        noreply: None,
        data_block: Vec::from(data),
      }
    );
}

#[test]
fn test_parse_cas_with_noreply() {
  let data = "value".as_bytes();
  let key = "key";
  let cmd_str = format!("cas {} 0 0 {} 1 1\r\n", key, data.len());
  let mut store_cmd = Vec::from(cmd_str.as_bytes());
  store_cmd.extend_from_slice(data);
  store_cmd.extend_from_slice("\r\n".as_bytes());

  let cmd1 = StoreCommand::parse(&mut BufReader::new(store_cmd.as_slice())).unwrap();
  assert_eq!(cmd1,
      StoreCommand{
        command_name: "cas".to_owned(),
        key: key.to_owned(),
        flags: 0,
        exptime: 0,
        bytes: data.len() as u64,
        cas_unique: Some(1),
        noreply: Some("1".to_owned()),
        data_block: Vec::from(data),
      }
    );
}


#[test]
fn test_parse_cas_without_noreply() {
  let data = "value".as_bytes();
  let key = "key";
  let cmd_str = format!("cas {} 0 0 {} 1\r\n", key, data.len());
  let mut store_cmd = Vec::from(cmd_str.as_bytes());
  store_cmd.extend_from_slice(data);
  store_cmd.extend_from_slice("\r\n".as_bytes());

  let cmd1 = StoreCommand::parse(&mut BufReader::new(store_cmd.as_slice())).unwrap();
  assert_eq!(cmd1,
      StoreCommand{
        command_name: "cas".to_owned(),
        key: key.to_owned(),
        flags: 0,
        exptime: 0,
        bytes: data.len() as u64,
        cas_unique: Some(1),
        noreply: None,
        data_block: Vec::from(data),
      }
    );
}


#[test]
#[should_panic]
fn test_parse_should_panic() {
  let data = "value".as_bytes();
  let key = "key";
  let cmd_str = format!("caas {} 0 0 {} 1\r\n", key, data.len());
  let mut store_cmd = Vec::from(cmd_str.as_bytes());
  store_cmd.extend_from_slice(data);
  store_cmd.extend_from_slice("\r\n".as_bytes());

  StoreCommand::parse(&mut BufReader::new(store_cmd.as_slice())).unwrap();
}