def setUpClass(cls): """Create an RPM repository and issue a task to download the repo. Do the following: 1. Reset Pulp. 2. Create a repository with the "on demand" download policy. 3. Sync the repository. 4. Trigger a repository download. 5. Corrupt a file in the repository. 6. Trigger a repository download, without unit verification. 7. Trigger a repository download, with unit verification. """ cls.cfg = config.get_config() if (not selectors.bug_is_fixed(1905, cls.cfg.pulp_version) and os_is_rhel6(cls.cfg)): raise unittest.SkipTest('https://pulp.plan.io/issues/1905') # Ensure Pulp is empty of units otherwise we might just associate pre- # existing units. reset_pulp(cls.cfg) # Create and sync a repository. api_client = api.Client(cls.cfg, api.json_handler) body = gen_repo(importer_config={ 'feed': RPM_UNSIGNED_FEED_URL, 'download_policy': 'on_demand' }) cls.repo = api_client.post(REPOSITORY_PATH, body) sync_repo(cls.cfg, cls.repo) # Trigger a repository download. Read the repo before and after. download_path = urljoin(cls.repo['_href'], 'actions/download/') params = {'details': True} cls.repo_pre_download = api_client.get(cls.repo['_href'], params=params) api_client.post(download_path, {'verify_all_units': False}) cls.repo_post_download = api_client.get(cls.repo['_href'], params=params) # Corrupt an RPM. The file is there, but the checksum isn't right. rpm_abs_path = cls.get_rpm_abs_path() cli_client = cli.Client(cls.cfg) checksum_cmd = ('sha256sum ' + rpm_abs_path).split() cls.sha_pre_corruption = cli_client.run(checksum_cmd, sudo=True).stdout.strip() cli_client.run(('rm ' + rpm_abs_path).split(), sudo=True) cli_client.run(('touch ' + rpm_abs_path).split(), sudo=True) cli_client.run(('chown apache:apache ' + rpm_abs_path).split(), sudo=True) cls.sha_post_corruption = cli_client.run(checksum_cmd, sudo=True).stdout.strip() # Trigger repository downloads that don't and do checksum files, resp. api_client.post(download_path, {'verify_all_units': False}) cls.unverified_file_sha = cli_client.run(checksum_cmd, sudo=True).stdout.strip() api_client.post(download_path, {'verify_all_units': True}) cls.verified_file_sha = cli_client.run(checksum_cmd, sudo=True).stdout.strip()
def setUpClass(cls): """Create an RPM repository with a valid feed and sync it. Do the following: 1. Reset Pulp, including the Squid cache. 2. Create a repository with the "background" download policy. 3. Sync and publish the repository. 4. Download an RPM from the repository. """ super().setUpClass() if check_issue_3104(cls.cfg): raise unittest.SkipTest('https://pulp.plan.io/issues/3104') if (not selectors.bug_is_fixed(1905, cls.cfg.pulp_version) and os_is_rhel6(cls.cfg)): raise unittest.SkipTest('https://pulp.plan.io/issues/1905') # Required to ensure content is actually downloaded. reset_squid(cls.cfg) reset_pulp(cls.cfg) # Create, sync and publish a repository. repo = _create_repo(cls.cfg, 'background') cls.resources.add(repo['_href']) report = sync_repo(cls.cfg, repo).json() # Record the tasks spawned when syncing the repository, and the state # of the repository itself after the sync. client = api.Client(cls.cfg) cls.repo = client.get(repo['_href'], params={'details': True}).json() cls.tasks = tuple(api.poll_spawned_tasks(cls.cfg, report)) # Download an RPM. cls.rpm = get_unit(cls.cfg, cls.repo['distributors'][0], RPM)
def setUpClass(cls): """Create an RPM repository and issue a task to download the repo. Do the following: 1. Reset Pulp. 2. Create a repository with the "on demand" download policy. 3. Sync and publish the repository. 4. Trigger a repository download. 5. Corrupt a file in the repository. 6. Trigger a repository download, without unit verification. 7. Trigger a repository download, with unit verification. """ super().setUpClass() if (not selectors.bug_is_fixed(1905, cls.cfg.pulp_version) and os_is_rhel6(cls.cfg)): raise unittest.SkipTest('https://pulp.plan.io/issues/1905') # Ensure Pulp is empty of units otherwise we might just associate pre- # existing units. reset_pulp(cls.cfg) # Create, sync and publish a repository. repo = _create_repo(cls.cfg, 'on_demand') cls.resources.add(repo['_href']) sync_repo(cls.cfg, repo) # Trigger a repository download. Read the repo before and after. api_client = api.Client(cls.cfg, api.json_handler) download_path = urljoin(repo['_href'], 'actions/download/') params = {'details': True} cls.repo_pre_download = api_client.get(repo['_href'], params=params) api_client.post(download_path, {'verify_all_units': False}) cls.repo_post_download = api_client.get(repo['_href'], params=params) # Corrupt an RPM. The file is there, but the checksum isn't right. rpm_abs_path = cls.get_rpm_abs_path() cli_client = cli.Client(cls.cfg) sudo = '' if cli.is_root(cls.cfg) else 'sudo ' checksum_cmd = (sudo + 'sha256sum ' + rpm_abs_path).split() cls.sha_pre_corruption = cli_client.run(checksum_cmd).stdout.strip() cli_client.run((sudo + 'rm ' + rpm_abs_path).split()) cli_client.run((sudo + 'touch ' + rpm_abs_path).split()) cli_client.run((sudo + 'chown apache:apache ' + rpm_abs_path).split()) cls.sha_post_corruption = cli_client.run(checksum_cmd).stdout.strip() # Trigger repository downloads that don't and do checksum files, resp. api_client.post(download_path, {'verify_all_units': False}) cls.unverified_file_sha = cli_client.run(checksum_cmd).stdout.strip() api_client.post(download_path, {'verify_all_units': True}) cls.verified_file_sha = cli_client.run(checksum_cmd).stdout.strip()