Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 20 Mar 2019 20:36:46 +0000 (UTC)
From:      Alan Somers <asomers@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject:   svn commit: r345347 - projects/fuse2/tests/sys/fs/fuse
Message-ID:  <201903202036.x2KKak6A022387@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: asomers
Date: Wed Mar 20 20:36:46 2019
New Revision: 345347
URL: https://svnweb.freebsd.org/changeset/base/345347

Log:
  fuse(4): use GTEST_SKIP in the tests
  
  Now the entire fuse test suite can "pass", or at least not fail.  Skipped
  tests are reported to Kyua as passes, because googletest is still using
  Kyua's plain test adapter.
  
  Sponsored by:	The FreeBSD Foundation

Modified:
  projects/fuse2/tests/sys/fs/fuse/default_permissions.cc
  projects/fuse2/tests/sys/fs/fuse/mknod.cc
  projects/fuse2/tests/sys/fs/fuse/read.cc
  projects/fuse2/tests/sys/fs/fuse/utils.cc
  projects/fuse2/tests/sys/fs/fuse/write.cc

Modified: projects/fuse2/tests/sys/fs/fuse/default_permissions.cc
==============================================================================
--- projects/fuse2/tests/sys/fs/fuse/default_permissions.cc	Wed Mar 20 20:07:12 2019	(r345346)
+++ projects/fuse2/tests/sys/fs/fuse/default_permissions.cc	Wed Mar 20 20:36:46 2019	(r345347)
@@ -46,11 +46,12 @@ using namespace testing;
 class DefaultPermissions: public FuseTest {
 
 virtual void SetUp() {
+	FuseTest::SetUp();
+
 	if (geteuid() == 0) {
-		FAIL() << "This test requires an unprivileged user";
+		GTEST_SKIP() << "This test requires an unprivileged user";
 	}
 	m_default_permissions = true;
-	FuseTest::SetUp();
 }
 
 public:

Modified: projects/fuse2/tests/sys/fs/fuse/mknod.cc
==============================================================================
--- projects/fuse2/tests/sys/fs/fuse/mknod.cc	Wed Mar 20 20:07:12 2019	(r345346)
+++ projects/fuse2/tests/sys/fs/fuse/mknod.cc	Wed Mar 20 20:36:46 2019	(r345347)
@@ -42,11 +42,11 @@ class Mknod: public FuseTest {
 public:
 
 virtual void SetUp() {
+	FuseTest::SetUp();
+
 	if (geteuid() != 0) {
-		// TODO: With GoogleTest 1.8.2, use SKIP instead
-		FAIL() << "Only root may use most mknod(2) variations";
+		GTEST_SKIP() << "Only root may use most mknod(2) variations";
 	}
-	FuseTest::SetUp();
 }
 
 /* Test an OK creation of a file with the given mode and device number */

Modified: projects/fuse2/tests/sys/fs/fuse/read.cc
==============================================================================
--- projects/fuse2/tests/sys/fs/fuse/read.cc	Wed Mar 20 20:07:12 2019	(r345346)
+++ projects/fuse2/tests/sys/fs/fuse/read.cc	Wed Mar 20 20:36:46 2019	(r345347)
@@ -61,12 +61,13 @@ virtual void SetUp() {
 	int val = 0;
 	size_t size = sizeof(val);
 
+	FuseTest::SetUp();
+
 	ASSERT_EQ(0, sysctlbyname(node, &val, &size, NULL, 0))
 		<< strerror(errno);
-	// TODO: With GoogleTest 1.8.2, use SKIP instead
 	if (!val)
-		FAIL() << "vfs.aio.enable_unsafe must be set for this test";
-	FuseTest::SetUp();
+		GTEST_SKIP() <<
+			"vfs.aio.enable_unsafe must be set for this test";
 }
 };
 

Modified: projects/fuse2/tests/sys/fs/fuse/utils.cc
==============================================================================
--- projects/fuse2/tests/sys/fs/fuse/utils.cc	Wed Mar 20 20:07:12 2019	(r345346)
+++ projects/fuse2/tests/sys/fs/fuse/utils.cc	Wed Mar 20 20:36:46 2019	(r345347)
@@ -40,31 +40,36 @@
 
 using namespace testing;
 
+/* Check that fuse(4) is accessible and the current user can mount(2) */
+void check_environment()
+{
+	const char *mod_name = "fuse";
+	const char *devnode = "/dev/fuse";
+	const char *usermount_node = "vfs.usermount";
+	int usermount_val = 0;
+	size_t usermount_size = sizeof(usermount_val);
+	if (modfind(mod_name) == -1) {
+		GTEST_SKIP() << "Module " << mod_name <<
+			" could not be resolved";
+	}
+	if (eaccess(devnode, R_OK | W_OK)) {
+		if (errno == ENOENT) {
+			GTEST_SKIP() << devnode << " does not exist";
+		} else if (errno == EACCES) {
+			GTEST_SKIP() << devnode <<
+			    " is not accessible by the current user";
+		} else {
+			GTEST_SKIP() << strerror(errno);
+		}
+	}
+	sysctlbyname(usermount_node, &usermount_val, &usermount_size,
+		     NULL, 0);
+	if (geteuid() != 0 && !usermount_val)
+		GTEST_SKIP() << "current user is not allowed to mount";
+}
+
 class FuseEnv: public Environment {
 	virtual void SetUp() {
-		const char *mod_name = "fuse";
-		const char *devnode = "/dev/fuse";
-		const char *usermount_node = "vfs.usermount";
-		int usermount_val = 0;
-		size_t usermount_size = sizeof(usermount_val);
-		if (modfind(mod_name) == -1) {
-			FAIL() << "Module " << mod_name <<
-				" could not be resolved";
-		}
-		if (eaccess(devnode, R_OK | W_OK)) {
-			if (errno == ENOENT) {
-				FAIL() << devnode << " does not exist";
-			} else if (errno == EACCES) {
-				FAIL() << devnode <<
-				    " is not accessible by the current user";
-			} else {
-				FAIL() << strerror(errno);
-			}
-		}
-		sysctlbyname(usermount_node, &usermount_val, &usermount_size,
-			     NULL, 0);
-		if (geteuid() != 0 && !usermount_val)
-			FAIL() << "current user is not allowed to mount";
 	}
 };
 
@@ -72,6 +77,14 @@ void FuseTest::SetUp() {
 	const char *node = "vfs.maxbcachebuf";
 	int val = 0;
 	size_t size = sizeof(val);
+
+	/*
+	 * XXX check_environment should be called from FuseEnv::SetUp, but
+	 * can't due to https://github.com/google/googletest/issues/2189
+	 */
+	check_environment();
+	if (IsSkipped())
+		return;
 
 	ASSERT_EQ(0, sysctlbyname(node, &val, &size, NULL, 0))
 		<< strerror(errno);

Modified: projects/fuse2/tests/sys/fs/fuse/write.cc
==============================================================================
--- projects/fuse2/tests/sys/fs/fuse/write.cc	Wed Mar 20 20:07:12 2019	(r345346)
+++ projects/fuse2/tests/sys/fs/fuse/write.cc	Wed Mar 20 20:36:46 2019	(r345347)
@@ -73,7 +73,8 @@ void require_sync_resize_0() {
 	ASSERT_EQ(0, sysctlbyname(sync_resize_node, &val, &size, NULL, 0))
 		<< strerror(errno);
 	if (val != 0)
-		FAIL() << "vfs.fuse.sync_resize must be set to 0 for this test."
+		GTEST_SKIP() <<
+			"vfs.fuse.sync_resize must be set to 0 for this test."
 			"  That sysctl will probably be removed soon.";
 }
 
@@ -85,12 +86,13 @@ virtual void SetUp() {
 	int val = 0;
 	size_t size = sizeof(val);
 
+	FuseTest::SetUp();
+
 	ASSERT_EQ(0, sysctlbyname(node, &val, &size, NULL, 0))
 		<< strerror(errno);
-	// TODO: With GoogleTest 1.8.2, use SKIP instead
 	if (!val)
-		FAIL() << "vfs.aio.enable_unsafe must be set for this test";
-	FuseTest::SetUp();
+		GTEST_SKIP() <<
+			"vfs.aio.enable_unsafe must be set for this test";
 }
 };
 
@@ -102,14 +104,15 @@ virtual void SetUp() {
 	int val = 0;
 	size_t size = sizeof(val);
 
+	FuseTest::SetUp();
+	if (IsSkipped())
+		return;
+
 	ASSERT_EQ(0, sysctlbyname(cache_mode_node, &val, &size, NULL, 0))
 		<< strerror(errno);
-	// TODO: With GoogleTest 1.8.2, use SKIP instead
 	if (val != 1)
-		FAIL() << "vfs.fuse.data_cache_mode must be set to 1 "
+		GTEST_SKIP() << "vfs.fuse.data_cache_mode must be set to 1 "
 			"(writethrough) for this test";
-
-	FuseTest::SetUp();
 }
 
 };
@@ -122,13 +125,15 @@ virtual void SetUp() {
 	int val = 0;
 	size_t size = sizeof(val);
 
+	FuseTest::SetUp();
+	if (IsSkipped())
+		return;
+
 	ASSERT_EQ(0, sysctlbyname(node, &val, &size, NULL, 0))
 		<< strerror(errno);
-	// TODO: With GoogleTest 1.8.2, use SKIP instead
 	if (val != 2)
-		FAIL() << "vfs.fuse.data_cache_mode must be set to 2 "
+		GTEST_SKIP() << "vfs.fuse.data_cache_mode must be set to 2 "
 			"(writeback) for this test";
-	FuseTest::SetUp();
 }
 
 };



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201903202036.x2KKak6A022387>