Merge pull request #1217 from coreos-inc/v2pagination
Fix V2 catalog and tag pagination
This commit is contained in:
commit
81a36ee3b8
7 changed files with 105 additions and 38 deletions
|
@ -486,10 +486,12 @@ class V2RegistryMixin(BaseRegistryMixin):
|
|||
|
||||
params = {
|
||||
'account': username,
|
||||
'scope': 'repository:%s:%s' % (repo_name, ','.join(scopes)),
|
||||
'service': app.config['SERVER_HOSTNAME'],
|
||||
}
|
||||
|
||||
if scopes:
|
||||
params['scope'] = 'repository:%s:%s' % (repo_name, ','.join(scopes))
|
||||
|
||||
response = self.conduct('GET', '/v2/auth', params=params, auth=auth,
|
||||
expected_code=expected_code)
|
||||
|
||||
|
@ -1315,7 +1317,6 @@ class V2RegistryTests(V2RegistryPullMixin, V2RegistryPushMixin, RegistryTestsMix
|
|||
data = json.loads(response.text)
|
||||
self.assertEquals(data['name'], "devtable/newrepo")
|
||||
self.assertEquals(len(data['tags']), 1)
|
||||
self.assertTrue(response.headers['Link'].find('n=1&last=2') > 0)
|
||||
|
||||
# Try to get tags before a repo exists.
|
||||
self.conduct('GET', '/v2/devtable/doesnotexist/tags/list', auth='jwt', expected_code=401)
|
||||
|
@ -1323,6 +1324,36 @@ class V2RegistryTests(V2RegistryPullMixin, V2RegistryPushMixin, RegistryTestsMix
|
|||
def test_one_five_blacklist(self):
|
||||
self.conduct('GET', '/v2/', expected_code=404, user_agent='Go 1.1 package http')
|
||||
|
||||
def test_catalog(self):
|
||||
# Look for public repositories and ensure all are public.
|
||||
response = self.conduct('GET', '/v2/_catalog')
|
||||
data = response.json()
|
||||
self.assertTrue(len(data['repositories']) > 0)
|
||||
|
||||
for reponame in data['repositories']:
|
||||
self.assertTrue(reponame.find('public/') == 0)
|
||||
|
||||
# Perform auth and lookup the catalog again.
|
||||
self.do_auth('devtable', 'password', 'devtable', 'simple')
|
||||
|
||||
response = self.conduct('GET', '/v2/_catalog', params=dict(n=2), auth='jwt')
|
||||
data = response.json()
|
||||
self.assertEquals(len(data['repositories']), 2)
|
||||
|
||||
# Ensure we have a next link.
|
||||
self.assertIsNotNone(response.headers.get('Link'))
|
||||
|
||||
# Request with the next link.
|
||||
link_url = response.headers.get('Link').split(';')[0]
|
||||
v2_index = link_url.find('/v2/')
|
||||
relative_url = link_url[v2_index:]
|
||||
|
||||
next_response = self.conduct('GET', relative_url, auth='jwt')
|
||||
next_data = next_response.json()
|
||||
|
||||
self.assertEquals(len(next_data['repositories']), 2)
|
||||
self.assertNotEquals(next_data['repositories'], data['repositories'])
|
||||
|
||||
|
||||
class V1PushV2PullRegistryTests(V2RegistryPullMixin, V1RegistryPushMixin, RegistryTestsMixin,
|
||||
RegistryTestCaseMixin, LiveServerTestCase):
|
||||
|
|
Reference in a new issue