~bzr-pqm/bzr/bzr.dev

1442.1.1 by Robert Collins
move config_dir into bzrlib.config
1
# Copyright (C) 2005 by Canonical Ltd
2
#   Authors: Robert Collins <robert.collins@canonical.com>
3
#
4
# This program is free software; you can redistribute it and/or modify
5
# it under the terms of the GNU General Public License as published by
6
# the Free Software Foundation; either version 2 of the License, or
7
# (at your option) any later version.
8
#
9
# This program is distributed in the hope that it will be useful,
10
# but WITHOUT ANY WARRANTY; without even the implied warranty of
11
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12
# GNU General Public License for more details.
13
#
14
# You should have received a copy of the GNU General Public License
15
# along with this program; if not, write to the Free Software
16
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
17
18
"""Tests for finding and reading the bzr config file[s]."""
19
# import system imports here
1442.1.2 by Robert Collins
create a config module - there is enough config logic to make this worthwhile, and start testing config processing.
20
from ConfigParser import ConfigParser
21
from cStringIO import StringIO
1442.1.1 by Robert Collins
move config_dir into bzrlib.config
22
import os
23
import sys
24
25
#import bzrlib specific imports here
26
import bzrlib.config as config
1442.1.6 by Robert Collins
first stage major overhaul of configs, giving use BranchConfigs, LocationConfigs and GlobalConfigs
27
import bzrlib.errors as errors
1442.1.1 by Robert Collins
move config_dir into bzrlib.config
28
from bzrlib.selftest import TestCase, TestCaseInTempDir
29
30
1442.1.2 by Robert Collins
create a config module - there is enough config logic to make this worthwhile, and start testing config processing.
31
sample_config_text = ("[DEFAULT]\n"
32
                      "email=Robert Collins <robertc@example.com>\n"
33
                      "editor=vim\n"
34
                      "gpg_signing_command=gnome-gpg\n")
35
1442.1.8 by Robert Collins
preparing some tests for LocationConfig
36
1442.1.17 by Robert Collins
allow global overriding of signature policy to force checking, or (pointless but allowed) to set auto checking
37
sample_always_signatures = ("[DEFAULT]\n"
1442.1.21 by Robert Collins
create signature_needed() call for commit to trigger creating signatures
38
                            "check_signatures=require\n")
1442.1.17 by Robert Collins
allow global overriding of signature policy to force checking, or (pointless but allowed) to set auto checking
39
40
1442.1.16 by Robert Collins
allow global overriding of signature policy to never check
41
sample_ignore_signatures = ("[DEFAULT]\n"
1442.1.21 by Robert Collins
create signature_needed() call for commit to trigger creating signatures
42
                            "check_signatures=ignore\n")
1442.1.16 by Robert Collins
allow global overriding of signature policy to never check
43
44
1442.1.17 by Robert Collins
allow global overriding of signature policy to force checking, or (pointless but allowed) to set auto checking
45
sample_maybe_signatures = ("[DEFAULT]\n"
1442.1.21 by Robert Collins
create signature_needed() call for commit to trigger creating signatures
46
                            "check_signatures=check-available\n")
1442.1.17 by Robert Collins
allow global overriding of signature policy to force checking, or (pointless but allowed) to set auto checking
47
48
1442.1.8 by Robert Collins
preparing some tests for LocationConfig
49
sample_branches_text = ("[http://www.example.com]\n"
50
                        "# Top level policy\n"
51
                        "email=Robert Collins <robertc@example.org>\n"
52
                        "[http://www.example.com/useglobal]\n"
53
                        "# different project, forces global lookup\n"
54
                        "recurse=false\n"
55
                        "[/b/]\n"
1442.1.21 by Robert Collins
create signature_needed() call for commit to trigger creating signatures
56
                        "check_signatures=require\n"
1442.1.8 by Robert Collins
preparing some tests for LocationConfig
57
                        "# test trailing / matching with no children\n"
58
                        "[/a/]\n"
1442.1.21 by Robert Collins
create signature_needed() call for commit to trigger creating signatures
59
                        "check_signatures=check-available\n"
1442.1.8 by Robert Collins
preparing some tests for LocationConfig
60
                        "# test trailing / matching\n"
61
                        "[/a/*]\n"
62
                        "#subdirs will match but not the parent\n"
63
                        "recurse=False\n"
64
                        "[/a/c]\n"
1442.1.21 by Robert Collins
create signature_needed() call for commit to trigger creating signatures
65
                        "check_signatures=ignore\n"
1442.1.8 by Robert Collins
preparing some tests for LocationConfig
66
                        "#testing explicit beats globs\n")
67
68
1442.1.2 by Robert Collins
create a config module - there is enough config logic to make this worthwhile, and start testing config processing.
69
class InstrumentedConfigParser(object):
70
    """A config parser look-enough-alike to record calls made to it."""
71
72
    def __init__(self):
73
        self._calls = []
74
75
    def read(self, filenames):
76
        self._calls.append(('read', filenames))
77
78
1442.1.6 by Robert Collins
first stage major overhaul of configs, giving use BranchConfigs, LocationConfigs and GlobalConfigs
79
class FakeBranch(object):
80
81
    def __init__(self):
82
        self.base = "http://example.com/branches/demo"
83
        self.email = 'Robert Collins <robertc@example.net>\n'
84
85
    def controlfile(self, filename, mode):
86
        if filename != 'email':
87
            raise NotImplementedError
88
        if self.email is not None:
89
            return StringIO(self.email)
90
        raise errors.NoSuchFile
91
92
93
class InstrumentedConfig(config.Config):
94
    """An instrumented config that supplies stubs for template methods."""
95
    
96
    def __init__(self):
97
        super(InstrumentedConfig, self).__init__()
98
        self._calls = []
1442.1.15 by Robert Collins
make getting the signature checking policy a template method
99
        self._signatures = config.CHECK_NEVER
1442.1.6 by Robert Collins
first stage major overhaul of configs, giving use BranchConfigs, LocationConfigs and GlobalConfigs
100
101
    def _get_user_id(self):
102
        self._calls.append('_get_user_id')
103
        return "Robert Collins <robert.collins@example.org>"
104
1442.1.15 by Robert Collins
make getting the signature checking policy a template method
105
    def _get_signature_checking(self):
106
        self._calls.append('_get_signature_checking')
107
        return self._signatures
108
1442.1.6 by Robert Collins
first stage major overhaul of configs, giving use BranchConfigs, LocationConfigs and GlobalConfigs
109
110
class TestConfig(TestCase):
111
112
    def test_constructs(self):
113
        config.Config()
114
 
115
    def test_no_default_editor(self):
116
        self.assertRaises(NotImplementedError, config.Config().get_editor)
117
118
    def test_user_email(self):
119
        my_config = InstrumentedConfig()
120
        self.assertEqual('robert.collins@example.org', my_config.user_email())
121
        self.assertEqual(['_get_user_id'], my_config._calls)
122
123
    def test_username(self):
124
        my_config = InstrumentedConfig()
125
        self.assertEqual('Robert Collins <robert.collins@example.org>',
126
                         my_config.username())
127
        self.assertEqual(['_get_user_id'], my_config._calls)
1442.1.14 by Robert Collins
Create a default signature checking policy of CHECK_IF_POSSIBLE
128
129
    def test_signatures_default(self):
130
        my_config = config.Config()
131
        self.assertEqual(config.CHECK_IF_POSSIBLE,
132
                         my_config.signature_checking())
133
1442.1.15 by Robert Collins
make getting the signature checking policy a template method
134
    def test_signatures_template_method(self):
135
        my_config = InstrumentedConfig()
136
        self.assertEqual(config.CHECK_NEVER, my_config.signature_checking())
137
        self.assertEqual(['_get_signature_checking'], my_config._calls)
138
139
    def test_signatures_template_method_none(self):
140
        my_config = InstrumentedConfig()
141
        my_config._signatures = None
142
        self.assertEqual(config.CHECK_IF_POSSIBLE,
143
                         my_config.signature_checking())
144
        self.assertEqual(['_get_signature_checking'], my_config._calls)
145
1442.1.6 by Robert Collins
first stage major overhaul of configs, giving use BranchConfigs, LocationConfigs and GlobalConfigs
146
1442.1.1 by Robert Collins
move config_dir into bzrlib.config
147
class TestConfigPath(TestCase):
148
1442.1.2 by Robert Collins
create a config module - there is enough config logic to make this worthwhile, and start testing config processing.
149
    def setUp(self):
150
        super(TestConfigPath, self).setUp()
151
        self.oldenv = os.environ.get('HOME', None)
152
        os.environ['HOME'] = '/home/bogus'
153
154
    def tearDown(self):
155
        os.environ['HOME'] = self.oldenv
156
    
1442.1.1 by Robert Collins
move config_dir into bzrlib.config
157
    def test_config_dir(self):
1442.1.2 by Robert Collins
create a config module - there is enough config logic to make this worthwhile, and start testing config processing.
158
        self.assertEqual(config.config_dir(), '/home/bogus/.bazaar')
159
160
    def test_config_filename(self):
161
        self.assertEqual(config.config_filename(),
162
                         '/home/bogus/.bazaar/bazaar.conf')
163
1442.1.6 by Robert Collins
first stage major overhaul of configs, giving use BranchConfigs, LocationConfigs and GlobalConfigs
164
    def test_branches_config_filename(self):
165
        self.assertEqual(config.branches_config_filename(),
166
                         '/home/bogus/.bazaar/branches.conf')
167
1442.1.18 by Robert Collins
permit per branch location overriding of signature checking policy
168
class TestIniConfig(TestCase):
169
170
    def test_contructs(self):
171
        my_config = config.IniBasedConfig("nothing")
1442.1.6 by Robert Collins
first stage major overhaul of configs, giving use BranchConfigs, LocationConfigs and GlobalConfigs
172
1442.1.2 by Robert Collins
create a config module - there is enough config logic to make this worthwhile, and start testing config processing.
173
    def test_from_fp(self):
174
        config_file = StringIO(sample_config_text)
1442.1.18 by Robert Collins
permit per branch location overriding of signature checking policy
175
        my_config = config.IniBasedConfig(None)
1442.1.6 by Robert Collins
first stage major overhaul of configs, giving use BranchConfigs, LocationConfigs and GlobalConfigs
176
        self.failUnless(
1442.1.18 by Robert Collins
permit per branch location overriding of signature checking policy
177
            isinstance(my_config._get_parser(file=config_file),
1442.1.2 by Robert Collins
create a config module - there is enough config logic to make this worthwhile, and start testing config processing.
178
                        ConfigParser))
179
1442.1.6 by Robert Collins
first stage major overhaul of configs, giving use BranchConfigs, LocationConfigs and GlobalConfigs
180
    def test_cached(self):
181
        config_file = StringIO(sample_config_text)
1442.1.18 by Robert Collins
permit per branch location overriding of signature checking policy
182
        my_config = config.IniBasedConfig(None)
183
        parser = my_config._get_parser(file=config_file)
184
        self.failUnless(my_config._get_parser() is parser)
185
186
187
188
class TestGetConfig(TestCase):
189
190
    def test_constructs(self):
1442.1.6 by Robert Collins
first stage major overhaul of configs, giving use BranchConfigs, LocationConfigs and GlobalConfigs
191
        my_config = config.GlobalConfig()
192
1442.1.2 by Robert Collins
create a config module - there is enough config logic to make this worthwhile, and start testing config processing.
193
    def test_calls_read_filenames(self):
1442.1.6 by Robert Collins
first stage major overhaul of configs, giving use BranchConfigs, LocationConfigs and GlobalConfigs
194
        # replace the class that is constructured, to check its parameters
1442.1.2 by Robert Collins
create a config module - there is enough config logic to make this worthwhile, and start testing config processing.
195
        oldparserclass = config.ConfigParser
196
        config.ConfigParser = InstrumentedConfigParser
1442.1.6 by Robert Collins
first stage major overhaul of configs, giving use BranchConfigs, LocationConfigs and GlobalConfigs
197
        my_config = config.GlobalConfig()
1442.1.2 by Robert Collins
create a config module - there is enough config logic to make this worthwhile, and start testing config processing.
198
        try:
1442.1.18 by Robert Collins
permit per branch location overriding of signature checking policy
199
            parser = my_config._get_parser()
1442.1.2 by Robert Collins
create a config module - there is enough config logic to make this worthwhile, and start testing config processing.
200
        finally:
201
            config.ConfigParser = oldparserclass
202
        self.failUnless(isinstance(parser, InstrumentedConfigParser))
203
        self.assertEqual(parser._calls, [('read', [config.config_filename()])])
204
205
1442.1.6 by Robert Collins
first stage major overhaul of configs, giving use BranchConfigs, LocationConfigs and GlobalConfigs
206
class TestBranchConfig(TestCaseInTempDir):
207
208
    def test_constructs(self):
209
        branch = FakeBranch()
210
        my_config = config.BranchConfig(branch)
211
        self.assertRaises(TypeError, config.BranchConfig)
212
213
    def test_get_location_config(self):
214
        branch = FakeBranch()
215
        my_config = config.BranchConfig(branch)
216
        location_config = my_config._get_location_config()
217
        self.assertEqual(branch.base, location_config.location)
218
        self.failUnless(location_config is my_config._get_location_config())
219
220
1442.1.2 by Robert Collins
create a config module - there is enough config logic to make this worthwhile, and start testing config processing.
221
class TestConfigItems(TestCase):
222
223
    def setUp(self):
224
        super(TestConfigItems, self).setUp()
225
        self.bzr_email = os.environ.get('BZREMAIL')
226
        if self.bzr_email is not None:
227
            del os.environ['BZREMAIL']
228
        self.email = os.environ.get('EMAIL')
229
        if self.email is not None:
230
            del os.environ['EMAIL']
231
        self.oldenv = os.environ.get('HOME', None)
232
        os.environ['HOME'] = os.getcwd()
233
234
    def tearDown(self):
235
        os.environ['HOME'] = self.oldenv
1442.1.6 by Robert Collins
first stage major overhaul of configs, giving use BranchConfigs, LocationConfigs and GlobalConfigs
236
        if os.environ.get('BZREMAIL') is not None:
237
            del os.environ['BZREMAIL']
1442.1.2 by Robert Collins
create a config module - there is enough config logic to make this worthwhile, and start testing config processing.
238
        if self.bzr_email is not None:
1185.16.30 by mbp at sourcefrog
- fix broken config test
239
            os.environ['BZREMAIL'] = self.bzr_email
1442.1.2 by Robert Collins
create a config module - there is enough config logic to make this worthwhile, and start testing config processing.
240
        if self.email is not None:
1185.16.30 by mbp at sourcefrog
- fix broken config test
241
            os.environ['EMAIL'] = self.email
1442.1.2 by Robert Collins
create a config module - there is enough config logic to make this worthwhile, and start testing config processing.
242
        super(TestConfigItems, self).tearDown()
243
1442.1.6 by Robert Collins
first stage major overhaul of configs, giving use BranchConfigs, LocationConfigs and GlobalConfigs
244
245
class TestGlobalConfigItems(TestConfigItems):
246
1442.1.2 by Robert Collins
create a config module - there is enough config logic to make this worthwhile, and start testing config processing.
247
    def test_user_id(self):
248
        config_file = StringIO(sample_config_text)
1442.1.6 by Robert Collins
first stage major overhaul of configs, giving use BranchConfigs, LocationConfigs and GlobalConfigs
249
        my_config = config.GlobalConfig()
1442.1.18 by Robert Collins
permit per branch location overriding of signature checking policy
250
        my_config._parser = my_config._get_parser(file=config_file)
1442.1.2 by Robert Collins
create a config module - there is enough config logic to make this worthwhile, and start testing config processing.
251
        self.assertEqual("Robert Collins <robertc@example.com>",
1442.1.6 by Robert Collins
first stage major overhaul of configs, giving use BranchConfigs, LocationConfigs and GlobalConfigs
252
                         my_config._get_user_id())
1442.1.2 by Robert Collins
create a config module - there is enough config logic to make this worthwhile, and start testing config processing.
253
254
    def test_absent_user_id(self):
255
        config_file = StringIO("")
1442.1.6 by Robert Collins
first stage major overhaul of configs, giving use BranchConfigs, LocationConfigs and GlobalConfigs
256
        my_config = config.GlobalConfig()
1442.1.18 by Robert Collins
permit per branch location overriding of signature checking policy
257
        my_config._parser = my_config._get_parser(file=config_file)
1442.1.6 by Robert Collins
first stage major overhaul of configs, giving use BranchConfigs, LocationConfigs and GlobalConfigs
258
        self.assertEqual(None, my_config._get_user_id())
259
260
    def test_configured_editor(self):
261
        config_file = StringIO(sample_config_text)
262
        my_config = config.GlobalConfig()
1442.1.18 by Robert Collins
permit per branch location overriding of signature checking policy
263
        my_config._parser = my_config._get_parser(file=config_file)
1442.1.6 by Robert Collins
first stage major overhaul of configs, giving use BranchConfigs, LocationConfigs and GlobalConfigs
264
        self.assertEqual("vim", my_config.get_editor())
265
1442.1.17 by Robert Collins
allow global overriding of signature policy to force checking, or (pointless but allowed) to set auto checking
266
    def test_signatures_always(self):
267
        config_file = StringIO(sample_always_signatures)
268
        my_config = config.GlobalConfig()
1442.1.18 by Robert Collins
permit per branch location overriding of signature checking policy
269
        my_config._parser = my_config._get_parser(file=config_file)
1442.1.17 by Robert Collins
allow global overriding of signature policy to force checking, or (pointless but allowed) to set auto checking
270
        self.assertEqual(config.CHECK_ALWAYS,
271
                         my_config.signature_checking())
1442.1.21 by Robert Collins
create signature_needed() call for commit to trigger creating signatures
272
        self.assertEqual(True, my_config.signature_needed())
1442.1.17 by Robert Collins
allow global overriding of signature policy to force checking, or (pointless but allowed) to set auto checking
273
274
    def test_signatures_if_possible(self):
275
        config_file = StringIO(sample_maybe_signatures)
276
        my_config = config.GlobalConfig()
1442.1.18 by Robert Collins
permit per branch location overriding of signature checking policy
277
        my_config._parser = my_config._get_parser(file=config_file)
1442.1.17 by Robert Collins
allow global overriding of signature policy to force checking, or (pointless but allowed) to set auto checking
278
        self.assertEqual(config.CHECK_IF_POSSIBLE,
279
                         my_config.signature_checking())
1442.1.21 by Robert Collins
create signature_needed() call for commit to trigger creating signatures
280
        self.assertEqual(False, my_config.signature_needed())
1442.1.17 by Robert Collins
allow global overriding of signature policy to force checking, or (pointless but allowed) to set auto checking
281
1442.1.16 by Robert Collins
allow global overriding of signature policy to never check
282
    def test_signatures_ignore(self):
283
        config_file = StringIO(sample_ignore_signatures)
284
        my_config = config.GlobalConfig()
1442.1.18 by Robert Collins
permit per branch location overriding of signature checking policy
285
        my_config._parser = my_config._get_parser(file=config_file)
1442.1.16 by Robert Collins
allow global overriding of signature policy to never check
286
        self.assertEqual(config.CHECK_NEVER,
287
                         my_config.signature_checking())
1442.1.21 by Robert Collins
create signature_needed() call for commit to trigger creating signatures
288
        self.assertEqual(False, my_config.signature_needed())
1442.1.16 by Robert Collins
allow global overriding of signature policy to never check
289
1442.1.6 by Robert Collins
first stage major overhaul of configs, giving use BranchConfigs, LocationConfigs and GlobalConfigs
290
1442.1.8 by Robert Collins
preparing some tests for LocationConfig
291
class TestLocationConfig(TestConfigItems):
292
293
    def test_constructs(self):
294
        my_config = config.LocationConfig('http://example.com')
295
        self.assertRaises(TypeError, config.LocationConfig)
296
297
    def test_branch_calls_read_filenames(self):
298
        # replace the class that is constructured, to check its parameters
299
        oldparserclass = config.ConfigParser
300
        config.ConfigParser = InstrumentedConfigParser
301
        my_config = config.LocationConfig('http://www.example.com')
302
        try:
1442.1.18 by Robert Collins
permit per branch location overriding of signature checking policy
303
            parser = my_config._get_parser()
1442.1.8 by Robert Collins
preparing some tests for LocationConfig
304
        finally:
305
            config.ConfigParser = oldparserclass
306
        self.failUnless(isinstance(parser, InstrumentedConfigParser))
307
        self.assertEqual(parser._calls, [('read', [config.branches_config_filename()])])
308
309
    def test_get_global_config(self):
310
        my_config = config.LocationConfig('http://example.com')
311
        global_config = my_config._get_global_config()
312
        self.failUnless(isinstance(global_config, config.GlobalConfig))
313
        self.failUnless(global_config is my_config._get_global_config())
314
315
    def test__get_section_no_match(self):
1442.1.11 by Robert Collins
LocationConfig lookups for non matching prefixes pass tests
316
        self.get_location_config('/')
317
        self.assertEqual(None, self.my_config._get_section())
1442.1.8 by Robert Collins
preparing some tests for LocationConfig
318
        
319
    def test__get_section_exact(self):
1442.1.9 by Robert Collins
exact section test passes
320
        self.get_location_config('http://www.example.com')
321
        self.assertEqual('http://www.example.com',
322
                         self.my_config._get_section())
1442.1.8 by Robert Collins
preparing some tests for LocationConfig
323
   
324
    def test__get_section_suffix_does_not(self):
1442.1.11 by Robert Collins
LocationConfig lookups for non matching prefixes pass tests
325
        self.get_location_config('http://www.example.com-com')
326
        self.assertEqual(None, self.my_config._get_section())
1442.1.8 by Robert Collins
preparing some tests for LocationConfig
327
328
    def test__get_section_subdir_recursive(self):
1442.1.11 by Robert Collins
LocationConfig lookups for non matching prefixes pass tests
329
        self.get_location_config('http://www.example.com/com')
330
        self.assertEqual('http://www.example.com',
331
                         self.my_config._get_section())
1442.1.8 by Robert Collins
preparing some tests for LocationConfig
332
333
    def test__get_section_subdir_matches(self):
1442.1.11 by Robert Collins
LocationConfig lookups for non matching prefixes pass tests
334
        self.get_location_config('http://www.example.com/useglobal')
1442.1.8 by Robert Collins
preparing some tests for LocationConfig
335
        self.assertEqual('http://www.example.com/useglobal',
1442.1.11 by Robert Collins
LocationConfig lookups for non matching prefixes pass tests
336
                         self.my_config._get_section())
1442.1.8 by Robert Collins
preparing some tests for LocationConfig
337
338
    def test__get_section_subdir_nonrecursive(self):
1442.1.11 by Robert Collins
LocationConfig lookups for non matching prefixes pass tests
339
        self.get_location_config(
1442.1.8 by Robert Collins
preparing some tests for LocationConfig
340
            'http://www.example.com/useglobal/childbranch')
1442.1.11 by Robert Collins
LocationConfig lookups for non matching prefixes pass tests
341
        self.assertEqual('http://www.example.com',
342
                         self.my_config._get_section())
1442.1.8 by Robert Collins
preparing some tests for LocationConfig
343
344
    def test__get_section_subdir_trailing_slash(self):
1442.1.11 by Robert Collins
LocationConfig lookups for non matching prefixes pass tests
345
        self.get_location_config('/b')
346
        self.assertEqual('/b/', self.my_config._get_section())
1442.1.8 by Robert Collins
preparing some tests for LocationConfig
347
348
    def test__get_section_subdir_child(self):
1442.1.11 by Robert Collins
LocationConfig lookups for non matching prefixes pass tests
349
        self.get_location_config('/a/foo')
350
        self.assertEqual('/a/*', self.my_config._get_section())
1442.1.8 by Robert Collins
preparing some tests for LocationConfig
351
352
    def test__get_section_subdir_child_child(self):
1442.1.11 by Robert Collins
LocationConfig lookups for non matching prefixes pass tests
353
        self.get_location_config('/a/foo/bar')
354
        self.assertEqual('/a/', self.my_config._get_section())
1442.1.8 by Robert Collins
preparing some tests for LocationConfig
355
1442.1.18 by Robert Collins
permit per branch location overriding of signature checking policy
356
    def test__get_section_trailing_slash_with_children(self):
357
        self.get_location_config('/a/')
358
        self.assertEqual('/a/', self.my_config._get_section())
359
1442.1.8 by Robert Collins
preparing some tests for LocationConfig
360
    def test__get_section_explicit_over_glob(self):
1442.1.10 by Robert Collins
explicit over glob test passes
361
        self.get_location_config('/a/c')
362
        self.assertEqual('/a/c', self.my_config._get_section())
1442.1.8 by Robert Collins
preparing some tests for LocationConfig
363
1442.1.18 by Robert Collins
permit per branch location overriding of signature checking policy
364
    def get_location_config(self, location, global_config=None):
365
        if global_config is None:
366
            global_file = StringIO(sample_config_text)
367
        else:
368
            global_file = StringIO(global_config)
1442.1.8 by Robert Collins
preparing some tests for LocationConfig
369
        branches_file = StringIO(sample_branches_text)
370
        self.my_config = config.LocationConfig(location)
1442.1.18 by Robert Collins
permit per branch location overriding of signature checking policy
371
        self.my_config._get_parser(branches_file)
372
        self.my_config._get_global_config()._get_parser(global_file)
1442.1.8 by Robert Collins
preparing some tests for LocationConfig
373
374
    def test_location_without_username(self):
375
        self.get_location_config('http://www.example.com/useglobal')
376
        self.assertEqual('Robert Collins <robertc@example.com>',
377
                         self.my_config.username())
378
379
    def test_location_not_listed(self):
380
        self.get_location_config('/home/robertc/sources')
381
        self.assertEqual('Robert Collins <robertc@example.com>',
382
                         self.my_config.username())
383
1442.1.13 by Robert Collins
branches.conf is now able to override the users email
384
    def test_overriding_location(self):
385
        self.get_location_config('http://www.example.com/foo')
386
        self.assertEqual('Robert Collins <robertc@example.org>',
387
                         self.my_config.username())
1442.1.16 by Robert Collins
allow global overriding of signature policy to never check
388
1442.1.18 by Robert Collins
permit per branch location overriding of signature checking policy
389
    def test_signatures_not_set(self):
390
        self.get_location_config('http://www.example.com',
391
                                 global_config=sample_ignore_signatures)
392
        self.assertEqual(config.CHECK_NEVER,
393
                         self.my_config.signature_checking())
394
395
    def test_signatures_never(self):
396
        self.get_location_config('/a/c')
397
        self.assertEqual(config.CHECK_NEVER,
398
                         self.my_config.signature_checking())
399
        
1442.1.16 by Robert Collins
allow global overriding of signature policy to never check
400
    def test_signatures_when_available(self):
1442.1.18 by Robert Collins
permit per branch location overriding of signature checking policy
401
        self.get_location_config('/a/', global_config=sample_ignore_signatures)
1442.1.16 by Robert Collins
allow global overriding of signature policy to never check
402
        self.assertEqual(config.CHECK_IF_POSSIBLE,
403
                         self.my_config.signature_checking())
1442.1.13 by Robert Collins
branches.conf is now able to override the users email
404
        
1442.1.18 by Robert Collins
permit per branch location overriding of signature checking policy
405
    def test_signatures_always(self):
406
        self.get_location_config('/b')
407
        self.assertEqual(config.CHECK_ALWAYS,
408
                         self.my_config.signature_checking())
409
        
1442.1.6 by Robert Collins
first stage major overhaul of configs, giving use BranchConfigs, LocationConfigs and GlobalConfigs
410
411
class TestBranchConfigItems(TestConfigItems):
412
413
    def test_user_id(self):
414
        branch = FakeBranch()
415
        my_config = config.BranchConfig(branch)
416
        self.assertEqual("Robert Collins <robertc@example.net>",
417
                         my_config._get_user_id())
418
        branch.email = "John"
419
        self.assertEqual("John", my_config._get_user_id())
420
421
    def test_not_set_in_branch(self):
422
        branch = FakeBranch()
423
        my_config = config.BranchConfig(branch)
424
        branch.email = None
425
        config_file = StringIO(sample_config_text)
426
        (my_config._get_location_config().
1442.1.18 by Robert Collins
permit per branch location overriding of signature checking policy
427
            _get_global_config()._get_parser(config_file))
1442.1.6 by Robert Collins
first stage major overhaul of configs, giving use BranchConfigs, LocationConfigs and GlobalConfigs
428
        self.assertEqual("Robert Collins <robertc@example.com>",
429
                         my_config._get_user_id())
430
        branch.email = "John"
431
        self.assertEqual("John", my_config._get_user_id())
432
433
    def test_BZREMAIL_OVERRIDES(self):
434
        os.environ['BZREMAIL'] = "Robert Collins <robertc@example.org>"
435
        branch = FakeBranch()
436
        my_config = config.BranchConfig(branch)
437
        self.assertEqual("Robert Collins <robertc@example.org>",
438
                         my_config.username())
439
    
1442.1.19 by Robert Collins
BranchConfigs inherit signature_checking policy from their LocationConfig.
440
    def test_signatures_forced(self):
441
        branch = FakeBranch()
442
        my_config = config.BranchConfig(branch)
443
        config_file = StringIO(sample_always_signatures)
444
        (my_config._get_location_config().
445
            _get_global_config()._get_parser(config_file))
446
        self.assertEqual(config.CHECK_ALWAYS, my_config.signature_checking())