def setUpClass(cls): """Create a Puppet repository.""" super(DuplicateUploadsTestCase, cls).setUpClass() unit = utils.http_get(PUPPET_MODULE_URL) unit_type_id = 'puppet_module' client = api.Client(cls.cfg, api.json_handler) repo_href = client.post(REPOSITORY_PATH, gen_repo())['_href'] cls.resources.add(repo_href) cls.upload_import_unit_args = (cls.cfg, unit, unit_type_id, repo_href)
def setUpClass(cls): """Create repository with the feed pointing to a valid manifest.""" super(SyncValidManifestFeedTestCase, cls).setUpClass() client = api.Client(cls.cfg) body = gen_repo() body['importer_config'] = { 'feed': 'http://repos.fedorapeople.org/repos/pulp/pulp/demo_repos/puppet_manifest/modules/' # noqa pylint:disable=line-too-long } repo = client.post(REPOSITORY_PATH, body).json() cls.resources.add(repo['_href']) # Trigger a repository sync and collect completed tasks. cls.report = utils.sync_repo(cls.cfg, repo['_href']) cls.tasks = list(api.poll_spawned_tasks(cls.cfg, cls.report.json()))
def setUpClass(cls): """Create a puppet repository with an invalid feed and sync it.""" super(SyncInvalidFeedTestCase, cls).setUpClass() client = api.Client(cls.cfg, api.json_handler) body = gen_repo() body['importer_config'] = {'feed': 'http://' + utils.uuid4()} repo = client.post(REPOSITORY_PATH, body) cls.resources.add(repo['_href']) # Trigger a repository sync and collect completed tasks. client.response_handler = api.echo_handler cls.report = client.post(urljoin(repo['_href'], 'actions/sync/')) cls.report.raise_for_status() cls.tasks = list(api.poll_spawned_tasks(cls.cfg, cls.report.json()))
def setUpClass(cls): """Create two puppet repositories, with and without feed URLs.""" super(CreateTestCase, cls).setUpClass() cls.bodies = tuple((gen_repo() for _ in range(2))) cls.bodies[1]['importer_config'] = { 'feed': 'http://' + utils.uuid4(), # Pulp checks for a URI scheme 'queries': [PUPPET_QUERY], } client = api.Client(cls.cfg, api.json_handler) cls.repos = [] cls.importers_iter = [] for body in cls.bodies: repo = client.post(REPOSITORY_PATH, body) cls.resources.add(repo['_href']) cls.repos.append(repo) cls.importers_iter.append(client.get(repo['_href'] + 'importers/'))
def setUpClass(cls): """Create and sync two puppet repositories.""" super(SyncValidFeedTestCase, cls).setUpClass() utils.reset_pulp(cls.cfg) # See: https://pulp.plan.io/issues/1406 bodies = tuple((gen_repo() for _ in range(2))) for i, query in enumerate(( PUPPET_QUERY, PUPPET_QUERY.replace('-', '_'))): bodies[i]['importer_config'] = { 'feed': PUPPET_FEED, 'queries': [query], } client = api.Client(cls.cfg, api.json_handler) repos = [client.post(REPOSITORY_PATH, body) for body in bodies] cls.resources.update({repo['_href'] for repo in repos}) # Trigger repository sync and collect completed tasks. cls.reports = [] # raw responses to "start syncing" commands cls.tasks = [] # completed tasks for repo in repos: report = utils.sync_repo(cls.cfg, repo['_href']) cls.reports.append(report) for task in api.poll_spawned_tasks(cls.cfg, report.json()): cls.tasks.append(task)
def setUpClass(cls): """Create and sync two puppet repositories.""" super(SyncValidFeedTestCase, cls).setUpClass() utils.reset_pulp(cls.cfg) # See: https://pulp.plan.io/issues/1406 bodies = tuple((gen_repo() for _ in range(2))) for i, query in enumerate( (PUPPET_QUERY, PUPPET_QUERY.replace('-', '_'))): bodies[i]['importer_config'] = { 'feed': PUPPET_FEED, 'queries': [query], } client = api.Client(cls.cfg, api.json_handler) repos = [client.post(REPOSITORY_PATH, body) for body in bodies] cls.resources.update({repo['_href'] for repo in repos}) # Trigger repository sync and collect completed tasks. cls.reports = [] # raw responses to "start syncing" commands cls.tasks = [] # completed tasks for repo in repos: report = utils.sync_repo(cls.cfg, repo['_href']) cls.reports.append(report) for task in api.poll_spawned_tasks(cls.cfg, report.json()): cls.tasks.append(task)
def setUpClass(cls): """Upload puppet module to a repo, copy it to another, publish and download. Create two puppet repositories, both without feeds. Upload an module to the first repository. Copy its content to the second repository. Add distributors to the repositories, publish repositories and download modules back from them. """ super(PublishTestCase, cls).setUpClass() utils.reset_pulp(cls.cfg) # See: https://pulp.plan.io/issues/1406 cls.responses = {} cls.modules = [] # Raw puppet modules. # Download a puppet module and create two repositories. client = api.Client(cls.cfg, api.json_handler) repos = [client.post(REPOSITORY_PATH, gen_repo()) for _ in range(2)] for repo in repos: cls.resources.add(repo['_href']) client.response_handler = api.safe_handler cls.modules.append(utils.http_get(PUPPET_MODULE_URL)) # Begin an upload request, upload a puppet module, move the puppet # module into a repository, and end the upload request. cls.responses['malloc'] = client.post(CONTENT_UPLOAD_PATH) cls.responses['upload'] = client.put( urljoin(cls.responses['malloc'].json()['_href'], '0/'), data=cls.modules[0], ) cls.responses['import'] = client.post( urljoin(repos[0]['_href'], 'actions/import_upload/'), { 'unit_key': {}, 'unit_type_id': 'puppet_module', 'upload_id': cls.responses['malloc'].json()['upload_id'], }, ) cls.responses['free'] = client.delete( cls.responses['malloc'].json()['_href'] ) # Copy content from the first puppet repository to the second. cls.responses['copy'] = client.post( urljoin(repos[1]['_href'], 'actions/associate/'), {'source_repo_id': repos[0]['id']} ) # Add a distributor to each repository. Publish each repository. for key in {'distribute', 'publish'}: cls.responses[key] = [] for repo in repos: cls.responses['distribute'].append(client.post( urljoin(repo['_href'], 'distributors/'), { 'auto_publish': False, 'distributor_id': utils.uuid4(), 'distributor_type_id': 'puppet_distributor', 'distributor_config': { 'serve_http': True, 'serve_https': True, 'relative_url': '/' + utils.uuid4(), }, } )) cls.responses['publish'].append(client.post( urljoin(repo['_href'], 'actions/publish/'), {'id': cls.responses['distribute'][-1].json()['id']}, )) # Query both distributors using all three query forms. cls.responses['puppet releases'] = [] author_name = PUPPET_MODULE['author'] + '/' + PUPPET_MODULE['name'] for repo in repos: if selectors.bug_is_untestable(1440, cls.cfg.version): continue cls.responses['puppet releases'].append(client.get( '/api/v1/releases.json', params={'module': author_name}, auth=('.', repo['id']), )) cls.responses['puppet releases'].append(client.get( '/pulp_puppet/forge/repository/{}/api/v1/releases.json' .format(repo['id']), params={'module': author_name}, )) if cls.cfg.version < Version('2.8'): continue cls.responses['puppet releases'].append(client.get( '/v3/releases', params={'module': author_name}, auth=('repository', repo['id']), )) # Download each unit referenced by the queries above. for response in cls.responses['puppet releases']: body = response.json() if set(body.keys()) == {'pagination', 'results'}: # Puppet >= 3.6 path = body['results'][0]['file_uri'] else: path = body[author_name][0]['file'] cls.modules.append(client.get(path).content) # Search for all units in each of the two repositories. body = {'criteria': {}} cls.responses['repo units'] = [ client.post(urljoin(repo['_href'], 'search/units/'), body) for repo in repos ]
def create_body(): """Return a dict for creating a repository.""" return gen_repo()
def setUpClass(cls): """Upload puppet module to a repo, copy it to another, publish and download. Create two puppet repositories, both without feeds. Upload an module to the first repository. Copy its content to the second repository. Add distributors to the repositories, publish repositories and download modules back from them. """ super(PublishTestCase, cls).setUpClass() utils.reset_pulp(cls.cfg) # See: https://pulp.plan.io/issues/1406 cls.responses = {} cls.modules = [] # Raw puppet modules. # Download a puppet module and create two repositories. client = api.Client(cls.cfg, api.json_handler) repos = [client.post(REPOSITORY_PATH, gen_repo()) for _ in range(2)] for repo in repos: cls.resources.add(repo['_href']) client.response_handler = api.safe_handler cls.modules.append(utils.http_get(PUPPET_MODULE_URL)) # Begin an upload request, upload a puppet module, move the puppet # module into a repository, and end the upload request. cls.responses['malloc'] = client.post(CONTENT_UPLOAD_PATH) cls.responses['upload'] = client.put( urljoin(cls.responses['malloc'].json()['_href'], '0/'), data=cls.modules[0], ) cls.responses['import'] = client.post( urljoin(repos[0]['_href'], 'actions/import_upload/'), { 'unit_key': {}, 'unit_type_id': 'puppet_module', 'upload_id': cls.responses['malloc'].json()['upload_id'], }, ) cls.responses['free'] = client.delete( cls.responses['malloc'].json()['_href']) # Copy content from the first puppet repository to the second. cls.responses['copy'] = client.post( urljoin(repos[1]['_href'], 'actions/associate/'), {'source_repo_id': repos[0]['id']}) # Add a distributor to each repository. Publish each repository. for key in {'distribute', 'publish'}: cls.responses[key] = [] for repo in repos: cls.responses['distribute'].append( client.post( urljoin(repo['_href'], 'distributors/'), { 'auto_publish': False, 'distributor_id': utils.uuid4(), 'distributor_type_id': 'puppet_distributor', 'distributor_config': { 'serve_http': True, 'serve_https': True, 'relative_url': '/' + utils.uuid4(), }, })) cls.responses['publish'].append( client.post( urljoin(repo['_href'], 'actions/publish/'), {'id': cls.responses['distribute'][-1].json()['id']}, )) # Query both distributors using all three query forms. cls.responses['puppet releases'] = [] author_name = PUPPET_MODULE['author'] + '/' + PUPPET_MODULE['name'] for repo in repos: if selectors.bug_is_untestable(1440, cls.cfg.version): continue cls.responses['puppet releases'].append( client.get( '/api/v1/releases.json', params={'module': author_name}, auth=('.', repo['id']), )) cls.responses['puppet releases'].append( client.get( '/pulp_puppet/forge/repository/{}/api/v1/releases.json'. format(repo['id']), params={'module': author_name}, )) if cls.cfg.version < Version('2.8'): continue cls.responses['puppet releases'].append( client.get( '/v3/releases', params={'module': author_name}, auth=('repository', repo['id']), )) # Download each unit referenced by the queries above. for response in cls.responses['puppet releases']: body = response.json() if set(body.keys()) == {'pagination', 'results'}: # Puppet >= 3.6 path = body['results'][0]['file_uri'] else: path = body[author_name][0]['file'] cls.modules.append(client.get(path).content) # Search for all units in each of the two repositories. body = {'criteria': {}} cls.responses['repo units'] = [ client.post(urljoin(repo['_href'], 'search/units/'), body) for repo in repos ]