| ... | @@ -1460,6 +1460,8 @@ test "access file" { | ... | @@ -1460,6 +1460,8 @@ test "access file" { |
| 1460 | } | 1460 | } |
| 1461 | | 1461 | |
| 1462 | test "sendfile" { | 1462 | test "sendfile" { |
| | 1463 | const io = testing.io; |
| | 1464 | |
| 1463 | var tmp = tmpDir(.{}); | 1465 | var tmp = tmpDir(.{}); |
| 1464 | defer tmp.cleanup(); | 1466 | defer tmp.cleanup(); |
| 1465 | | 1467 | |
| ... | @@ -1470,21 +1472,14 @@ test "sendfile" { | ... | @@ -1470,21 +1472,14 @@ test "sendfile" { |
| 1470 | | 1472 | |
| 1471 | const line1 = "line1\n"; | 1473 | const line1 = "line1\n"; |
| 1472 | const line2 = "second line\n"; | 1474 | const line2 = "second line\n"; |
| 1473 | var vecs = [_]posix.iovec_const{ | 1475 | var vecs = [_][]const u8{ line1, line2 }; |
| 1474 | .{ | | |
| 1475 | .base = line1, | | |
| 1476 | .len = line1.len, | | |
| 1477 | }, | | |
| 1478 | .{ | | |
| 1479 | .base = line2, | | |
| 1480 | .len = line2.len, | | |
| 1481 | }, | | |
| 1482 | }; | | |
| 1483 | | 1476 | |
| 1484 | var src_file = try dir.createFile("sendfile1.txt", .{ .read = true }); | 1477 | var src_file = try dir.createFile("sendfile1.txt", .{ .read = true }); |
| 1485 | defer src_file.close(); | 1478 | defer src_file.close(); |
| 1486 | | 1479 | { |
| 1487 | try src_file.writevAll(&vecs); | 1480 | var fw = src_file.writer(&.{}); |
| | 1481 | try fw.interface.writeVecAll(&vecs); |
| | 1482 | } |
| 1488 | | 1483 | |
| 1489 | var dest_file = try dir.createFile("sendfile2.txt", .{ .read = true }); | 1484 | var dest_file = try dir.createFile("sendfile2.txt", .{ .read = true }); |
| 1490 | defer dest_file.close(); | 1485 | defer dest_file.close(); |
| ... | @@ -1497,7 +1492,7 @@ test "sendfile" { | ... | @@ -1497,7 +1492,7 @@ test "sendfile" { |
| 1497 | var trailers: [2][]const u8 = .{ trailer1, trailer2 }; | 1492 | var trailers: [2][]const u8 = .{ trailer1, trailer2 }; |
| 1498 | | 1493 | |
| 1499 | var written_buf: [100]u8 = undefined; | 1494 | var written_buf: [100]u8 = undefined; |
| 1500 | var file_reader = src_file.reader(&.{}); | 1495 | var file_reader = src_file.reader(io, &.{}); |
| 1501 | var fallback_buffer: [50]u8 = undefined; | 1496 | var fallback_buffer: [50]u8 = undefined; |
| 1502 | var file_writer = dest_file.writer(&fallback_buffer); | 1497 | var file_writer = dest_file.writer(&fallback_buffer); |
| 1503 | try file_writer.interface.writeVecAll(&headers); | 1498 | try file_writer.interface.writeVecAll(&headers); |
| ... | @@ -1505,11 +1500,15 @@ test "sendfile" { | ... | @@ -1505,11 +1500,15 @@ test "sendfile" { |
| 1505 | try testing.expectEqual(10, try file_writer.interface.sendFileAll(&file_reader, .limited(10))); | 1500 | try testing.expectEqual(10, try file_writer.interface.sendFileAll(&file_reader, .limited(10))); |
| 1506 | try file_writer.interface.writeVecAll(&trailers); | 1501 | try file_writer.interface.writeVecAll(&trailers); |
| 1507 | try file_writer.interface.flush(); | 1502 | try file_writer.interface.flush(); |
| 1508 | const amt = try dest_file.preadAll(&written_buf, 0); | 1503 | var fr = file_writer.moveToReader(io); |
| | 1504 | try fr.seekTo(0); |
| | 1505 | const amt = try fr.interface.readSliceShort(&written_buf); |
| 1509 | try testing.expectEqualStrings("header1\nsecond header\nine1\nsecontrailer1\nsecond trailer\n", written_buf[0..amt]); | 1506 | try testing.expectEqualStrings("header1\nsecond header\nine1\nsecontrailer1\nsecond trailer\n", written_buf[0..amt]); |
| 1510 | } | 1507 | } |
| 1511 | | 1508 | |
| 1512 | test "sendfile with buffered data" { | 1509 | test "sendfile with buffered data" { |
| | 1510 | const io = testing.io; |
| | 1511 | |
| 1513 | var tmp = tmpDir(.{}); | 1512 | var tmp = tmpDir(.{}); |
| 1514 | defer tmp.cleanup(); | 1513 | defer tmp.cleanup(); |
| 1515 | | 1514 | |
| ... | @@ -1527,7 +1526,7 @@ test "sendfile with buffered data" { | ... | @@ -1527,7 +1526,7 @@ test "sendfile with buffered data" { |
| 1527 | defer dest_file.close(); | 1526 | defer dest_file.close(); |
| 1528 | | 1527 | |
| 1529 | var src_buffer: [32]u8 = undefined; | 1528 | var src_buffer: [32]u8 = undefined; |
| 1530 | var file_reader = src_file.reader(&src_buffer); | 1529 | var file_reader = src_file.reader(io, &src_buffer); |
| 1531 | | 1530 | |
| 1532 | try file_reader.seekTo(0); | 1531 | try file_reader.seekTo(0); |
| 1533 | try file_reader.interface.fill(8); | 1532 | try file_reader.interface.fill(8); |
| ... | @@ -1538,7 +1537,9 @@ test "sendfile with buffered data" { | ... | @@ -1538,7 +1537,9 @@ test "sendfile with buffered data" { |
| 1538 | try std.testing.expectEqual(4, try file_writer.interface.sendFileAll(&file_reader, .limited(4))); | 1537 | try std.testing.expectEqual(4, try file_writer.interface.sendFileAll(&file_reader, .limited(4))); |
| 1539 | | 1538 | |
| 1540 | var written_buf: [8]u8 = undefined; | 1539 | var written_buf: [8]u8 = undefined; |
| 1541 | const amt = try dest_file.preadAll(&written_buf, 0); | 1540 | var fr = file_writer.moveToReader(io); |
| | 1541 | try fr.seekTo(0); |
| | 1542 | const amt = try fr.interface.readSliceShort(&written_buf); |
| 1542 | | 1543 | |
| 1543 | try std.testing.expectEqual(4, amt); | 1544 | try std.testing.expectEqual(4, amt); |
| 1544 | try std.testing.expectEqualSlices(u8, "AAAA", written_buf[0..amt]); | 1545 | try std.testing.expectEqualSlices(u8, "AAAA", written_buf[0..amt]); |
| ... | @@ -2250,6 +2251,8 @@ test "seekTo flushes buffered data" { | ... | @@ -2250,6 +2251,8 @@ test "seekTo flushes buffered data" { |
| 2250 | } | 2251 | } |
| 2251 | | 2252 | |
| 2252 | test "File.Writer sendfile with buffered contents" { | 2253 | test "File.Writer sendfile with buffered contents" { |
| | 2254 | const io = testing.io; |
| | 2255 | |
| 2253 | var tmp_dir = testing.tmpDir(.{}); | 2256 | var tmp_dir = testing.tmpDir(.{}); |
| 2254 | defer tmp_dir.cleanup(); | 2257 | defer tmp_dir.cleanup(); |
| 2255 | | 2258 | |
| ... | @@ -2261,7 +2264,7 @@ test "File.Writer sendfile with buffered contents" { | ... | @@ -2261,7 +2264,7 @@ test "File.Writer sendfile with buffered contents" { |
| 2261 | defer out.close(); | 2264 | defer out.close(); |
| 2262 | | 2265 | |
| 2263 | var in_buf: [2]u8 = undefined; | 2266 | var in_buf: [2]u8 = undefined; |
| 2264 | var in_r = in.reader(&in_buf); | 2267 | var in_r = in.reader(io, &in_buf); |
| 2265 | _ = try in_r.getSize(); // Catch seeks past end by populating size | 2268 | _ = try in_r.getSize(); // Catch seeks past end by populating size |
| 2266 | try in_r.interface.fill(2); | 2269 | try in_r.interface.fill(2); |
| 2267 | | 2270 | |
| ... | @@ -2275,7 +2278,7 @@ test "File.Writer sendfile with buffered contents" { | ... | @@ -2275,7 +2278,7 @@ test "File.Writer sendfile with buffered contents" { |
| 2275 | var check = try tmp_dir.dir.openFile("b", .{}); | 2278 | var check = try tmp_dir.dir.openFile("b", .{}); |
| 2276 | defer check.close(); | 2279 | defer check.close(); |
| 2277 | var check_buf: [4]u8 = undefined; | 2280 | var check_buf: [4]u8 = undefined; |
| 2278 | var check_r = check.reader(&check_buf); | 2281 | var check_r = check.reader(io, &check_buf); |
| 2279 | try testing.expectEqualStrings("abcd", try check_r.interface.take(4)); | 2282 | try testing.expectEqualStrings("abcd", try check_r.interface.take(4)); |
| 2280 | try testing.expectError(error.EndOfStream, check_r.interface.takeByte()); | 2283 | try testing.expectError(error.EndOfStream, check_r.interface.takeByte()); |
| 2281 | } | 2284 | } |