From 834f8a07eb97eb1a01b099dfc0bd79789738fb09 Mon Sep 17 00:00:00 2001 From: Nikolay Volf Date: Wed, 3 Feb 2016 18:40:54 +0300 Subject: [PATCH] socket write tests --- util/src/network/connection.rs | 59 +++++++++++++++++++++++++++++++--- 1 file changed, 55 insertions(+), 4 deletions(-) diff --git a/util/src/network/connection.rs b/util/src/network/connection.rs index acb41bfcd..2ff09f64a 100644 --- a/util/src/network/connection.rs +++ b/util/src/network/connection.rs @@ -432,7 +432,7 @@ mod tests { use super::*; use std::sync::*; use super::super::stats::*; - use std::io::{Read, Write, Error}; + use std::io::{Read, Write, Error, Cursor}; use std::cmp; use mio::{EventSet}; use std::collections::VecDeque; @@ -442,6 +442,7 @@ mod tests { read_buffer: Vec, write_buffer: Vec, cursor: usize, + buf_size: usize, } impl TestSocket { @@ -450,6 +451,16 @@ mod tests { read_buffer: vec![], write_buffer: vec![], cursor: 0, + buf_size: 0, + } + } + + fn new_buf(buf_size: usize) -> TestSocket { + TestSocket { + read_buffer: vec![], + write_buffer: vec![], + cursor: 0, + buf_size: buf_size, } } } @@ -473,8 +484,14 @@ mod tests { impl Write for TestSocket { fn write(&mut self, buf: &[u8]) -> Result { - self.write_buffer.extend(buf.iter().cloned()); - Ok(buf.len()) + if self.buf_size == 0 || buf.len() < self.buf_size { + self.write_buffer.extend(buf.iter().cloned()); + Ok(buf.len()) + } + else { + self.write_buffer.extend(buf.iter().take(self.buf_size).cloned()); + Ok(self.buf_size) + } } fn flush(&mut self) -> Result<(), Error> { @@ -504,6 +521,40 @@ mod tests { fn connection_expect() { let mut connection = TestConnection::new(); connection.expect(1024); - assert_eq!(connection.rec_size, 1024); + assert_eq!(1024, connection.rec_size); + } + + #[test] + fn connection_write_empty() { + let mut connection = TestConnection::new(); + let status = connection.writable(); + assert!(status.is_ok()); + assert!(WriteStatus::Complete == status.unwrap()); + } + + #[test] + fn connection_write() { + let mut connection = TestConnection::new(); + let data = Cursor::new(vec![0; 10240]); + connection.send_queue.push_back(data); + + let status = connection.writable(); + assert!(status.is_ok()); + assert!(WriteStatus::Complete == status.unwrap()); + assert_eq!(10240, connection.socket.write_buffer.len()); + } + + #[test] + fn connection_write_is_buffered() { + let mut connection = TestConnection::new(); + connection.socket = TestSocket::new_buf(1024); + let data = Cursor::new(vec![0; 10240]); + connection.send_queue.push_back(data); + + let status = connection.writable(); + + assert!(status.is_ok()); + assert!(WriteStatus::Ongoing == status.unwrap()); + assert_eq!(1024, connection.socket.write_buffer.len()); } } \ No newline at end of file