summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--std/wasi/snapshot_preview1_test.ts108
-rw-r--r--std/wasi/testdata/fixture/directory/file1
l---------std/wasi/testdata/fixture/directory/symlink_to_file1
-rw-r--r--std/wasi/testdata/fixture/file1
l---------std/wasi/testdata/fixture/symlink_to_directory1
l---------std/wasi/testdata/fixture/symlink_to_file1
-rw-r--r--std/wasi/testdata/std_fs_metadata.rs28
-rw-r--r--std/wasi/testdata/std_fs_read.rs17
-rw-r--r--std/wasi/testdata/std_fs_write.rs5
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())
+}