Adding more tests
This commit is contained in:
parent
b8002d1fb8
commit
1cf02a409c
1 changed files with 43 additions and 6 deletions
|
|
@ -4,7 +4,7 @@ use std::io::{Error, ErrorKind, Read, Result, Write};
|
||||||
use regex::Regex;
|
use regex::Regex;
|
||||||
|
|
||||||
static TAG_PREFIX: &'static str = "a";
|
static TAG_PREFIX: &'static str = "a";
|
||||||
const INITIAL_TAG: u32 = 1;
|
const INITIAL_TAG: u32 = 0;
|
||||||
|
|
||||||
/// Stream to interface with the IMAP server. This interface is only for the command stream.
|
/// Stream to interface with the IMAP server. This interface is only for the command stream.
|
||||||
pub struct Client<T> {
|
pub struct Client<T> {
|
||||||
|
|
@ -261,8 +261,6 @@ impl<T: Read+Write> Client<T> {
|
||||||
Err(_) => Err(Error::new(ErrorKind::Other, "Failed to read")),
|
Err(_) => Err(Error::new(ErrorKind::Other, "Failed to read")),
|
||||||
};
|
};
|
||||||
|
|
||||||
self.tag += 1;
|
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -335,6 +333,7 @@ impl<T: Read+Write> Client<T> {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn create_command(&mut self, command: String) -> String {
|
fn create_command(&mut self, command: String) -> String {
|
||||||
|
self.tag += 1;
|
||||||
let command = format!("{}{} {}\r\n", TAG_PREFIX, self.tag, command);
|
let command = format!("{}{} {}\r\n", TAG_PREFIX, self.tag, command);
|
||||||
return command;
|
return command;
|
||||||
}
|
}
|
||||||
|
|
@ -353,16 +352,54 @@ mod tests {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn read_response() {
|
||||||
|
let response = "a0 OK Logged in.\r\n";
|
||||||
|
let expected_response: Vec<String> = vec![response.to_string()];
|
||||||
|
let mock_stream = MockStream::new(response.as_bytes().to_vec());
|
||||||
|
let mut client = create_client_with_mock_stream(mock_stream);
|
||||||
|
match client.read_response() {
|
||||||
|
Ok(r) => assert!(expected_response == r, "expected response doesn't equal actual"),
|
||||||
|
Err(err) => panic!("Error reading response: {}", err),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn read_greeting() {
|
||||||
|
let greeting = "* OK Dovecot ready.\r\n";
|
||||||
|
let mock_stream = MockStream::new(greeting.as_bytes().to_vec());
|
||||||
|
let mut client = create_client_with_mock_stream(mock_stream);
|
||||||
|
match client.read_greeting() {
|
||||||
|
Err(err) => panic!("Error reading response: {}", err),
|
||||||
|
_ => {},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn create_command() {
|
||||||
|
let base_command = "CHECK";
|
||||||
|
let mock_stream = MockStream::new(Vec::new());
|
||||||
|
let mut imap_stream = create_client_with_mock_stream(mock_stream);
|
||||||
|
|
||||||
|
let expected_command = format!("a1 {}\r\n", base_command);
|
||||||
|
let command = imap_stream.create_command(String::from(base_command));
|
||||||
|
assert!(command == expected_command, "expected command doesn't equal actual command");
|
||||||
|
|
||||||
|
let expected_command2 = format!("a2 {}\r\n", base_command);
|
||||||
|
let command2 = imap_stream.create_command(String::from(base_command));
|
||||||
|
assert!(command2 == expected_command2, "expected command doesn't equal actual command");
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn close() {
|
fn close() {
|
||||||
// TODO Make sure the response was read correctly
|
// TODO Make sure the response was read correctly
|
||||||
let response = b"a1 OK CLOSE completed\r\n".to_vec();
|
let response = b"a1 OK CLOSE completed\r\n".to_vec();
|
||||||
let mock_stream = MockStream::new(response);
|
let mock_stream = MockStream::new(response);
|
||||||
let mut imap_stream = create_client_with_mock_stream(mock_stream);
|
let mut client = create_client_with_mock_stream(mock_stream);
|
||||||
match imap_stream.close() {
|
match client.close() {
|
||||||
Err(err) => panic!("Error reading response: {}", err),
|
Err(err) => panic!("Error reading response: {}", err),
|
||||||
_ => {},
|
_ => {},
|
||||||
}
|
}
|
||||||
assert!(imap_stream.stream.written_buf == b"a1 CLOSE\r\n".to_vec(), "Invalid close command");
|
assert!(client.stream.written_buf == b"a1 CLOSE\r\n".to_vec(), "Invalid close command");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue