From 1428de8ee6ae49271c60e09ad7641e8f6251e563 Mon Sep 17 00:00:00 2001 From: cjihrig Date: Fri, 6 Mar 2020 14:22:18 -0500 Subject: [PATCH] test: add WASI test for path_link() PR-URL: https://github.com/nodejs/node/pull/32132 Reviewed-By: David Carlier Reviewed-By: Richard Lau --- test/wasi/c/link.c | 17 +++++++++++++++++ test/wasi/test-wasi.js | 1 + test/wasi/wasm/link.wasm | Bin 0 -> 31416 bytes 3 files changed, 18 insertions(+) create mode 100644 test/wasi/c/link.c create mode 100755 test/wasi/wasm/link.wasm diff --git a/test/wasi/c/link.c b/test/wasi/c/link.c new file mode 100644 index 00000000000000..16added7d5c604 --- /dev/null +++ b/test/wasi/c/link.c @@ -0,0 +1,17 @@ +#include +#include +#include + +#define OLD "/sandbox/input.txt" +#define NEW "/tmp/output.txt" + +int main() { + struct stat st_old; + struct stat st_new; + + assert(0 == stat(OLD, &st_old)); + assert(0 == link(OLD, NEW)); + assert(0 == stat(NEW, &st_new)); + assert(st_old.st_ino == st_new.st_ino); + return 0; +} diff --git a/test/wasi/test-wasi.js b/test/wasi/test-wasi.js index fbd51148cde41f..357eb7531fbea2 100644 --- a/test/wasi/test-wasi.js +++ b/test/wasi/test-wasi.js @@ -64,6 +64,7 @@ if (process.argv[2] === 'wasi-child') { runWASI({ test: 'getentropy' }); runWASI({ test: 'getrusage' }); runWASI({ test: 'gettimeofday' }); + runWASI({ test: 'link' }); runWASI({ test: 'main_args' }); runWASI({ test: 'notdir' }); // runWASI({ test: 'poll' }); diff --git a/test/wasi/wasm/link.wasm b/test/wasi/wasm/link.wasm new file mode 100755 index 0000000000000000000000000000000000000000..60f5c07601a2af4e1e79c455b814c4834f976fc2 GIT binary patch literal 31416 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 ZOT^S>_67?P