/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
5557.1.15 by John Arbash Meinel
Merge bzr.dev 5597 to resolve NEWS, aka bzr-2.3.txt
1
# Copyright (C) 2005, 2006, 2007, 2009, 2011 Canonical Ltd
1442.1.55 by Robert Collins
move environment preservation up to the root test case, making it available to all tests
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
4183.7.1 by Sabin Iacob
update FSF mailing address
16
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
1442.1.55 by Robert Collins
move environment preservation up to the root test case, making it available to all tests
17
18
"""Tests for signing and verifying blobs of data via gpg."""
19
20
# import system imports here
21
import sys
22
6624 by Jelmer Vernooij
Merge Python3 porting work ('py3 pokes')
23
from .. import (
6351.3.10 by Vincent Ladeuil
Inherit from TestCaseWithTransport as we need some disk support, add a
24
    config,
6123.1.16 by Jelmer Vernooij
Add test.
25
    errors,
26
    gpg,
6351.3.10 by Vincent Ladeuil
Inherit from TestCaseWithTransport as we need some disk support, add a
27
    tests,
6123.1.16 by Jelmer Vernooij
Add test.
28
    trace,
29
    ui,
30
    )
6624 by Jelmer Vernooij
Merge Python3 porting work ('py3 pokes')
31
from ..sixish import (
6621.22.2 by Martin
Use BytesIO or StringIO from bzrlib.sixish
32
    BytesIO,
33
    )
6624 by Jelmer Vernooij
Merge Python3 porting work ('py3 pokes')
34
from . import (
6123.1.16 by Jelmer Vernooij
Add test.
35
    TestCase,
36
    features,
37
    )
1442.1.55 by Robert Collins
move environment preservation up to the root test case, making it available to all tests
38
6351.3.10 by Vincent Ladeuil
Inherit from TestCaseWithTransport as we need some disk support, add a
39
6393.1.1 by Vincent Ladeuil
Provides MemoryStack to simplify configuration setup in tests
40
class FakeConfig(config.MemoryStack):
6351.3.11 by Vincent Ladeuil
Simplify by using an in-memory config store and stack.
41
6372.1.3 by Vincent Ladeuil
Fix gpg_signing_ket default values handling
42
    def __init__(self, content=None):
43
        if content is None:
44
            content = '''
6351.3.11 by Vincent Ladeuil
Simplify by using an in-memory config store and stack.
45
gpg_signing_key=amy@example.com
6728.1.2 by Jelmer Vernooij
Sign using python-gpg rather than command-line gpg.
46
'''
6393.1.1 by Vincent Ladeuil
Provides MemoryStack to simplify configuration setup in tests
47
        super(FakeConfig, self).__init__(content)
6351.3.11 by Vincent Ladeuil
Simplify by using an in-memory config store and stack.
48
49
6043.2.4 by Jonathan Riddell
add test for valid_but_unacceptable_key, document tests in verify method
50
class TestVerify(TestCase):
51
5971.1.14 by Jonathan Riddell
add test for set_acceptable_keys, accept non-trusted keys if specified as acceptable, import dummy key in tests so it works outside my machine
52
    def import_keys(self):
6728.1.1 by Jelmer Vernooij
Use python-gpg rather than python-gpgme.
53
        import gpg
54
        context = gpg.Context()
5971.1.14 by Jonathan Riddell
add test for set_acceptable_keys, accept non-trusted keys if specified as acceptable, import dummy key in tests so it works outside my machine
55
6728.1.1 by Jelmer Vernooij
Use python-gpg rather than python-gpgme.
56
        key = gpg.Data(b"""-----BEGIN PGP PUBLIC KEY BLOCK-----
5971.1.14 by Jonathan Riddell
add test for set_acceptable_keys, accept non-trusted keys if specified as acceptable, import dummy key in tests so it works outside my machine
57
Version: GnuPG v1.4.11 (GNU/Linux)
58
59
mQENBE343IgBCADwzPW7kmKb2bjB+UU+1ER/ABMZspvtoZMPusUw7bk6coXHF/0W
60
u1K/hSYeX9xaGOfOQw41r/g13MoR9dsL6L84RLiisf38rRoBZt+d5bCbZA5Xo801
61
2PeoBoGo6u5oOYKAFLMvrUitPiiE0IT/oQTfC4YUrLN4A+9W0QZruPGIpIXwmZXr
62
L0zsqYfNqIN0ompeJenVpKpvm3loJ/zfK7R3EJ3hsv6nkUmWCFsP1Pw3UV1YuCmw
63
Mkdn1U7DaOql1WjXgj9ABQDJrun2TGsqrSRzBODtHKA/uOX0K3VfKBU8VZo3dXUm
64
1Q4ZeZC39L9qJGTH8TQYlwBLe1yAOp+vx7QJABEBAAG0JEJhemFhciBUZXN0IEtl
65
eSA8YmF6YWFyQGV4YW1wbGUuY29tPokBOAQTAQIAIgUCTfjciAIbAwYLCQgHAwIG
66
FQgCCQoLBBYCAwECHgECF4AACgkQh2gbHuMIDkWJUggAwj537fH6WW+GGLA5onys
67
2hZmXUq/tU+L92bjQoRY4fmsQpk/FUVPUf+NQ0v1gkxx4BTfyYewaj5G6L8cvqW2
68
jj7UiJd8z9gTRxWTnYwfR/w5PGmxfJsBfEUKWsccrPQdOXAhwu0fjYIVk4nqgswa
69
IOAZIwe5Vsfs36uSS7p8RQHAZXLXtTOn3KcXHaxu83w6nc4zkWRovGJ9isBN3haO
70
2qEa0mYiAfDpz40CGtb8N/TQHF3Xcw8rJcxpg6RF3jMtWQnzbVJFp13it00R3LqW
71
o/r3RII3Ii3z2yARlg6D+5hVOrFBV8jFLkff1R2ZnVu+7WOrnbpmt3OiMkSeZrtB
72
OrkBDQRN+NyIAQgArRZ2YGzUj5dXOVIWgZ1/QFpyfx/cG/293WjRE4Wt2e4SxMf2
73
V0dcVCqWwT0+a79Wbausv4bStD4SkwDmu0Jf3z5ERzrr7oZwP0PMsIlM5zT6XSsr
74
6UUneB3UXX7MrEqVogVhRM0ORIaK/oRwMXr7K6xVT+bCBP3/p66kHtY1ZpfEzTEX
75
imBsN3GqoewBHYIneJKBtHE7uzdzw3O5p5dXqoj5foxGi9R1J15vAmt5pI68HJeX
76
P6ktvXbX2Iu7VDNoCvRXM9+ntyJtsXCjNXg4pTGHS/XO4nm2db4FUZOBcVMb1vCc
77
VtFjLTcbCqJqpoJWUtsLcNqDqMHOQDpe6KTNTQARAQABiQEfBBgBAgAJBQJN+NyI
78
AhsMAAoJEIdoGx7jCA5FrR8IANnOF3PUj1TbRcwV6RoWmHsFQHrPmM8ogXia1Lsv
79
jE1iEWoC+muvKh6Oydf90k6ZslS7rdDnp2qzYY8W/TiDkxP+fvsZ4mMi1Y0F+3ty
80
1jzWhcsnB2VrJSiavxEXk0tKPrNv4EUGWG6wHsC9TBj37If+nrMyim94VHvI0eHm
81
X8yMlN4O3HfmgD9CbJdUxueP3e31OIYuwh/6F7GII8TNEVHU/8vh/mQcCxppNbc+
82
boff+kIsoa/TAMLwtJoSrX1nXm0K3vZePRLnIgmwVzdkOIkaRJUG2tSQFvkfhvtE
83
LhnkL5l4MO0wrUds0UWRwa3d7j/P2ExrqXdlLmEzrifWyEQ=
84
=hUJn
85
-----END PGP PUBLIC KEY BLOCK-----
86
""")
87
6728.1.1 by Jelmer Vernooij
Use python-gpg rather than python-gpgme.
88
        secret_key = gpg.Data(b"""-----BEGIN PGP PRIVATE KEY BLOCK-----
5971.1.14 by Jonathan Riddell
add test for set_acceptable_keys, accept non-trusted keys if specified as acceptable, import dummy key in tests so it works outside my machine
89
Version: GnuPG v1.4.11 (GNU/Linux)
90
91
lQOYBE343IgBCADwzPW7kmKb2bjB+UU+1ER/ABMZspvtoZMPusUw7bk6coXHF/0W
92
u1K/hSYeX9xaGOfOQw41r/g13MoR9dsL6L84RLiisf38rRoBZt+d5bCbZA5Xo801
93
2PeoBoGo6u5oOYKAFLMvrUitPiiE0IT/oQTfC4YUrLN4A+9W0QZruPGIpIXwmZXr
94
L0zsqYfNqIN0ompeJenVpKpvm3loJ/zfK7R3EJ3hsv6nkUmWCFsP1Pw3UV1YuCmw
95
Mkdn1U7DaOql1WjXgj9ABQDJrun2TGsqrSRzBODtHKA/uOX0K3VfKBU8VZo3dXUm
96
1Q4ZeZC39L9qJGTH8TQYlwBLe1yAOp+vx7QJABEBAAEAB/0RJTbV991SOtVfPQVu
97
LM+tD0SiOXJwIBIINlngsFHWVIiBSDb6uF8dneMR70IRnuEFHFyAUXA7PZDxvcSu
98
phAqIdKCWxQPkAULAS0o4U2K3ZFGh4uOqvfZ8eSnh1rETFv7Yf3u23K89cZiy99n
99
EtWgSqzC/2z5PaZ7/alsYCBqhHuyd4Phaud7qv7FTz8mFrCf+CCY+D08wbnZBu4g
100
N9tBwoxT/UKRfv3nghIh9v+3qWfBEFGhrYbt92XKFbHOQeATZz8AGIv1eqN/+ZQY
101
oYmvVfO3GkrWaRoPeJNLqSDEn/45O1Uh9MJ4mQclXqB0QzMShle8uusHxIeJSQsR
102
z//VBAD11WS7qSgCeiHR+4jDzrrlb2snnA2bfDToEomDxd/n8xm7nJWdkNfJ2BCw
103
KvnxYVxjFNAwkKJGRajzALBLzRVO+K9NtSLiddv5zv+UNdgsKuE8tD7Jqxd/IbWw
104
AimCtL8osnJ+r9dvL+NyjkAT6l/NdEbLXGrBaMeTfSgl2cBOOwQA+sJIh1R5PiCK
105
nLIs9pm3PSy3w92Peelq/x/+0aebTZaJUk2ou3oCvB3druDqrUeaopuuCc0drV7C
106
Ldoey8x/T2ZGzmT2af9qNaD6ScTimDodXcJdwlpobhZTKpsE4EyywpLXtlWte1x0
107
1Mq3llQsIdRdf3GLS+L207hWgKDiDosD/0SyOBO/IBDteeEzeN2hNE3A8oeVbvRS
108
XrS/3uj6oKmlWUBORYP8ptUrXPoVPmNz2y4GO+OysFtfct3Yqb+Sb/52SXMOHTox
109
2oLW08tkzfkDArU5aauMEPmyutGyJ+hGo7fsuLXzXR8OPw4yZJdzG1tRlP2TTKmq
110
Fx8G/Ik6bN4zTYK0JEJhemFhciBUZXN0IEtleSA8YmF6YWFyQGV4YW1wbGUuY29t
111
PokBOAQTAQIAIgUCTfjciAIbAwYLCQgHAwIGFQgCCQoLBBYCAwECHgECF4AACgkQ
112
h2gbHuMIDkWJUggAwj537fH6WW+GGLA5onys2hZmXUq/tU+L92bjQoRY4fmsQpk/
113
FUVPUf+NQ0v1gkxx4BTfyYewaj5G6L8cvqW2jj7UiJd8z9gTRxWTnYwfR/w5PGmx
114
fJsBfEUKWsccrPQdOXAhwu0fjYIVk4nqgswaIOAZIwe5Vsfs36uSS7p8RQHAZXLX
115
tTOn3KcXHaxu83w6nc4zkWRovGJ9isBN3haO2qEa0mYiAfDpz40CGtb8N/TQHF3X
116
cw8rJcxpg6RF3jMtWQnzbVJFp13it00R3LqWo/r3RII3Ii3z2yARlg6D+5hVOrFB
117
V8jFLkff1R2ZnVu+7WOrnbpmt3OiMkSeZrtBOp0DlwRN+NyIAQgArRZ2YGzUj5dX
118
OVIWgZ1/QFpyfx/cG/293WjRE4Wt2e4SxMf2V0dcVCqWwT0+a79Wbausv4bStD4S
119
kwDmu0Jf3z5ERzrr7oZwP0PMsIlM5zT6XSsr6UUneB3UXX7MrEqVogVhRM0ORIaK
120
/oRwMXr7K6xVT+bCBP3/p66kHtY1ZpfEzTEXimBsN3GqoewBHYIneJKBtHE7uzdz
121
w3O5p5dXqoj5foxGi9R1J15vAmt5pI68HJeXP6ktvXbX2Iu7VDNoCvRXM9+ntyJt
122
sXCjNXg4pTGHS/XO4nm2db4FUZOBcVMb1vCcVtFjLTcbCqJqpoJWUtsLcNqDqMHO
123
QDpe6KTNTQARAQABAAf1EfceUlGLvoA/+yDTNTMjuPfzfKwbB/FOVfX44g3Za1eT
124
v7RvSuj4rFYIdE9UvZEei/pqPOSc+hhSsKZCulGXD5TUpf3AyG7ipWU/kID46Csp
125
0V08DPpFHnuw/N6+qNo5iSnhN9U1XMLjYT5d1HvKur26r2vWbmUTSJ1qIluHL2fT
126
R1pKYYLuoff4MIjZ01Hawq72jjor+dLBmMWveHpq4XNp+vQ4x8aFnY9ozufon0nM
127
uRSJRlQjDNB274tvUbmDFP+nzNbqF1nBTZ6FTdH/iKVNbytiYF7Hbat8GWVZqY1u
128
CZr7BklpIVWlk62ll0psMIPVyANi7YT332LLqYmBBADJKTx2dariG/kWU2W/9VEO
129
2VZpqsqazAxOoFEIOpcOlByhhyw5g0IKu0UyzHkhoCje0cWxpdSBFG432b8zL0AT
130
Z0RycfUG7Sgp9CpY1h8Cc/HbBa8xo1fSM7zplPQrHBqUzlVVBq6HOkUq+7qsPFWc
131
RRie95VsDmIMKQKPJHeYHQQA3EYGit+QHV0dccAInghEsf/mq8Gfnvo6HPYhWcDC
132
DTM39NhNlnl1WkTFCd2TWc+TWQ4KlRsh6bMjUpNa2qjrUl90fLekbogcxxMhcwa6
133
xgzEANZfwqdY0u3aB/CyZ6odfThwcAoeqoMpw34CfeKEroubpi2n8wKByrN2MQXJ
134
4vEEAJbXZOqgAcFAFBUVb5mVT0s2lJMagZFPdhRJz2bttz01s/B8aca6CrDpFRjT
135
03zRFUZjwDYqZDWBC181dCE9yla4OkWd5QyRKSS2EE02KEYqRzT0RngQn7s4AW2r
136
326up3Jhleln3hgD4Kk3V3KHmyK8zqZA0qWzry4Vl2jjkbnAPB2JAR8EGAECAAkF
137
Ak343IgCGwwACgkQh2gbHuMIDkWtHwgA2c4Xc9SPVNtFzBXpGhaYewVAes+YzyiB
138
eJrUuy+MTWIRagL6a68qHo7J1/3STpmyVLut0OenarNhjxb9OIOTE/5++xniYyLV
139
jQX7e3LWPNaFyycHZWslKJq/EReTS0o+s2/gRQZYbrAewL1MGPfsh/6eszKKb3hU
140
e8jR4eZfzIyU3g7cd+aAP0Jsl1TG54/d7fU4hi7CH/oXsYgjxM0RUdT/y+H+ZBwL
141
Gmk1tz5uh9/6Qiyhr9MAwvC0mhKtfWdebQre9l49EuciCbBXN2Q4iRpElQba1JAW
142
+R+G+0QuGeQvmXgw7TCtR2zRRZHBrd3uP8/YTGupd2UuYTOuJ9bIRA==
143
=LXn0
144
-----END PGP PRIVATE KEY BLOCK-----
145
""")
146
6728.1.1 by Jelmer Vernooij
Use python-gpg rather than python-gpgme.
147
        revoked_key = gpg.Data(b"""-----BEGIN PGP PUBLIC KEY BLOCK-----
6043.2.5 by Jonathan Riddell
catch a revoked key and add test for it
148
Version: GnuPG v1.4.11 (GNU/Linux)
149
150
mI0ETjlW5gEEAOb/6P+TVM59E897wRtatxys2BhsHCXM4T7xjIiANfDwejDdifqh
151
tluTfSJLLxPembtrrEjux1C0AJgc+f0MIfsc3Pr3eFJzKB2ot/1IVG1/1KnA0zt3
152
W2xPT3lRib27WJ9Fag+dMtQaIzgJ7/n2DFxsFZ33FD2kxrEXB2exGg6FABEBAAGI
153
pgQgAQIAEAUCTjlXkAkdAHJldm9rZWQACgkQjs6dvEpb0cQPHAP/Wi9rbx0e+1Sf
154
ziGgyVdr3m3A6uvze5oXKVgFRbGRUYSH4/I8GW0W9x4TcRg9h+YaQ8NUdADr9kNE
155
tKAljLqYA5qdqSfYuaij1M++Xj+KUZ359R74sHuQqwnRy1XXQNfRs/QpXA7vLdds
156
rjg+pbWuXO92TZJUdnqtWW+VEyZBsPy0G3Rlc3Qga2V5IDx0ZXN0QGV4YW1wbGUu
157
Y29tPoi4BBMBAgAiBQJOOVbmAhsDBgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAAK
158
CRCOzp28SlvRxNWzA/42WVmI0b+6mF/imEOlY1TiyvrcpK250rkSDsCtL4lOwy7G
159
antZhpgNfnXRd/ySfsS3EB6dpOWgOSxGRvWQhA+vxBT9BYNk49qd3JIrSaSWpR12
160
rET8qO1rEQQFWsw03CxTGujxGlmEO+a1yguRXp2UWaY7FngcQmD+8q7BUIVm7riN
161
BE45VuYBBADTEH2jHTjNCc5CMOhea6EJTrkx3upcEqB2oyhWeSWJiBGOxlcddsjo
162
3J3/EmBB8kK1hM9TidD3SG64x1N287lg8ELJBlKv+pQVyxohGJ1u/THgpTDMMQcL
163
luG5rAHQGSfyzKTiOnaTyBYg3M/nzgUOU9dKEFB0EA3tjUXFOT+r3wARAQABiJ8E
164
GAECAAkFAk45VuYCGwwACgkQjs6dvEpb0cRSLQP/fzCWX2lXwlwWiVF8BOPF7o9z
165
icHErc7/X17RGb4qj1kVf+UkRdUWJrbEVh4h6MncBIuA70WsYogiw+Kz/0LCtQAR
166
YUJsPy/EL++OKPH1aFasOdTxwkTka85+RdYqhP1+z/aYLFMWq6mRFI+o6x2k5mGi
167
7dMv2kKTJPoXUpiXJbg=
168
=hLYO
169
-----END PGP PUBLIC KEY BLOCK-----
170
""")
171
6728.1.1 by Jelmer Vernooij
Use python-gpg rather than python-gpgme.
172
        expired_key = gpg.Data(b"""-----BEGIN PGP PUBLIC KEY BLOCK-----
6043.2.8 by Jonathan Riddell
add test for unknown key
173
Version: GnuPG v1.4.11 (GNU/Linux)
174
175
mI0ETjZ6PAEEALkR4GcFQidCCxV7pgQwQd5MZua0YO2l92fVqHX+PhnZ6egCLKdD
176
2bWlMUd6MLPF3FlRL7BBAxvW/DazkBOp7ljsnpMpptEzY49Uem1irYLYiVb9zK96
177
0sQZzFxFkfEYetQEXC68mIck8tbySOX5NAOw++3jFm3J7dsU1R3XtYzRABEBAAG0
178
G3Rlc3Qga2V5IDx0ZXN0QGV4YW1wbGUuY29tPoi+BBMBAgAoBQJONno8AhsDBQkA
179
AVGABgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAAKCRAc4m97T40VEz+DA/9PBphG
180
Yp9cHVaHSfTUKGTGgIbvRe60sFNpDCYZeAGDrygOMuI8MNzbVpwefRBFHVPx7jWd
181
rrYMsLkcsNUS9D0baU+0D/qp7JVg7ZSQtG0O6IG4eTZhibteY1fu0+unlXmg9NHx
182
5VvhwzBiJDYji00M2p/CZEMiYFUuy76CsxUpN7iNBE42ejwBBACkv2/mX7IPQg0C
183
A3KSrJsJv+sdvKm4b4xuI4OwagwTIVz4KlTqV4IBrVjSBfwyMXucXz0bTW85qjgA
184
+n67td8vyjYYZUEz1uY9lSquQQDnAN0txL3cLHZXWiWOkmzZVddQtlflK2a/J9o0
185
QkHPVUm+hc4l64dIzStrNl2S66fAvQARAQABiKUEGAECAA8FAk42ejwCGwwFCQAB
186
UYAACgkQHOJve0+NFROEYQP/epg+o8iBs31hkSERyZjrRR66LpywezWj30Rn/3mX
187
Fzi9HkF4xLemWOzdNt9C5PYrOep85PQg8haEjknxVjZFS0ikT1h3OWk/TF1ZrLVm
188
WzyX8DaHQEjKpLJJjXcAbTiZBNMk0QaVC9RvIeHpCf3n3DC49DdjsPJRMKOn8KDi
189
kRk=
190
=p0gt
191
-----END PGP PUBLIC KEY BLOCK-----
192
""")
6728.1.1 by Jelmer Vernooij
Use python-gpg rather than python-gpgme.
193
        context.op_import(key)
194
        context.op_import(secret_key)
195
        context.op_import(revoked_key)
196
        context.op_import(expired_key)
5971.1.14 by Jonathan Riddell
add test for set_acceptable_keys, accept non-trusted keys if specified as acceptable, import dummy key in tests so it works outside my machine
197
6043.2.7 by Jonathan Riddell
some reordering of verification, improve names of tests
198
    def test_verify_untrusted_but_accepted(self):
199
        #untrusted by gpg but listed as acceptable_keys by user
6728.1.1 by Jelmer Vernooij
Use python-gpg rather than python-gpgme.
200
        self.requireFeature(features.gpg)
5971.1.35 by Jonathan Riddell
set gpgme in tests.features
201
        self.import_keys()
6372.1.1 by Vincent Ladeuil
Remove spurious spaces.
202
5971.1.9 by Jonathan Riddell
add some tests
203
        content = """-----BEGIN PGP SIGNED MESSAGE-----
204
Hash: SHA1
205
206
bazaar-ng testament short form 1
207
revision-id: amy@example.com-20110527185938-hluafawphszb8dl1
208
sha1: 6411f9bdf6571200357140c9ce7c0f50106ac9a4
209
-----BEGIN PGP SIGNATURE-----
210
Version: GnuPG v1.4.11 (GNU/Linux)
211
5971.1.14 by Jonathan Riddell
add test for set_acceptable_keys, accept non-trusted keys if specified as acceptable, import dummy key in tests so it works outside my machine
212
iQEcBAEBAgAGBQJN+ekFAAoJEIdoGx7jCA5FGtEH/i+XxJRvqU6wdBtLVrGBMAGk
213
FZ5VP+KyXYtymSbgSstj/vM12NeMIeFs3xGnNnYuX1MIcY6We5TKtCH0epY6ym5+
214
6g2Q2QpQ5/sT2d0mWzR0K4uVngmxVQaXTdk5PdZ40O7ULeDLW6CxzxMHyUL1rsIx
215
7UBUTBh1O/1n3ZfD99hUkm3hVcnsN90uTKH59zV9NWwArU0cug60+5eDKJhSJDbG
216
rIwlqbFAjDZ7L/48e+IaYIJwBZFzMBpJKdCxzALLtauMf+KK8hGiL2hrRbWm7ty6
217
NgxfkMYOB4rDPdSstT35N+5uBG3n/UzjxHssi0svMfVETYYX40y57dm2eZQXFp8=
218
=iwsn
5971.1.9 by Jonathan Riddell
add some tests
219
-----END PGP SIGNATURE-----
220
"""
5971.1.31 by Jonathan Riddell
and update tests
221
        plain = """bazaar-ng testament short form 1
222
revision-id: amy@example.com-20110527185938-hluafawphszb8dl1
223
sha1: 6411f9bdf6571200357140c9ce7c0f50106ac9a4
224
"""
5971.1.9 by Jonathan Riddell
add some tests
225
        my_gpg = gpg.GPGStrategy(FakeConfig())
5971.1.14 by Jonathan Riddell
add test for set_acceptable_keys, accept non-trusted keys if specified as acceptable, import dummy key in tests so it works outside my machine
226
        my_gpg.set_acceptable_keys("bazaar@example.com")
5971.1.31 by Jonathan Riddell
and update tests
227
        self.assertEqual((gpg.SIGNATURE_VALID, None), my_gpg.verify(content,
228
                            plain))
5971.1.9 by Jonathan Riddell
add some tests
229
6043.2.7 by Jonathan Riddell
some reordering of verification, improve names of tests
230
    def test_verify_unacceptable_key(self):
6728.1.1 by Jelmer Vernooij
Use python-gpg rather than python-gpgme.
231
        self.requireFeature(features.gpg)
6043.2.4 by Jonathan Riddell
add test for valid_but_unacceptable_key, document tests in verify method
232
        self.import_keys()
6372.1.1 by Vincent Ladeuil
Remove spurious spaces.
233
6043.2.4 by Jonathan Riddell
add test for valid_but_unacceptable_key, document tests in verify method
234
        content = """-----BEGIN PGP SIGNED MESSAGE-----
235
Hash: SHA1
236
237
bazaar-ng testament short form 1
238
revision-id: amy@example.com-20110527185938-hluafawphszb8dl1
239
sha1: 6411f9bdf6571200357140c9ce7c0f50106ac9a4
240
-----BEGIN PGP SIGNATURE-----
241
Version: GnuPG v1.4.11 (GNU/Linux)
242
243
iQEcBAEBAgAGBQJN+ekFAAoJEIdoGx7jCA5FGtEH/i+XxJRvqU6wdBtLVrGBMAGk
244
FZ5VP+KyXYtymSbgSstj/vM12NeMIeFs3xGnNnYuX1MIcY6We5TKtCH0epY6ym5+
245
6g2Q2QpQ5/sT2d0mWzR0K4uVngmxVQaXTdk5PdZ40O7ULeDLW6CxzxMHyUL1rsIx
246
7UBUTBh1O/1n3ZfD99hUkm3hVcnsN90uTKH59zV9NWwArU0cug60+5eDKJhSJDbG
247
rIwlqbFAjDZ7L/48e+IaYIJwBZFzMBpJKdCxzALLtauMf+KK8hGiL2hrRbWm7ty6
248
NgxfkMYOB4rDPdSstT35N+5uBG3n/UzjxHssi0svMfVETYYX40y57dm2eZQXFp8=
249
=iwsn
250
-----END PGP SIGNATURE-----
251
"""
252
        plain = """bazaar-ng testament short form 1
253
revision-id: amy@example.com-20110527185938-hluafawphszb8dl1
254
sha1: 6411f9bdf6571200357140c9ce7c0f50106ac9a4
255
"""
256
        my_gpg = gpg.GPGStrategy(FakeConfig())
257
        my_gpg.set_acceptable_keys("foo@example.com")
258
        self.assertEqual((gpg.SIGNATURE_KEY_MISSING, u'E3080E45'),
259
                         my_gpg.verify(content, plain))
260
6043.2.6 by Jonathan Riddell
catch untrusted keys and add test
261
    def test_verify_valid_but_untrusted(self):
6728.1.1 by Jelmer Vernooij
Use python-gpg rather than python-gpgme.
262
        self.requireFeature(features.gpg)
6043.2.6 by Jonathan Riddell
catch untrusted keys and add test
263
        self.import_keys()
6372.1.1 by Vincent Ladeuil
Remove spurious spaces.
264
6043.2.6 by Jonathan Riddell
catch untrusted keys and add test
265
        content = """-----BEGIN PGP SIGNED MESSAGE-----
266
Hash: SHA1
267
268
bazaar-ng testament short form 1
269
revision-id: amy@example.com-20110527185938-hluafawphszb8dl1
270
sha1: 6411f9bdf6571200357140c9ce7c0f50106ac9a4
271
-----BEGIN PGP SIGNATURE-----
272
Version: GnuPG v1.4.11 (GNU/Linux)
273
274
iQEcBAEBAgAGBQJN+ekFAAoJEIdoGx7jCA5FGtEH/i+XxJRvqU6wdBtLVrGBMAGk
275
FZ5VP+KyXYtymSbgSstj/vM12NeMIeFs3xGnNnYuX1MIcY6We5TKtCH0epY6ym5+
276
6g2Q2QpQ5/sT2d0mWzR0K4uVngmxVQaXTdk5PdZ40O7ULeDLW6CxzxMHyUL1rsIx
277
7UBUTBh1O/1n3ZfD99hUkm3hVcnsN90uTKH59zV9NWwArU0cug60+5eDKJhSJDbG
278
rIwlqbFAjDZ7L/48e+IaYIJwBZFzMBpJKdCxzALLtauMf+KK8hGiL2hrRbWm7ty6
279
NgxfkMYOB4rDPdSstT35N+5uBG3n/UzjxHssi0svMfVETYYX40y57dm2eZQXFp8=
280
=iwsn
281
-----END PGP SIGNATURE-----
282
"""
283
        plain = """bazaar-ng testament short form 1
284
revision-id: amy@example.com-20110527185938-hluafawphszb8dl1
285
sha1: 6411f9bdf6571200357140c9ce7c0f50106ac9a4
286
"""
287
        my_gpg = gpg.GPGStrategy(FakeConfig())
288
        self.assertEqual((gpg.SIGNATURE_NOT_VALID, None), my_gpg.verify(content,
289
                            plain))
290
5971.1.32 by Jonathan Riddell
test for signing incorrect commit content
291
    def test_verify_bad_testament(self):
6728.1.1 by Jelmer Vernooij
Use python-gpg rather than python-gpgme.
292
        self.requireFeature(features.gpg)
5971.1.35 by Jonathan Riddell
set gpgme in tests.features
293
        self.import_keys()
6372.1.1 by Vincent Ladeuil
Remove spurious spaces.
294
5971.1.32 by Jonathan Riddell
test for signing incorrect commit content
295
        content = """-----BEGIN PGP SIGNED MESSAGE-----
296
Hash: SHA1
297
298
bazaar-ng testament short form 1
299
revision-id: amy@example.com-20110527185938-hluafawphszb8dl1
300
sha1: 6411f9bdf6571200357140c9ce7c0f50106ac9a4
301
-----BEGIN PGP SIGNATURE-----
302
Version: GnuPG v1.4.11 (GNU/Linux)
303
304
iQEcBAEBAgAGBQJN+ekFAAoJEIdoGx7jCA5FGtEH/i+XxJRvqU6wdBtLVrGBMAGk
305
FZ5VP+KyXYtymSbgSstj/vM12NeMIeFs3xGnNnYuX1MIcY6We5TKtCH0epY6ym5+
306
6g2Q2QpQ5/sT2d0mWzR0K4uVngmxVQaXTdk5PdZ40O7ULeDLW6CxzxMHyUL1rsIx
307
7UBUTBh1O/1n3ZfD99hUkm3hVcnsN90uTKH59zV9NWwArU0cug60+5eDKJhSJDbG
308
rIwlqbFAjDZ7L/48e+IaYIJwBZFzMBpJKdCxzALLtauMf+KK8hGiL2hrRbWm7ty6
309
NgxfkMYOB4rDPdSstT35N+5uBG3n/UzjxHssi0svMfVETYYX40y57dm2eZQXFp8=
310
=iwsn
311
-----END PGP SIGNATURE-----
312
"""
313
        plain = """bazaar-ng testament short form 1
314
revision-id: doctor@example.com-20110527185938-hluafawphszb8dl1
315
sha1: 6411f9bdf6571200357140c9ce7c0f50106ac9a4
316
"""
317
        my_gpg = gpg.GPGStrategy(FakeConfig())
318
        my_gpg.set_acceptable_keys("bazaar@example.com")
319
        self.assertEqual((gpg.SIGNATURE_NOT_VALID, None), my_gpg.verify(content,
320
                            plain))
321
6043.2.5 by Jonathan Riddell
catch a revoked key and add test for it
322
323
    def test_verify_revoked_signature(self):
6728.1.1 by Jelmer Vernooij
Use python-gpg rather than python-gpgme.
324
        self.requireFeature(features.gpg)
6043.2.5 by Jonathan Riddell
catch a revoked key and add test for it
325
        self.import_keys()
6372.1.1 by Vincent Ladeuil
Remove spurious spaces.
326
6043.2.5 by Jonathan Riddell
catch a revoked key and add test for it
327
        content = """-----BEGIN PGP SIGNED MESSAGE-----
328
Hash: SHA1
329
330
asdf
331
-----BEGIN PGP SIGNATURE-----
332
Version: GnuPG v1.4.11 (GNU/Linux)
333
334
iJwEAQECAAYFAk45V18ACgkQjs6dvEpb0cSIZQP/eOGTXGPlrNwvDkcX2d8O///I
335
ecB4sUIUEpv1XAk1MkNu58lsjjK72lRaLusEGqd7HwrFmpxVeVs0oWLg23PNPCFs
336
yJBID9ma+VxFVPtkEFnrc1R72sBJLfBcTxMkwVTC8eeznjdtn+cg+aLkxbPdrGnr
337
JFA6kUIJU2w9LU/b88Y=
338
=UuRX
339
-----END PGP SIGNATURE-----
340
"""
341
        plain = """asdf\n"""
342
        my_gpg = gpg.GPGStrategy(FakeConfig())
343
        my_gpg.set_acceptable_keys("test@example.com")
344
        self.assertEqual((gpg.SIGNATURE_NOT_VALID, None), my_gpg.verify(content,
345
                            plain))
346
5971.1.9 by Jonathan Riddell
add some tests
347
    def test_verify_invalid(self):
6728.1.1 by Jelmer Vernooij
Use python-gpg rather than python-gpgme.
348
        self.requireFeature(features.gpg)
6123.6.1 by Jonathan Riddell
ensure all tests using gpg keys run self.import_keys() first
349
        self.import_keys()
5971.1.9 by Jonathan Riddell
add some tests
350
        content = """-----BEGIN PGP SIGNED MESSAGE-----
351
Hash: SHA1
352
353
bazaar-ng testament short form 1
354
revision-id: amy@example.com-20110527185938-hluafawphszb8dl1
355
sha1: 6411f9bdf6571200357140c9ce7c0f50106ac9a4
356
-----BEGIN PGP SIGNATURE-----
357
Version: GnuPG v1.4.11 (GNU/Linux)
358
359
iEYEARECAAYFAk33gYsACgkQpQbm1N1NUIhiDACglOuQDlnSF4NxfHSkN/zrmFy8
360
nswAoNGXAVuR9ONasAKIGBNUE0b+lols
361
=SOuC
362
-----END PGP SIGNATURE-----
363
"""
5971.1.31 by Jonathan Riddell
and update tests
364
        plain = """bazaar-ng testament short form 1
365
revision-id: amy@example.com-20110527185938-hluafawphszb8dl1
366
sha1: 6411f9bdf6571200357140c9ce7c0f50106ac9a4
367
"""
5971.1.9 by Jonathan Riddell
add some tests
368
        my_gpg = gpg.GPGStrategy(FakeConfig())
5971.1.22 by Jonathan Riddell
fix tests
369
        self.assertEqual((gpg.SIGNATURE_NOT_VALID, None),
5971.1.31 by Jonathan Riddell
and update tests
370
                            my_gpg.verify(content, plain))
5971.1.9 by Jonathan Riddell
add some tests
371
6043.2.8 by Jonathan Riddell
add test for unknown key
372
    def test_verify_expired_but_valid(self):
6728.1.1 by Jelmer Vernooij
Use python-gpg rather than python-gpgme.
373
        self.requireFeature(features.gpg)
6123.6.1 by Jonathan Riddell
ensure all tests using gpg keys run self.import_keys() first
374
        self.import_keys()
6043.2.8 by Jonathan Riddell
add test for unknown key
375
        content = """-----BEGIN PGP SIGNED MESSAGE-----
376
Hash: SHA1
377
 
378
bazaar-ng testament short form 1
379
revision-id: test@example.com-20110801100657-f1dr1nompeex723z
380
sha1: 59ab434be4c2d5d646dee84f514aa09e1b72feeb
381
-----BEGIN PGP SIGNATURE-----
382
Version: GnuPG v1.4.10 (GNU/Linux)
383
 
384
iJwEAQECAAYFAk42esUACgkQHOJve0+NFRPc5wP7BoZkzBU8JaHMLv/LmqLr0sUz
385
zuE51ofZZ19L7KVtQWsOi4jFy0fi4A5TFwO8u9SOfoREGvkw292Uty9subSouK5/
386
mFmDOYPQ+O83zWgYZsBmMJWYDZ+X9I6XXZSbPtV/7XyTjaxtl5uRnDVJjg+AzKvD
387
dTp8VatVVrwuvzOPDVc=
388
=uHen
389
-----END PGP SIGNATURE-----
390
"""
391
        plain = """bazaar-ng testament short form 1
392
revision-id: test@example.com-20110801100657-f1dr1nompeex723z
393
sha1: 59ab434be4c2d5d646dee84f514aa09e1b72feeb
394
"""
395
        my_gpg = gpg.GPGStrategy(FakeConfig())
6043.3.2 by Jonathan Riddell
update test
396
        self.assertEqual((gpg.SIGNATURE_EXPIRED, u'4F8D1513'),
6043.2.8 by Jonathan Riddell
add test for unknown key
397
                            my_gpg.verify(content, plain))
398
399
    def test_verify_unknown_key(self):
6728.1.1 by Jelmer Vernooij
Use python-gpg rather than python-gpgme.
400
        self.requireFeature(features.gpg)
6123.6.1 by Jonathan Riddell
ensure all tests using gpg keys run self.import_keys() first
401
        self.import_keys()
6043.2.8 by Jonathan Riddell
add test for unknown key
402
        content = """-----BEGIN PGP SIGNED MESSAGE-----
403
Hash: SHA1
404
405
asdf
406
-----BEGIN PGP SIGNATURE-----
407
Version: GnuPG v1.4.11 (GNU/Linux)
408
409
iQEcBAEBAgAGBQJOORKwAAoJENf6AkFdUeVvJDYH/1Cz+AJn1Jvy5n64o+0fZ5Ow
410
Y7UQb4QQTIOV7jI7n4hv/yBzuHrtImFzYvQl/o2Ezzi8B8L5gZtQy+xCUF+Q8iWs
411
gytZ5JUtSze7hDZo1NUl4etjoRGYqRfrUcvE2LkVH2dFbDGyyQfVmoeSHa5akuuP
412
QZmyg2F983rACVIpGvsqTH6RcBdvE9vx68lugeKQA8ArDn39/74FBFipFzrXSPij
413
eKFpl+yZmIb3g6HkPIC8o4j/tMvc37xF1OG5sBu8FT0+FC+VgY7vAblneDftAbyP
414
sIODx4WcfJtjLG/qkRYqJ4gDHo0eMpTJSk2CWebajdm4b+JBrM1F9mgKuZFLruE=
415
=RNR5
416
-----END PGP SIGNATURE-----
417
"""
418
        plain = "asdf\n"
419
        my_gpg = gpg.GPGStrategy(FakeConfig())
420
        self.assertEqual((gpg.SIGNATURE_KEY_MISSING, u'5D51E56F'),
421
                            my_gpg.verify(content, plain))
422
5971.1.11 by Jonathan Riddell
add set_acceptable_keys() so user can specify which gpg keys can be used for verification
423
    def test_set_acceptable_keys(self):
6728.1.1 by Jelmer Vernooij
Use python-gpg rather than python-gpgme.
424
        self.requireFeature(features.gpg)
5971.1.35 by Jonathan Riddell
set gpgme in tests.features
425
        self.import_keys()
5971.1.11 by Jonathan Riddell
add set_acceptable_keys() so user can specify which gpg keys can be used for verification
426
        my_gpg = gpg.GPGStrategy(FakeConfig())
5971.1.14 by Jonathan Riddell
add test for set_acceptable_keys, accept non-trusted keys if specified as acceptable, import dummy key in tests so it works outside my machine
427
        my_gpg.set_acceptable_keys("bazaar@example.com")
5971.1.11 by Jonathan Riddell
add set_acceptable_keys() so user can specify which gpg keys can be used for verification
428
        self.assertEqual(my_gpg.acceptable_keys,
5971.1.14 by Jonathan Riddell
add test for set_acceptable_keys, accept non-trusted keys if specified as acceptable, import dummy key in tests so it works outside my machine
429
                         [u'B5DEED5FCB15DAE6ECEF919587681B1EE3080E45'])
5971.1.11 by Jonathan Riddell
add set_acceptable_keys() so user can specify which gpg keys can be used for verification
430
6589.3.1 by Vincent Ladeuil
Fix command line override handling for acceptable_keys
431
    def test_set_acceptable_keys_from_config(self):
6728.1.1 by Jelmer Vernooij
Use python-gpg rather than python-gpgme.
432
        self.requireFeature(features.gpg)
6589.3.1 by Vincent Ladeuil
Fix command line override handling for acceptable_keys
433
        self.import_keys()
434
        my_gpg = gpg.GPGStrategy(FakeConfig(
435
                'acceptable_keys=bazaar@example.com'))
436
        my_gpg.set_acceptable_keys(None)
437
        self.assertEqual(my_gpg.acceptable_keys,
438
                         [u'B5DEED5FCB15DAE6ECEF919587681B1EE3080E45'])
439
5971.1.11 by Jonathan Riddell
add set_acceptable_keys() so user can specify which gpg keys can be used for verification
440
    def test_set_acceptable_keys_unknown(self):
6728.1.1 by Jelmer Vernooij
Use python-gpg rather than python-gpgme.
441
        self.requireFeature(features.gpg)
5971.1.11 by Jonathan Riddell
add set_acceptable_keys() so user can specify which gpg keys can be used for verification
442
        my_gpg = gpg.GPGStrategy(FakeConfig())
6123.1.16 by Jelmer Vernooij
Add test.
443
        self.notes = []
444
        def note(*args):
445
            self.notes.append(args[0] % args[1:])
446
        self.overrideAttr(trace, 'note', note)
5971.1.11 by Jonathan Riddell
add set_acceptable_keys() so user can specify which gpg keys can be used for verification
447
        my_gpg.set_acceptable_keys("unknown")
448
        self.assertEqual(my_gpg.acceptable_keys, [])
6123.1.16 by Jelmer Vernooij
Add test.
449
        self.assertEqual(self.notes,
450
            ['No GnuPG key results for pattern: unknown'])
5971.1.35 by Jonathan Riddell
set gpgme in tests.features
451
5971.1.11 by Jonathan Riddell
add set_acceptable_keys() so user can specify which gpg keys can be used for verification
452
1442.1.62 by Robert Collins
Allow creation of testaments from uncommitted data, and use that to get signatures before committing revisions.
453
class TestDisabled(TestCase):
454
455
    def test_sign(self):
6728.1.2 by Jelmer Vernooij
Sign using python-gpg rather than command-line gpg.
456
        self.assertRaises(gpg.SigningFailed,
1442.1.62 by Robert Collins
Allow creation of testaments from uncommitted data, and use that to get signatures before committing revisions.
457
                          gpg.DisabledGPGStrategy(None).sign, 'content')
5971.1.8 by Jonathan Riddell
start adding test cases
458
459
    def test_verify(self):
6728.1.2 by Jelmer Vernooij
Sign using python-gpg rather than command-line gpg.
460
        self.assertRaises(gpg.SignatureVerificationFailed,
5971.1.31 by Jonathan Riddell
and update tests
461
                          gpg.DisabledGPGStrategy(None).verify, 'content',
462
                          'testament')