~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_gpg.py

  • Committer: Vincent Ladeuil
  • Date: 2011-05-31 10:01:15 UTC
  • mto: (5993.1.1 trunk)
  • mto: This revision was merged to the branch mainline in revision 5994.
  • Revision ID: v.ladeuil+lp@free.fr-20110531100115-bkea029bq5oki70l
Put the '\n' back into the formats and fix tests accordingly (reducing code duplication).

Show diffs side-by-side

added added

removed removed

Lines of Context:
23
23
from bzrlib import errors, ui
24
24
import bzrlib.gpg as gpg
25
25
from bzrlib.tests import TestCase
26
 
from bzrlib.tests import features
27
26
 
28
27
class FakeConfig(object):
29
28
 
30
 
    def gpg_signing_key(self):
31
 
        return "amy@example.com"
32
 
 
33
29
    def gpg_signing_command(self):
34
30
        return "false"
35
31
 
36
 
    def acceptable_keys(self):
37
 
        return None
38
 
 
39
32
 
40
33
class TestCommandLine(TestCase):
41
34
 
42
35
    def test_signing_command_line(self):
43
36
        my_gpg = gpg.GPGStrategy(FakeConfig())
44
 
        self.assertEqual(['false',  '--clearsign', '-u', 'amy@example.com'],
 
37
        self.assertEqual(['false',  '--clearsign'],
45
38
                         my_gpg._command_line())
46
39
 
47
40
    def test_checks_return_code(self):
91
84
        self.assertRaises(errors.BzrBadParameterUnicode,
92
85
                          self.assertProduces, u'foo')
93
86
 
94
 
    def import_keys(self):
95
 
        from StringIO import StringIO
96
 
        import gpgme
97
 
        context = gpgme.Context()
98
 
 
99
 
        key = StringIO("""-----BEGIN PGP PUBLIC KEY BLOCK-----
100
 
Version: GnuPG v1.4.11 (GNU/Linux)
101
 
 
102
 
mQENBE343IgBCADwzPW7kmKb2bjB+UU+1ER/ABMZspvtoZMPusUw7bk6coXHF/0W
103
 
u1K/hSYeX9xaGOfOQw41r/g13MoR9dsL6L84RLiisf38rRoBZt+d5bCbZA5Xo801
104
 
2PeoBoGo6u5oOYKAFLMvrUitPiiE0IT/oQTfC4YUrLN4A+9W0QZruPGIpIXwmZXr
105
 
L0zsqYfNqIN0ompeJenVpKpvm3loJ/zfK7R3EJ3hsv6nkUmWCFsP1Pw3UV1YuCmw
106
 
Mkdn1U7DaOql1WjXgj9ABQDJrun2TGsqrSRzBODtHKA/uOX0K3VfKBU8VZo3dXUm
107
 
1Q4ZeZC39L9qJGTH8TQYlwBLe1yAOp+vx7QJABEBAAG0JEJhemFhciBUZXN0IEtl
108
 
eSA8YmF6YWFyQGV4YW1wbGUuY29tPokBOAQTAQIAIgUCTfjciAIbAwYLCQgHAwIG
109
 
FQgCCQoLBBYCAwECHgECF4AACgkQh2gbHuMIDkWJUggAwj537fH6WW+GGLA5onys
110
 
2hZmXUq/tU+L92bjQoRY4fmsQpk/FUVPUf+NQ0v1gkxx4BTfyYewaj5G6L8cvqW2
111
 
jj7UiJd8z9gTRxWTnYwfR/w5PGmxfJsBfEUKWsccrPQdOXAhwu0fjYIVk4nqgswa
112
 
IOAZIwe5Vsfs36uSS7p8RQHAZXLXtTOn3KcXHaxu83w6nc4zkWRovGJ9isBN3haO
113
 
2qEa0mYiAfDpz40CGtb8N/TQHF3Xcw8rJcxpg6RF3jMtWQnzbVJFp13it00R3LqW
114
 
o/r3RII3Ii3z2yARlg6D+5hVOrFBV8jFLkff1R2ZnVu+7WOrnbpmt3OiMkSeZrtB
115
 
OrkBDQRN+NyIAQgArRZ2YGzUj5dXOVIWgZ1/QFpyfx/cG/293WjRE4Wt2e4SxMf2
116
 
V0dcVCqWwT0+a79Wbausv4bStD4SkwDmu0Jf3z5ERzrr7oZwP0PMsIlM5zT6XSsr
117
 
6UUneB3UXX7MrEqVogVhRM0ORIaK/oRwMXr7K6xVT+bCBP3/p66kHtY1ZpfEzTEX
118
 
imBsN3GqoewBHYIneJKBtHE7uzdzw3O5p5dXqoj5foxGi9R1J15vAmt5pI68HJeX
119
 
P6ktvXbX2Iu7VDNoCvRXM9+ntyJtsXCjNXg4pTGHS/XO4nm2db4FUZOBcVMb1vCc
120
 
VtFjLTcbCqJqpoJWUtsLcNqDqMHOQDpe6KTNTQARAQABiQEfBBgBAgAJBQJN+NyI
121
 
AhsMAAoJEIdoGx7jCA5FrR8IANnOF3PUj1TbRcwV6RoWmHsFQHrPmM8ogXia1Lsv
122
 
jE1iEWoC+muvKh6Oydf90k6ZslS7rdDnp2qzYY8W/TiDkxP+fvsZ4mMi1Y0F+3ty
123
 
1jzWhcsnB2VrJSiavxEXk0tKPrNv4EUGWG6wHsC9TBj37If+nrMyim94VHvI0eHm
124
 
X8yMlN4O3HfmgD9CbJdUxueP3e31OIYuwh/6F7GII8TNEVHU/8vh/mQcCxppNbc+
125
 
boff+kIsoa/TAMLwtJoSrX1nXm0K3vZePRLnIgmwVzdkOIkaRJUG2tSQFvkfhvtE
126
 
LhnkL5l4MO0wrUds0UWRwa3d7j/P2ExrqXdlLmEzrifWyEQ=
127
 
=hUJn
128
 
-----END PGP PUBLIC KEY BLOCK-----
129
 
""")
130
 
 
131
 
        secret_key = StringIO("""-----BEGIN PGP PRIVATE KEY BLOCK-----
132
 
Version: GnuPG v1.4.11 (GNU/Linux)
133
 
 
134
 
lQOYBE343IgBCADwzPW7kmKb2bjB+UU+1ER/ABMZspvtoZMPusUw7bk6coXHF/0W
135
 
u1K/hSYeX9xaGOfOQw41r/g13MoR9dsL6L84RLiisf38rRoBZt+d5bCbZA5Xo801
136
 
2PeoBoGo6u5oOYKAFLMvrUitPiiE0IT/oQTfC4YUrLN4A+9W0QZruPGIpIXwmZXr
137
 
L0zsqYfNqIN0ompeJenVpKpvm3loJ/zfK7R3EJ3hsv6nkUmWCFsP1Pw3UV1YuCmw
138
 
Mkdn1U7DaOql1WjXgj9ABQDJrun2TGsqrSRzBODtHKA/uOX0K3VfKBU8VZo3dXUm
139
 
1Q4ZeZC39L9qJGTH8TQYlwBLe1yAOp+vx7QJABEBAAEAB/0RJTbV991SOtVfPQVu
140
 
LM+tD0SiOXJwIBIINlngsFHWVIiBSDb6uF8dneMR70IRnuEFHFyAUXA7PZDxvcSu
141
 
phAqIdKCWxQPkAULAS0o4U2K3ZFGh4uOqvfZ8eSnh1rETFv7Yf3u23K89cZiy99n
142
 
EtWgSqzC/2z5PaZ7/alsYCBqhHuyd4Phaud7qv7FTz8mFrCf+CCY+D08wbnZBu4g
143
 
N9tBwoxT/UKRfv3nghIh9v+3qWfBEFGhrYbt92XKFbHOQeATZz8AGIv1eqN/+ZQY
144
 
oYmvVfO3GkrWaRoPeJNLqSDEn/45O1Uh9MJ4mQclXqB0QzMShle8uusHxIeJSQsR
145
 
z//VBAD11WS7qSgCeiHR+4jDzrrlb2snnA2bfDToEomDxd/n8xm7nJWdkNfJ2BCw
146
 
KvnxYVxjFNAwkKJGRajzALBLzRVO+K9NtSLiddv5zv+UNdgsKuE8tD7Jqxd/IbWw
147
 
AimCtL8osnJ+r9dvL+NyjkAT6l/NdEbLXGrBaMeTfSgl2cBOOwQA+sJIh1R5PiCK
148
 
nLIs9pm3PSy3w92Peelq/x/+0aebTZaJUk2ou3oCvB3druDqrUeaopuuCc0drV7C
149
 
Ldoey8x/T2ZGzmT2af9qNaD6ScTimDodXcJdwlpobhZTKpsE4EyywpLXtlWte1x0
150
 
1Mq3llQsIdRdf3GLS+L207hWgKDiDosD/0SyOBO/IBDteeEzeN2hNE3A8oeVbvRS
151
 
XrS/3uj6oKmlWUBORYP8ptUrXPoVPmNz2y4GO+OysFtfct3Yqb+Sb/52SXMOHTox
152
 
2oLW08tkzfkDArU5aauMEPmyutGyJ+hGo7fsuLXzXR8OPw4yZJdzG1tRlP2TTKmq
153
 
Fx8G/Ik6bN4zTYK0JEJhemFhciBUZXN0IEtleSA8YmF6YWFyQGV4YW1wbGUuY29t
154
 
PokBOAQTAQIAIgUCTfjciAIbAwYLCQgHAwIGFQgCCQoLBBYCAwECHgECF4AACgkQ
155
 
h2gbHuMIDkWJUggAwj537fH6WW+GGLA5onys2hZmXUq/tU+L92bjQoRY4fmsQpk/
156
 
FUVPUf+NQ0v1gkxx4BTfyYewaj5G6L8cvqW2jj7UiJd8z9gTRxWTnYwfR/w5PGmx
157
 
fJsBfEUKWsccrPQdOXAhwu0fjYIVk4nqgswaIOAZIwe5Vsfs36uSS7p8RQHAZXLX
158
 
tTOn3KcXHaxu83w6nc4zkWRovGJ9isBN3haO2qEa0mYiAfDpz40CGtb8N/TQHF3X
159
 
cw8rJcxpg6RF3jMtWQnzbVJFp13it00R3LqWo/r3RII3Ii3z2yARlg6D+5hVOrFB
160
 
V8jFLkff1R2ZnVu+7WOrnbpmt3OiMkSeZrtBOp0DlwRN+NyIAQgArRZ2YGzUj5dX
161
 
OVIWgZ1/QFpyfx/cG/293WjRE4Wt2e4SxMf2V0dcVCqWwT0+a79Wbausv4bStD4S
162
 
kwDmu0Jf3z5ERzrr7oZwP0PMsIlM5zT6XSsr6UUneB3UXX7MrEqVogVhRM0ORIaK
163
 
/oRwMXr7K6xVT+bCBP3/p66kHtY1ZpfEzTEXimBsN3GqoewBHYIneJKBtHE7uzdz
164
 
w3O5p5dXqoj5foxGi9R1J15vAmt5pI68HJeXP6ktvXbX2Iu7VDNoCvRXM9+ntyJt
165
 
sXCjNXg4pTGHS/XO4nm2db4FUZOBcVMb1vCcVtFjLTcbCqJqpoJWUtsLcNqDqMHO
166
 
QDpe6KTNTQARAQABAAf1EfceUlGLvoA/+yDTNTMjuPfzfKwbB/FOVfX44g3Za1eT
167
 
v7RvSuj4rFYIdE9UvZEei/pqPOSc+hhSsKZCulGXD5TUpf3AyG7ipWU/kID46Csp
168
 
0V08DPpFHnuw/N6+qNo5iSnhN9U1XMLjYT5d1HvKur26r2vWbmUTSJ1qIluHL2fT
169
 
R1pKYYLuoff4MIjZ01Hawq72jjor+dLBmMWveHpq4XNp+vQ4x8aFnY9ozufon0nM
170
 
uRSJRlQjDNB274tvUbmDFP+nzNbqF1nBTZ6FTdH/iKVNbytiYF7Hbat8GWVZqY1u
171
 
CZr7BklpIVWlk62ll0psMIPVyANi7YT332LLqYmBBADJKTx2dariG/kWU2W/9VEO
172
 
2VZpqsqazAxOoFEIOpcOlByhhyw5g0IKu0UyzHkhoCje0cWxpdSBFG432b8zL0AT
173
 
Z0RycfUG7Sgp9CpY1h8Cc/HbBa8xo1fSM7zplPQrHBqUzlVVBq6HOkUq+7qsPFWc
174
 
RRie95VsDmIMKQKPJHeYHQQA3EYGit+QHV0dccAInghEsf/mq8Gfnvo6HPYhWcDC
175
 
DTM39NhNlnl1WkTFCd2TWc+TWQ4KlRsh6bMjUpNa2qjrUl90fLekbogcxxMhcwa6
176
 
xgzEANZfwqdY0u3aB/CyZ6odfThwcAoeqoMpw34CfeKEroubpi2n8wKByrN2MQXJ
177
 
4vEEAJbXZOqgAcFAFBUVb5mVT0s2lJMagZFPdhRJz2bttz01s/B8aca6CrDpFRjT
178
 
03zRFUZjwDYqZDWBC181dCE9yla4OkWd5QyRKSS2EE02KEYqRzT0RngQn7s4AW2r
179
 
326up3Jhleln3hgD4Kk3V3KHmyK8zqZA0qWzry4Vl2jjkbnAPB2JAR8EGAECAAkF
180
 
Ak343IgCGwwACgkQh2gbHuMIDkWtHwgA2c4Xc9SPVNtFzBXpGhaYewVAes+YzyiB
181
 
eJrUuy+MTWIRagL6a68qHo7J1/3STpmyVLut0OenarNhjxb9OIOTE/5++xniYyLV
182
 
jQX7e3LWPNaFyycHZWslKJq/EReTS0o+s2/gRQZYbrAewL1MGPfsh/6eszKKb3hU
183
 
e8jR4eZfzIyU3g7cd+aAP0Jsl1TG54/d7fU4hi7CH/oXsYgjxM0RUdT/y+H+ZBwL
184
 
Gmk1tz5uh9/6Qiyhr9MAwvC0mhKtfWdebQre9l49EuciCbBXN2Q4iRpElQba1JAW
185
 
+R+G+0QuGeQvmXgw7TCtR2zRRZHBrd3uP8/YTGupd2UuYTOuJ9bIRA==
186
 
=LXn0
187
 
-----END PGP PRIVATE KEY BLOCK-----
188
 
""")
189
 
 
190
 
        context.import_(key)
191
 
        context.import_(secret_key)
192
 
 
193
 
    def test_verify_valid(self):
194
 
        self.requireFeature(features.gpgme)
195
 
        self.import_keys()
196
 
            
197
 
        content = """-----BEGIN PGP SIGNED MESSAGE-----
198
 
Hash: SHA1
199
 
 
200
 
bazaar-ng testament short form 1
201
 
revision-id: amy@example.com-20110527185938-hluafawphszb8dl1
202
 
sha1: 6411f9bdf6571200357140c9ce7c0f50106ac9a4
203
 
-----BEGIN PGP SIGNATURE-----
204
 
Version: GnuPG v1.4.11 (GNU/Linux)
205
 
 
206
 
iQEcBAEBAgAGBQJN+ekFAAoJEIdoGx7jCA5FGtEH/i+XxJRvqU6wdBtLVrGBMAGk
207
 
FZ5VP+KyXYtymSbgSstj/vM12NeMIeFs3xGnNnYuX1MIcY6We5TKtCH0epY6ym5+
208
 
6g2Q2QpQ5/sT2d0mWzR0K4uVngmxVQaXTdk5PdZ40O7ULeDLW6CxzxMHyUL1rsIx
209
 
7UBUTBh1O/1n3ZfD99hUkm3hVcnsN90uTKH59zV9NWwArU0cug60+5eDKJhSJDbG
210
 
rIwlqbFAjDZ7L/48e+IaYIJwBZFzMBpJKdCxzALLtauMf+KK8hGiL2hrRbWm7ty6
211
 
NgxfkMYOB4rDPdSstT35N+5uBG3n/UzjxHssi0svMfVETYYX40y57dm2eZQXFp8=
212
 
=iwsn
213
 
-----END PGP SIGNATURE-----
214
 
"""
215
 
        plain = """bazaar-ng testament short form 1
216
 
revision-id: amy@example.com-20110527185938-hluafawphszb8dl1
217
 
sha1: 6411f9bdf6571200357140c9ce7c0f50106ac9a4
218
 
"""
219
 
        my_gpg = gpg.GPGStrategy(FakeConfig())
220
 
        my_gpg.set_acceptable_keys("bazaar@example.com")
221
 
        self.assertEqual((gpg.SIGNATURE_VALID, None), my_gpg.verify(content,
222
 
                            plain))
223
 
 
224
 
    def test_verify_bad_testament(self):
225
 
        self.requireFeature(features.gpgme)
226
 
        self.import_keys()
227
 
            
228
 
        content = """-----BEGIN PGP SIGNED MESSAGE-----
229
 
Hash: SHA1
230
 
 
231
 
bazaar-ng testament short form 1
232
 
revision-id: amy@example.com-20110527185938-hluafawphszb8dl1
233
 
sha1: 6411f9bdf6571200357140c9ce7c0f50106ac9a4
234
 
-----BEGIN PGP SIGNATURE-----
235
 
Version: GnuPG v1.4.11 (GNU/Linux)
236
 
 
237
 
iQEcBAEBAgAGBQJN+ekFAAoJEIdoGx7jCA5FGtEH/i+XxJRvqU6wdBtLVrGBMAGk
238
 
FZ5VP+KyXYtymSbgSstj/vM12NeMIeFs3xGnNnYuX1MIcY6We5TKtCH0epY6ym5+
239
 
6g2Q2QpQ5/sT2d0mWzR0K4uVngmxVQaXTdk5PdZ40O7ULeDLW6CxzxMHyUL1rsIx
240
 
7UBUTBh1O/1n3ZfD99hUkm3hVcnsN90uTKH59zV9NWwArU0cug60+5eDKJhSJDbG
241
 
rIwlqbFAjDZ7L/48e+IaYIJwBZFzMBpJKdCxzALLtauMf+KK8hGiL2hrRbWm7ty6
242
 
NgxfkMYOB4rDPdSstT35N+5uBG3n/UzjxHssi0svMfVETYYX40y57dm2eZQXFp8=
243
 
=iwsn
244
 
-----END PGP SIGNATURE-----
245
 
"""
246
 
        plain = """bazaar-ng testament short form 1
247
 
revision-id: doctor@example.com-20110527185938-hluafawphszb8dl1
248
 
sha1: 6411f9bdf6571200357140c9ce7c0f50106ac9a4
249
 
"""
250
 
        my_gpg = gpg.GPGStrategy(FakeConfig())
251
 
        my_gpg.set_acceptable_keys("bazaar@example.com")
252
 
        self.assertEqual((gpg.SIGNATURE_NOT_VALID, None), my_gpg.verify(content,
253
 
                            plain))
254
 
 
255
 
    def test_verify_invalid(self):
256
 
        self.requireFeature(features.gpgme)
257
 
        content = """-----BEGIN PGP SIGNED MESSAGE-----
258
 
Hash: SHA1
259
 
 
260
 
bazaar-ng testament short form 1
261
 
revision-id: amy@example.com-20110527185938-hluafawphszb8dl1
262
 
sha1: 6411f9bdf6571200357140c9ce7c0f50106ac9a4
263
 
-----BEGIN PGP SIGNATURE-----
264
 
Version: GnuPG v1.4.11 (GNU/Linux)
265
 
 
266
 
iEYEARECAAYFAk33gYsACgkQpQbm1N1NUIhiDACglOuQDlnSF4NxfHSkN/zrmFy8
267
 
nswAoNGXAVuR9ONasAKIGBNUE0b+lols
268
 
=SOuC
269
 
-----END PGP SIGNATURE-----
270
 
"""
271
 
        plain = """bazaar-ng testament short form 1
272
 
revision-id: amy@example.com-20110527185938-hluafawphszb8dl1
273
 
sha1: 6411f9bdf6571200357140c9ce7c0f50106ac9a4
274
 
"""
275
 
        my_gpg = gpg.GPGStrategy(FakeConfig())
276
 
        self.assertEqual((gpg.SIGNATURE_NOT_VALID, None),
277
 
                            my_gpg.verify(content, plain))
278
 
 
279
 
    def test_set_acceptable_keys(self):
280
 
        self.requireFeature(features.gpgme)
281
 
        self.import_keys()
282
 
        my_gpg = gpg.GPGStrategy(FakeConfig())
283
 
        my_gpg.set_acceptable_keys("bazaar@example.com")
284
 
        self.assertEqual(my_gpg.acceptable_keys,
285
 
                         [u'B5DEED5FCB15DAE6ECEF919587681B1EE3080E45'])
286
 
 
287
 
    def test_set_acceptable_keys_unknown(self):
288
 
        self.requireFeature(features.gpgme)
289
 
        my_gpg = gpg.GPGStrategy(FakeConfig())
290
 
        my_gpg.set_acceptable_keys("unknown")
291
 
        self.assertEqual(my_gpg.acceptable_keys, [])
292
 
 
293
87
 
294
88
class TestDisabled(TestCase):
295
89
 
296
90
    def test_sign(self):
297
91
        self.assertRaises(errors.SigningFailed,
298
92
                          gpg.DisabledGPGStrategy(None).sign, 'content')
299
 
 
300
 
    def test_verify(self):
301
 
        self.assertRaises(errors.SignatureVerificationFailed,
302
 
                          gpg.DisabledGPGStrategy(None).verify, 'content',
303
 
                          'testament')