wasi: implements fd_filestat_set_size and fd_filestat_set_times (#1082)
This implements fd_filestat_set_size and fd_filestat_set_times, which passes one more test in the rust wasi-testsuite. Signed-off-by: Adrian Cole <adrian@tetrate.io> Co-authored-by: Takeshi Yoneda <takeshi@tetrate.io>
This commit is contained in:
@@ -369,6 +369,88 @@ func TestDirFS_Open(t *testing.T) {
|
||||
})
|
||||
}
|
||||
|
||||
func TestDirFS_Truncate(t *testing.T) {
|
||||
content := []byte("123456")
|
||||
|
||||
tests := []struct {
|
||||
name string
|
||||
size int64
|
||||
expectedContent []byte
|
||||
expectedErr error
|
||||
}{
|
||||
{
|
||||
name: "one less",
|
||||
size: 5,
|
||||
expectedContent: []byte("12345"),
|
||||
},
|
||||
{
|
||||
name: "same",
|
||||
size: 6,
|
||||
expectedContent: content,
|
||||
},
|
||||
{
|
||||
name: "zero",
|
||||
size: 0,
|
||||
expectedContent: []byte(""),
|
||||
},
|
||||
{
|
||||
name: "larger",
|
||||
size: 106,
|
||||
expectedContent: append(content, make([]byte, 100)...),
|
||||
},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
tc := tt
|
||||
t.Run(tc.name, func(t *testing.T) {
|
||||
tmpDir := t.TempDir()
|
||||
testFS := NewDirFS(tmpDir)
|
||||
|
||||
name := "truncate"
|
||||
realPath := pathutil.Join(tmpDir, name)
|
||||
require.NoError(t, os.WriteFile(realPath, content, 0o0600))
|
||||
|
||||
err := testFS.Truncate(name, tc.size)
|
||||
require.NoError(t, err)
|
||||
|
||||
actual, err := os.ReadFile(realPath)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, tc.expectedContent, actual)
|
||||
})
|
||||
}
|
||||
|
||||
tmpDir := t.TempDir()
|
||||
testFS := NewDirFS(tmpDir)
|
||||
|
||||
name := "truncate"
|
||||
realPath := pathutil.Join(tmpDir, name)
|
||||
|
||||
if runtime.GOOS != "windows" {
|
||||
// TODO: os.Truncate on windows can create the file even when it
|
||||
// doesn't exist.
|
||||
t.Run("doesn't exist", func(t *testing.T) {
|
||||
err := testFS.Truncate(name, 0)
|
||||
require.Equal(t, syscall.ENOENT, err)
|
||||
})
|
||||
}
|
||||
|
||||
t.Run("not file", func(t *testing.T) {
|
||||
require.NoError(t, os.Mkdir(realPath, 0o700))
|
||||
|
||||
err := testFS.Truncate(name, 0)
|
||||
require.Equal(t, syscall.EISDIR, err)
|
||||
|
||||
require.NoError(t, os.Remove(realPath))
|
||||
})
|
||||
|
||||
t.Run("negative", func(t *testing.T) {
|
||||
require.NoError(t, os.WriteFile(realPath, []byte{}, 0o600))
|
||||
|
||||
err := testFS.Truncate(name, -1)
|
||||
require.Equal(t, syscall.EINVAL, err)
|
||||
})
|
||||
}
|
||||
|
||||
func TestDirFS_TestFS(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user