74
77
def submit(self, service):
75
78
self._service_url = service.service_url
79
self._submitted = True
76
80
return self._result
83
class LocalDirectoryURLTests(TestCaseInTempDir):
84
"""Tests for branch urls that we try to pass through local resolution."""
86
def assertResolve(self, expected, url, submitted=False):
87
path = url[url.index(':')+1:].lstrip('/')
88
factory = FakeResolveFactory(self, path,
89
dict(urls=['bzr+ssh://fake-resolved']))
90
directory = LaunchpadDirectory()
91
self.assertEqual(expected,
92
directory._resolve(url, factory, _lp_login='user'))
93
# We are testing local resolution, and the fallback when necessary.
94
self.assertEqual(submitted, factory._submitted)
96
def test_short_form(self):
97
self.assertResolve('bzr+ssh://bazaar.launchpad.net/+branch/apt',
100
def test_two_part_form(self):
101
self.assertResolve('bzr+ssh://bazaar.launchpad.net/+branch/apt/2.2',
104
def test_two_part_plus_subdir(self):
105
# We allow you to pass more than just what resolves. That way you can
106
# do things like "bzr log lp:apt/2.2/BUGS"
107
# Though the virtual FS implementation currently aborts when given a
108
# URL like this, rather than letting you recurse upwards to find the
109
# real branch at lp:apt/2.2
110
self.assertResolve('bzr+ssh://bazaar.launchpad.net/+branch/apt/2.2/BUGS',
113
def test_user_expansion(self):
114
self.assertResolve('bzr+ssh://bazaar.launchpad.net/~user/apt/foo',
117
def test_ubuntu(self):
118
# Confirmed against xmlrpc. If you don't have a ~user, xmlrpc doesn't
119
# care that you are asking for 'ubuntu'
120
self.assertResolve('bzr+ssh://bazaar.launchpad.net/+branch/ubuntu',
123
def test_ubuntu_apt(self):
124
self.assertResolve('bzr+ssh://bazaar.launchpad.net/+branch/ubuntu/apt',
127
def test_ubuntu_natty_apt(self):
129
'bzr+ssh://bazaar.launchpad.net/+branch/ubuntu/natty/apt',
130
'lp:ubuntu/natty/apt')
132
def test_ubuntu_natty_apt_filename(self):
134
'bzr+ssh://bazaar.launchpad.net/+branch/ubuntu/natty/apt/filename',
135
'lp:ubuntu/natty/apt/filename')
137
def test_user_two_part(self):
138
# We fall back to the ResolveFactory. The real Launchpad one will raise
139
# InvalidURL for this case.
140
self.assertResolve('bzr+ssh://fake-resolved', 'lp:~jameinel/apt',
143
def test_user_three_part(self):
144
self.assertResolve('bzr+ssh://bazaar.launchpad.net/~jameinel/apt/foo',
145
'lp:~jameinel/apt/foo')
147
def test_user_three_part_plus_filename(self):
149
'bzr+ssh://bazaar.launchpad.net/~jameinel/apt/foo/fname',
150
'lp:~jameinel/apt/foo/fname')
152
def test_user_ubuntu_two_part(self):
153
self.assertResolve('bzr+ssh://fake-resolved', 'lp:~jameinel/ubuntu',
155
self.assertResolve('bzr+ssh://fake-resolved', 'lp:~jameinel/debian',
158
def test_user_ubuntu_three_part(self):
159
self.assertResolve('bzr+ssh://fake-resolved',
160
'lp:~jameinel/ubuntu/natty', submitted=True)
161
self.assertResolve('bzr+ssh://fake-resolved',
162
'lp:~jameinel/debian/sid', submitted=True)
164
def test_user_ubuntu_four_part(self):
165
self.assertResolve('bzr+ssh://fake-resolved',
166
'lp:~jameinel/ubuntu/natty/project', submitted=True)
167
self.assertResolve('bzr+ssh://fake-resolved',
168
'lp:~jameinel/debian/sid/project', submitted=True)
170
def test_user_ubuntu_five_part(self):
172
'bzr+ssh://bazaar.launchpad.net/~jameinel/ubuntu/natty/apt/branch',
173
'lp:~jameinel/ubuntu/natty/apt/branch')
175
'bzr+ssh://bazaar.launchpad.net/~jameinel/debian/sid/apt/branch',
176
'lp:~jameinel/debian/sid/apt/branch')
178
def test_user_ubuntu_five_part_plus_subdir(self):
180
'bzr+ssh://bazaar.launchpad.net/~jameinel/ubuntu/natty/apt/branch/f',
181
'lp:~jameinel/ubuntu/natty/apt/branch/f')
183
'bzr+ssh://bazaar.launchpad.net/~jameinel/debian/sid/apt/branch/f',
184
'lp:~jameinel/debian/sid/apt/branch/f')
186
def test_handles_special_lp(self):
187
self.assertResolve('bzr+ssh://bazaar.launchpad.net/+branch/apt', 'lp:apt')
188
self.assertResolve('bzr+ssh://bazaar.launchpad.net/+branch/apt',
190
self.assertResolve('bzr+ssh://bazaar.launchpad.net/+branch/apt',
191
'lp://production/apt')
192
self.assertResolve('bzr+ssh://bazaar.launchpad.dev/+branch/apt',
194
self.assertResolve('bzr+ssh://bazaar.staging.launchpad.net/+branch/apt',
196
self.assertResolve('bzr+ssh://bazaar.qastaging.launchpad.net/+branch/apt',
197
'lp://qastaging/apt')
198
self.assertResolve('bzr+ssh://bazaar.demo.launchpad.net/+branch/apt',
201
def test_debug_launchpad_uses_resolver(self):
202
self.assertResolve('bzr+ssh://bazaar.launchpad.net/+branch/bzr',
203
'lp:bzr', submitted=False)
204
debug.debug_flags.add('launchpad')
205
self.addCleanup(debug.debug_flags.discard, 'launchpad')
206
self.assertResolve('bzr+ssh://fake-resolved', 'lp:bzr', submitted=True)
79
209
class DirectoryUrlTests(TestCaseInTempDir):
80
210
"""Tests for branch urls through Launchpad.net directory"""
180
310
self.assertEquals('http://bazaar.launchpad.net/~apt/apt/devel',
181
311
directory._resolve('lp:///apt', factory))
183
def test_rewrite_bzr_ssh_launchpad_net(self):
313
def test_with_login_avoid_resolve_factory(self):
184
314
# Test that bzr+ssh URLs get rewritten to include the user's
185
315
# Launchpad ID (assuming we know the Launchpad ID).
186
316
factory = FakeResolveFactory(
187
317
self, 'apt', dict(urls=[
188
'bzr+ssh://bazaar.launchpad.net/~apt/apt/devel',
318
'bzr+ssh://my-super-custom/special/devel',
189
319
'http://bazaar.launchpad.net/~apt/apt/devel']))
190
320
directory = LaunchpadDirectory()
191
321
self.assertEquals(
192
'bzr+ssh://bazaar.launchpad.net/~apt/apt/devel',
322
'bzr+ssh://bazaar.launchpad.net/+branch/apt',
193
323
directory._resolve('lp:///apt', factory, _lp_login='username'))
195
325
def test_no_rewrite_of_other_bzr_ssh(self):