diff --git a/ipc/nano/src/lib.rs b/ipc/nano/src/lib.rs index 51b484049..28fbef610 100644 --- a/ipc/nano/src/lib.rs +++ b/ipc/nano/src/lib.rs @@ -32,6 +32,7 @@ pub struct Worker where S: IpcInterface { method_buf: [u8;2], } +#[derive(Debug)] pub enum SocketError { DuplexLink } @@ -86,22 +87,49 @@ mod tests { use super::Worker; use ipc::*; use std::io::Read; - use std::sync::Arc; + use std::sync::{Arc, RwLock}; - struct DummyService; + struct TestInvoke { + method_num: u16, + params: Vec, + } + + struct DummyService { + methods_stack: RwLock>, + } + + impl DummyService { + fn new() -> DummyService { + DummyService { methods_stack: RwLock::new(Vec::new()) } + } + } impl IpcInterface for DummyService { - fn dispatch(&self, r: &mut R) -> Vec where R: Read { + fn dispatch(&self, _r: &mut R) -> Vec where R: Read { vec![] } fn dispatch_buf(&self, method_num: u16, r: &mut R) -> Vec where R: Read { + let mut buf = vec![0u8; 4096]; + let size = r.read_to_end(&mut buf).unwrap(); + self.methods_stack.write().unwrap().push( + TestInvoke { + method_num: method_num, + params: unsafe { Vec::from_raw_parts(buf.as_mut_ptr(), size, size) } + }); vec![] } } #[test] fn can_create_worker() { - let worker = Worker::::new(Arc::new(DummyService)); + let worker = Worker::::new(Arc::new(DummyService::new())); assert_eq!(0, worker.sockets.len()); } + + #[test] + fn can_add_duplex_socket_to_worker() { + let mut worker = Worker::::new(Arc::new(DummyService::new())); + worker.add_duplex("ipc://tmp/parity/test1").unwrap(); + assert_eq!(1, worker.sockets.len()); + } }