From: David-Sarah Hopwood Date: Thu, 25 Oct 2012 01:16:21 +0000 (+0100) Subject: Makefile: add 'make tmpfstest', which uses a tmpfs for _trial_temp. X-Git-Tag: allmydata-tahoe-1.10a1~47 X-Git-Url: https://git.rkrishnan.org/?p=tahoe-lafs%2Ftahoe-lafs.git;a=commitdiff_plain;h=edc1f5f67fb34734f775cf5df790895a1628e7ee Makefile: add 'make tmpfstest', which uses a tmpfs for _trial_temp. 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 --- diff --git a/.gitignore b/.gitignore index 2af1ff66..9f1572c0 100644 --- a/.gitignore +++ b/.gitignore @@ -19,6 +19,7 @@ Twisted-*.egg /_trial_temp* +/tmp* /dist/ /twisted/plugins/dropin.cache /tahoe-deps/ diff --git a/Makefile b/Makefile index cb09747d..1f9d218c 100644 --- 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 diff --git a/src/allmydata/test/test_runner.py b/src/allmydata/test/test_runner.py index 6aaed803..59624626 100644 --- a/src/allmydata/test/test_runner.py +++ b/src/allmydata/test/test_runner.py @@ -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"