authorgravatar for h_n91@hotmail.comDraagrenKirneh <h_n91@hotmail.com> 2023-05-02 13:43:41+02:00
committergravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2023-05-02 23:31:29+03:00
loge9cbdb2cfd6ccc51b50e97e7df419451aa8a1c95
tree8ece95b1d836d44d6e486e520927f4ac68d89bac
parenta2e2e25165b51ef92dbfbd9c46b6a01c90b250b3

Add a random generated prefix to the unix socket_path to guard against multiple tests/threads running the same test at the same time


1 files changed, 16 insertions(+), 5 deletions(-)

lib/std/net/test.zig+16-5
...@@ -1,4 +1,4 @@...@@ -1,4 +1,4 @@
1const std = @import("../std.zig");1const std = @import("std");
2const builtin = @import("builtin");2const builtin = @import("builtin");
3const net = std.net;3const net = std.net;
4const mem = std.mem;4const mem = std.mem;
...@@ -300,22 +300,23 @@ test "listen on a unix socket, send bytes, receive bytes" {...@@ -300,22 +300,23 @@ test "listen on a unix socket, send bytes, receive bytes" {
300 var server = net.StreamServer.init(.{});300 var server = net.StreamServer.init(.{});
301 defer server.deinit();301 defer server.deinit();
302302
303 const socket_path = "socket.unix";303 var socket_path = try generateFileName("socket.unix");
304 defer testing.allocator.free(socket_path);
304305
305 var socket_addr = try net.Address.initUnix(socket_path);306 var socket_addr = try net.Address.initUnix(socket_path);
306 defer std.fs.cwd().deleteFile(socket_path) catch {};307 defer std.fs.cwd().deleteFile(socket_path) catch {};
307 try server.listen(socket_addr);308 try server.listen(socket_addr);
308309
309 const S = struct {310 const S = struct {
310 fn clientFn() !void {311 fn clientFn(path: []const u8) !void {
311 const socket = try net.connectUnixSocket(socket_path);312 const socket = try net.connectUnixSocket(path);
312 defer socket.close();313 defer socket.close();
313314
314 _ = try socket.writer().writeAll("Hello world!");315 _ = try socket.writer().writeAll("Hello world!");
315 }316 }
316 };317 };
317318
318 const t = try std.Thread.spawn(.{}, S.clientFn, .{});319 const t = try std.Thread.spawn(.{}, S.clientFn, .{socket_path});
319 defer t.join();320 defer t.join();
320321
321 var client = try server.accept();322 var client = try server.accept();
...@@ -326,3 +327,13 @@ test "listen on a unix socket, send bytes, receive bytes" {...@@ -326,3 +327,13 @@ test "listen on a unix socket, send bytes, receive bytes" {
326 try testing.expectEqual(@as(usize, 12), n);327 try testing.expectEqual(@as(usize, 12), n);
327 try testing.expectEqualSlices(u8, "Hello world!", buf[0..n]);328 try testing.expectEqualSlices(u8, "Hello world!", buf[0..n]);
328}329}
330
331fn generateFileName(base_name: []const u8) ![]const u8 {
332 const random_bytes_count = 12;
333 const sub_path_len = comptime std.fs.base64_encoder.calcSize(random_bytes_count);
334 var random_bytes: [12]u8 = undefined;
335 std.crypto.random.bytes(&random_bytes);
336 var sub_path: [sub_path_len]u8 = undefined;
337 _ = std.fs.base64_encoder.encode(&sub_path, &random_bytes);
338 return std.fmt.allocPrint(testing.allocator, "{s}-{s}", .{ sub_path[0..], base_name });
339}