use super::*;
use crate::service_protocol::encode_service;
const DOCUMENTED_COMMIT_WAIT: Duration = Duration::from_secs(10 * 60);
#[test]
fn a_commit_waits_the_documented_ten_minutes_in_the_queue() {
assert_eq!(COMMIT_WAIT, DOCUMENTED_COMMIT_WAIT);
assert!(COMMIT_WAIT > START_WAIT);
}
fn reader_after(bytes: &[u8]) -> BufReader<UnixStream> {
let (client, mut service) = UnixStream::pair().expect("a connected pair");
service.write_all(bytes).expect("the service writes");
drop(service);
return BufReader::new(client);
}
#[test]
fn a_line_is_read_as_a_message_and_a_closed_connection_as_none() {
let greeting: ServiceMessage = ServiceMessage::Welcome { version: PROTOCOL_VERSION, release: Some(String::from(RELEASE)) };
let mut line: String = encode_service(&greeting);
line.push('\n');
let mut reader: BufReader<UnixStream> = reader_after(line.as_bytes());
assert_eq!(read_message(&mut reader), Some(greeting));
assert_eq!(read_message(&mut reader), None, "the service closed the connection after its line");
assert_eq!(read_message(&mut reader_after(b"")), None, "a connection closed with nothing sent");
}
#[test]
fn an_empty_or_damaged_line_decodes_to_no_message() {
assert!(decode_service("").is_err(), "an empty line is not a message");
assert_eq!(read_message(&mut reader_after(b"not a message\n")), None);
}