aboutsummaryrefslogtreecommitdiff
path: root/test/js
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <jarred@jarredsumner.com> 2023-06-20 00:31:07 -0700
committerGravatar GitHub <noreply@github.com> 2023-06-20 00:31:07 -0700
commit9f301e13c5d8f057e6e9308e23cba7ecc27dab09 (patch)
treeee8990a71359eb589ccb9bd543fa3ac9ff13ead5 /test/js
parentf1b1dbf5cdbd73fc7ca9ef46892530c2cb883d37 (diff)
downloadbun-9f301e13c5d8f057e6e9308e23cba7ecc27dab09.tar.gz
bun-9f301e13c5d8f057e6e9308e23cba7ecc27dab09.tar.zst
bun-9f301e13c5d8f057e6e9308e23cba7ecc27dab09.zip
Cleanup fs.utimesSync (#3363)
* Fix UB in fs.utimesSync when passing a number with an integer greater than i32 * Fix make headers --------- Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
Diffstat (limited to 'test/js')
-rw-r--r--test/js/node/fs/fs.test.ts72
1 files changed, 72 insertions, 0 deletions
diff --git a/test/js/node/fs/fs.test.ts b/test/js/node/fs/fs.test.ts
index 999547c93..37c3253a4 100644
--- a/test/js/node/fs/fs.test.ts
+++ b/test/js/node/fs/fs.test.ts
@@ -1221,3 +1221,75 @@ it("existsSync with invalid path doesn't throw", () => {
expect(existsSync(undefined as any)).toBe(false);
expect(existsSync({ invalid: 1 } as any)).toBe(false);
});
+
+describe("utimesSync", () => {
+ it("works", () => {
+ const tmp = join(tmpdir(), "utimesSync-test-file-" + Math.random().toString(36).slice(2));
+ writeFileSync(tmp, "test");
+ const prevStats = fs.statSync(tmp);
+ const prevModifiedTime = prevStats.mtime;
+ const prevAccessTime = prevStats.atime;
+
+ prevModifiedTime.setMilliseconds(0);
+ prevAccessTime.setMilliseconds(0);
+
+ prevModifiedTime.setFullYear(1996);
+ prevAccessTime.setFullYear(1996);
+
+ // Get the current time to change the timestamps
+ const newModifiedTime = new Date();
+ const newAccessTime = new Date();
+
+ newModifiedTime.setMilliseconds(0);
+ newAccessTime.setMilliseconds(0);
+
+ fs.utimesSync(tmp, newAccessTime, newModifiedTime);
+
+ const newStats = fs.statSync(tmp);
+
+ expect(newStats.mtime).toEqual(newModifiedTime);
+ expect(newStats.atime).toEqual(newAccessTime);
+
+ fs.utimesSync(tmp, prevAccessTime, prevModifiedTime);
+
+ const finalStats = fs.statSync(tmp);
+
+ expect(finalStats.mtime).toEqual(prevModifiedTime);
+ expect(finalStats.atime).toEqual(prevAccessTime);
+ });
+
+ it("accepts a Number(value).toString()", () => {
+ const tmp = join(tmpdir(), "utimesSync-test-file2-" + Math.random().toString(36).slice(2));
+ writeFileSync(tmp, "test");
+ const prevStats = fs.statSync(tmp);
+ const prevModifiedTime = prevStats.mtime;
+ const prevAccessTime = prevStats.atime;
+
+ prevModifiedTime.setMilliseconds(0);
+ prevAccessTime.setMilliseconds(0);
+
+ prevModifiedTime.setFullYear(1996);
+ prevAccessTime.setFullYear(1996);
+
+ // Get the current time to change the timestamps
+ const newModifiedTime = new Date();
+ const newAccessTime = new Date();
+
+ newModifiedTime.setMilliseconds(0);
+ newAccessTime.setMilliseconds(0);
+
+ fs.utimesSync(tmp, newAccessTime.getTime() / 1000 + "", newModifiedTime.getTime() / 1000 + "");
+
+ const newStats = fs.statSync(tmp);
+
+ expect(newStats.mtime).toEqual(newModifiedTime);
+ expect(newStats.atime).toEqual(newAccessTime);
+
+ fs.utimesSync(tmp, prevAccessTime.getTime() / 1000 + "", prevModifiedTime.getTime() / 1000 + "");
+
+ const finalStats = fs.statSync(tmp);
+
+ expect(finalStats.mtime).toEqual(prevModifiedTime);
+ expect(finalStats.atime).toEqual(prevAccessTime);
+ });
+});