use super::super::defs::*;
#[test]
fn unknown_commands() {
let setup = set_up();
let mut client = setup.connect("3501bcuc");
skip_greeting(&mut client);
client.write_raw(b"1 PLUGH\r\n").unwrap();
let mut buffer = Vec::new();
let r = client.read_one_response(&mut buffer).unwrap();
unpack_cond_response! {
(Some(tag), s::RespCondType::Bad,
Some(s::RespTextCode::Parse(())), _) = r => {
assert_eq!("1", tag);
}
}
client.write_raw(b"2 NOOP NOOP\r\n").unwrap();
let mut buffer = Vec::new();
let r = client.read_one_response(&mut buffer).unwrap();
unpack_cond_response! {
(Some(tag), s::RespCondType::Bad,
Some(s::RespTextCode::Parse(())), _) = r => {
assert_eq!("2", tag);
}
}
client.write_raw(b"3 CREATE {1000000}\r\n").unwrap();
let mut buffer = Vec::new();
let r = client.read_one_response(&mut buffer).unwrap();
unpack_cond_response! {
(Some(tag), s::RespCondType::No, None, Some(quip)) = r => {
assert_eq!("3", tag);
assert_eq!("Command line too long", quip);
}
}
ok_command!(client, s::Command::Simple(s::SimpleCommand::Noop));
client.write_raw(b"4 CREATE {100000+}\r\n").unwrap();
client.write_raw("x".repeat(100000).as_bytes()).unwrap();
client
.write_raw(b"5 still part of big create... {3+}\r\nfoo\r\n")
.unwrap();
let mut buffer = Vec::new();
let r = client.read_one_response(&mut buffer).unwrap();
unpack_cond_response! {
(Some(tag), s::RespCondType::No, None, Some(quip)) = r => {
assert_eq!("4", tag);
assert_eq!("Command line too long", quip);
}
}
ok_command!(client, s::Command::Simple(s::SimpleCommand::Noop));
client.write_raw(b"5 CREATE {100000+}\r\n").unwrap();
let mut buffer = Vec::new();
let r = client.read_one_response(&mut buffer).unwrap();
unpack_cond_response! {
(Some(tag), s::RespCondType::No, None, Some(quip)) = r => {
assert_eq!("5", tag);
assert_eq!("Command line too long", quip);
}
}
client.write_raw("x".repeat(100000).as_bytes()).unwrap();
let _ = client.write_raw("6 ".repeat(50000).as_bytes());
let mut buffer = Vec::new();
let r = client.read_one_response(&mut buffer).unwrap();
unpack_cond_response! {
(None, s::RespCondType::Bye, None, _) = r => { }
}
client = setup.connect("3501bcuc");
skip_greeting(&mut client);
let _ = client.write_raw("x".repeat(100_000).as_bytes());
let mut buffer = Vec::new();
let r = client.read_one_response(&mut buffer).unwrap();
unpack_cond_response! {
(None, s::RespCondType::Bye, _, _) = r => { }
}
client = setup.connect("3501bcuc");
skip_greeting(&mut client);
let _ = client.write_raw("x ".repeat(50_000).as_bytes());
let mut buffer = Vec::new();
let r = client.read_one_response(&mut buffer).unwrap();
unpack_cond_response! {
(None, s::RespCondType::Bye, _, _) = r => { }
}
client = setup.connect("3501bcuc");
skip_greeting(&mut client);
client.write_raw(b"HELO\r\n").unwrap();
let mut buffer = Vec::new();
let r = client.read_one_response(&mut buffer).unwrap();
unpack_cond_response! {
(None, s::RespCondType::Bye, _, _) = r => { }
}
}
#[test]
fn inappropriate_commands() {
let setup = set_up();
let mut client = setup.connect("3501bcic");
skip_greeting(&mut client);
command!([response] = client, c("DELETE azure"));
unpack_cond_response! {
(Some(_), s::RespCondType::Bad, _, _) = response => { }
}
command!([response] = client, c("EXPUNGE"));
unpack_cond_response! {
(Some(_), s::RespCondType::Bad, _, _) = response => { }
}
command!([response] = client, c("LOGIN ../foo hunter2"));
unpack_cond_response! {
(Some(_), s::RespCondType::No, _, _) = response => { }
}
ok_command!(client, c("LOGIN azure hunter2"));
command!([response] = client, c("EXPUNGE"));
unpack_cond_response! {
(Some(_), s::RespCondType::Bad, _, _) = response => { }
}
command!([response] = client, c("LOGIN azure hunter2"));
unpack_cond_response! {
(Some(_), s::RespCondType::Bad, _, _) = response => { }
}
}
#[test]
fn bad_append_recovery() {
let setup = set_up();
let mut client = setup.connect("3501bcar");
quick_log_in(&mut client);
quick_create(&mut client, "3501bcar");
quick_select(&mut client, "3501bcar");
client.write_raw(b"A1 APPEND {5}\r\n").unwrap();
let mut buffer = Vec::new();
client.read_logical_line(&mut buffer).unwrap();
assert!(buffer.starts_with(b"+ "));
client.write_raw(b"plugh\r\n").unwrap();
buffer.clear();
let response = client.read_one_response(&mut buffer).unwrap();
unpack_cond_response! {
(Some(_), s::RespCondType::Bad,
Some(s::RespTextCode::Parse(())), _) = response => ()
};
client.write_raw(b"A2 APPEND {5+}\r\nplugh\r\n").unwrap();
buffer.clear();
let response = client.read_one_response(&mut buffer).unwrap();
unpack_cond_response! {
(Some(_), s::RespCondType::Bad,
Some(s::RespTextCode::Parse(())), _) = response => ()
};
ok_command!(client, c("NOOP"));
command!(responses = client, c("EXAMINE 3501bcar"));
has_untagged_response_matching! {
s::Response::Exists(0) in responses
}
}