summaryrefslogtreecommitdiff
path: root/deps/uv/test/test-fs.c
diff options
context:
space:
mode:
authorcjihrig <cjihrig@gmail.com>2019-08-09 11:03:55 -0400
committercjihrig <cjihrig@gmail.com>2019-08-11 11:22:01 -0400
commitce7f3ed13ca15ae4c166d922e7ee39ad2ef41abb (patch)
treef25ca8d612ee2bdfb78f2bac31439633dfb2bb3d /deps/uv/test/test-fs.c
parent8ef68e66d0465441a79a5dae22e480bf0d83ed25 (diff)
downloadandroid-node-v8-ce7f3ed13ca15ae4c166d922e7ee39ad2ef41abb.tar.gz
android-node-v8-ce7f3ed13ca15ae4c166d922e7ee39ad2ef41abb.tar.bz2
android-node-v8-ce7f3ed13ca15ae4c166d922e7ee39ad2ef41abb.zip
deps: upgrade to libuv 1.31.0
Notable changes: - UV_FS_O_FILEMAP has been added for faster access to memory mapped files on Windows. - uv_fs_mkdir() now returns UV_EINVAL for invalid filenames on Windows. It previously returned UV_ENOENT. - The uv_fs_statfs() API has been added. - The uv_os_environ() and uv_os_free_environ() APIs have been added. Fixes: https://github.com/nodejs/node/issues/28599 Fixes: https://github.com/nodejs/node/issues/28945 Fixes: https://github.com/nodejs/node/issues/29008 PR-URL: https://github.com/nodejs/node/pull/29070 Reviewed-By: Richard Lau <riclau@uk.ibm.com> Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com> Reviewed-By: Rich Trott <rtrott@gmail.com> Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl> Reviewed-By: Jiawen Geng <technicalcute@gmail.com>
Diffstat (limited to 'deps/uv/test/test-fs.c')
-rw-r--r--deps/uv/test/test-fs.c332
1 files changed, 294 insertions, 38 deletions
diff --git a/deps/uv/test/test-fs.c b/deps/uv/test/test-fs.c
index 2cf8f287fe..0d92b0d3a0 100644
--- a/deps/uv/test/test-fs.c
+++ b/deps/uv/test/test-fs.c
@@ -94,6 +94,7 @@ static int readlink_cb_count;
static int realpath_cb_count;
static int utime_cb_count;
static int futime_cb_count;
+static int statfs_cb_count;
static uv_loop_t* loop;
@@ -330,6 +331,38 @@ static void fstat_cb(uv_fs_t* req) {
}
+static void statfs_cb(uv_fs_t* req) {
+ uv_statfs_t* stats;
+
+ ASSERT(req->fs_type == UV_FS_STATFS);
+ ASSERT(req->result == 0);
+ ASSERT(req->ptr != NULL);
+ stats = req->ptr;
+
+#if defined(_WIN32) || defined(__sun) || defined(_AIX) || defined(__MVS__)
+ ASSERT(stats->f_type == 0);
+#else
+ ASSERT(stats->f_type > 0);
+#endif
+
+ ASSERT(stats->f_bsize > 0);
+ ASSERT(stats->f_blocks > 0);
+ ASSERT(stats->f_bfree <= stats->f_blocks);
+ ASSERT(stats->f_bavail <= stats->f_bfree);
+
+#ifdef _WIN32
+ ASSERT(stats->f_files == 0);
+ ASSERT(stats->f_ffree == 0);
+#else
+ ASSERT(stats->f_files > 0);
+ ASSERT(stats->f_ffree <= stats->f_files);
+#endif
+ uv_fs_req_cleanup(req);
+ ASSERT(req->ptr == NULL);
+ statfs_cb_count++;
+}
+
+
static void close_cb(uv_fs_t* req) {
int r;
ASSERT(req == &close_req);
@@ -847,7 +880,7 @@ TEST_IMPL(fs_file_async) {
}
-TEST_IMPL(fs_file_sync) {
+static void fs_file_sync(int add_flags) {
int r;
/* Setup. */
@@ -856,8 +889,8 @@ TEST_IMPL(fs_file_sync) {
loop = uv_default_loop();
- r = uv_fs_open(loop, &open_req1, "test_file", O_WRONLY | O_CREAT,
- S_IWUSR | S_IRUSR, NULL);
+ r = uv_fs_open(loop, &open_req1, "test_file",
+ O_WRONLY | O_CREAT | add_flags, S_IWUSR | S_IRUSR, NULL);
ASSERT(r >= 0);
ASSERT(open_req1.result >= 0);
uv_fs_req_cleanup(&open_req1);
@@ -873,7 +906,7 @@ TEST_IMPL(fs_file_sync) {
ASSERT(close_req.result == 0);
uv_fs_req_cleanup(&close_req);
- r = uv_fs_open(NULL, &open_req1, "test_file", O_RDWR, 0, NULL);
+ r = uv_fs_open(NULL, &open_req1, "test_file", O_RDWR | add_flags, 0, NULL);
ASSERT(r >= 0);
ASSERT(open_req1.result >= 0);
uv_fs_req_cleanup(&open_req1);
@@ -900,7 +933,8 @@ TEST_IMPL(fs_file_sync) {
ASSERT(rename_req.result == 0);
uv_fs_req_cleanup(&rename_req);
- r = uv_fs_open(NULL, &open_req1, "test_file2", O_RDONLY, 0, NULL);
+ r = uv_fs_open(NULL, &open_req1, "test_file2", O_RDONLY | add_flags, 0,
+ NULL);
ASSERT(r >= 0);
ASSERT(open_req1.result >= 0);
uv_fs_req_cleanup(&open_req1);
@@ -926,13 +960,17 @@ TEST_IMPL(fs_file_sync) {
/* Cleanup */
unlink("test_file");
unlink("test_file2");
+}
+TEST_IMPL(fs_file_sync) {
+ fs_file_sync(0);
+ fs_file_sync(UV_FS_O_FILEMAP);
MAKE_VALGRIND_HAPPY();
return 0;
}
-TEST_IMPL(fs_file_write_null_buffer) {
+static void fs_file_write_null_buffer(int add_flags) {
int r;
/* Setup. */
@@ -940,8 +978,8 @@ TEST_IMPL(fs_file_write_null_buffer) {
loop = uv_default_loop();
- r = uv_fs_open(NULL, &open_req1, "test_file", O_WRONLY | O_CREAT,
- S_IWUSR | S_IRUSR, NULL);
+ r = uv_fs_open(NULL, &open_req1, "test_file",
+ O_WRONLY | O_CREAT | add_flags, S_IWUSR | S_IRUSR, NULL);
ASSERT(r >= 0);
ASSERT(open_req1.result >= 0);
uv_fs_req_cleanup(&open_req1);
@@ -958,6 +996,10 @@ TEST_IMPL(fs_file_write_null_buffer) {
uv_fs_req_cleanup(&close_req);
unlink("test_file");
+}
+TEST_IMPL(fs_file_write_null_buffer) {
+ fs_file_write_null_buffer(0);
+ fs_file_write_null_buffer(UV_FS_O_FILEMAP);
MAKE_VALGRIND_HAPPY();
return 0;
@@ -1470,7 +1512,7 @@ TEST_IMPL(fs_chmod) {
uv_run(loop, UV_RUN_DEFAULT);
ASSERT(fchmod_cb_count == 1);
- close(file);
+ uv_fs_close(loop, &req, file, NULL);
/*
* Run the loop just to check we don't have make any extraneous uv_ref()
@@ -1513,7 +1555,7 @@ TEST_IMPL(fs_unlink_readonly) {
ASSERT(req.result == sizeof(test_buf));
uv_fs_req_cleanup(&req);
- close(file);
+ uv_fs_close(loop, &req, file, NULL);
/* Make the file read-only */
r = uv_fs_chmod(NULL, &req, "test_file", 0400, NULL);
@@ -1572,7 +1614,7 @@ TEST_IMPL(fs_unlink_archive_readonly) {
ASSERT(req.result == sizeof(test_buf));
uv_fs_req_cleanup(&req);
- close(file);
+ uv_fs_close(loop, &req, file, NULL);
/* Make the file read-only and clear archive flag */
r = SetFileAttributes("test_file", FILE_ATTRIBUTE_READONLY);
@@ -1722,7 +1764,7 @@ TEST_IMPL(fs_link) {
ASSERT(req.result == sizeof(test_buf));
uv_fs_req_cleanup(&req);
- close(file);
+ uv_fs_close(loop, &req, file, NULL);
/* sync link */
r = uv_fs_link(NULL, &req, "test_file", "test_file_link", NULL);
@@ -1764,7 +1806,7 @@ TEST_IMPL(fs_link) {
ASSERT(req.result >= 0);
ASSERT(strcmp(buf, test_buf) == 0);
- close(link);
+ uv_fs_close(loop, &req, link, NULL);
/*
* Run the loop just to check we don't have make any extraneous uv_ref()
@@ -1871,7 +1913,7 @@ TEST_IMPL(fs_symlink) {
ASSERT(req.result == sizeof(test_buf));
uv_fs_req_cleanup(&req);
- close(file);
+ uv_fs_close(loop, &req, file, NULL);
/* sync symlink */
r = uv_fs_symlink(NULL, &req, "test_file", "test_file_symlink", 0, NULL);
@@ -1909,7 +1951,7 @@ TEST_IMPL(fs_symlink) {
ASSERT(req.result >= 0);
ASSERT(strcmp(buf, test_buf) == 0);
- close(link);
+ uv_fs_close(loop, &req, link, NULL);
r = uv_fs_symlink(NULL,
&req,
@@ -1971,7 +2013,7 @@ TEST_IMPL(fs_symlink) {
ASSERT(req.result >= 0);
ASSERT(strcmp(buf, test_buf) == 0);
- close(link);
+ uv_fs_close(loop, &req, link, NULL);
r = uv_fs_symlink(NULL,
&req,
@@ -2293,7 +2335,7 @@ TEST_IMPL(fs_utime) {
ASSERT(r >= 0);
ASSERT(req.result >= 0);
uv_fs_req_cleanup(&req);
- close(r);
+ uv_fs_close(loop, &req, r, NULL);
atime = mtime = 400497753; /* 1982-09-10 11:22:33 */
@@ -2388,7 +2430,7 @@ TEST_IMPL(fs_futime) {
ASSERT(r >= 0);
ASSERT(req.result >= 0);
uv_fs_req_cleanup(&req);
- close(r);
+ uv_fs_close(loop, &req, r, NULL);
atime = mtime = 400497753; /* 1982-09-10 11:22:33 */
@@ -2583,7 +2625,7 @@ TEST_IMPL(fs_open_dir) {
}
-TEST_IMPL(fs_file_open_append) {
+static void fs_file_open_append(int add_flags) {
int r;
/* Setup. */
@@ -2591,8 +2633,8 @@ TEST_IMPL(fs_file_open_append) {
loop = uv_default_loop();
- r = uv_fs_open(NULL, &open_req1, "test_file", O_WRONLY | O_CREAT,
- S_IWUSR | S_IRUSR, NULL);
+ r = uv_fs_open(NULL, &open_req1, "test_file",
+ O_WRONLY | O_CREAT | add_flags, S_IWUSR | S_IRUSR, NULL);
ASSERT(r >= 0);
ASSERT(open_req1.result >= 0);
uv_fs_req_cleanup(&open_req1);
@@ -2608,7 +2650,8 @@ TEST_IMPL(fs_file_open_append) {
ASSERT(close_req.result == 0);
uv_fs_req_cleanup(&close_req);
- r = uv_fs_open(NULL, &open_req1, "test_file", O_RDWR | O_APPEND, 0, NULL);
+ r = uv_fs_open(NULL, &open_req1, "test_file",
+ O_RDWR | O_APPEND | add_flags, 0, NULL);
ASSERT(r >= 0);
ASSERT(open_req1.result >= 0);
uv_fs_req_cleanup(&open_req1);
@@ -2624,7 +2667,8 @@ TEST_IMPL(fs_file_open_append) {
ASSERT(close_req.result == 0);
uv_fs_req_cleanup(&close_req);
- r = uv_fs_open(NULL, &open_req1, "test_file", O_RDONLY, S_IRUSR, NULL);
+ r = uv_fs_open(NULL, &open_req1, "test_file", O_RDONLY | add_flags,
+ S_IRUSR, NULL);
ASSERT(r >= 0);
ASSERT(open_req1.result >= 0);
uv_fs_req_cleanup(&open_req1);
@@ -2646,6 +2690,10 @@ TEST_IMPL(fs_file_open_append) {
/* Cleanup */
unlink("test_file");
+}
+TEST_IMPL(fs_file_open_append) {
+ fs_file_open_append(0);
+ fs_file_open_append(UV_FS_O_FILEMAP);
MAKE_VALGRIND_HAPPY();
return 0;
@@ -2721,13 +2769,13 @@ TEST_IMPL(fs_rename_to_existing_file) {
}
-TEST_IMPL(fs_read_bufs) {
+static void fs_read_bufs(int add_flags) {
char scratch[768];
uv_buf_t bufs[4];
ASSERT(0 <= uv_fs_open(NULL, &open_req1,
"test/fixtures/lorem_ipsum.txt",
- O_RDONLY, 0, NULL));
+ O_RDONLY | add_flags, 0, NULL));
ASSERT(open_req1.result >= 0);
uv_fs_req_cleanup(&open_req1);
@@ -2769,13 +2817,17 @@ TEST_IMPL(fs_read_bufs) {
ASSERT(0 == uv_fs_close(NULL, &close_req, open_req1.result, NULL));
ASSERT(close_req.result == 0);
uv_fs_req_cleanup(&close_req);
+}
+TEST_IMPL(fs_read_bufs) {
+ fs_read_bufs(0);
+ fs_read_bufs(UV_FS_O_FILEMAP);
MAKE_VALGRIND_HAPPY();
return 0;
}
-TEST_IMPL(fs_read_file_eof) {
+static void fs_read_file_eof(int add_flags) {
#if defined(__CYGWIN__) || defined(__MSYS__)
RETURN_SKIP("Cygwin pread at EOF may (incorrectly) return data!");
#endif
@@ -2786,8 +2838,8 @@ TEST_IMPL(fs_read_file_eof) {
loop = uv_default_loop();
- r = uv_fs_open(NULL, &open_req1, "test_file", O_WRONLY | O_CREAT,
- S_IWUSR | S_IRUSR, NULL);
+ r = uv_fs_open(NULL, &open_req1, "test_file",
+ O_WRONLY | O_CREAT | add_flags, S_IWUSR | S_IRUSR, NULL);
ASSERT(r >= 0);
ASSERT(open_req1.result >= 0);
uv_fs_req_cleanup(&open_req1);
@@ -2803,7 +2855,8 @@ TEST_IMPL(fs_read_file_eof) {
ASSERT(close_req.result == 0);
uv_fs_req_cleanup(&close_req);
- r = uv_fs_open(NULL, &open_req1, "test_file", O_RDONLY, 0, NULL);
+ r = uv_fs_open(NULL, &open_req1, "test_file", O_RDONLY | add_flags, 0,
+ NULL);
ASSERT(r >= 0);
ASSERT(open_req1.result >= 0);
uv_fs_req_cleanup(&open_req1);
@@ -2830,13 +2883,17 @@ TEST_IMPL(fs_read_file_eof) {
/* Cleanup */
unlink("test_file");
+}
+TEST_IMPL(fs_read_file_eof) {
+ fs_read_file_eof(0);
+ fs_read_file_eof(UV_FS_O_FILEMAP);
MAKE_VALGRIND_HAPPY();
return 0;
}
-TEST_IMPL(fs_write_multiple_bufs) {
+static void fs_write_multiple_bufs(int add_flags) {
uv_buf_t iovs[2];
int r;
@@ -2845,8 +2902,8 @@ TEST_IMPL(fs_write_multiple_bufs) {
loop = uv_default_loop();
- r = uv_fs_open(NULL, &open_req1, "test_file", O_WRONLY | O_CREAT,
- S_IWUSR | S_IRUSR, NULL);
+ r = uv_fs_open(NULL, &open_req1, "test_file",
+ O_WRONLY | O_CREAT | add_flags, S_IWUSR | S_IRUSR, NULL);
ASSERT(r >= 0);
ASSERT(open_req1.result >= 0);
uv_fs_req_cleanup(&open_req1);
@@ -2863,7 +2920,8 @@ TEST_IMPL(fs_write_multiple_bufs) {
ASSERT(close_req.result == 0);
uv_fs_req_cleanup(&close_req);
- r = uv_fs_open(NULL, &open_req1, "test_file", O_RDONLY, 0, NULL);
+ r = uv_fs_open(NULL, &open_req1, "test_file", O_RDONLY | add_flags, 0,
+ NULL);
ASSERT(r >= 0);
ASSERT(open_req1.result >= 0);
uv_fs_req_cleanup(&open_req1);
@@ -2919,13 +2977,17 @@ TEST_IMPL(fs_write_multiple_bufs) {
/* Cleanup */
unlink("test_file");
+}
+TEST_IMPL(fs_write_multiple_bufs) {
+ fs_write_multiple_bufs(0);
+ fs_write_multiple_bufs(UV_FS_O_FILEMAP);
MAKE_VALGRIND_HAPPY();
return 0;
}
-TEST_IMPL(fs_write_alotof_bufs) {
+static void fs_write_alotof_bufs(int add_flags) {
size_t iovcount;
size_t iovmax;
uv_buf_t* iovs;
@@ -2947,7 +3009,7 @@ TEST_IMPL(fs_write_alotof_bufs) {
r = uv_fs_open(NULL,
&open_req1,
"test_file",
- O_RDWR | O_CREAT,
+ O_RDWR | O_CREAT | add_flags,
S_IWUSR | S_IRUSR,
NULL);
ASSERT(r >= 0);
@@ -2976,7 +3038,17 @@ TEST_IMPL(fs_write_alotof_bufs) {
iovs[index] = uv_buf_init(buffer + index * sizeof(test_buf),
sizeof(test_buf));
- ASSERT(lseek(open_req1.result, 0, SEEK_SET) == 0);
+ r = uv_fs_close(NULL, &close_req, open_req1.result, NULL);
+ ASSERT(r == 0);
+ ASSERT(close_req.result == 0);
+ uv_fs_req_cleanup(&close_req);
+
+ r = uv_fs_open(NULL, &open_req1, "test_file", O_RDONLY | add_flags, 0,
+ NULL);
+ ASSERT(r >= 0);
+ ASSERT(open_req1.result >= 0);
+ uv_fs_req_cleanup(&open_req1);
+
r = uv_fs_read(NULL, &read_req, open_req1.result, iovs, iovcount, -1, NULL);
if (iovcount > iovmax)
iovcount = iovmax;
@@ -3012,13 +3084,17 @@ TEST_IMPL(fs_write_alotof_bufs) {
/* Cleanup */
unlink("test_file");
free(iovs);
+}
+TEST_IMPL(fs_write_alotof_bufs) {
+ fs_write_alotof_bufs(0);
+ fs_write_alotof_bufs(UV_FS_O_FILEMAP);
MAKE_VALGRIND_HAPPY();
return 0;
}
-TEST_IMPL(fs_write_alotof_bufs_with_offset) {
+static void fs_write_alotof_bufs_with_offset(int add_flags) {
size_t iovcount;
size_t iovmax;
uv_buf_t* iovs;
@@ -3045,7 +3121,7 @@ TEST_IMPL(fs_write_alotof_bufs_with_offset) {
r = uv_fs_open(NULL,
&open_req1,
"test_file",
- O_RDWR | O_CREAT,
+ O_RDWR | O_CREAT | add_flags,
S_IWUSR | S_IRUSR,
NULL);
ASSERT(r >= 0);
@@ -3124,6 +3200,10 @@ TEST_IMPL(fs_write_alotof_bufs_with_offset) {
/* Cleanup */
unlink("test_file");
free(iovs);
+}
+TEST_IMPL(fs_write_alotof_bufs_with_offset) {
+ fs_write_alotof_bufs_with_offset(0);
+ fs_write_alotof_bufs_with_offset(UV_FS_O_FILEMAP);
MAKE_VALGRIND_HAPPY();
return 0;
@@ -3539,6 +3619,146 @@ TEST_IMPL(fs_file_pos_after_op_with_offset) {
return 0;
}
+#ifdef _WIN32
+static void fs_file_pos_common() {
+ int r;
+
+ iov = uv_buf_init("abc", 3);
+ r = uv_fs_write(NULL, &write_req, open_req1.result, &iov, 1, -1, NULL);
+ ASSERT(r == 3);
+ uv_fs_req_cleanup(&write_req);
+
+ /* Read with offset should not change the position */
+ iov = uv_buf_init(buf, 1);
+ r = uv_fs_read(NULL, &read_req, open_req1.result, &iov, 1, 1, NULL);
+ ASSERT(r == 1);
+ ASSERT(buf[0] == 'b');
+ uv_fs_req_cleanup(&read_req);
+
+ iov = uv_buf_init(buf, sizeof(buf));
+ r = uv_fs_read(NULL, &read_req, open_req1.result, &iov, 1, -1, NULL);
+ ASSERT(r == 0);
+ uv_fs_req_cleanup(&read_req);
+
+ /* Write without offset should change the position */
+ iov = uv_buf_init("d", 1);
+ r = uv_fs_write(NULL, &write_req, open_req1.result, &iov, 1, -1, NULL);
+ ASSERT(r == 1);
+ uv_fs_req_cleanup(&write_req);
+
+ iov = uv_buf_init(buf, sizeof(buf));
+ r = uv_fs_read(NULL, &read_req, open_req1.result, &iov, 1, -1, NULL);
+ ASSERT(r == 0);
+ uv_fs_req_cleanup(&read_req);
+}
+
+static void fs_file_pos_close_check(const char *contents, int size) {
+ int r;
+
+ /* Close */
+ r = uv_fs_close(NULL, &close_req, open_req1.result, NULL);
+ ASSERT(r == 0);
+ uv_fs_req_cleanup(&close_req);
+
+ /* Confirm file contents */
+ r = uv_fs_open(NULL, &open_req1, "test_file", O_RDONLY, 0, NULL);
+ ASSERT(r >= 0);
+ ASSERT(open_req1.result >= 0);
+ uv_fs_req_cleanup(&open_req1);
+
+ iov = uv_buf_init(buf, sizeof(buf));
+ r = uv_fs_read(NULL, &read_req, open_req1.result, &iov, 1, -1, NULL);
+ ASSERT(r == size);
+ ASSERT(strncmp(buf, contents, size) == 0);
+ uv_fs_req_cleanup(&read_req);
+
+ r = uv_fs_close(NULL, &close_req, open_req1.result, NULL);
+ ASSERT(r == 0);
+ uv_fs_req_cleanup(&close_req);
+
+ /* Cleanup */
+ unlink("test_file");
+}
+
+static void fs_file_pos_write(int add_flags) {
+ int r;
+
+ /* Setup. */
+ unlink("test_file");
+
+ r = uv_fs_open(NULL,
+ &open_req1,
+ "test_file",
+ O_TRUNC | O_CREAT | O_RDWR | add_flags,
+ S_IWUSR | S_IRUSR,
+ NULL);
+ ASSERT(r > 0);
+ uv_fs_req_cleanup(&open_req1);
+
+ fs_file_pos_common();
+
+ /* Write with offset should not change the position */
+ iov = uv_buf_init("e", 1);
+ r = uv_fs_write(NULL, &write_req, open_req1.result, &iov, 1, 1, NULL);
+ ASSERT(r == 1);
+ uv_fs_req_cleanup(&write_req);
+
+ iov = uv_buf_init(buf, sizeof(buf));
+ r = uv_fs_read(NULL, &read_req, open_req1.result, &iov, 1, -1, NULL);
+ ASSERT(r == 0);
+ uv_fs_req_cleanup(&read_req);
+
+ fs_file_pos_close_check("aecd", 4);
+}
+TEST_IMPL(fs_file_pos_write) {
+ fs_file_pos_write(0);
+ fs_file_pos_write(UV_FS_O_FILEMAP);
+
+ MAKE_VALGRIND_HAPPY();
+ return 0;
+}
+
+static void fs_file_pos_append(int add_flags) {
+ int r;
+
+ /* Setup. */
+ unlink("test_file");
+
+ r = uv_fs_open(NULL,
+ &open_req1,
+ "test_file",
+ O_APPEND | O_CREAT | O_RDWR | add_flags,
+ S_IWUSR | S_IRUSR,
+ NULL);
+ ASSERT(r > 0);
+ uv_fs_req_cleanup(&open_req1);
+
+ fs_file_pos_common();
+
+ /* Write with offset appends (ignoring offset)
+ * but does not change the position */
+ iov = uv_buf_init("e", 1);
+ r = uv_fs_write(NULL, &write_req, open_req1.result, &iov, 1, 1, NULL);
+ ASSERT(r == 1);
+ uv_fs_req_cleanup(&write_req);
+
+ iov = uv_buf_init(buf, sizeof(buf));
+ r = uv_fs_read(NULL, &read_req, open_req1.result, &iov, 1, -1, NULL);
+ ASSERT(r == 1);
+ ASSERT(buf[0] == 'e');
+ uv_fs_req_cleanup(&read_req);
+
+ fs_file_pos_close_check("abcde", 5);
+}
+TEST_IMPL(fs_file_pos_append) {
+ fs_file_pos_append(0);
+ fs_file_pos_append(UV_FS_O_FILEMAP);
+
+ MAKE_VALGRIND_HAPPY();
+ return 0;
+}
+#endif
+
TEST_IMPL(fs_null_req) {
/* Verify that all fs functions return UV_EINVAL when the request is NULL. */
int r;
@@ -3630,6 +3850,9 @@ TEST_IMPL(fs_null_req) {
r = uv_fs_futime(NULL, NULL, 0, 0.0, 0.0, NULL);
ASSERT(r == UV_EINVAL);
+ r = uv_fs_statfs(NULL, NULL, NULL, NULL);
+ ASSERT(r == UV_EINVAL);
+
/* This should be a no-op. */
uv_fs_req_cleanup(NULL);
@@ -3873,4 +4096,37 @@ TEST_IMPL(fs_fchmod_archive_readonly) {
return 0;
}
+
+TEST_IMPL(fs_invalid_mkdir_name) {
+ uv_loop_t* loop;
+ uv_fs_t req;
+ int r;
+
+ loop = uv_default_loop();
+ r = uv_fs_mkdir(loop, &req, "invalid>", 0, NULL);
+ ASSERT(r == UV_EINVAL);
+
+ return 0;
+}
#endif
+
+TEST_IMPL(fs_statfs) {
+ uv_fs_t req;
+ int r;
+
+ loop = uv_default_loop();
+
+ /* Test the synchronous version. */
+ r = uv_fs_statfs(NULL, &req, ".", NULL);
+ ASSERT(r == 0);
+ statfs_cb(&req);
+ ASSERT(statfs_cb_count == 1);
+
+ /* Test the asynchronous version. */
+ r = uv_fs_statfs(loop, &req, ".", statfs_cb);
+ ASSERT(r == 0);
+ uv_run(loop, UV_RUN_DEFAULT);
+ ASSERT(statfs_cb_count == 2);
+
+ return 0;
+}