authorgravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2021-06-12 20:32:11+03:00
committergravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2021-06-15 12:14:03+02:00
logeb7cfe9de6fcc87d84227c945f397a538303e55e
treef3440f55e541e8872e09f07c7a59e4cd6c4b2e0c
parent71e99c869012194cc4a23c5842b746533c1ae2bb

add a test for dup and dup2


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

lib/std/os/test.zig+29
...@@ -756,3 +756,32 @@ test "sigaction" {...@@ -756,3 +756,32 @@ test "sigaction" {
756 os.sigaction(os.SIGUSR1, null, &old_sa);756 os.sigaction(os.SIGUSR1, null, &old_sa);
757 try testing.expectEqual(os.SIG_DFL, old_sa.handler.sigaction);757 try testing.expectEqual(os.SIG_DFL, old_sa.handler.sigaction);
758}758}
759
760test "dup & dup2" {
761 if (native_os != .linux) return error.SkipZigTest;
762
763 var tmp = tmpDir(.{});
764 defer tmp.cleanup();
765
766 {
767 var file = try tmp.dir.createFile("os_dup_test", .{});
768 defer file.close();
769
770 var duped = std.fs.File{ .handle = try std.os.dup(file.handle) };
771 defer duped.close();
772 try duped.writeAll("dup");
773
774 // Tests aren't run in parallel so using the next fd shouldn't be an issue.
775 const new_fd = duped.handle + 1;
776 try std.os.dup2(file.handle, new_fd);
777 var dup2ed = std.fs.File{ .handle = new_fd };
778 defer dup2ed.close();
779 try dup2ed.writeAll("dup2");
780 }
781
782 var file = try tmp.dir.openFile("os_dup_test", .{});
783 defer file.close();
784
785 var buf: [7]u8 = undefined;
786 try testing.expectEqualStrings("dupdup2", buf[0..try file.readAll(&buf)]);
787}