src/allmydata/test/test_runner.py: add test_import_from_repl, which checks that we are running the right code in a bin/tahoe subprocess. refs #1258

This commit is contained in:
david-sarah 2011-01-19 00:21:45 -08:00
parent a9fc4668c0
commit fd6cdc48ae
1 changed files with 37 additions and 15 deletions

View File

@ -3,7 +3,7 @@ from twisted.trial import unittest
from twisted.python import usage, runtime from twisted.python import usage, runtime
from twisted.internet import utils from twisted.internet import utils
import os.path, re, sys import os.path, re, sys, subprocess
from cStringIO import StringIO from cStringIO import StringIO
from allmydata.util import fileutil, pollmixin from allmydata.util import fileutil, pollmixin
from allmydata.util.encodingutil import unicode_to_argv, unicode_to_output, get_filesystem_encoding from allmydata.util.encodingutil import unicode_to_argv, unicode_to_output, get_filesystem_encoding
@ -14,16 +14,21 @@ import allmydata
timeout = 240 timeout = 240
srcfile = allmydata.__file__ def get_root_from_file(src):
srcdir = os.path.dirname(os.path.dirname(os.path.normcase(os.path.realpath(srcfile)))) srcdir = os.path.dirname(os.path.dirname(os.path.normcase(os.path.realpath(src))))
rootdir = os.path.dirname(srcdir) root = os.path.dirname(srcdir)
if os.path.basename(srcdir) == 'site-packages': if os.path.basename(srcdir) == 'site-packages':
if re.search(r'python.+\..+', os.path.basename(rootdir)): if re.search(r'python.+\..+', os.path.basename(root)):
rootdir = os.path.dirname(rootdir) root = os.path.dirname(root)
rootdir = os.path.dirname(rootdir) root = os.path.dirname(root)
elif os.path.basename(rootdir) == 'src': elif os.path.basename(root) == 'src':
rootdir = os.path.dirname(rootdir) root = os.path.dirname(root)
return root
srcfile = allmydata.__file__
rootdir = get_root_from_file(srcfile)
bintahoe = os.path.join(rootdir, 'bin', 'tahoe') bintahoe = os.path.join(rootdir, 'bin', 'tahoe')
if sys.platform == "win32": if sys.platform == "win32":
@ -49,16 +54,17 @@ class SkipMixin:
class BinTahoe(common_util.SignalMixin, unittest.TestCase, SkipMixin): class BinTahoe(common_util.SignalMixin, unittest.TestCase, SkipMixin):
def test_the_right_code(self): def _check_right_code(self, file_to_check):
root_to_check = get_root_from_file(file_to_check)
cwd = os.path.normcase(os.path.realpath(".")) cwd = os.path.normcase(os.path.realpath("."))
root_from_cwd = os.path.dirname(cwd) root_from_cwd = os.path.dirname(cwd)
if os.path.basename(root_from_cwd) == 'src': if os.path.basename(root_from_cwd) == 'src':
root_from_cwd = os.path.dirname(root_from_cwd) root_from_cwd = os.path.dirname(root_from_cwd)
same = (root_from_cwd == rootdir) same = (root_from_cwd == root_to_check)
if not same: if not same:
try: try:
same = os.path.samefile(root_from_cwd, rootdir) same = os.path.samefile(root_from_cwd, root_to_check)
except AttributeError, e: except AttributeError, e:
e # hush pyflakes e # hush pyflakes
@ -66,9 +72,9 @@ class BinTahoe(common_util.SignalMixin, unittest.TestCase, SkipMixin):
msg = ("We seem to be testing the code at %r,\n" msg = ("We seem to be testing the code at %r,\n"
"(according to the source filename %r),\n" "(according to the source filename %r),\n"
"but expected to be testing the code at %r.\n" "but expected to be testing the code at %r.\n"
% (rootdir, srcfile, root_from_cwd)) % (root_to_check, file_to_check, root_from_cwd))
root_from_cwdu = os.path.normcase(os.path.normpath(os.getcwdu())) root_from_cwdu = os.path.dirname(os.path.normcase(os.path.normpath(os.getcwdu())))
if os.path.basename(root_from_cwdu) == u'src': if os.path.basename(root_from_cwdu) == u'src':
root_from_cwdu = os.path.dirname(root_from_cwdu) root_from_cwdu = os.path.dirname(root_from_cwdu)
@ -81,6 +87,21 @@ class BinTahoe(common_util.SignalMixin, unittest.TestCase, SkipMixin):
msg += "Please run the tests from the root of the Tahoe-LAFS distribution." msg += "Please run the tests from the root of the Tahoe-LAFS distribution."
self.fail(msg) self.fail(msg)
def test_the_right_code(self):
self._check_right_code(srcfile)
def test_import_in_repl(self):
self.skip_if_cannot_run_bintahoe()
p = subprocess.Popen([sys.executable, bintahoe, "debug", "repl"],
stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
(out, err) = p.communicate("import allmydata; print; print allmydata.__file__")
self.failUnlessEqual(p.returncode, 0)
lines = out.splitlines()
self.failUnlessIn('>>>', lines[0], (out, err))
self._check_right_code(lines[1])
def test_path(self): def test_path(self):
self.skip_if_cannot_run_bintahoe() self.skip_if_cannot_run_bintahoe()
d = utils.getProcessOutputAndValue(bintahoe, args=["--version-and-path"], env=os.environ) d = utils.getProcessOutputAndValue(bintahoe, args=["--version-and-path"], env=os.environ)
@ -112,6 +133,7 @@ class BinTahoe(common_util.SignalMixin, unittest.TestCase, SkipMixin):
else: else:
altverstr = verstr altverstr = verstr
srcdir = os.path.dirname(os.path.dirname(os.path.normcase(os.path.realpath(srcfile))))
required_ver_and_path = "%s: %s (%s)" % (allmydata.__appname__, verstr, srcdir) required_ver_and_path = "%s: %s (%s)" % (allmydata.__appname__, verstr, srcdir)
alt_required_ver_and_path = "%s: %s (%s)" % (allmydata.__appname__, altverstr, srcdir) alt_required_ver_and_path = "%s: %s (%s)" % (allmydata.__appname__, altverstr, srcdir)