Make public catalog only enabled via a feature flag
This commit is contained in:
parent
f44df49236
commit
555041876d
3 changed files with 53 additions and 30 deletions
|
@ -1802,44 +1802,60 @@ 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):
|
||||
def test_normal_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)
|
||||
with TestFeature(self, 'PUBLIC_CATALOG', False):
|
||||
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')
|
||||
all_repos = []
|
||||
|
||||
# Perform auth and lookup the catalog again.
|
||||
self.do_auth('devtable', 'password', 'devtable', 'simple')
|
||||
all_repos = []
|
||||
response = self.conduct('GET', '/v2/_catalog', params=dict(n=2), auth='jwt')
|
||||
data = response.json()
|
||||
self.assertEquals(len(data['repositories']), 2)
|
||||
|
||||
response = self.conduct('GET', '/v2/_catalog', params=dict(n=2), auth='jwt')
|
||||
data = response.json()
|
||||
self.assertEquals(len(data['repositories']), 2)
|
||||
all_repos.extend(data['repositories'])
|
||||
def test_public_catalog(self):
|
||||
# Look for public repositories and ensure all are public.
|
||||
with TestFeature(self, 'PUBLIC_CATALOG', True):
|
||||
response = self.conduct('GET', '/v2/_catalog')
|
||||
data = response.json()
|
||||
self.assertTrue(len(data['repositories']) > 0)
|
||||
|
||||
# Ensure we have a next link.
|
||||
self.assertIsNotNone(response.headers.get('Link'))
|
||||
for reponame in data['repositories']:
|
||||
self.assertTrue(reponame.find('public/') == 0)
|
||||
|
||||
# Request with the next link.
|
||||
while response.headers.get('Link'):
|
||||
link_url = response.headers.get('Link')[1:].split(';')[0][:-1]
|
||||
v2_index = link_url.find('/v2/')
|
||||
relative_url = link_url[v2_index:]
|
||||
# Perform auth and lookup the catalog again.
|
||||
self.do_auth('devtable', 'password', 'devtable', 'simple')
|
||||
all_repos = []
|
||||
|
||||
next_response = self.conduct('GET', relative_url, auth='jwt')
|
||||
next_data = next_response.json()
|
||||
all_repos.extend(next_data['repositories'])
|
||||
response = self.conduct('GET', '/v2/_catalog', params=dict(n=2), auth='jwt')
|
||||
data = response.json()
|
||||
self.assertEquals(len(data['repositories']), 2)
|
||||
all_repos.extend(data['repositories'])
|
||||
|
||||
self.assertTrue(len(next_data['repositories']) <= 2)
|
||||
self.assertNotEquals(next_data['repositories'], data['repositories'])
|
||||
response = next_response
|
||||
# Ensure we have a next link.
|
||||
self.assertIsNotNone(response.headers.get('Link'))
|
||||
|
||||
# Ensure the authed request has the public repository.
|
||||
public = [reponame for reponame in all_repos if reponame.find('/publicrepo') >= 0]
|
||||
self.assertTrue(bool(public))
|
||||
# Request with the next link.
|
||||
while response.headers.get('Link'):
|
||||
link_url = response.headers.get('Link')[1:].split(';')[0][:-1]
|
||||
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()
|
||||
all_repos.extend(next_data['repositories'])
|
||||
|
||||
self.assertTrue(len(next_data['repositories']) <= 2)
|
||||
self.assertNotEquals(next_data['repositories'], data['repositories'])
|
||||
response = next_response
|
||||
|
||||
# Ensure the authed request has the public repository.
|
||||
public = [reponame for reponame in all_repos if reponame.find('/publicrepo') >= 0]
|
||||
self.assertTrue(bool(public))
|
||||
|
||||
|
||||
class V1PushV2PullRegistryTests(V2RegistryPullMixin, V1RegistryPushMixin, RegistryTestsMixin,
|
||||
|
|
Reference in a new issue