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