Makefile: add 'make tmpfstest', which uses a tmpfs for _trial_temp.
authorDavid-Sarah Hopwood <david-sarah@jacaranda.org>
Thu, 25 Oct 2012 01:16:21 +0000 (02:16 +0100)
committerDavid-Sarah Hopwood <david-sarah@jacaranda.org>
Thu, 25 Oct 2012 01:16:21 +0000 (02:16 +0100)
This probably only works on Linux. It uses sudo to mount and unmount the tmpfs,
which may prompt for a password. refs #20

Signed-off-by: David-Sarah Hopwood <david-sarah@jacaranda.org>
.gitignore
Makefile
src/allmydata/test/test_runner.py

index 2af1ff6630714590b08e57850afc5b084ff4777f..9f1572c0ddb0b437608c9a55991a8c0a55644b1c 100644 (file)
@@ -19,6 +19,7 @@
 Twisted-*.egg
 
 /_trial_temp*
+/tmp*
 /dist/
 /twisted/plugins/dropin.cache
 /tahoe-deps/
index cb09747dc9d09ddf20454da49e020662d0c20943..1f9d218c3b723a069024887c540ea57293a2e44c 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -75,6 +75,18 @@ test-coverage: build
 quicktest:
        $(TAHOE) debug trial $(TRIALARGS) $(TEST)
 
+# "make tmpfstest" may be a faster way of running tests on Linux. It works best when you have
+# at least 330 MiB of free physical memory (to run the whole test suite). Since it uses sudo
+# to mount/unmount the tmpfs filesystem, it might prompt for your password.
+tmpfstest:
+       time make _tmpfstest 'TMPDIR=$(shell mktemp -d --tmpdir=.)'
+
+_tmpfstest:
+       sudo mount -t tmpfs -o size=330m tmpfs '$(TMPDIR)'
+       -$(TAHOE) debug trial --rterrors '--temp-directory=$(TMPDIR)/_trial_temp' $(TRIALARGS) $(TEST)
+       sudo umount '$(TMPDIR)'
+       rmdir '$(TMPDIR)'
+
 # code-coverage: install the "coverage" package from PyPI, do "make
 # quicktest-coverage" to do a unit test run with coverage-gathering enabled,
 # then use "make coverate-output-text" for a brief report, or "make
index 6aaed8034eea740cb47868ee57c9964214f68f01..596246267773f1f28f7fb4a9e494a6064094d782 100644 (file)
@@ -88,6 +88,10 @@ class BinTahoe(common_util.SignalMixin, unittest.TestCase, RunBinTahoeMixin):
         if os.path.basename(root_from_cwd) == 'src':
             root_from_cwd = os.path.dirname(root_from_cwd)
 
+        # This is needed if we are running in a temporary directory created by 'make tmpfstest'.
+        if os.path.basename(root_from_cwd).startswith('tmp'):
+            root_from_cwd = os.path.dirname(root_from_cwd)
+
         same = (root_from_cwd == root_to_check)
         if not same:
             try:
@@ -105,6 +109,10 @@ class BinTahoe(common_util.SignalMixin, unittest.TestCase, RunBinTahoeMixin):
             if os.path.basename(root_from_cwdu) == u'src':
                 root_from_cwdu = os.path.dirname(root_from_cwdu)
 
+            # This is needed if we are running in a temporary directory created by 'make tmpfstest'.
+            if os.path.basename(root_from_cwdu).startswith(u'tmp'):
+                root_from_cwdu = os.path.dirname(root_from_cwdu)
+
             if not isinstance(root_from_cwd, unicode) and root_from_cwd.decode(get_filesystem_encoding(), 'replace') != root_from_cwdu:
                 msg += ("However, this may be a false alarm because the current directory path\n"
                         "is not representable in the filesystem encoding. Please run the tests\n"