~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/__init__.py

  • Committer: Patch Queue Manager
  • Date: 2014-10-06 16:32:42 UTC
  • mfrom: (6597.2.4 split-diff-tests)
  • Revision ID: pqm@pqm.ubuntu.com-20141006163242-c2cll01cwc24grkk
(vila) Split some tests to be able to get finer grained failures (Vincent
 Ladeuil)

Show diffs side-by-side

added added

removed removed

Lines of Context:
60
60
import bzrlib
61
61
from bzrlib import (
62
62
    branchbuilder,
63
 
    bzrdir,
 
63
    controldir,
64
64
    chk_map,
65
65
    commands as _mod_commands,
66
66
    config,
248
248
    different types of display.
249
249
 
250
250
    When a test finishes, in whatever way, it calls one of the addSuccess,
251
 
    addFailure or addError classes.  These in turn may redirect to a more
 
251
    addFailure or addError methods.  These in turn may redirect to a more
252
252
    specific case for the special test results supported by our extended
253
253
    tests.
254
254
 
1001
1001
    def setUp(self):
1002
1002
        super(TestCase, self).setUp()
1003
1003
 
 
1004
        # At this point we're still accessing the config files in $BZR_HOME (as
 
1005
        # set by the user running selftest).
1004
1006
        timeout = config.GlobalStack().get('selftest.timeout')
1005
1007
        if timeout:
1006
1008
            timeout_fixture = fixtures.TimeoutFixture(timeout)
1027
1029
        # between tests.  We should get rid of this altogether: bug 656694. --
1028
1030
        # mbp 20101008
1029
1031
        self.overrideAttr(bzrlib.trace, '_verbosity_level', 0)
1030
 
        # Isolate config option expansion until its default value for bzrlib is
1031
 
        # settled on or a the FIXME associated with _get_expand_default_value
1032
 
        # is addressed -- vila 20110219
1033
 
        self.overrideAttr(config, '_expand_default_value', None)
1034
1032
        self._log_files = set()
1035
1033
        # Each key in the ``_counters`` dict holds a value for a different
1036
1034
        # counter. When the test ends, addDetail() should be used to output the
1329
1327
        # hook into bzr dir opening. This leaves a small window of error for
1330
1328
        # transport tests, but they are well known, and we can improve on this
1331
1329
        # step.
1332
 
        bzrdir.BzrDir.hooks.install_named_hook("pre_open",
 
1330
        controldir.ControlDir.hooks.install_named_hook("pre_open",
1333
1331
            self._preopen_isolate_transport, "Check bzr directories are safe.")
1334
1332
 
1335
1333
    def _ndiff_strings(self, a, b):
1782
1780
 
1783
1781
        :returns: The actual attr value.
1784
1782
        """
1785
 
        value = getattr(obj, attr_name)
1786
1783
        # The actual value is captured by the call below
1787
 
        self.addCleanup(setattr, obj, attr_name, value)
 
1784
        value = getattr(obj, attr_name, _unitialized_attr)
 
1785
        if value is _unitialized_attr:
 
1786
            # When the test completes, the attribute should not exist, but if
 
1787
            # we aren't setting a value, we don't need to do anything.
 
1788
            if new is not _unitialized_attr:
 
1789
                self.addCleanup(delattr, obj, attr_name)
 
1790
        else:
 
1791
            self.addCleanup(setattr, obj, attr_name, value)
1788
1792
        if new is not _unitialized_attr:
1789
1793
            setattr(obj, attr_name, new)
1790
1794
        return value
2451
2455
        self.transport_readonly_server = None
2452
2456
        self.__vfs_server = None
2453
2457
 
 
2458
    def setUp(self):
 
2459
        super(TestCaseWithMemoryTransport, self).setUp()
 
2460
 
 
2461
        def _add_disconnect_cleanup(transport):
 
2462
            """Schedule disconnection of given transport at test cleanup
 
2463
 
 
2464
            This needs to happen for all connected transports or leaks occur.
 
2465
 
 
2466
            Note reconnections may mean we call disconnect multiple times per
 
2467
            transport which is suboptimal but seems harmless.
 
2468
            """
 
2469
            self.addCleanup(transport.disconnect)
 
2470
 
 
2471
        _mod_transport.Transport.hooks.install_named_hook('post_connect',
 
2472
            _add_disconnect_cleanup, None)
 
2473
 
 
2474
        self._make_test_root()
 
2475
        self.addCleanup(os.chdir, os.getcwdu())
 
2476
        self.makeAndChdirToTestDir()
 
2477
        self.overrideEnvironmentForTesting()
 
2478
        self.__readonly_server = None
 
2479
        self.__server = None
 
2480
        self.reduceLockdirTimeout()
 
2481
        # Each test may use its own config files even if the local config files
 
2482
        # don't actually exist. They'll rightly fail if they try to create them
 
2483
        # though.
 
2484
        self.overrideAttr(config, '_shared_stores', {})
 
2485
 
2454
2486
    def get_transport(self, relpath=None):
2455
2487
        """Return a writeable transport.
2456
2488
 
2599
2631
        real branch.
2600
2632
        """
2601
2633
        root = TestCaseWithMemoryTransport.TEST_ROOT
2602
 
        # Make sure we get a readable and accessible home for .bzr.log
2603
 
        # and/or config files, and not fallback to weird defaults (see
2604
 
        # http://pad.lv/825027).
2605
 
        self.assertIs(None, os.environ.get('BZR_HOME', None))
2606
 
        os.environ['BZR_HOME'] = root
2607
 
        wt = bzrdir.BzrDir.create_standalone_workingtree(root)
2608
 
        del os.environ['BZR_HOME']
 
2634
        try:
 
2635
            # Make sure we get a readable and accessible home for .bzr.log
 
2636
            # and/or config files, and not fallback to weird defaults (see
 
2637
            # http://pad.lv/825027).
 
2638
            self.assertIs(None, os.environ.get('BZR_HOME', None))
 
2639
            os.environ['BZR_HOME'] = root
 
2640
            wt = controldir.ControlDir.create_standalone_workingtree(root)
 
2641
            del os.environ['BZR_HOME']
 
2642
        except Exception, e:
 
2643
            self.fail("Fail to initialize the safety net: %r\n" % (e,))
2609
2644
        # Hack for speed: remember the raw bytes of the dirstate file so that
2610
2645
        # we don't need to re-open the wt to check it hasn't changed.
2611
2646
        TestCaseWithMemoryTransport._SAFETY_NET_PRISTINE_DIRSTATE = (
2681
2716
        if format is None:
2682
2717
            format = self.get_default_format()
2683
2718
        if isinstance(format, basestring):
2684
 
            format = bzrdir.format_registry.make_bzrdir(format)
 
2719
            format = controldir.format_registry.make_bzrdir(format)
2685
2720
        return format
2686
2721
 
2687
2722
    def make_bzrdir(self, relpath, format=None):
2734
2769
        self.overrideEnv('HOME', test_home_dir)
2735
2770
        self.overrideEnv('BZR_HOME', test_home_dir)
2736
2771
 
2737
 
    def setUp(self):
2738
 
        super(TestCaseWithMemoryTransport, self).setUp()
2739
 
 
2740
 
        def _add_disconnect_cleanup(transport):
2741
 
            """Schedule disconnection of given transport at test cleanup
2742
 
 
2743
 
            This needs to happen for all connected transports or leaks occur.
2744
 
 
2745
 
            Note reconnections may mean we call disconnect multiple times per
2746
 
            transport which is suboptimal but seems harmless.
2747
 
            """
2748
 
            self.addCleanup(transport.disconnect)
2749
 
 
2750
 
        _mod_transport.Transport.hooks.install_named_hook('post_connect',
2751
 
            _add_disconnect_cleanup, None)
2752
 
 
2753
 
        self._make_test_root()
2754
 
        self.addCleanup(os.chdir, os.getcwdu())
2755
 
        self.makeAndChdirToTestDir()
2756
 
        self.overrideEnvironmentForTesting()
2757
 
        self.__readonly_server = None
2758
 
        self.__server = None
2759
 
        self.reduceLockdirTimeout()
2760
 
 
2761
2772
    def setup_smart_server_with_call_log(self):
2762
2773
        """Sets up a smart server as the transport server with a call log."""
2763
2774
        self.transport_server = test_server.SmartTCPServer_for_testing
2855
2866
        # stacking policy to honour; create a bzr dir with an unshared
2856
2867
        # repository (but not a branch - our code would be trying to escape
2857
2868
        # then!) to stop them, and permit it to be read.
2858
 
        # control = bzrdir.BzrDir.create(self.test_base_dir)
 
2869
        # control = controldir.ControlDir.create(self.test_base_dir)
2859
2870
        # control.create_repository()
2860
2871
        self.test_home_dir = self.test_base_dir + '/home'
2861
2872
        os.mkdir(self.test_home_dir)
2950
2961
    readwrite one must both define get_url() as resolving to os.getcwd().
2951
2962
    """
2952
2963
 
 
2964
    def setUp(self):
 
2965
        super(TestCaseWithTransport, self).setUp()
 
2966
        self.__vfs_server = None
 
2967
 
2953
2968
    def get_vfs_only_server(self):
2954
2969
        """See TestCaseWithMemoryTransport.
2955
2970
 
3001
3016
            if self.vfs_transport_factory is test_server.LocalURLServer:
3002
3017
                # the branch is colocated on disk, we cannot create a checkout.
3003
3018
                # hopefully callers will expect this.
3004
 
                local_controldir= bzrdir.BzrDir.open(self.get_vfs_only_url(relpath))
 
3019
                local_controldir = controldir.ControlDir.open(
 
3020
                    self.get_vfs_only_url(relpath))
3005
3021
                wt = local_controldir.create_workingtree()
3006
3022
                if wt.branch._format != b._format:
3007
3023
                    wt._branch = b
3037
3053
        self.assertFalse(differences.has_changed(),
3038
3054
            "Trees %r and %r are different: %r" % (left, right, differences))
3039
3055
 
3040
 
    def setUp(self):
3041
 
        super(TestCaseWithTransport, self).setUp()
3042
 
        self.__vfs_server = None
3043
 
 
3044
3056
    def disable_missing_extensions_warning(self):
3045
3057
        """Some tests expect a precise stderr content.
3046
3058
 
3047
3059
        There is no point in forcing them to duplicate the extension related
3048
3060
        warning.
3049
3061
        """
3050
 
        config.GlobalConfig().set_user_option('ignore_missing_extensions', True)
 
3062
        config.GlobalStack().set('ignore_missing_extensions', True)
3051
3063
 
3052
3064
 
3053
3065
class ChrootedTestCase(TestCaseWithTransport):
3780
3792
 
3781
3793
    :return: (absents, duplicates) absents is a list containing the test found
3782
3794
        in id_list but not in test_suite, duplicates is a list containing the
3783
 
        test found multiple times in test_suite.
 
3795
        tests found multiple times in test_suite.
3784
3796
 
3785
3797
    When using a prefined test id list, it may occurs that some tests do not
3786
3798
    exist anymore or that some tests use the same id. This function warns the
4329
4341
    """Copy test and apply scenario to it.
4330
4342
 
4331
4343
    :param test: A test to adapt.
4332
 
    :param scenario: A tuple describing the scenarion.
 
4344
    :param scenario: A tuple describing the scenario.
4333
4345
        The first element of the tuple is the new test id.
4334
4346
        The second element is a dict containing attributes to set on the
4335
4347
        test.