authorgravatar for egoist@egoistic.devxEgoist <egoist@egoistic.dev> 2023-04-18 04:13:38-05:00
committergravatar for egoist@egoistic.devxEgoist <egoist@egoistic.dev> 2023-04-18 05:27:28-05:00
log55b2456c1187b22b2b8e2d3643aff86815dae551
treef7d389a15e4e2729cff9cef02a39e8c58dffd33a
parent89334fae205d02874fec1571e0637cfa1894ff1e

fs: add test for Windows ready-only file deletion.

Deleting a read-only file should result in `AccessDenied` (`CANNOT_DELETE`). Note: This test was observed to fail when the file is closed then reopened before the change in permission due to the absence of `FILE_WRITE_ATTRIBUTES` when re-opened. (see #15316).

1 files changed, 19 insertions(+), 0 deletions(-)

lib/std/fs/test.zig+19
...@@ -1415,3 +1415,22 @@ test "File.PermissionsUnix" {...@@ -1415,3 +1415,22 @@ test "File.PermissionsUnix" {
1415 try testing.expect(permissions_unix.unixHas(.user, .execute));1415 try testing.expect(permissions_unix.unixHas(.user, .execute));
1416 try testing.expect(!permissions_unix.unixHas(.other, .execute));1416 try testing.expect(!permissions_unix.unixHas(.other, .execute));
1417}1417}
1418
1419test "delete a read-only file on windows" {
1420 if (builtin.os.tag != .windows) return error.SkipZigTest;
1421
1422 var tmp = tmpDir(.{});
1423 defer tmp.cleanup();
1424 const file = try tmp.dir.createFile("test_file", .{ .read = true });
1425 // Create a file and make it read-only
1426 const metadata = try file.metadata();
1427 var permissions = metadata.permissions();
1428 permissions.setReadOnly(true);
1429 try file.setPermissions(permissions);
1430 try testing.expectError(error.AccessDenied, tmp.dir.deleteFile("test_file"));
1431 // Now make the file not read-only
1432 permissions.setReadOnly(false);
1433 try file.setPermissions(permissions);
1434 file.close();
1435 try tmp.dir.deleteFile("test_file");
1436}