James Hunt has proposed merging lp:~jamesodhunt/upstart/check-for-overlayfs 
into lp:upstart.

Requested reviews:
  Steve Langasek (vorlon)

For more details, see:
https://code.launchpad.net/~jamesodhunt/upstart/check-for-overlayfs/+merge/191393

* test/tests/test_util_check_env.c: New test to look for
  overlayfs filesystems which could cause tests to fail.
* test/Makefile.am: Added test_util_check_env meta-test.
* test/test_util_common.c: Formatting.

This branch introduces a new meta-test that currently checks for overlayfs. It 
will produce a warning that tests will probably fail (due to bug LP:#882147) 
but does not actually abort the test run since:

- the invoker may know better whether a particular FS could cause problems for 
the tests.
- overlayfs may one day get fixed so hard-failing would be incorrect behaviour.

Note that the new test will be run before any other test. Further, note that 
since the overlayfs check is a separate test, if an individual test is run in 
an overlayfs environment, the invoker may be unaware of the strange resultant 
test failures. However, having a separate test does mean that we avoid linking 
every test against libnih-dbus et al.

-- 
https://code.launchpad.net/~jamesodhunt/upstart/check-for-overlayfs/+merge/191393
Your team Upstart Reviewers is subscribed to branch lp:upstart.
=== modified file 'ChangeLog'
--- ChangeLog	2013-10-04 21:34:25 +0000
+++ ChangeLog	2013-10-17 08:19:01 +0000
@@ -1,4 +1,16 @@
-2013-01-04  Steve Langasek  <[email protected]
+2013-10-17  James Hunt  <[email protected]>
+
+	* test/tests/test_util_check_env.c:
+	  - check_for_overlayfs(): Only consider temporary work area.
+
+2013-10-16  James Hunt  <[email protected]>
+
+	* test/tests/test_util_check_env.c: New test to look for
+	  overlayfs filesystems which could cause tests to fail.
+	* test/Makefile.am: Added test_util_check_env meta-test.
+	* test/test_util_common.c: Formatting.
+
+2013-10-04  Steve Langasek  <[email protected]
 
 	* extra/upstart-local-bridge.c: use SOCKET_PATH in our event
 	  environment, instead of clobbering PATH.  (LP: #1235480)

=== modified file 'test/Makefile.am'
--- test/Makefile.am	2013-06-25 09:19:05 +0000
+++ test/Makefile.am	2013-10-17 08:19:01 +0000
@@ -18,4 +18,17 @@
 	-I$(top_srcdir)/intl
 
 check_LIBRARIES = libtest_util_common.a
-libtest_util_common_a_SOURCES = test_util_common.c test_util_common.h
+libtest_util_common_a_SOURCES = \
+	test_util_common.c \
+	test_util_common.h
+
+TESTS = test_util_check_env
+check_PROGRAMS = $(TESTS)
+
+.PHONY: tests
+tests: $(check_PROGRAMS)
+
+test_util_check_env_SOURCES = tests/test_util_check_env.c
+test_util_check_env_LDADD = \
+	libtest_util_common.a \
+	$(NIH_LIBS)

=== modified file 'test/test_util_common.c'
--- test/test_util_common.c	2013-10-02 08:59:20 +0000
+++ test/test_util_common.c	2013-10-17 08:19:01 +0000
@@ -162,7 +162,7 @@
 	 * within a reasonable period of time.
 	 */
 	for (i = 0; i < loops; i++) {
-        sleep (1);
+		sleep (1);
 
 		RUN_COMMAND (NULL, cmd, &output, &lines);
 

=== added directory 'test/tests'
=== added file 'test/tests/test_util_check_env.c'
--- test/tests/test_util_check_env.c	1970-01-01 00:00:00 +0000
+++ test/tests/test_util_check_env.c	2013-10-17 08:19:01 +0000
@@ -0,0 +1,128 @@
+/* upstart
+ *
+ * test_util_check_env.c - meta test to ensure environment sane for
+ * running tests.
+ *
+ * Copyright © 2013 Canonical Ltd.
+ * Author: James Hunt <[email protected]>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2, as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/stat.h>
+#include <limits.h>
+#include <unistd.h>
+#include <mntent.h>
+
+#include <nih/string.h>
+#include <nih/test.h>
+#include <nih/logging.h>
+
+#include "test_util_common.h"
+
+/**
+ * check_for_overlayfs:
+ *
+ * Determine if the mount point used by the tests for creating temporary
+ * files is using overlayfs.
+ *
+ * Returns: TRUE if temporary work area is on overlayfs, else FALSE.
+ **/
+int
+check_for_overlayfs (void)
+{
+	struct stat    statbuf;
+	char           path[PATH_MAX];
+	const char    *fs = "overlayfs";
+	unsigned int   maj;
+	unsigned int   min;
+	const char    *mounts = "/proc/self/mounts";
+	FILE          *mtab;
+	struct mntent *mnt;
+	int            found = FALSE;
+
+	/* Create a file in the temporary work area */
+	TEST_FILENAME (path);
+	fclose (fopen (path, "w"));
+
+	/* Check it exits */
+	assert0 (stat (path, &statbuf));
+
+	/* Extract device details */
+	maj = major (statbuf.st_dev);
+	min = minor (statbuf.st_dev);
+
+	mtab = fopen (mounts, "r");
+	TEST_NE_P (mtab, NULL);
+
+	/* Look through mount table */
+	while ((mnt = getmntent (mtab))) {
+		unsigned int mount_maj;
+		unsigned int mount_min;
+
+		assert0 (stat (mnt->mnt_dir, &statbuf));
+		mount_maj = major (statbuf.st_dev);
+		mount_min = minor (statbuf.st_dev);
+
+		if (! strcmp (mnt->mnt_type, fs) && mount_maj == maj && mount_min == min) {
+			found = TRUE;
+			nih_warn ("Mountpoint '%s' (needed by the Upstart tests) is an '%s' "
+					"filesystem which does not support inotify.",
+					mnt->mnt_dir,
+					fs);
+			goto out;
+		}
+	}
+
+out:
+	fclose (mtab);
+	assert0 (unlink (path));
+
+	return found;
+}
+
+/**
+ * test_checks:
+ *
+ * Perform any checks necessary before real tests are run.
+ **/
+void
+test_checks (void)
+{
+	TEST_GROUP ("test environment");
+
+	/*
+	 * Warn (*) if overlayfs detected.
+	 *
+	 * (*) - Don't fail in the hope that one day someone might fix
+	 * overlayfs.
+	 */
+	TEST_FEATURE ("checking for overlayfs");
+	if (check_for_overlayfs ()) {
+		nih_warn ("Found overlayfs mounts");
+		nih_warn ("This environment will probably cause tests to fail mysteriously!!");
+		nih_warn ("See bug LP:#882147 for further details.");
+	}
+}
+
+int
+main (int   argc,
+      char *argv[])
+{
+	test_checks ();
+
+	return 0;
+}

-- 
upstart-devel mailing list
[email protected]
Modify settings or unsubscribe at: 
https://lists.ubuntu.com/mailman/listinfo/upstart-devel

Reply via email to