aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlan Somers <asomers@FreeBSD.org>2019-06-25 16:49:20 +0000
committerAlan Somers <asomers@FreeBSD.org>2019-06-25 16:49:20 +0000
commit48417ae0ba1b0b42d8ad04679a0b7c9dd43eb1f2 (patch)
tree87be345466df3baea3a7c575028f4d94142b4af7
parent1734e205f38ef5d54ae373d3c6060829f32e590c (diff)
downloadsrc-48417ae0ba1b0b42d8ad04679a0b7c9dd43eb1f2.tar.gz
src-48417ae0ba1b0b42d8ad04679a0b7c9dd43eb1f2.zip
fusefs: fix multiple issues with the io tests
* During TearDown, close the test file before the backing file. That way the backing file artifact will have the correct contents after the test completes. It doesn't matter when running in Kyua, but it may when running the test manually. * Add a closeopen operation that mimics what FSX does with the "-c" option. * Skip mmap-related tests when vfs.fusefs.data_cache_mode == 0 Sponsored by: The FreeBSD Foundation
Notes
Notes: svn path=/projects/fuse2/; revision=349375
-rw-r--r--tests/sys/fs/fusefs/io.cc40
1 files changed, 38 insertions, 2 deletions
diff --git a/tests/sys/fs/fusefs/io.cc b/tests/sys/fs/fusefs/io.cc
index a0e752b2cf83..37fd626a7b7e 100644
--- a/tests/sys/fs/fusefs/io.cc
+++ b/tests/sys/fs/fusefs/io.cc
@@ -29,7 +29,9 @@
*/
extern "C" {
+#include <sys/types.h>
#include <sys/mman.h>
+#include <sys/sysctl.h>
#include <fcntl.h>
#include <stdlib.h>
@@ -175,6 +177,8 @@ void SetUp()
void TearDown()
{
+ if (m_test_fd >= 0)
+ close(m_test_fd);
if (m_backing_fd >= 0)
close(m_backing_fd);
if (m_control_fd >= 0)
@@ -183,6 +187,17 @@ void TearDown()
/* Deliberately leak test_fd */
}
+void do_closeopen()
+{
+ ASSERT_EQ(0, close(m_test_fd)) << strerror(errno);
+ m_test_fd = open("backing_file", O_RDWR);
+ ASSERT_LE(0, m_test_fd) << strerror(errno);
+
+ ASSERT_EQ(0, close(m_control_fd)) << strerror(errno);
+ m_control_fd = open("control", O_RDWR);
+ ASSERT_LE(0, m_control_fd) << strerror(errno);
+}
+
void do_ftruncate(off_t offs)
{
ASSERT_EQ(0, ftruncate(m_test_fd, offs)) << strerror(errno);
@@ -298,6 +313,22 @@ void do_write(ssize_t size, off_t offs)
};
+class IoCacheable: public Io {
+public:
+virtual void SetUp() {
+ const char *node = "vfs.fusefs.data_cache_mode";
+ int val = 0;
+ size_t size = sizeof(val);
+
+ ASSERT_EQ(0, sysctlbyname(node, &val, &size, NULL, 0))
+ << strerror(errno);
+ if (val == 0)
+ GTEST_SKIP() <<
+ "fusefs data caching must be enabled for this test";
+ Io::SetUp();
+}
+};
+
/*
* Extend a file with dirty data in the last page of the last block.
*
@@ -321,7 +352,7 @@ TEST_P(Io, extend_from_dirty_page)
*
* fsx -c 100 -i 100 -l 524288 -o 131072 -N5 -P /tmp -S19 fsx.bin
*/
-TEST_P(Io, extend_by_mapwrite)
+TEST_P(IoCacheable, extend_by_mapwrite)
{
do_mapwrite(0x849e, 0x29a3a); /* [0x29a3a, 0x31ed7] */
do_mapwrite(0x3994, 0x3c7d8); /* [0x3c7d8, 0x4016b] */
@@ -347,7 +378,7 @@ TEST_P(Io, last_page)
*
* fsx -c 100 -i 100 -l 524288 -o 131072 -N11 -P /tmp -S14 fsx.bin
*/
-TEST_P(Io, mapread_hole)
+TEST_P(IoCacheable, mapread_hole)
{
do_write(0x123b7, 0xf205); /* [0xf205, 0x215bb] */
do_mapread(0xeeea, 0x2f4c); /* [0x2f4c, 0x11e35] */
@@ -464,3 +495,8 @@ INSTANTIATE_TEST_CASE_P(Io, Io,
Combine(Values(0, FUSE_ASYNC_READ), /* m_init_flags */
Values(0x1000, 0x10000, 0x20000), /* m_maxwrite */
Bool())); /* m_async */
+
+INSTANTIATE_TEST_CASE_P(Io, IoCacheable,
+ Combine(Values(0, FUSE_ASYNC_READ), /* m_init_flags */
+ Values(0x1000, 0x10000, 0x20000), /* m_maxwrite */
+ Bool())); /* m_async */