tests: extend readFile file length during read
This commit adds some tests that demonstrate that Deno.readFile reads
the entire file, even if the read file is extended during read.
// Copyright 2018-2021 the Deno authors. All rights reserved. MIT license.
+import { writeAllSync } from "../../../test_util/std/io/util.ts";
import {
assert,
assertEquals,
@@ -115,3 +116,42 @@ unitTest(
});
},
);
+
+unitTest(
+ { permissions: { read: true, write: true } },
+ async function readFileExtendedDuringRead() {
+ // Write 128MB file
+ const filename = Deno.makeTempDirSync() + "/test.txt";
+ const data = new Uint8Array(1024 * 1024 * 128);
+ Deno.writeFileSync(filename, data);
+ const promise = Deno.readFile(filename);
+ queueMicrotask(() => {
+ // Append 128MB to file
+ const f = Deno.openSync(filename, { append: true });
+ writeAllSync(f, data);
+ f.close();
+ });
+ const read = await promise;
+ assertEquals(read.byteLength, data.byteLength * 2);
+ },
+);
+
+unitTest(
+ { permissions: { read: true, write: true } },
+ async function readFile0LengthExtendedDuringRead() {
+ // Write 0 byte file
+ const filename = Deno.makeTempDirSync() + "/test.txt";
+ const first = new Uint8Array(0);
+ const second = new Uint8Array(1024 * 1024 * 128);
+ Deno.writeFileSync(filename, first);
+ const promise = Deno.readFile(filename);
+ queueMicrotask(() => {
+ // Append 128MB to file
+ const f = Deno.openSync(filename, { append: true });
+ writeAllSync(f, second);
+ f.close();
+ });
+ const read = await promise;
+ assertEquals(read.byteLength, second.byteLength);
+ },
+);
