* Initial checkin.
* Update to rust-lang libc.
* Add a .gitignore file.
* Factor out functions for cleaning up files and directories.
* Fix a typo in a comment.
* Print a "Success!" message if all tests passed.
* Factor out code for creating directories.
* Add wrappers around WASI functions.
These wrappers handle converting from &str to pointer+length and handle
unsafe.
* More refactoring.
* Refactor a fd_close helper.
* Move utility functions into a separate file.
* cargo update
* Add a basic test for random_get.
* Test that directories aren't resizable.
* Test clearing __WASI_RIGHT_PATH_FILESTAT_SET_SIZE.
Ensure that clearing __WASI_RIGHT_PATH_FILESTAT_SET_SIZE succeeds before
testing file truncation.
* cargo update
* Modularise tests for easier use with wasi-common crate
* Add a Code of Conduct and CONTRIBUTING.md.
* Fix typo
* Add testcase for fd_allocate
* Add positive test for fd_renumber
* Assert bufused in readlink_no_buffer testcase
* Add positive readlink testcase
* Add testcase for fd_seek and fd_tell
* Add fd_p{read, write} test
* Add README
* Add cases with trailing slashes to interesting_paths
* Split nofollow_errors testcase into two
* nofollow_errors now operators on symlinks to existing resources
* dangling_symlink covers danling symlinks tests
* Factor out a `create_file` helper function.
* Switch from the error crate to `std::io::Error::last_os_error()`.
* Use `create_file` in the readlink test too.
* Add a test for fd_filestat_set_*
* Minor refactoring
Add missing cleanup_file calls to file_pread_pwrite and
file_seek_tell.
* Add testcase for unbuffered fd_write; fixes #11
* Add testcase for path_rename
* Use the wasi crate.
Switch from depending on libc to depending on the new wasi crate to provide
the low-level WASI interfaces.
See also https://github.com/rust-lang/libc/pull/1461.
* Add a test for path_filestat_*
* Add a test for fd_readdir
* Use expect instead of unwrap
* Add a check for ino.
* Fix the build
* Don't assume a specific order of dirents
* Better test
* Test cookie value
* Fix file types
* Fix the test
* Fix the test
* Fix the test
* Cleanup
* Minor formatting tidying in README.md.
* Fix miscellaneous clippy warnings.
* Rename the crate to wasi-misc-tests.
* Update to wasi 0.7.0.
This switches from using the libc wasi bindings to using the wasi
crate's bindings. This eliminates a git dependency on libc, updates
to the new-style bindings which use Result where possible, and treats
functions that operate on raw file descriptors as unsafe.
* Add various tests for trailing-slash behavior.
* Sync new testcases with latest upstream
* Fix path_filestat testcase
* Add smoke test for fd_advise
This test is a true smoke test as it only tests whether issuing
an advise call to the host's kernel doesn't yield an error. The
consequence of issuing such a syscall is not tested.
* Check if CLOCK_MONOTONIC is actually monotonic
* Refactor the inequality assertions for more debuggable errors.
* Bump libc from 0.2.62 to 0.2.65
Bumps [libc](https://github.com/rust-lang/libc) from 0.2.62 to 0.2.65.
- [Release notes](https://github.com/rust-lang/libc/releases)
- [Commits](https://github.com/rust-lang/libc/compare/0.2.62...0.2.65)
Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
* Fix compilation error
* Enable Actions and add rust.yml (#35)
* Enable Actions and add rust.yml
This commit enables Github Actions and adds corresponding configuration in rust.yml file.
* Update rust.yml
* Fix formatting
* Add empty .rustfmt.toml config file
* Add badge to README
* Update README
* Clean up Github Actions and README
* Add test case for `poll_oneoff` syscall (#38)
* Add test case for `poll_oneoff` syscall
This commit adds a test case for `poll_oneoff` syscall. In particular,
it builds on the excellent test use case provided by @dunnock in their
repo [poll_oneoff_tests] (thanks!), and tests:
* simple timeout
* stdin read with timeout
* fd read and fd write polls
[poll_oneoff_tests]: https://github.com/dunnock/poll_oneoff_tests
* Apply suggestions and negative test for bad fd
Co-authored-by: Maxim Vorobjov <maxim.vorobjov@gmail.com>
* Add smoke test for STDOUT/ERR readwrite poll
* Add comment on stdin/out/err
* Add a test for `*at`-style functions returning `ENOTDIR` when `dirfd` is not a dir.
* Remove misc_testsuite submodule
* Add "publish=false" to Cargo.toml; remove LICENSE
132 lines
3.8 KiB
Rust
132 lines
3.8 KiB
Rust
use libc;
|
|
use more_asserts::assert_gt;
|
|
use std::{env, process};
|
|
use wasi::wasi_unstable;
|
|
use wasi_misc_tests::open_scratch_directory;
|
|
use wasi_misc_tests::utils::{cleanup_file, close_fd};
|
|
use wasi_misc_tests::wasi_wrappers::{wasi_fd_pread, wasi_fd_pwrite, wasi_path_open};
|
|
|
|
unsafe fn test_file_pread_pwrite(dir_fd: wasi_unstable::Fd) {
|
|
// Create a file in the scratch directory.
|
|
let mut file_fd = wasi_unstable::Fd::max_value() - 1;
|
|
let mut status = wasi_path_open(
|
|
dir_fd,
|
|
0,
|
|
"file",
|
|
wasi_unstable::O_CREAT,
|
|
wasi_unstable::RIGHT_FD_READ | wasi_unstable::RIGHT_FD_WRITE,
|
|
0,
|
|
0,
|
|
&mut file_fd,
|
|
);
|
|
assert_eq!(
|
|
status,
|
|
wasi_unstable::raw::__WASI_ESUCCESS,
|
|
"opening a file"
|
|
);
|
|
assert_gt!(
|
|
file_fd,
|
|
libc::STDERR_FILENO as wasi_unstable::Fd,
|
|
"file descriptor range check",
|
|
);
|
|
|
|
let contents = &[0u8, 1, 2, 3];
|
|
let ciovec = wasi_unstable::CIoVec {
|
|
buf: contents.as_ptr() as *const libc::c_void,
|
|
buf_len: contents.len(),
|
|
};
|
|
let mut nwritten = 0;
|
|
status = wasi_fd_pwrite(file_fd, &mut [ciovec], 0, &mut nwritten);
|
|
assert_eq!(
|
|
status,
|
|
wasi_unstable::raw::__WASI_ESUCCESS,
|
|
"writing bytes at offset 0"
|
|
);
|
|
assert_eq!(nwritten, 4, "nwritten bytes check");
|
|
|
|
let contents = &mut [0u8; 4];
|
|
let iovec = wasi_unstable::IoVec {
|
|
buf: contents.as_mut_ptr() as *mut libc::c_void,
|
|
buf_len: contents.len(),
|
|
};
|
|
let mut nread = 0;
|
|
status = wasi_fd_pread(file_fd, &[iovec], 0, &mut nread);
|
|
assert_eq!(
|
|
status,
|
|
wasi_unstable::raw::__WASI_ESUCCESS,
|
|
"reading bytes at offset 0"
|
|
);
|
|
assert_eq!(nread, 4, "nread bytes check");
|
|
assert_eq!(contents, &[0u8, 1, 2, 3], "written bytes equal read bytes");
|
|
|
|
let contents = &mut [0u8; 4];
|
|
let iovec = wasi_unstable::IoVec {
|
|
buf: contents.as_mut_ptr() as *mut libc::c_void,
|
|
buf_len: contents.len(),
|
|
};
|
|
let mut nread = 0;
|
|
status = wasi_fd_pread(file_fd, &[iovec], 2, &mut nread);
|
|
assert_eq!(
|
|
status,
|
|
wasi_unstable::raw::__WASI_ESUCCESS,
|
|
"reading bytes at offset 2"
|
|
);
|
|
assert_eq!(nread, 2, "nread bytes check");
|
|
assert_eq!(contents, &[2u8, 3, 0, 0], "file cursor was overwritten");
|
|
|
|
let contents = &[1u8, 0];
|
|
let ciovec = wasi_unstable::CIoVec {
|
|
buf: contents.as_ptr() as *const libc::c_void,
|
|
buf_len: contents.len(),
|
|
};
|
|
let mut nwritten = 0;
|
|
status = wasi_fd_pwrite(file_fd, &mut [ciovec], 2, &mut nwritten);
|
|
assert_eq!(
|
|
status,
|
|
wasi_unstable::raw::__WASI_ESUCCESS,
|
|
"writing bytes at offset 2"
|
|
);
|
|
assert_eq!(nwritten, 2, "nwritten bytes check");
|
|
|
|
let contents = &mut [0u8; 4];
|
|
let iovec = wasi_unstable::IoVec {
|
|
buf: contents.as_mut_ptr() as *mut libc::c_void,
|
|
buf_len: contents.len(),
|
|
};
|
|
let mut nread = 0;
|
|
status = wasi_fd_pread(file_fd, &[iovec], 0, &mut nread);
|
|
assert_eq!(
|
|
status,
|
|
wasi_unstable::raw::__WASI_ESUCCESS,
|
|
"reading bytes at offset 0"
|
|
);
|
|
assert_eq!(nread, 4, "nread bytes check");
|
|
assert_eq!(contents, &[0u8, 1, 1, 0], "file cursor was overwritten");
|
|
|
|
close_fd(file_fd);
|
|
cleanup_file(dir_fd, "file");
|
|
}
|
|
|
|
fn main() {
|
|
let mut args = env::args();
|
|
let prog = args.next().unwrap();
|
|
let arg = if let Some(arg) = args.next() {
|
|
arg
|
|
} else {
|
|
eprintln!("usage: {} <scratch directory>", prog);
|
|
process::exit(1);
|
|
};
|
|
|
|
// Open scratch directory
|
|
let dir_fd = match open_scratch_directory(&arg) {
|
|
Ok(dir_fd) => dir_fd,
|
|
Err(err) => {
|
|
eprintln!("{}", err);
|
|
process::exit(1)
|
|
}
|
|
};
|
|
|
|
// Run the tests.
|
|
unsafe { test_file_pread_pwrite(dir_fd) }
|
|
}
|