Rev 4638: Fix selftest tests for --transport to test each layer precisely. in http://bazaar.launchpad.net/~lifeless/bzr/test-speed

Robert Collins robertc at robertcollins.net
Mon Aug 24 00:20:36 BST 2009


At http://bazaar.launchpad.net/~lifeless/bzr/test-speed

------------------------------------------------------------
revno: 4638
revision-id: robertc at robertcollins.net-20090823232033-bz1c16hevpt5hkem
parent: robertc at robertcollins.net-20090823221551-rfquxm9tilojjeb0
committer: Robert Collins <robertc at robertcollins.net>
branch nick: test-speed
timestamp: Mon 2009-08-24 09:20:33 +1000
message:
  Fix selftest tests for --transport to test each layer precisely.
=== modified file 'bzrlib/tests/blackbox/test_selftest.py'
--- a/bzrlib/tests/blackbox/test_selftest.py	2009-08-23 22:15:51 +0000
+++ b/bzrlib/tests/blackbox/test_selftest.py	2009-08-23 23:20:33 +0000
@@ -43,54 +43,54 @@
 
 class TestOptions(TestCase):
 
-    current_test = None
-
     def test_transport_set_to_sftp(self):
-        # test the --transport option has taken effect from within the
-        # test_transport test
+        # Test that we can pass a transport to the selftest core - sftp
+        # version.
         try:
             import bzrlib.transport.sftp
         except ParamikoNotPresent:
             raise TestSkipped("Paramiko not present")
-        if TestOptions.current_test != "test_transport_set_to_sftp":
-            return
+        params = self.get_params_passed_to_core('selftest --transport=sftp')
         self.assertEqual(bzrlib.transport.sftp.SFTPAbsoluteServer,
-                         bzrlib.tests.default_transport)
+            params[1]["transport"])
 
     def test_transport_set_to_memory(self):
-        # test the --transport option has taken effect from within the
-        # test_transport test
+        # Test that we can pass a transport to the selftest core - memory
+        # version.
         import bzrlib.transport.memory
-        if TestOptions.current_test != "test_transport_set_to_memory":
-            return
+        params = self.get_params_passed_to_core('selftest --transport=memory')
         self.assertEqual(bzrlib.transport.memory.MemoryServer,
-                         bzrlib.tests.default_transport)
-
-    def test_transport(self):
-        # test that --transport=sftp works
-        try:
-            import bzrlib.transport.sftp
-        except ParamikoNotPresent:
-            raise TestSkipped("Paramiko not present")
-        old_transport = bzrlib.tests.default_transport
-        old_root = TestCaseWithMemoryTransport.TEST_ROOT
-        TestCaseWithMemoryTransport.TEST_ROOT = None
-        try:
-            TestOptions.current_test = "test_transport_set_to_sftp"
-            stdout = self.run_bzr(
-                'selftest --transport=sftp test_transport_set_to_sftp')[0]
-            self.assertContainsRe(stdout, 'Ran 1 test')
-            self.assertEqual(old_transport, bzrlib.tests.default_transport)
-
-            TestOptions.current_test = "test_transport_set_to_memory"
-            stdout = self.run_bzr(
-                'selftest --transport=memory test_transport_set_to_memory')[0]
-            self.assertContainsRe(stdout, 'Ran 1 test')
-            self.assertEqual(old_transport, bzrlib.tests.default_transport)
+            params[1]["transport"])
+
+    def get_params_passed_to_core(self, cmdline):
+        params = []
+        def selftest(*args, **kwargs):
+            """Capture the arguments selftest was run with."""
+            params.append((args, kwargs))
+            return True
+        # Yes this prevents using threads to run the test suite in parallel,
+        # however we don't have a clean dependency injector for commands, 
+        # and even if we did - we'd still be testing that the glue is wired
+        # up correctly. XXX: TODO: Solve this testing problem.
+        original_selftest = tests.selftest
+        tests.selftest = selftest
+        try:
+            self.run_bzr(cmdline)
+            return params[0]
         finally:
-            bzrlib.tests.default_transport = old_transport
-            TestOptions.current_test = None
-            TestCaseWithMemoryTransport.TEST_ROOT = old_root
+            tests.selftest = original_selftest
+
+    def test_parameters_passed_to_core(self):
+        params = self.get_params_passed_to_core('selftest --list-only')
+        self.assertTrue("list_only" in params[1])
+        params = self.get_params_passed_to_core('selftest --list-only selftest')
+        self.assertTrue("list_only" in params[1])
+        params = self.get_params_passed_to_core(['selftest', '--list-only',
+            '--exclude', 'selftest'])
+        self.assertTrue("list_only" in params[1])
+        params = self.get_params_passed_to_core(['selftest', '--list-only',
+            'selftest', '--randomize', 'now'])
+        self.assertSubset(["list_only", "random_seed"], params[1])
 
     def test_subunit(self):
         """Passing --subunit results in subunit output."""
@@ -537,32 +537,6 @@
         finally:
             tests.selftest = original_selftest
 
-    def test_parameters_passed_to_core(self):
-        params = []
-        def selftest(*args, **kwargs):
-            """Capture the arguments selftest was run with."""
-            params.append((args, kwargs))
-            return True
-        # Yes this prevents using threads to run the test suite in parallel,
-        # however we don't have a clean dependency injector for commands, 
-        # and even if we did - we'd still be testing that the glue is wired
-        # up correctly. XXX: TODO: Solve this testing problem.
-        original_selftest = tests.selftest
-        tests.selftest = selftest
-        try:
-            self.run_bzr('selftest --list-only')
-            self.run_bzr('selftest --list-only selftest')
-            self.run_bzr(['selftest', '--list-only', '--exclude', 'selftest'])
-            self.run_bzr(['selftest', '--list-only', 'selftest',
-                '--randomize', 'now'])
-            # list_only should have been passed in each invocation.
-            self.assertTrue("list_only" in params[0][1])
-            self.assertTrue("list_only" in params[1][1])
-            self.assertTrue("list_only" in params[2][1])
-            self.assertSubset(["list_only", "random_seed"], params[2][1])
-        finally:
-            tests.selftest = original_selftest
-
 
 class TestSelftestWithIdList(TestCaseInTempDir):
 

=== modified file 'bzrlib/tests/test_selftest.py'
--- a/bzrlib/tests/test_selftest.py	2009-08-23 22:15:51 +0000
+++ b/bzrlib/tests/test_selftest.py	2009-08-23 23:20:33 +0000
@@ -1784,7 +1784,14 @@
     def run_selftest(self, **kwargs):
         """Run selftest returning its output."""
         output = StringIO()
-        self.assertEqual(True, tests.selftest(stream=output, **kwargs))
+        old_transport = bzrlib.tests.default_transport
+        old_root = tests.TestCaseWithMemoryTransport.TEST_ROOT
+        tests.TestCaseWithMemoryTransport.TEST_ROOT = None
+        try:
+            self.assertEqual(True, tests.selftest(stream=output, **kwargs))
+        finally:
+            bzrlib.tests.default_transport = old_transport
+            tests.TestCaseWithMemoryTransport.TEST_ROOT = old_root
         output.seek(0)
         return output
 
@@ -1824,6 +1831,28 @@
             list_only=True, random_seed="123")
         self.assertEqual(expected.getvalue(), repeated.getvalue())
 
+    def check_transport_set(self, transport_server):
+        captured_transport = []
+        def seen_transport(a_transport):
+            captured_transport.append(a_transport)
+        class Capture(tests.TestCase):
+            def a(self):
+                seen_transport(bzrlib.tests.default_transport)
+        def factory():
+            return TestUtil.TestSuite([Capture("a")])
+        self.run_selftest(transport=transport_server, test_suite_factory=factory)
+        self.assertEqual(transport_server, captured_transport[0])
+
+    def test_transport_sftp(self):
+        try:
+            import bzrlib.transport.sftp
+        except ParamikoNotPresent:
+            raise TestSkipped("Paramiko not present")
+        self.check_transport_set(bzrlib.transport.sftp.SFTPAbsoluteServer)
+
+    def test_transport_memory(self):
+        self.check_transport_set(bzrlib.transport.memory.MemoryServer)
+
 
 class TestKnownFailure(tests.TestCase):
 




More information about the bazaar-commits mailing list