From 50554d376b3632e0e98e91e59b33ab1cc0f467e4 Mon Sep 17 00:00:00 2001 From: Pat Hickey Date: Mon, 4 Jan 2021 12:33:13 -0800 Subject: [PATCH] add, fix tests --- crates/wasi-c2/src/random.rs | 17 +++++++++++++++++ crates/wasi-c2/src/virt/pipe.rs | 16 ++++++++++++++-- 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/crates/wasi-c2/src/random.rs b/crates/wasi-c2/src/random.rs index 2397469e18..6412c3e0c5 100644 --- a/crates/wasi-c2/src/random.rs +++ b/crates/wasi-c2/src/random.rs @@ -5,6 +5,8 @@ pub trait WasiRandom { fn get(&self, buf: &mut [u8]) -> Result<(), Error>; } +/// Implement `WasiRandom` using the `getrandom` crate, which selects your system's best entropy +/// source. pub struct GetRandom; impl WasiRandom for GetRandom { @@ -14,6 +16,7 @@ impl WasiRandom for GetRandom { } } +/// Implement `WasiRandom` using a deterministic cycle of bytes. pub struct Deterministic { sequence: RefCell>>, } @@ -35,3 +38,17 @@ impl WasiRandom for Deterministic { Ok(()) } } + +#[cfg(test)] +mod test { + use super::*; + #[test] + fn deterministic() { + let det = Deterministic::new(vec![1, 2, 3, 4]); + let mut buf = vec![0; 1024]; + det.get(&mut buf).expect("get randomness"); + for (ix, b) in buf.iter().enumerate() { + assert_eq!(*b, (ix % 4) as u8 + 1) + } + } +} diff --git a/crates/wasi-c2/src/virt/pipe.rs b/crates/wasi-c2/src/virt/pipe.rs index abf059601d..8fe25d8c82 100644 --- a/crates/wasi-c2/src/virt/pipe.rs +++ b/crates/wasi-c2/src/virt/pipe.rs @@ -20,11 +20,11 @@ use system_interface::fs::{Advice, FileIoExt}; /// A variety of `From` impls are provided so that common pipe types are easy to create. For example: /// /// ``` -/// # use wasi_c2::WasiCtxBuilder; +/// # use wasi_c2::WasiCtx; /// # use wasi_c2::virt::pipe::ReadPipe; /// let mut ctx = WasiCtx::builder(); /// let stdin = ReadPipe::from("hello from stdin!"); -/// ctx.stdin(stdin); +/// ctx.stdin(Box::new(stdin)); /// ``` #[derive(Debug)] pub struct ReadPipe { @@ -207,6 +207,18 @@ impl WasiFile for ReadPipe { } /// A virtual pipe write end. +/// +/// ``` +/// # use wasi_c2::WasiCtx; +/// # use wasi_c2::virt::pipe::WritePipe; +/// let mut ctx = WasiCtx::builder(); +/// let stdout = WritePipe::new_in_memory(); +/// ctx.stdout(Box::new(stdout.clone())); +/// // use ctx in an instance, then make sure it is dropped: +/// drop(ctx); +/// let contents: Vec = stdout.try_into_inner().expect("sole remaining reference to WritePipe").into_inner(); +/// println!("contents of stdout: {:?}", contents); +/// ``` #[derive(Debug)] pub struct WritePipe { writer: Arc>,