diff options
author | Casper Beyer <caspervonb@pm.me> | 2020-06-27 03:36:46 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-06-26 15:36:46 -0400 |
commit | 99f4a710f16bc62ac79cfcc79533f76e646c2889 (patch) | |
tree | 24b96f56c260000799fab4fb257f721d78897771 | |
parent | e10d74a3d3981310819299d21f129d6b8bf81d79 (diff) |
test(std/wasi): add read, write and metadata tests (#6494)
-rw-r--r-- | std/wasi/snapshot_preview1_test.ts | 108 | ||||
-rw-r--r-- | std/wasi/testdata/fixture/directory/file | 1 | ||||
l--------- | std/wasi/testdata/fixture/directory/symlink_to_file | 1 | ||||
-rw-r--r-- | std/wasi/testdata/fixture/file | 1 | ||||
l--------- | std/wasi/testdata/fixture/symlink_to_directory | 1 | ||||
l--------- | std/wasi/testdata/fixture/symlink_to_file | 1 | ||||
-rw-r--r-- | std/wasi/testdata/std_fs_metadata.rs | 28 | ||||
-rw-r--r-- | std/wasi/testdata/std_fs_read.rs | 17 | ||||
-rw-r--r-- | std/wasi/testdata/std_fs_write.rs | 5 |
9 files changed, 116 insertions, 47 deletions
diff --git a/std/wasi/snapshot_preview1_test.ts b/std/wasi/snapshot_preview1_test.ts index 37502e606..262aa7f95 100644 --- a/std/wasi/snapshot_preview1_test.ts +++ b/std/wasi/snapshot_preview1_test.ts @@ -72,54 +72,68 @@ if (import.meta.main) { const prelude = await Deno.readTextFile(path.resolve(outdir, basename)); const options = JSON.parse(prelude); - const process = await Deno.run({ - cwd: testdir, - cmd: [ - `${Deno.execPath()}`, - "run", - "--quiet", - "--unstable", - "--allow-all", - import.meta.url, - prelude, - path.resolve(outdir, entry.name), - ], - stdin: "piped", - stdout: "piped", - stderr: "piped", - }); - - if (options.stdin) { - const stdin = new TextEncoder().encode(options.stdin); - await Deno.writeAll(process.stdin, stdin); + await Deno.mkdir(`${testdir}/scratch`); + + try { + const process = await Deno.run({ + cwd: testdir, + cmd: [ + `${Deno.execPath()}`, + "run", + "--quiet", + "--unstable", + "--allow-all", + import.meta.url, + prelude, + path.resolve(outdir, entry.name), + ], + stdin: "piped", + stdout: "piped", + stderr: "piped", + }); + + if (options.stdin) { + const stdin = new TextEncoder().encode(options.stdin); + await Deno.writeAll(process.stdin, stdin); + } + + process.stdin.close(); + + const stdout = await Deno.readAll(process.stdout); + + if (options.stdout) { + assertEquals(new TextDecoder().decode(stdout), options.stdout); + } else { + await Deno.writeAll(Deno.stdout, stdout); + } + + process.stdout.close(); + + const stderr = await Deno.readAll(process.stderr); + + if (options.stderr) { + assertEquals(new TextDecoder().decode(stderr), options.stderr); + } else { + await Deno.writeAll(Deno.stderr, stderr); + } + + process.stderr.close(); + + if (options.files) { + for (const [key, value] of Object.entries(options.files)) { + assertEquals(value, await Deno.readTextFile(`${testdir}/${key}`)); + } + } + + const status = await process.status(); + assertEquals(status.code, options.exitCode ? +options.exitCode : 0); + + process.close(); + } catch (err) { + throw err; + } finally { + await Deno.remove(`${testdir}/scratch`, { recursive: true }); } - - process.stdin.close(); - - const stdout = await Deno.readAll(process.stdout); - - if (options.stdout) { - assertEquals(new TextDecoder().decode(stdout), options.stdout); - } else { - await Deno.writeAll(Deno.stdout, stdout); - } - - process.stdout.close(); - - const stderr = await Deno.readAll(process.stderr); - - if (options.stderr) { - assertEquals(new TextDecoder().decode(stderr), options.stderr); - } else { - await Deno.writeAll(Deno.stderr, stderr); - } - - process.stderr.close(); - - const status = await process.status(); - assertEquals(status.code, options.exitCode ? +options.exitCode : 0); - - process.close(); }); } } diff --git a/std/wasi/testdata/fixture/directory/file b/std/wasi/testdata/fixture/directory/file new file mode 100644 index 000000000..3c4dadafb --- /dev/null +++ b/std/wasi/testdata/fixture/directory/file @@ -0,0 +1 @@ +directory/file diff --git a/std/wasi/testdata/fixture/directory/symlink_to_file b/std/wasi/testdata/fixture/directory/symlink_to_file new file mode 120000 index 000000000..1a010b1c0 --- /dev/null +++ b/std/wasi/testdata/fixture/directory/symlink_to_file @@ -0,0 +1 @@ +file
\ No newline at end of file diff --git a/std/wasi/testdata/fixture/file b/std/wasi/testdata/fixture/file new file mode 100644 index 000000000..f73f3093f --- /dev/null +++ b/std/wasi/testdata/fixture/file @@ -0,0 +1 @@ +file diff --git a/std/wasi/testdata/fixture/symlink_to_directory b/std/wasi/testdata/fixture/symlink_to_directory new file mode 120000 index 000000000..6d0450cc2 --- /dev/null +++ b/std/wasi/testdata/fixture/symlink_to_directory @@ -0,0 +1 @@ +directory
\ No newline at end of file diff --git a/std/wasi/testdata/fixture/symlink_to_file b/std/wasi/testdata/fixture/symlink_to_file new file mode 120000 index 000000000..1a010b1c0 --- /dev/null +++ b/std/wasi/testdata/fixture/symlink_to_file @@ -0,0 +1 @@ +file
\ No newline at end of file diff --git a/std/wasi/testdata/std_fs_metadata.rs b/std/wasi/testdata/std_fs_metadata.rs new file mode 100644 index 000000000..914e9ab74 --- /dev/null +++ b/std/wasi/testdata/std_fs_metadata.rs @@ -0,0 +1,28 @@ +// { "preopens": { "/fixture": "fixture" } } + +fn main() { + let metadata = std::fs::metadata("/fixture/directory").unwrap(); + assert!(metadata.is_dir()); + assert!(metadata.len() > 0); + + let metadata = std::fs::metadata("/fixture/symlink_to_directory").unwrap(); + assert!(metadata.is_dir()); + assert!(metadata.len() > 0); + + let metadata = std::fs::metadata("/fixture/file").unwrap(); + assert!(metadata.is_file()); + assert!(metadata.len() > 0); + + let metadata = std::fs::metadata("/fixture/symlink_to_file").unwrap(); + assert!(metadata.is_file()); + assert!(metadata.len() > 0); + + let metadata = std::fs::metadata("/fixture/directory/file").unwrap(); + assert!(metadata.is_file()); + assert!(metadata.len() > 0); + + let metadata = + std::fs::metadata("/fixture/directory/symlink_to_file").unwrap(); + assert!(metadata.is_file()); + assert!(metadata.len() > 0); +} diff --git a/std/wasi/testdata/std_fs_read.rs b/std/wasi/testdata/std_fs_read.rs new file mode 100644 index 000000000..aa19d3ba4 --- /dev/null +++ b/std/wasi/testdata/std_fs_read.rs @@ -0,0 +1,17 @@ +// { "preopens": { "/fixture": "fixture" } } + +fn main() { + assert_eq!(std::fs::read("/fixture/file").unwrap(), b"file\n"); + assert_eq!( + std::fs::read("/fixture/symlink_to_file").unwrap(), + b"file\n" + ); + assert_eq!( + std::fs::read("/fixture/directory/file").unwrap(), + b"directory/file\n" + ); + assert_eq!( + std::fs::read("/fixture/directory/symlink_to_file").unwrap(), + b"directory/file\n" + ); +} diff --git a/std/wasi/testdata/std_fs_write.rs b/std/wasi/testdata/std_fs_write.rs new file mode 100644 index 000000000..91f8ca160 --- /dev/null +++ b/std/wasi/testdata/std_fs_write.rs @@ -0,0 +1,5 @@ +// { "preopens": { "/scratch": "scratch" }, "files": { "scratch/file": "file" } } + +fn main() { + assert!(std::fs::write("/scratch/file", b"file").is_ok()) +} |