authorgravatar for emilliken@gmail.commllken <emilliken@gmail.com> 2023-03-14 17:17:54+07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2023-07-24 20:12:41-07:00
logdc24835168d107183671288899954f5af56b0ba1
treeae67be45fb5a083383214a9e12fe4bd3eadcbf35
parent9892ec31a06d2c5806ccfbdf4cd03f1a40de3ab8

io_uring: let the OS choose a free local port for all tests

closes #14907

1 files changed, 15 insertions(+), 36 deletions(-)

lib/std/os/linux/io_uring.zig+15-36
...@@ -1978,11 +1978,6 @@ test "close" {...@@ -1978,11 +1978,6 @@ test "close" {
1978test "accept/connect/send/recv" {1978test "accept/connect/send/recv" {
1979 if (builtin.os.tag != .linux) return error.SkipZigTest;1979 if (builtin.os.tag != .linux) return error.SkipZigTest;
19801980
1981 if (true) {
1982 // https://github.com/ziglang/zig/issues/14907
1983 return error.SkipZigTest;
1984 }
1985
1986 var ring = IO_Uring.init(16, 0) catch |err| switch (err) {1981 var ring = IO_Uring.init(16, 0) catch |err| switch (err) {
1987 error.SystemOutdated => return error.SkipZigTest,1982 error.SystemOutdated => return error.SkipZigTest,
1988 error.PermissionDenied => return error.SkipZigTest,1983 error.PermissionDenied => return error.SkipZigTest,
...@@ -2024,11 +2019,6 @@ test "accept/connect/send/recv" {...@@ -2024,11 +2019,6 @@ test "accept/connect/send/recv" {
2024test "sendmsg/recvmsg" {2019test "sendmsg/recvmsg" {
2025 if (builtin.os.tag != .linux) return error.SkipZigTest;2020 if (builtin.os.tag != .linux) return error.SkipZigTest;
20262021
2027 if (true) {
2028 // https://github.com/ziglang/zig/issues/14907
2029 return error.SkipZigTest;
2030 }
2031
2032 var ring = IO_Uring.init(2, 0) catch |err| switch (err) {2022 var ring = IO_Uring.init(2, 0) catch |err| switch (err) {
2033 error.SystemOutdated => return error.SkipZigTest,2023 error.SystemOutdated => return error.SkipZigTest,
2034 error.PermissionDenied => return error.SkipZigTest,2024 error.PermissionDenied => return error.SkipZigTest,
...@@ -2036,8 +2026,7 @@ test "sendmsg/recvmsg" {...@@ -2036,8 +2026,7 @@ test "sendmsg/recvmsg" {
2036 };2026 };
2037 defer ring.deinit();2027 defer ring.deinit();
20382028
2039 if (true) @compileError("don't hard code port numbers in unit tests"); // https://github.com/ziglang/zig/issues/149072029 var address_server = try net.Address.parseIp4("127.0.0.1", 0);
2040 const address_server = try net.Address.parseIp4("127.0.0.1", 3131);
20412030
2042 const server = try os.socket(address_server.any.family, os.SOCK.DGRAM, 0);2031 const server = try os.socket(address_server.any.family, os.SOCK.DGRAM, 0);
2043 defer os.close(server);2032 defer os.close(server);
...@@ -2045,6 +2034,10 @@ test "sendmsg/recvmsg" {...@@ -2045,6 +2034,10 @@ test "sendmsg/recvmsg" {
2045 try os.setsockopt(server, os.SOL.SOCKET, os.SO.REUSEADDR, &mem.toBytes(@as(c_int, 1)));2034 try os.setsockopt(server, os.SOL.SOCKET, os.SO.REUSEADDR, &mem.toBytes(@as(c_int, 1)));
2046 try os.bind(server, &address_server.any, address_server.getOsSockLen());2035 try os.bind(server, &address_server.any, address_server.getOsSockLen());
20472036
2037 // set address_server to the OS-chosen IP/port.
2038 var slen: os.socklen_t = address_server.getOsSockLen();
2039 try os.getsockname(server, &address_server.any, &slen);
2040
2048 const client = try os.socket(address_server.any.family, os.SOCK.DGRAM, 0);2041 const client = try os.socket(address_server.any.family, os.SOCK.DGRAM, 0);
2049 defer os.close(client);2042 defer os.close(client);
20502043
...@@ -2236,11 +2229,6 @@ test "timeout_remove" {...@@ -2236,11 +2229,6 @@ test "timeout_remove" {
2236test "accept/connect/recv/link_timeout" {2229test "accept/connect/recv/link_timeout" {
2237 if (builtin.os.tag != .linux) return error.SkipZigTest;2230 if (builtin.os.tag != .linux) return error.SkipZigTest;
22382231
2239 if (true) {
2240 // https://github.com/ziglang/zig/issues/14907
2241 return error.SkipZigTest;
2242 }
2243
2244 var ring = IO_Uring.init(16, 0) catch |err| switch (err) {2232 var ring = IO_Uring.init(16, 0) catch |err| switch (err) {
2245 error.SystemOutdated => return error.SkipZigTest,2233 error.SystemOutdated => return error.SkipZigTest,
2246 error.PermissionDenied => return error.SkipZigTest,2234 error.PermissionDenied => return error.SkipZigTest,
...@@ -2391,11 +2379,6 @@ test "statx" {...@@ -2391,11 +2379,6 @@ test "statx" {
2391test "accept/connect/recv/cancel" {2379test "accept/connect/recv/cancel" {
2392 if (builtin.os.tag != .linux) return error.SkipZigTest;2380 if (builtin.os.tag != .linux) return error.SkipZigTest;
23932381
2394 if (true) {
2395 // https://github.com/ziglang/zig/issues/14907
2396 return error.SkipZigTest;
2397 }
2398
2399 var ring = IO_Uring.init(16, 0) catch |err| switch (err) {2382 var ring = IO_Uring.init(16, 0) catch |err| switch (err) {
2400 error.SystemOutdated => return error.SkipZigTest,2383 error.SystemOutdated => return error.SkipZigTest,
2401 error.PermissionDenied => return error.SkipZigTest,2384 error.PermissionDenied => return error.SkipZigTest,
...@@ -2533,11 +2516,6 @@ test "register_files_update" {...@@ -2533,11 +2516,6 @@ test "register_files_update" {
2533test "shutdown" {2516test "shutdown" {
2534 if (builtin.os.tag != .linux) return error.SkipZigTest;2517 if (builtin.os.tag != .linux) return error.SkipZigTest;
25352518
2536 if (true) {
2537 // https://github.com/ziglang/zig/issues/14907
2538 return error.SkipZigTest;
2539 }
2540
2541 var ring = IO_Uring.init(16, 0) catch |err| switch (err) {2519 var ring = IO_Uring.init(16, 0) catch |err| switch (err) {
2542 error.SystemOutdated => return error.SkipZigTest,2520 error.SystemOutdated => return error.SkipZigTest,
2543 error.PermissionDenied => return error.SkipZigTest,2521 error.PermissionDenied => return error.SkipZigTest,
...@@ -2545,8 +2523,7 @@ test "shutdown" {...@@ -2545,8 +2523,7 @@ test "shutdown" {
2545 };2523 };
2546 defer ring.deinit();2524 defer ring.deinit();
25472525
2548 if (true) @compileError("don't hard code port numbers in unit tests"); // https://github.com/ziglang/zig/issues/149072526 var address = try net.Address.parseIp4("127.0.0.1", 0);
2549 const address = try net.Address.parseIp4("127.0.0.1", 3131);
25502527
2551 // Socket bound, expect shutdown to work2528 // Socket bound, expect shutdown to work
2552 {2529 {
...@@ -2556,6 +2533,10 @@ test "shutdown" {...@@ -2556,6 +2533,10 @@ test "shutdown" {
2556 try os.bind(server, &address.any, address.getOsSockLen());2533 try os.bind(server, &address.any, address.getOsSockLen());
2557 try os.listen(server, 1);2534 try os.listen(server, 1);
25582535
2536 // set address to the OS-chosen IP/port.
2537 var slen: os.socklen_t = address.getOsSockLen();
2538 try os.getsockname(server, &address.any, &slen);
2539
2559 var shutdown_sqe = try ring.shutdown(0x445445445, server, os.linux.SHUT.RD);2540 var shutdown_sqe = try ring.shutdown(0x445445445, server, os.linux.SHUT.RD);
2560 try testing.expectEqual(linux.IORING_OP.SHUTDOWN, shutdown_sqe.opcode);2541 try testing.expectEqual(linux.IORING_OP.SHUTDOWN, shutdown_sqe.opcode);
2561 try testing.expectEqual(@as(i32, server), shutdown_sqe.fd);2542 try testing.expectEqual(@as(i32, server), shutdown_sqe.fd);
...@@ -3091,11 +3072,6 @@ test "remove_buffers" {...@@ -3091,11 +3072,6 @@ test "remove_buffers" {
3091test "provide_buffers: accept/connect/send/recv" {3072test "provide_buffers: accept/connect/send/recv" {
3092 if (builtin.os.tag != .linux) return error.SkipZigTest;3073 if (builtin.os.tag != .linux) return error.SkipZigTest;
30933074
3094 if (true) {
3095 // https://github.com/ziglang/zig/issues/14907
3096 return error.SkipZigTest;
3097 }
3098
3099 var ring = IO_Uring.init(16, 0) catch |err| switch (err) {3075 var ring = IO_Uring.init(16, 0) catch |err| switch (err) {
3100 error.SystemOutdated => return error.SkipZigTest,3076 error.SystemOutdated => return error.SkipZigTest,
3101 error.PermissionDenied => return error.SkipZigTest,3077 error.PermissionDenied => return error.SkipZigTest,
...@@ -3272,8 +3248,7 @@ const SocketTestHarness = struct {...@@ -3272,8 +3248,7 @@ const SocketTestHarness = struct {
3272fn createSocketTestHarness(ring: *IO_Uring) !SocketTestHarness {3248fn createSocketTestHarness(ring: *IO_Uring) !SocketTestHarness {
3273 // Create a TCP server socket3249 // Create a TCP server socket
32743250
3275 if (true) @compileError("don't hard code port numbers in unit tests"); // https://github.com/ziglang/zig/issues/149073251 var address = try net.Address.parseIp4("127.0.0.1", 0);
3276 const address = try net.Address.parseIp4("127.0.0.1", 3131);
3277 const kernel_backlog = 1;3252 const kernel_backlog = 1;
3278 const listener_socket = try os.socket(address.any.family, os.SOCK.STREAM | os.SOCK.CLOEXEC, 0);3253 const listener_socket = try os.socket(address.any.family, os.SOCK.STREAM | os.SOCK.CLOEXEC, 0);
3279 errdefer os.closeSocket(listener_socket);3254 errdefer os.closeSocket(listener_socket);
...@@ -3282,6 +3257,10 @@ fn createSocketTestHarness(ring: *IO_Uring) !SocketTestHarness {...@@ -3282,6 +3257,10 @@ fn createSocketTestHarness(ring: *IO_Uring) !SocketTestHarness {
3282 try os.bind(listener_socket, &address.any, address.getOsSockLen());3257 try os.bind(listener_socket, &address.any, address.getOsSockLen());
3283 try os.listen(listener_socket, kernel_backlog);3258 try os.listen(listener_socket, kernel_backlog);
32843259
3260 // set address to the OS-chosen IP/port.
3261 var slen: os.socklen_t = address.getOsSockLen();
3262 try os.getsockname(listener_socket, &address.any, &slen);
3263
3285 // Submit 1 accept3264 // Submit 1 accept
3286 var accept_addr: os.sockaddr = undefined;3265 var accept_addr: os.sockaddr = undefined;
3287 var accept_addr_len: os.socklen_t = @sizeOf(@TypeOf(accept_addr));3266 var accept_addr_len: os.socklen_t = @sizeOf(@TypeOf(accept_addr));