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:
parent
a9fc4668c0
commit
fd6cdc48ae
|
@ -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)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue