Skip to content
This repository was archived by the owner on Oct 13, 2023. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions host/tests/command.rs
Original file line number Diff line number Diff line change
Expand Up @@ -357,7 +357,7 @@ async fn run_directory_seek(store: Store<WasiCtx>, wasi: Command) -> Result<()>
}

async fn run_fd_advise(store: Store<WasiCtx>, wasi: Command) -> Result<()> {
expect_fail(run_with_temp_dir(store, wasi).await)
run_with_temp_dir(store, wasi).await
}

async fn run_fd_filestat_get(store: Store<WasiCtx>, wasi: Command) -> Result<()> {
Expand All @@ -377,7 +377,7 @@ async fn run_fd_readdir(store: Store<WasiCtx>, wasi: Command) -> Result<()> {
}

async fn run_file_allocate(store: Store<WasiCtx>, wasi: Command) -> Result<()> {
expect_fail(run_with_temp_dir(store, wasi).await)
run_with_temp_dir(store, wasi).await
}

async fn run_file_pread_pwrite(store: Store<WasiCtx>, wasi: Command) -> Result<()> {
Expand Down
4 changes: 3 additions & 1 deletion src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -407,8 +407,10 @@ pub unsafe extern "C" fn fd_advise(
pub unsafe extern "C" fn fd_allocate(fd: Fd, offset: Filesize, len: Filesize) -> Errno {
State::with(|state| {
let ds = state.descriptors();
// For not-files, fail with BADF
let file = ds.get_file(fd)?;
unreachable!("fd_allocate is unimplemented")
// For all files, fail with NOTSUP, because this call does not exist in preview 2.
Err(wasi::ERRNO_NOTSUP)
})
}

Expand Down
10 changes: 1 addition & 9 deletions test-programs/wasi-tests/src/bin/fd_advise.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
use std::{env, process};
use wasi_tests::{open_scratch_directory, TESTCONFIG};
use wasi_tests::open_scratch_directory;

unsafe fn test_fd_advise(dir_fd: wasi::Fd) {
// Create a file in the scratch directory.
Expand Down Expand Up @@ -40,14 +40,6 @@ unsafe fn test_fd_advise(dir_fd: wasi::Fd) {
let stat = wasi::fd_filestat_get(file_fd).expect("failed to fdstat 3");
assert_eq!(stat.size, 100, "file size should be 100");

if TESTCONFIG.support_fd_allocate() {
// Use fd_allocate to expand size to 200:
wasi::fd_allocate(file_fd, 100, 100).expect("allocating size");

let stat = wasi::fd_filestat_get(file_fd).expect("failed to fdstat 3");
assert_eq!(stat.size, 200, "file size should be 200");
}

wasi::fd_close(file_fd).expect("failed to close");
wasi::path_unlink_file(dir_fd, "file").expect("failed to unlink");
}
Expand Down
27 changes: 12 additions & 15 deletions test-programs/wasi-tests/src/bin/file_allocate.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
use std::{env, process};
use wasi_tests::{open_scratch_directory, TESTCONFIG};
use wasi_tests::open_scratch_directory;

unsafe fn test_file_allocate(dir_fd: wasi::Fd) {
// Create a file in the scratch directory.
Expand All @@ -25,22 +25,19 @@ unsafe fn test_file_allocate(dir_fd: wasi::Fd) {
let mut stat = wasi::fd_filestat_get(file_fd).expect("reading file stats");
assert_eq!(stat.size, 0, "file size should be 0");

if TESTCONFIG.support_fd_allocate() {
// Allocate some size
wasi::fd_allocate(file_fd, 0, 100).expect("allocating size");
stat = wasi::fd_filestat_get(file_fd).expect("reading file stats");
assert_eq!(stat.size, 100, "file size should be 100");
// Allocate some size
let err = wasi::fd_allocate(file_fd, 0, 100)
.err()
.expect("fd_allocate must fail");
assert_eq!(
err,
wasi::ERRNO_NOTSUP,
"fd_allocate should fail with NOTSUP"
);

// Allocate should not modify if less than current size
wasi::fd_allocate(file_fd, 10, 10).expect("allocating size less than current size");
stat = wasi::fd_filestat_get(file_fd).expect("reading file stats");
assert_eq!(stat.size, 100, "file size should remain unchanged at 100");
stat = wasi::fd_filestat_get(file_fd).expect("reading file stats");
assert_eq!(stat.size, 0, "file size should still be 0");

// Allocate should modify if offset+len > current_len
wasi::fd_allocate(file_fd, 90, 20).expect("allocating size larger than current size");
stat = wasi::fd_filestat_get(file_fd).expect("reading file stats");
assert_eq!(stat.size, 110, "file size should increase from 100 to 110");
}
wasi::fd_close(file_fd).expect("closing a file");
wasi::path_unlink_file(dir_fd, "file").expect("removing a file");
}
Expand Down
6 changes: 0 additions & 6 deletions test-programs/wasi-tests/src/config.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
pub struct TestConfig {
errno_mode: ErrnoMode,
no_dangling_filesystem: bool,
no_fd_allocate: bool,
no_rename_dir_to_empty_dir: bool,
no_fdflags_sync_support: bool,
no_rights_readback_support: bool,
Expand All @@ -26,7 +25,6 @@ impl TestConfig {
ErrnoMode::Permissive
};
let no_dangling_filesystem = std::env::var("NO_DANGLING_FILESYSTEM").is_ok();
let no_fd_allocate = std::env::var("NO_FD_ALLOCATE").is_ok();
let no_rename_dir_to_empty_dir = std::env::var("NO_RENAME_DIR_TO_EMPTY_DIR").is_ok();
let no_fdflags_sync_support = std::env::var("NO_FDFLAGS_SYNC_SUPPORT").is_ok();
// Current support for rights readback is buggy, lets ignore that in tests and get
Expand All @@ -35,7 +33,6 @@ impl TestConfig {
TestConfig {
errno_mode,
no_dangling_filesystem,
no_fd_allocate,
no_rename_dir_to_empty_dir,
no_fdflags_sync_support,
no_rights_readback_support,
Expand All @@ -62,9 +59,6 @@ impl TestConfig {
pub fn support_dangling_filesystem(&self) -> bool {
!self.no_dangling_filesystem
}
pub fn support_fd_allocate(&self) -> bool {
!self.no_fd_allocate
}
pub fn support_rename_dir_to_empty_dir(&self) -> bool {
!self.no_rename_dir_to_empty_dir
}
Expand Down