Skip to content

Commit

Permalink
wasi-sockets-tests: switch to stream-error
Browse files Browse the repository at this point in the history
  • Loading branch information
Pat Hickey committed Sep 22, 2023
1 parent 8965954 commit f1ebabe
Showing 1 changed file with 11 additions and 33 deletions.
44 changes: 11 additions & 33 deletions crates/test-programs/wasi-sockets-tests/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,38 +4,25 @@ use wasi::io::poll;
use wasi::io::streams;
use wasi::sockets::{network, tcp, tcp_create_socket};

pub fn write(output: &streams::OutputStream, mut bytes: &[u8]) -> (usize, streams::StreamStatus) {
let total = bytes.len();
let mut written = 0;

pub fn write(output: &streams::OutputStream, mut bytes: &[u8]) -> Result<(), streams::StreamError> {
let pollable = output.subscribe();

while !bytes.is_empty() {
crate::poll_list(&[&pollable]);

let permit = match output.check_write() {
Ok(n) => n,
Err(_) => return (written, streams::StreamStatus::Ended),
};
let permit = output.check_write()?;

let len = bytes.len().min(permit as usize);
let (chunk, rest) = bytes.split_at(len);

match output.write(chunk) {
Ok(()) => {}
Err(_) => return (written, streams::StreamStatus::Ended),
}
output.write(chunk)?;

match output.blocking_flush() {
Ok(()) => {}
Err(_) => return (written, streams::StreamStatus::Ended),
}
output.flush()?;

bytes = rest;
written += len;
}

(total, streams::StreamStatus::Open)
Ok(())
}

pub fn example_body(net: tcp::Network, sock: tcp::TcpSocket, family: network::IpAddressFamily) {
Expand All @@ -57,13 +44,9 @@ pub fn example_body(net: tcp::Network, sock: tcp::TcpSocket, family: network::Ip
poll::poll_one(&client_sub);
let (client_input, client_output) = client.finish_connect().unwrap();

let (n, status) = write(&client_output, &[]);
assert_eq!(n, 0);
assert_eq!(status, streams::StreamStatus::Open);
write(&client_output, &[]).unwrap();

let (n, status) = write(&client_output, first_message);
assert_eq!(n, first_message.len());
assert_eq!(status, streams::StreamStatus::Open);
write(&client_output, first_message).unwrap();

drop(client_input);
drop(client_output);
Expand All @@ -73,12 +56,10 @@ pub fn example_body(net: tcp::Network, sock: tcp::TcpSocket, family: network::Ip
poll::poll_one(&sub);
let (accepted, input, output) = sock.accept().unwrap();

let (empty_data, status) = input.read(0).unwrap();
let empty_data = input.read(0).unwrap();
assert!(empty_data.is_empty());
assert_eq!(status, streams::StreamStatus::Open);

let (data, status) = input.blocking_read(first_message.len() as u64).unwrap();
assert_eq!(status, streams::StreamStatus::Open);
let data = input.blocking_read(first_message.len() as u64).unwrap();

drop(input);
drop(output);
Expand All @@ -95,9 +76,7 @@ pub fn example_body(net: tcp::Network, sock: tcp::TcpSocket, family: network::Ip
poll::poll_one(&client_sub);
let (client_input, client_output) = client.finish_connect().unwrap();

let (n, status) = write(&client_output, second_message);
assert_eq!(n, second_message.len());
assert_eq!(status, streams::StreamStatus::Open);
write(&client_output, second_message).unwrap();

drop(client_input);
drop(client_output);
Expand All @@ -106,8 +85,7 @@ pub fn example_body(net: tcp::Network, sock: tcp::TcpSocket, family: network::Ip

poll::poll_one(&sub);
let (accepted, input, output) = sock.accept().unwrap();
let (data, status) = input.blocking_read(second_message.len() as u64).unwrap();
assert_eq!(status, streams::StreamStatus::Open);
let data = input.blocking_read(second_message.len() as u64).unwrap();

drop(input);
drop(output);
Expand Down

0 comments on commit f1ebabe

Please sign in to comment.