~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_selftest.py

  • Committer: Canonical.com Patch Queue Manager
  • Date: 2009-09-18 02:51:19 UTC
  • mfrom: (4691.2.5 integration)
  • Revision ID: pqm@pqm.ubuntu.com-20090918025119-eqkrmtj09t2hqs2t
(robertc) Add test suite enforcement of BzrDir objects outside the
        test area. (Robert Collins)

Show diffs side-by-side

added added

removed removed

Lines of Context:
39
39
    repository,
40
40
    symbol_versioning,
41
41
    tests,
 
42
    transport,
42
43
    workingtree,
43
44
    )
44
45
from bzrlib.repofmt import (
577
578
                         self.get_transport().get_bytes(
578
579
                            'dir/.bzr/repository/format'))
579
580
 
580
 
    def test_safety_net(self):
581
 
        """No test should modify the safety .bzr directory.
582
 
 
583
 
        We just test that the _check_safety_net private method raises
584
 
        AssertionError, it's easier than building a test suite with the same
585
 
        test.
586
 
        """
587
 
        # Oops, a commit in the current directory (i.e. without local .bzr
588
 
        # directory) will crawl up the hierarchy to find a .bzr directory.
589
 
        self.run_bzr(['commit', '-mfoo', '--unchanged'])
590
 
        # But we have a safety net in place.
591
 
        self.assertRaises(AssertionError, self._check_safety_net)
592
 
 
593
581
    def test_dangling_locks_cause_failures(self):
594
582
        class TestDanglingLock(tests.TestCaseWithMemoryTransport):
595
583
            def test_function(self):
740
728
        self.check_timing(ShortDelayTestCase('test_short_delay'),
741
729
                          r"^ +[0-9]+ms$")
742
730
 
 
731
    def _patch_get_bzr_source_tree(self):
 
732
        # Reading from the actual source tree breaks isolation, but we don't
 
733
        # want to assume that thats *all* that would happen.
 
734
        def _get_bzr_source_tree():
 
735
            return None
 
736
        orig_get_bzr_source_tree = bzrlib.version._get_bzr_source_tree
 
737
        bzrlib.version._get_bzr_source_tree = _get_bzr_source_tree
 
738
        def restore():
 
739
            bzrlib.version._get_bzr_source_tree = orig_get_bzr_source_tree
 
740
        self.addCleanup(restore)
 
741
 
743
742
    def test_assigned_benchmark_file_stores_date(self):
 
743
        self._patch_get_bzr_source_tree()
744
744
        output = StringIO()
745
745
        result = bzrlib.tests.TextTestResult(self._log_file,
746
746
                                        descriptions=0,
754
754
        self.assertContainsRe(output_string, "--date [0-9.]+")
755
755
 
756
756
    def test_benchhistory_records_test_times(self):
 
757
        self._patch_get_bzr_source_tree()
757
758
        result_stream = StringIO()
758
759
        result = bzrlib.tests.TextTestResult(
759
760
            self._log_file,
1166
1167
            ],
1167
1168
            lines[-3:])
1168
1169
 
 
1170
    def _patch_get_bzr_source_tree(self):
 
1171
        # Reading from the actual source tree breaks isolation, but we don't
 
1172
        # want to assume that thats *all* that would happen.
 
1173
        self._get_source_tree_calls = []
 
1174
        def _get_bzr_source_tree():
 
1175
            self._get_source_tree_calls.append("called")
 
1176
            return None
 
1177
        orig_get_bzr_source_tree = bzrlib.version._get_bzr_source_tree
 
1178
        bzrlib.version._get_bzr_source_tree = _get_bzr_source_tree
 
1179
        def restore():
 
1180
            bzrlib.version._get_bzr_source_tree = orig_get_bzr_source_tree
 
1181
        self.addCleanup(restore)
 
1182
 
1169
1183
    def test_bench_history(self):
1170
 
        # tests that the running the benchmark produces a history file
1171
 
        # containing a timestamp and the revision id of the bzrlib source which
1172
 
        # was tested.
1173
 
        workingtree = _get_bzr_source_tree()
 
1184
        # tests that the running the benchmark passes bench_history into
 
1185
        # the test result object. We can tell that happens if
 
1186
        # _get_bzr_source_tree is called.
 
1187
        self._patch_get_bzr_source_tree()
1174
1188
        test = TestRunner('dummy_test')
1175
1189
        output = StringIO()
1176
1190
        runner = tests.TextTestRunner(stream=self._log_file,
1178
1192
        result = self.run_test_runner(runner, test)
1179
1193
        output_string = output.getvalue()
1180
1194
        self.assertContainsRe(output_string, "--date [0-9.]+")
1181
 
        if workingtree is not None:
1182
 
            revision_id = workingtree.get_parent_ids()[0]
1183
 
            self.assertEndsWith(output_string.rstrip(), revision_id)
 
1195
        self.assertLength(1, self._get_source_tree_calls)
1184
1196
 
1185
1197
    def assertLogDeleted(self, test):
1186
1198
        log = test._get_log()
1549
1561
        """Self.knownFailure() should raise a KnownFailure exception."""
1550
1562
        self.assertRaises(tests.KnownFailure, self.knownFailure, "A Failure")
1551
1563
 
 
1564
    def test_open_bzrdir_safe_roots(self):
 
1565
        # even a memory transport should fail to open when its url isn't 
 
1566
        # permitted.
 
1567
        # Manually set one up (TestCase doesn't and shouldn't provide magic
 
1568
        # machinery)
 
1569
        transport_server = MemoryServer()
 
1570
        transport_server.setUp()
 
1571
        self.addCleanup(transport_server.tearDown)
 
1572
        t = transport.get_transport(transport_server.get_url())
 
1573
        bzrdir.BzrDir.create(t.base)
 
1574
        self.assertRaises(errors.BzrError,
 
1575
            bzrdir.BzrDir.open_from_transport, t)
 
1576
        # But if we declare this as safe, we can open the bzrdir.
 
1577
        self.permit_url(t.base)
 
1578
        self._bzr_selftest_roots.append(t.base)
 
1579
        bzrdir.BzrDir.open_from_transport(t)
 
1580
 
1552
1581
    def test_requireFeature_available(self):
1553
1582
        """self.requireFeature(available) is a no-op."""
1554
1583
        class Available(tests.Feature):
1621
1650
            ],
1622
1651
            result.calls)
1623
1652
 
 
1653
    def test_start_server_registers_url(self):
 
1654
        transport_server = MemoryServer()
 
1655
        # A little strict, but unlikely to be changed soon.
 
1656
        self.assertEqual([], self._bzr_selftest_roots)
 
1657
        self.start_server(transport_server)
 
1658
        self.assertSubset([transport_server.get_url()],
 
1659
            self._bzr_selftest_roots)
 
1660
 
1624
1661
    def test_assert_list_raises_on_generator(self):
1625
1662
        def generator_which_will_raise():
1626
1663
            # This will not raise until after the first yield
2634
2671
        # Running bzr in blackbox mode, normal/expected/user errors should be
2635
2672
        # caught in the regular way and turned into an error message plus exit
2636
2673
        # code.
2637
 
        out, err = self.run_bzr(["log", "/nonexistantpath"], retcode=3)
 
2674
        transport_server = MemoryServer()
 
2675
        transport_server.setUp()
 
2676
        self.addCleanup(transport_server.tearDown)
 
2677
        url = transport_server.get_url()
 
2678
        self.permit_url(url)
 
2679
        out, err = self.run_bzr(["log", "%s/nonexistantpath" % url], retcode=3)
2638
2680
        self.assertEqual(out, '')
2639
2681
        self.assertContainsRe(err,
2640
2682
            'bzr: ERROR: Not a branch: ".*nonexistantpath/".\n')