Merge pull request #2680 from coreos-inc/catalog-fixes
Various small catalog fixes
This commit is contained in:
		
						commit
						51a952d50c
					
				
					 4 changed files with 54 additions and 31 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