Lines Matching +full:read +full:- +full:out

1 /*-
2 * SPDX-License-Identifier: BSD-2-Clause
27 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
51 class Read: public FuseTest { class
60 class RofsRead: public Read {
64 Read::SetUp(); in SetUp()
81 class AioRead: public Read {
98 class ReadAhead: public Read,
110 Read::SetUp(); in SetUp()
114 class ReadMaxRead: public Read {
117 Read::SetUp(); in SetUp()
121 class ReadNoatime: public Read {
124 Read::SetUp(); in SetUp()
128 class ReadSigbus: public Read
148 ReadSigbus::s_si_addr = info->si_addr; in handle_sigbus()
155 class TimeGran: public Read, public WithParamInterface<unsigned> {
159 Read::SetUp(); in SetUp()
197 * is at most one outstanding read operation per file handle
218 in.body.read.fh == FH && in TEST_F()
219 in.body.read.offset == (uint64_t)off0); in TEST_F()
222 ).WillRepeatedly(Invoke([&](auto in __unused, auto &out __unused) { in TEST_F()
230 in.body.read.fh == FH && in TEST_F()
231 in.body.read.offset == (uint64_t)off1); in TEST_F()
234 ).WillRepeatedly(Invoke([&](auto in __unused, auto &out __unused) { in TEST_F()
243 * Submit two AIO read requests, and respond to neither. If the in TEST_F()
244 * filesystem ever gets the second read request, then we failed to in TEST_F()
263 * the second read, even though the first has not yet returned in TEST_F()
268 m_mock->kill_daemon(); in TEST_F()
277 * simultaneous read requests on the same file handle.
301 in.body.read.fh == FH && in TEST_F()
302 in.body.read.offset == (uint64_t)off0); in TEST_F()
305 ).WillOnce(Invoke([&](auto in __unused, auto &out __unused) { in TEST_F()
313 in.body.read.fh == FH && in TEST_F()
314 in.body.read.offset == (uint64_t)off1); in TEST_F()
317 ).WillOnce(Invoke([&](auto in __unused, auto &out __unused) { in TEST_F()
326 * Submit two AIO read requests, but respond to neither. Ensure that in TEST_F()
347 m_mock->kill_daemon(); in TEST_F()
354 /* The kernel should update the cached atime attribute during a read */
355 TEST_F(Read, atime) in TEST_F() argument
377 ASSERT_EQ(bufsize, read(fd, buf, bufsize)) << strerror(errno); in TEST_F()
380 /* The kernel should automatically update atime during read */ in TEST_F()
388 /* The kernel should update the cached atime attribute during a cached read */
389 TEST_F(Read, atime_cached) in TEST_F() argument
410 /* Ensure atime will be different than it was during the first read */ in TEST_F()
416 /* The kernel should automatically update atime during read */ in TEST_F()
425 TEST_F(Read, atime_during_close) in TEST_F() argument
452 ).WillOnce(Invoke(ReturnImmediate([=](auto in __unused, auto& out) { in TEST_F() argument
453 SET_OUT_HEADER_LEN(out, attr); in TEST_F()
454 out.body.attr.attr.ino = ino; in TEST_F()
455 out.body.attr.attr.mode = S_IFREG | newmode; in TEST_F()
466 ASSERT_EQ(bufsize, read(fd, buf, bufsize)) << strerror(errno); in TEST_F()
473 * When not using -o default_permissions, the daemon may make its own decisions
477 TEST_F(Read, atime_during_close_eacces) in TEST_F() argument
508 ASSERT_EQ(bufsize, read(fd, buf, bufsize)) << strerror(errno); in TEST_F()
514 TEST_F(Read, atime_during_setattr) in TEST_F() argument
541 ).WillOnce(Invoke(ReturnImmediate([=](auto in __unused, auto& out) { in TEST_F() argument
542 SET_OUT_HEADER_LEN(out, attr); in TEST_F()
543 out.body.attr.attr.ino = ino; in TEST_F()
544 out.body.attr.attr.mode = S_IFREG | newmode; in TEST_F()
553 ASSERT_EQ(bufsize, read(fd, buf, bufsize)) << strerror(errno); in TEST_F()
560 /* 0-length reads shouldn't cause any confusion */
561 TEST_F(Read, direct_io_read_nothing) in TEST_F() argument
584 TEST_F(Read, direct_io_pread) in TEST_F() argument
606 // get a 2nd read request. in TEST_F()
615 * requested. fuse(4) should return a short read to userland.
617 TEST_F(Read, direct_io_short_read) in TEST_F() argument
642 TEST_F(Read, eio) in TEST_F() argument
664 ASSERT_EQ(-1, read(fd, buf, bufsize)) << strerror(errno); in TEST_F()
670 * If the server returns a short read when direct io is not in use, that
671 * indicates EOF, because of a server-side truncation. We should invalidate
674 TEST_F(Read, eof) in TEST_F() argument
704 /* Like Read.eof, but causes an entire buffer to be invalidated */
705 TEST_F(Read, eof_of_whole_buffer) in TEST_F() argument
729 /* Try to read the 2nd block, but it's past EOF */ in TEST_F()
738 * With the keep_cache option, the kernel may keep its read cache across
741 TEST_F(Read, keep_cache) in TEST_F() argument
757 ASSERT_EQ(bufsize, read(fd0, buf, bufsize)) << strerror(errno); in TEST_F()
763 * This read should be serviced by cache, even though it's on the other in TEST_F()
766 ASSERT_EQ(bufsize, read(fd1, buf, bufsize)) << strerror(errno); in TEST_F()
773 * Without the keep_cache option, the kernel should drop its read caches on
776 TEST_F(Read, keep_cache_disabled) in TEST_F() argument
792 ASSERT_EQ(bufsize, read(fd0, buf, bufsize)) << strerror(errno); in TEST_F()
798 * This read should not be serviced by cache, even though it's on the in TEST_F()
803 ASSERT_EQ(bufsize, read(fd0, buf, bufsize)) << strerror(errno); in TEST_F()
809 TEST_F(Read, mmap) in TEST_F() argument
828 in.body.read.fh == Read::FH && in TEST_F()
829 in.body.read.offset == 0 && in TEST_F()
830 in.body.read.size == bufsize); in TEST_F()
833 ).WillOnce(Invoke(ReturnImmediate([=](auto in __unused, auto& out) { in TEST_F() argument
834 out.header.len = sizeof(struct fuse_out_header) + bufsize; in TEST_F()
835 memmove(out.body.bytes, CONTENTS, bufsize); in TEST_F()
882 ASSERT_EQ(bufsize, read(fd, rbuf, bufsize)) << strerror(errno); in TEST_F()
897 * The kernel should not update the cached atime attribute during a read, if
921 ASSERT_EQ(bufsize, read(fd, buf, bufsize)) << strerror(errno); in TEST_F()
924 /* The kernel should not update atime during read */ in TEST_F()
934 * read, if MNT_NOATIME is used.
962 /* The kernel should automatically update atime during read */ in TEST_F()
970 /* Read of an mmap()ed file fails */
991 in.body.read.fh == Read::FH); in TEST_F()
1021 * A read via mmap comes up short, indicating that the file was truncated
1022 * server-side.
1024 TEST_F(Read, mmap_eof) in TEST_F() argument
1044 in.body.read.fh == Read::FH && in TEST_F()
1045 in.body.read.offset == 0 && in TEST_F()
1046 in.body.read.size == (uint32_t)m_maxbcachebuf); in TEST_F()
1049 ).WillOnce(Invoke(ReturnImmediate([=](auto in __unused, auto& out) { in TEST_F() argument
1050 out.header.len = sizeof(struct fuse_out_header) + bufsize; in TEST_F()
1051 memmove(out.body.bytes, CONTENTS, bufsize); in TEST_F()
1101 .WillRepeatedly(Invoke(ReturnImmediate([=](auto i __unused, auto& out) { in TEST_F() argument
1102 SET_OUT_HEADER_LEN(out, attr); in TEST_F()
1103 out.body.attr.attr.ino = ino; in TEST_F()
1104 out.body.attr.attr.mode = mode; in TEST_F()
1105 out.body.attr.attr.size = bufsize; in TEST_F()
1106 out.body.attr.attr_valid = 0; in TEST_F()
1151 TEST_F(Read, o_direct) in TEST_F() argument
1169 ASSERT_EQ(bufsize, read(fd, buf, bufsize)) << strerror(errno); in TEST_F()
1176 ASSERT_EQ(bufsize, read(fd, buf, bufsize)) << strerror(errno); in TEST_F()
1182 TEST_F(Read, pread) in TEST_F() argument
1191 * to read from. Without this, the read might start at a lower offset. in TEST_F()
1209 TEST_F(Read, read) in TEST_F() argument
1226 ASSERT_EQ(bufsize, read(fd, buf, bufsize)) << strerror(errno); in TEST_F()
1232 TEST_F(Read_7_8, read) in TEST_F() argument
1249 ASSERT_EQ(bufsize, read(fd, buf, bufsize)) << strerror(errno); in TEST_F()
1256 * If cacheing is enabled, the kernel should try to read an entire cache block
1259 TEST_F(Read, cache_block) in TEST_F() argument
1283 ASSERT_EQ(bufsize, read(fd, buf, bufsize)) << strerror(errno); in TEST_F()
1286 /* A subsequent read should be serviced by cache */ in TEST_F()
1287 ASSERT_EQ(bufsize, read(fd, buf, bufsize)) << strerror(errno); in TEST_F()
1293 /* Reading with sendfile should work (though it obviously won't be 0-copy) */
1294 TEST_F(Read, sendfile) in TEST_F() argument
1312 in.body.read.fh == Read::FH && in TEST_F()
1313 in.body.read.offset == 0 && in TEST_F()
1314 in.body.read.size == bufsize); in TEST_F()
1317 ).WillOnce(Invoke(ReturnImmediate([=](auto in __unused, auto& out) { in TEST_F() argument
1318 out.header.len = sizeof(struct fuse_out_header) + bufsize; in TEST_F()
1319 memmove(out.body.bytes, CONTENTS, bufsize); in TEST_F()
1329 ASSERT_EQ(static_cast<ssize_t>(bufsize), read(sp[0], buf, bufsize)) in TEST_F()
1338 /* sendfile should fail gracefully if fuse declines the read */
1340 TEST_F(Read, sendfile_eio) in TEST_F() argument
1397 len = std::min((size_t)clustersize, (size_t)(filesize - offs)); in TEST_P()
1407 ASSERT_EQ(bufsize, read(fd, rbuf, bufsize)) << strerror(errno); in TEST_P()
1424 /* With read-only mounts, fuse should never update atime during close */
1453 ASSERT_EQ(bufsize, read(fd, buf, bufsize)) << strerror(errno); in TEST_F()
1482 ).WillOnce(Invoke(ReturnImmediate([=](auto in __unused, auto& out) { in TEST_P() argument
1483 SET_OUT_HEADER_LEN(out, attr); in TEST_P()
1484 out.body.attr.attr.ino = ino; in TEST_P()
1485 out.body.attr.attr.mode = S_IFREG | newmode; in TEST_P()
1491 ASSERT_EQ(bufsize, read(fd, buf, bufsize)) << strerror(errno); in TEST_P()