test: make tests stop relying on pyutil version class accepting the string 'unknown...
authorZooko O'Whielacronx <zooko@zooko.com>
Fri, 10 Sep 2010 15:41:35 +0000 (08:41 -0700)
committerZooko O'Whielacronx <zooko@zooko.com>
Fri, 10 Sep 2010 15:41:35 +0000 (08:41 -0700)
src/allmydata/test/test_runner.py
src/allmydata/test/test_system.py

index 8345bb1065a72b1d022b0bacd51cf87ddf1920fa..75009cb6659df4fc2d9fc17b192fbf8da636b8c5 100644 (file)
@@ -81,14 +81,32 @@ class BinTahoe(common_util.SignalMixin, unittest.TestCase, SkipMixin):
             out, err, rc_or_sig = res
             self.failUnlessEqual(rc_or_sig, 0, str(res))
 
-            # Fail unless the package is *this* version *and* was loaded from *this* source directory.
-            required_ver_and_path = "%s: %s (%s)" % (allmydata.__appname__, allmydata.__version__, srcdir)
-            self.failUnless(out.startswith(required_ver_and_path),
-                            str((out, err, rc_or_sig, required_ver_and_path)))
-
-            self.failIfEqual(allmydata.__version__, "unknown",
-                             "We don't know our version, because this distribution didn't come "
-                             "with a _version.py and 'setup.py darcsver' hasn't been run.")
+            # Fail unless the allmydata-tahoe package is *this* version *and*
+            # was loaded from *this* source directory.
+
+            verstr = str(allmydata.__version__)
+
+            # The Python "rational version numbering" convention
+            # disallows "-r$REV" but allows ".post$REV"
+            # instead. Eventually we'll probably move to that. When we
+            # do, this test won't go red:
+
+            ix = verstr.rfind('-r')
+            if ix != -1:
+                altverstr = verstr[:ix] + '.post' + verstr[ix+2:]
+            else:
+                ix = verstr.rfind('.post')
+                if ix != -1:
+                    altverstr = verstr[:ix] + '-r' + verstr[ix+5:]
+                else:
+                    altverstr = verstr
+
+            ad = os.path.dirname(os.path.dirname(os.path.realpath(allmydata.__file__)))
+
+            required_ver_and_path = "%s: %s (%s)" % (allmydata.__appname__, verstr, ad)
+            alt_required_ver_and_path = "%s: %s (%s)" % (allmydata.__appname__, altverstr, ad)
+
+            self.failUnless(out.startswith(required_ver_and_path) or out.startswith(alt_required_ver_and_path), (out, err, rc_or_sig, required_ver_and_path))
         d.addCallback(_cb)
         return d
 
index 775049bd0974ef63b0a98276f5c4b95e302b2abd..7ebafeb83026e04073b94d770f2422f8ccec9b31 100644 (file)
@@ -753,8 +753,27 @@ class SystemTest(SystemTestMixin, unittest.TestCase):
         d = getPage(self.introweb_url, method="GET", followRedirect=True)
         def _check(res):
             try:
-                self.failUnless("%s: %s" % (allmydata.__appname__, allmydata.__version__)
-                                in res)
+                self.failUnless("%s: %s" % (allmydata.__appname__, allmydata.__version__) in res)
+                verstr = str(allmydata.__version__)
+
+                # The Python "rational version numbering" convention
+                # disallows "-r$REV" but allows ".post$REV"
+                # instead. Eventually we'll probably move to
+                # that. When we do, this test won't go red:
+                ix = verstr.rfind('-r')
+                if ix != -1:
+                    altverstr = verstr[:ix] + '.post' + verstr[ix+2:]
+                else:
+                    ix = verstr.rfind('.post')
+                    if ix != -1:
+                        altverstr = verstr[:ix] + '-r' + verstr[ix+5:]
+                    else:
+                        altverstr = verstr
+
+                appverstr = "%s: %s" % (allmydata.__appname__, verstr)
+                newappverstr = "%s: %s" % (allmydata.__appname__, altverstr)
+
+                self.failUnless((appverstr in res) or (newappverstr in res), (appverstr, newappverstr, res))
                 self.failUnless("Announcement Summary: storage: 5, stub_client: 5" in res)
                 self.failUnless("Subscription Summary: storage: 5" in res)
             except unittest.FailTest: