Adding mock stream to its own file
This commit is contained in:
parent
b25a2c4215
commit
59bee5bd42
3 changed files with 57 additions and 53 deletions
|
|
@ -331,59 +331,7 @@ impl<T: Read+Write> Client<T> {
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use super::*;
|
use super::*;
|
||||||
use std::io::{Read, Result, Write, Error, ErrorKind};
|
use super::super::mock_stream::MockStream;
|
||||||
|
|
||||||
struct MockStream {
|
|
||||||
read_buf: Vec<u8>,
|
|
||||||
read_pos: usize,
|
|
||||||
written_buf: Vec<u8>
|
|
||||||
}
|
|
||||||
|
|
||||||
impl MockStream {
|
|
||||||
fn new(read_buf: Vec<u8>) -> MockStream {
|
|
||||||
MockStream{
|
|
||||||
read_buf: read_buf,
|
|
||||||
read_pos: 0,
|
|
||||||
written_buf: Vec::new()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Read for MockStream {
|
|
||||||
fn read(&mut self, buf: &mut[u8]) -> Result<usize> {
|
|
||||||
if self.read_pos >= self.read_buf.len() {
|
|
||||||
return Err(Error::new(ErrorKind::UnexpectedEof, "EOF"))
|
|
||||||
}
|
|
||||||
let write_len = min(buf.len(), self.read_buf.len() - self.read_pos);
|
|
||||||
let max_pos = self.read_pos + write_len;
|
|
||||||
for x in self.read_pos..max_pos {
|
|
||||||
buf[x - self.read_pos] = self.read_buf[x];
|
|
||||||
}
|
|
||||||
self.read_pos += write_len;
|
|
||||||
Ok(write_len)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Write for MockStream {
|
|
||||||
fn write(&mut self, buf: &[u8]) -> Result<usize> {
|
|
||||||
self.written_buf.extend_from_slice(buf);
|
|
||||||
Ok(buf.len())
|
|
||||||
}
|
|
||||||
|
|
||||||
fn flush(&mut self) -> Result<()> {
|
|
||||||
Ok(())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn min(a: usize, b: usize) -> usize {
|
|
||||||
if a < b {
|
|
||||||
a
|
|
||||||
} else if b < a {
|
|
||||||
b
|
|
||||||
} else {
|
|
||||||
a
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn create_client_with_mock_stream(mock_stream: MockStream) -> Client<MockStream> {
|
fn create_client_with_mock_stream(mock_stream: MockStream) -> Client<MockStream> {
|
||||||
Client {
|
Client {
|
||||||
|
|
|
||||||
|
|
@ -7,3 +7,6 @@ extern crate openssl;
|
||||||
extern crate regex;
|
extern crate regex;
|
||||||
|
|
||||||
pub mod client;
|
pub mod client;
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod mock_stream;
|
||||||
|
|
|
||||||
53
src/mock_stream.rs
Normal file
53
src/mock_stream.rs
Normal file
|
|
@ -0,0 +1,53 @@
|
||||||
|
use std::io::{Read, Result, Write, Error, ErrorKind};
|
||||||
|
|
||||||
|
pub struct MockStream {
|
||||||
|
read_buf: Vec<u8>,
|
||||||
|
read_pos: usize,
|
||||||
|
pub written_buf: Vec<u8>
|
||||||
|
}
|
||||||
|
|
||||||
|
impl MockStream {
|
||||||
|
pub fn new(read_buf: Vec<u8>) -> MockStream {
|
||||||
|
MockStream{
|
||||||
|
read_buf: read_buf,
|
||||||
|
read_pos: 0,
|
||||||
|
written_buf: Vec::new()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Read for MockStream {
|
||||||
|
fn read(&mut self, buf: &mut[u8]) -> Result<usize> {
|
||||||
|
if self.read_pos >= self.read_buf.len() {
|
||||||
|
return Err(Error::new(ErrorKind::UnexpectedEof, "EOF"))
|
||||||
|
}
|
||||||
|
let write_len = min(buf.len(), self.read_buf.len() - self.read_pos);
|
||||||
|
let max_pos = self.read_pos + write_len;
|
||||||
|
for x in self.read_pos..max_pos {
|
||||||
|
buf[x - self.read_pos] = self.read_buf[x];
|
||||||
|
}
|
||||||
|
self.read_pos += write_len;
|
||||||
|
Ok(write_len)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Write for MockStream {
|
||||||
|
fn write(&mut self, buf: &[u8]) -> Result<usize> {
|
||||||
|
self.written_buf.extend_from_slice(buf);
|
||||||
|
Ok(buf.len())
|
||||||
|
}
|
||||||
|
|
||||||
|
fn flush(&mut self) -> Result<()> {
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn min(a: usize, b: usize) -> usize {
|
||||||
|
if a < b {
|
||||||
|
a
|
||||||
|
} else if b < a {
|
||||||
|
b
|
||||||
|
} else {
|
||||||
|
a
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Add table
Reference in a new issue