/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_selftest.py

  • Committer: Canonical.com Patch Queue Manager
  • Date: 2009-12-21 06:03:07 UTC
  • mfrom: (4665.7.3 serve-init)
  • Revision ID: pqm@pqm.ubuntu.com-20091221060307-uvja3vdy1o6dzzy0
(mbp) example debian init script

Show diffs side-by-side

added added

removed removed

Lines of Context:
38
38
    repository,
39
39
    symbol_versioning,
40
40
    tests,
 
41
    transport,
41
42
    workingtree,
42
43
    )
43
44
from bzrlib.repofmt import (
489
490
        self.assertEqualStat(real, fake)
490
491
 
491
492
    def test_assertEqualStat_notequal(self):
492
 
        self.build_tree(["foo", "bar"])
 
493
        self.build_tree(["foo", "longname"])
493
494
        self.assertRaises(AssertionError, self.assertEqualStat,
494
 
            os.lstat("foo"), os.lstat("bar"))
 
495
            os.lstat("foo"), os.lstat("longname"))
495
496
 
496
497
 
497
498
class TestTestCaseWithMemoryTransport(tests.TestCaseWithMemoryTransport):
515
516
        cwd = osutils.getcwd()
516
517
        self.assertIsSameRealPath(self.test_dir, cwd)
517
518
 
 
519
    def test_BZR_HOME_and_HOME_are_bytestrings(self):
 
520
        """The $BZR_HOME and $HOME environment variables should not be unicode.
 
521
 
 
522
        See https://bugs.launchpad.net/bzr/+bug/464174
 
523
        """
 
524
        self.assertIsInstance(os.environ['BZR_HOME'], str)
 
525
        self.assertIsInstance(os.environ['HOME'], str)
 
526
 
518
527
    def test_make_branch_and_memory_tree(self):
519
528
        """In TestCaseWithMemoryTransport we should not make the branch on disk.
520
529
 
576
585
                         self.get_transport().get_bytes(
577
586
                            'dir/.bzr/repository/format'))
578
587
 
579
 
    def test_safety_net(self):
580
 
        """No test should modify the safety .bzr directory.
581
 
 
582
 
        We just test that the _check_safety_net private method raises
583
 
        AssertionError, it's easier than building a test suite with the same
584
 
        test.
585
 
        """
586
 
        # Oops, a commit in the current directory (i.e. without local .bzr
587
 
        # directory) will crawl up the hierarchy to find a .bzr directory.
588
 
        self.run_bzr(['commit', '-mfoo', '--unchanged'])
589
 
        # But we have a safety net in place.
590
 
        self.assertRaises(AssertionError, self._check_safety_net)
591
 
 
592
588
    def test_dangling_locks_cause_failures(self):
593
589
        class TestDanglingLock(tests.TestCaseWithMemoryTransport):
594
590
            def test_function(self):
739
735
        self.check_timing(ShortDelayTestCase('test_short_delay'),
740
736
                          r"^ +[0-9]+ms$")
741
737
 
 
738
    def _patch_get_bzr_source_tree(self):
 
739
        # Reading from the actual source tree breaks isolation, but we don't
 
740
        # want to assume that thats *all* that would happen.
 
741
        def _get_bzr_source_tree():
 
742
            return None
 
743
        orig_get_bzr_source_tree = bzrlib.version._get_bzr_source_tree
 
744
        bzrlib.version._get_bzr_source_tree = _get_bzr_source_tree
 
745
        def restore():
 
746
            bzrlib.version._get_bzr_source_tree = orig_get_bzr_source_tree
 
747
        self.addCleanup(restore)
 
748
 
742
749
    def test_assigned_benchmark_file_stores_date(self):
 
750
        self._patch_get_bzr_source_tree()
743
751
        output = StringIO()
744
752
        result = bzrlib.tests.TextTestResult(self._log_file,
745
753
                                        descriptions=0,
753
761
        self.assertContainsRe(output_string, "--date [0-9.]+")
754
762
 
755
763
    def test_benchhistory_records_test_times(self):
 
764
        self._patch_get_bzr_source_tree()
756
765
        result_stream = StringIO()
757
766
        result = bzrlib.tests.TextTestResult(
758
767
            self._log_file,
826
835
            def report_known_failure(self, test, err):
827
836
                self._call = test, err
828
837
        result = InstrumentedTestResult(None, None, None, None)
829
 
        def test_function():
830
 
            raise tests.KnownFailure('failed!')
831
 
        test = unittest.FunctionTestCase(test_function)
 
838
        class Test(tests.TestCase):
 
839
            def test_function(self):
 
840
                raise tests.KnownFailure('failed!')
 
841
        test = Test("test_function")
832
842
        test.run(result)
833
843
        # it should invoke 'report_known_failure'.
834
844
        self.assertEqual(2, len(result._call))
912
922
        result.report_unsupported(test, feature)
913
923
        output = result_stream.getvalue()[prefix:]
914
924
        lines = output.splitlines()
915
 
        self.assertEqual(lines, ['NODEP        0ms',
916
 
                                 "    The feature 'Feature' is not available."])
 
925
        # We don't check for the final '0ms' since it may fail on slow hosts
 
926
        self.assertStartsWith(lines[0], 'NODEP')
 
927
        self.assertEqual(lines[1],
 
928
                         "    The feature 'Feature' is not available.")
917
929
 
918
930
    def test_unavailable_exception(self):
919
931
        """An UnavailableFeature being raised should invoke addNotSupported."""
925
937
                self._call = test, feature
926
938
        result = InstrumentedTestResult(None, None, None, None)
927
939
        feature = tests.Feature()
928
 
        def test_function():
929
 
            raise tests.UnavailableFeature(feature)
930
 
        test = unittest.FunctionTestCase(test_function)
 
940
        class Test(tests.TestCase):
 
941
            def test_function(self):
 
942
                raise tests.UnavailableFeature(feature)
 
943
        test = Test("test_function")
931
944
        test.run(result)
932
945
        # it should invoke 'addNotSupported'.
933
946
        self.assertEqual(2, len(result._call))
950
963
                                             verbosity=1)
951
964
        test = self.get_passing_test()
952
965
        err = (tests.KnownFailure, tests.KnownFailure('foo'), None)
953
 
        result._addKnownFailure(test, err)
 
966
        result.addExpectedFailure(test, err)
954
967
        self.assertFalse(result.wasStrictlySuccessful())
955
968
        self.assertEqual(None, result._extractBenchmarkTime(test))
956
969
 
1013
1026
    def test_known_failure_failed_run(self):
1014
1027
        # run a test that generates a known failure which should be printed in
1015
1028
        # the final output when real failures occur.
1016
 
        def known_failure_test():
1017
 
            raise tests.KnownFailure('failed')
 
1029
        class Test(tests.TestCase):
 
1030
            def known_failure_test(self):
 
1031
                raise tests.KnownFailure('failed')
1018
1032
        test = unittest.TestSuite()
1019
 
        test.addTest(unittest.FunctionTestCase(known_failure_test))
 
1033
        test.addTest(Test("known_failure_test"))
1020
1034
        def failing_test():
1021
1035
            raise AssertionError('foo')
1022
1036
        test.addTest(unittest.FunctionTestCase(failing_test))
1040
1054
            )
1041
1055
 
1042
1056
    def test_known_failure_ok_run(self):
1043
 
        # run a test that generates a known failure which should be printed in the final output.
1044
 
        def known_failure_test():
1045
 
            raise tests.KnownFailure('failed')
1046
 
        test = unittest.FunctionTestCase(known_failure_test)
 
1057
        # run a test that generates a known failure which should be printed in
 
1058
        # the final output.
 
1059
        class Test(tests.TestCase):
 
1060
            def known_failure_test(self):
 
1061
                raise tests.KnownFailure('failed')
 
1062
        test = Test("known_failure_test")
1047
1063
        stream = StringIO()
1048
1064
        runner = tests.TextTestRunner(stream=stream)
1049
1065
        result = self.run_test_runner(runner, test)
1126
1142
 
1127
1143
    def test_not_applicable(self):
1128
1144
        # run a test that is skipped because it's not applicable
1129
 
        def not_applicable_test():
1130
 
            raise tests.TestNotApplicable('this test never runs')
 
1145
        class Test(tests.TestCase):
 
1146
            def not_applicable_test(self):
 
1147
                raise tests.TestNotApplicable('this test never runs')
1131
1148
        out = StringIO()
1132
1149
        runner = tests.TextTestRunner(stream=out, verbosity=2)
1133
 
        test = unittest.FunctionTestCase(not_applicable_test)
 
1150
        test = Test("not_applicable_test")
1134
1151
        result = self.run_test_runner(runner, test)
1135
1152
        self._log_file.write(out.getvalue())
1136
1153
        self.assertTrue(result.wasSuccessful())
1165
1182
            ],
1166
1183
            lines[-3:])
1167
1184
 
 
1185
    def _patch_get_bzr_source_tree(self):
 
1186
        # Reading from the actual source tree breaks isolation, but we don't
 
1187
        # want to assume that thats *all* that would happen.
 
1188
        self._get_source_tree_calls = []
 
1189
        def _get_bzr_source_tree():
 
1190
            self._get_source_tree_calls.append("called")
 
1191
            return None
 
1192
        orig_get_bzr_source_tree = bzrlib.version._get_bzr_source_tree
 
1193
        bzrlib.version._get_bzr_source_tree = _get_bzr_source_tree
 
1194
        def restore():
 
1195
            bzrlib.version._get_bzr_source_tree = orig_get_bzr_source_tree
 
1196
        self.addCleanup(restore)
 
1197
 
1168
1198
    def test_bench_history(self):
1169
 
        # tests that the running the benchmark produces a history file
1170
 
        # containing a timestamp and the revision id of the bzrlib source which
1171
 
        # was tested.
1172
 
        workingtree = _get_bzr_source_tree()
 
1199
        # tests that the running the benchmark passes bench_history into
 
1200
        # the test result object. We can tell that happens if
 
1201
        # _get_bzr_source_tree is called.
 
1202
        self._patch_get_bzr_source_tree()
1173
1203
        test = TestRunner('dummy_test')
1174
1204
        output = StringIO()
1175
1205
        runner = tests.TextTestRunner(stream=self._log_file,
1177
1207
        result = self.run_test_runner(runner, test)
1178
1208
        output_string = output.getvalue()
1179
1209
        self.assertContainsRe(output_string, "--date [0-9.]+")
1180
 
        if workingtree is not None:
1181
 
            revision_id = workingtree.get_parent_ids()[0]
1182
 
            self.assertEndsWith(output_string.rstrip(), revision_id)
 
1210
        self.assertLength(1, self._get_source_tree_calls)
1183
1211
 
1184
1212
    def assertLogDeleted(self, test):
1185
1213
        log = test._get_log()
1493
1521
        outer_test = TestTestCase("outer_child")
1494
1522
        result = self.make_test_result()
1495
1523
        outer_test.run(result)
 
1524
        self.addCleanup(osutils.delete_any, outer_test._log_file_name)
1496
1525
        self.assertEqual(original_trace, bzrlib.trace._trace_file)
1497
1526
 
1498
1527
    def method_that_times_a_bit_twice(self):
1547
1576
        """Self.knownFailure() should raise a KnownFailure exception."""
1548
1577
        self.assertRaises(tests.KnownFailure, self.knownFailure, "A Failure")
1549
1578
 
 
1579
    def test_open_bzrdir_safe_roots(self):
 
1580
        # even a memory transport should fail to open when its url isn't 
 
1581
        # permitted.
 
1582
        # Manually set one up (TestCase doesn't and shouldn't provide magic
 
1583
        # machinery)
 
1584
        transport_server = MemoryServer()
 
1585
        transport_server.setUp()
 
1586
        self.addCleanup(transport_server.tearDown)
 
1587
        t = transport.get_transport(transport_server.get_url())
 
1588
        bzrdir.BzrDir.create(t.base)
 
1589
        self.assertRaises(errors.BzrError,
 
1590
            bzrdir.BzrDir.open_from_transport, t)
 
1591
        # But if we declare this as safe, we can open the bzrdir.
 
1592
        self.permit_url(t.base)
 
1593
        self._bzr_selftest_roots.append(t.base)
 
1594
        bzrdir.BzrDir.open_from_transport(t)
 
1595
 
1550
1596
    def test_requireFeature_available(self):
1551
1597
        """self.requireFeature(available) is a no-op."""
1552
1598
        class Available(tests.Feature):
1619
1665
            ],
1620
1666
            result.calls)
1621
1667
 
 
1668
    def test_start_server_registers_url(self):
 
1669
        transport_server = MemoryServer()
 
1670
        # A little strict, but unlikely to be changed soon.
 
1671
        self.assertEqual([], self._bzr_selftest_roots)
 
1672
        self.start_server(transport_server)
 
1673
        self.assertSubset([transport_server.get_url()],
 
1674
            self._bzr_selftest_roots)
 
1675
 
1622
1676
    def test_assert_list_raises_on_generator(self):
1623
1677
        def generator_which_will_raise():
1624
1678
            # This will not raise until after the first yield
1722
1776
        self.assertEndsWith('foo', 'oo')
1723
1777
        self.assertRaises(AssertionError, self.assertEndsWith, 'o', 'oo')
1724
1778
 
 
1779
    def test_assertEqualDiff(self):
 
1780
        e = self.assertRaises(AssertionError,
 
1781
                              self.assertEqualDiff, '', '\n')
 
1782
        self.assertEquals(str(e),
 
1783
                          # Don't blink ! The '+' applies to the second string
 
1784
                          'first string is missing a final newline.\n+ \n')
 
1785
        e = self.assertRaises(AssertionError,
 
1786
                              self.assertEqualDiff, '\n', '')
 
1787
        self.assertEquals(str(e),
 
1788
                          # Don't blink ! The '-' applies to the second string
 
1789
                          'second string is missing a final newline.\n- \n')
 
1790
 
 
1791
 
 
1792
class TestDeprecations(tests.TestCase):
 
1793
 
1725
1794
    def test_applyDeprecated_not_deprecated(self):
1726
1795
        sample_object = ApplyDeprecatedHelper()
1727
1796
        # calling an undeprecated callable raises an assertion
1990
2059
 
1991
2060
        Attempts to run bzr from inside this class don't actually run it.
1992
2061
 
1993
 
        We test how run_bzr actually invokes bzr in another location.
1994
 
        Here we only need to test that it is run_bzr passes the right
1995
 
        parameters to run_bzr.
 
2062
        We test how run_bzr actually invokes bzr in another location.  Here we
 
2063
        only need to test that it passes the right parameters to run_bzr.
1996
2064
        """
1997
2065
        self.argv = list(argv)
1998
2066
        self.retcode = retcode
1999
2067
        self.encoding = encoding
2000
2068
        self.stdin = stdin
2001
2069
        self.working_dir = working_dir
2002
 
        return self.out, self.err
 
2070
        return self.retcode, self.out, self.err
2003
2071
 
2004
2072
    def test_run_bzr_error(self):
2005
2073
        self.out = "It sure does!\n"
2006
2074
        out, err = self.run_bzr_error(['^$'], ['rocks'], retcode=34)
2007
2075
        self.assertEqual(['rocks'], self.argv)
2008
2076
        self.assertEqual(34, self.retcode)
2009
 
        self.assertEqual(out, 'It sure does!\n')
 
2077
        self.assertEqual('It sure does!\n', out)
 
2078
        self.assertEquals(out, self.out)
 
2079
        self.assertEqual('', err)
 
2080
        self.assertEquals(err, self.err)
2010
2081
 
2011
2082
    def test_run_bzr_error_regexes(self):
2012
2083
        self.out = ''
2013
2084
        self.err = "bzr: ERROR: foobarbaz is not versioned"
2014
2085
        out, err = self.run_bzr_error(
2015
 
                ["bzr: ERROR: foobarbaz is not versioned"],
2016
 
                ['file-id', 'foobarbaz'])
 
2086
            ["bzr: ERROR: foobarbaz is not versioned"],
 
2087
            ['file-id', 'foobarbaz'])
2017
2088
 
2018
2089
    def test_encoding(self):
2019
2090
        """Test that run_bzr passes encoding to _run_bzr_core"""
2353
2424
        """finish_bzr_subprocess raises self.failureException if the retcode is
2354
2425
        not the expected one.
2355
2426
        """
 
2427
        self.disable_missing_extensions_warning()
2356
2428
        process = self.start_bzr_subprocess(['wait-until-signalled'],
2357
2429
                                            skip_if_plan_to_signal=True)
2358
2430
        self.assertEqual('running\n', process.stdout.readline())
2425
2497
        self.assertIs(feature, exception.args[0])
2426
2498
 
2427
2499
 
 
2500
class TestModuleAvailableFeature(tests.TestCase):
 
2501
 
 
2502
    def test_available_module(self):
 
2503
        feature = tests.ModuleAvailableFeature('bzrlib.tests')
 
2504
        self.assertEqual('bzrlib.tests', feature.module_name)
 
2505
        self.assertEqual('bzrlib.tests', str(feature))
 
2506
        self.assertTrue(feature.available())
 
2507
        self.assertIs(tests, feature.module)
 
2508
 
 
2509
    def test_unavailable_module(self):
 
2510
        feature = tests.ModuleAvailableFeature('bzrlib.no_such_module_exists')
 
2511
        self.assertEqual('bzrlib.no_such_module_exists', str(feature))
 
2512
        self.assertFalse(feature.available())
 
2513
        self.assertIs(None, feature.module)
 
2514
 
 
2515
 
2428
2516
class TestSelftestFiltering(tests.TestCase):
2429
2517
 
2430
2518
    def setUp(self):
2616
2704
        # Running bzr in blackbox mode, normal/expected/user errors should be
2617
2705
        # caught in the regular way and turned into an error message plus exit
2618
2706
        # code.
2619
 
        out, err = self.run_bzr(["log", "/nonexistantpath"], retcode=3)
 
2707
        transport_server = MemoryServer()
 
2708
        transport_server.setUp()
 
2709
        self.addCleanup(transport_server.tearDown)
 
2710
        url = transport_server.get_url()
 
2711
        self.permit_url(url)
 
2712
        out, err = self.run_bzr(["log", "%s/nonexistantpath" % url], retcode=3)
2620
2713
        self.assertEqual(out, '')
2621
2714
        self.assertContainsRe(err,
2622
2715
            'bzr: ERROR: Not a branch: ".*nonexistantpath/".\n')
2797
2890
            # testmod_names
2798
2891
            'bzrlib.tests.blackbox.test_branch.TestBranch.test_branch',
2799
2892
            ('bzrlib.tests.per_transport.TransportTests'
2800
 
             '.test_abspath(LocalURLServer)'),
 
2893
             '.test_abspath(LocalTransport,LocalURLServer)'),
2801
2894
            'bzrlib.tests.test_selftest.TestTestSuite.test_test_suite',
2802
2895
            # modules_to_doctest
2803
2896
            'bzrlib.timestamp.format_highres_date',