diff --git a/tests/base.py b/tests/base.py index 179d9faf5f..97cf209f10 100644 --- a/tests/base.py +++ b/tests/base.py @@ -3594,7 +3594,7 @@ class ZuulTestCase(BaseTestCase): os.makedirs(self.jobdir_root) # Make per test copy of Configuration. - self.setup_config() + self.config = self.setup_config(self.config_file) self.private_key_file = os.path.join(self.test_root, 'test_id_rsa') if not os.path.exists(self.private_key_file): src_private_key_file = os.environ.get( @@ -3824,28 +3824,28 @@ class ZuulTestCase(BaseTestCase): self.connections = zuul.lib.connections.ConnectionRegistry() self.connections.configure(self.config, source_only=source_only) - def setup_config(self): + def setup_config(self, config_file: str): # This creates the per-test configuration object. It can be # overridden by subclasses, but should not need to be since it # obeys the config_file and tenant_config_file attributes. - self.config = configparser.ConfigParser() - self.config.read(os.path.join(FIXTURE_DIR, self.config_file)) + config = configparser.ConfigParser() + config.read(os.path.join(FIXTURE_DIR, config_file)) sections = ['zuul', 'scheduler', 'executor', 'merger'] for section in sections: - if not self.config.has_section(section): - self.config.add_section(section) + if not config.has_section(section): + config.add_section(section) - if not self.setupSimpleLayout(): + if not self.setupSimpleLayout(config): tenant_config = None for cfg_attr in ('tenant_config', 'tenant_config_script'): if hasattr(self, cfg_attr + '_file'): if getattr(self, cfg_attr + '_file'): value = getattr(self, cfg_attr + '_file') - self.config.set('scheduler', cfg_attr, value) + config.set('scheduler', cfg_attr, value) tenant_config = value else: - self.config.remove_option('scheduler', cfg_attr) + config.remove_option('scheduler', cfg_attr) if tenant_config: git_path = os.path.join( @@ -3858,10 +3858,11 @@ class ZuulTestCase(BaseTestCase): self.copyDirToRepo(project, os.path.join(git_path, reponame)) # Make test_root persist after ansible run for .flag test - self.config.set('executor', 'trusted_rw_paths', self.test_root) - self.setupAllProjectKeys() + config.set('executor', 'trusted_rw_paths', self.test_root) + self.setupAllProjectKeys(config) + return config - def setupSimpleLayout(self): + def setupSimpleLayout(self, config: ConfigParser): # If the test method has been decorated with a simple_layout, # use that instead of the class tenant_config_file. Set up a # single config-project with the specified layout, and @@ -3905,15 +3906,17 @@ class ZuulTestCase(BaseTestCase): if not os.path.exists(root): os.makedirs(root) f = tempfile.NamedTemporaryFile(dir=root, delete=False) - config = [{'tenant': - {'name': 'tenant-one', - 'source': {driver: - {'config-projects': ['org/common-config'], - 'untrusted-projects': untrusted_projects}}}}] - f.write(yaml.dump(config).encode('utf8')) + temp_config = [{ + 'tenant': { + 'name': 'tenant-one', + 'source': { + driver: { + 'config-projects': ['org/common-config'], + 'untrusted-projects': untrusted_projects}}}}] + f.write(yaml.dump(temp_config).encode('utf8')) f.close() - self.config.set('scheduler', 'tenant_config', - os.path.join(FIXTURE_DIR, f.name)) + config.set('scheduler', 'tenant_config', + os.path.join(FIXTURE_DIR, f.name)) self.init_repo('org/common-config') self.addCommitToRepo('org/common-config', 'add content from fixture', @@ -3921,11 +3924,11 @@ class ZuulTestCase(BaseTestCase): return True - def setupAllProjectKeys(self): + def setupAllProjectKeys(self, config: ConfigParser): if self.create_project_keys: return - path = self.config.get('scheduler', 'tenant_config') + path = config.get('scheduler', 'tenant_config') with open(os.path.join(FIXTURE_DIR, path)) as f: tenant_config = yaml.safe_load(f.read()) for tenant in tenant_config: @@ -4633,7 +4636,7 @@ class ZuulTestCase(BaseTestCase): f.close() self.config.set('scheduler', 'tenant_config', os.path.join(FIXTURE_DIR, f.name)) - self.setupAllProjectKeys() + self.setupAllProjectKeys(self.config) def addTagToRepo(self, project, name, sha): path = os.path.join(self.upstream_root, project) @@ -4729,7 +4732,7 @@ class ZuulTestCase(BaseTestCase): with open(source_path, mode='rb') as source_tenant_config: new_tenant_config.write(source_tenant_config.read()) self.config['scheduler']['tenant_config'] = self.tenant_config_file - self.setupAllProjectKeys() + self.setupAllProjectKeys(self.config) self.log.debug( 'tenant_config_file = {}'.format(self.tenant_config_file)) @@ -4829,39 +4832,41 @@ class SSLZuulTestCase(ZuulTestCase): class ZuulDBTestCase(ZuulTestCase): - def setup_config(self): - super(ZuulDBTestCase, self).setup_config() - for section_name in self.config.sections(): + def setup_config(self, config_file: str): + config = super(ZuulDBTestCase, self).setup_config(config_file) + for section_name in config.sections(): con_match = re.match(r'^connection ([\'\"]?)(.*)(\1)$', section_name, re.I) if not con_match: continue - if self.config.get(section_name, 'driver') == 'sql': - if (self.config.get(section_name, 'dburi') == + if config.get(section_name, 'driver') == 'sql': + if (config.get(section_name, 'dburi') == '$MYSQL_FIXTURE_DBURI$'): f = MySQLSchemaFixture() self.useFixture(f) - self.config.set(section_name, 'dburi', f.dburi) - elif (self.config.get(section_name, 'dburi') == + config.set(section_name, 'dburi', f.dburi) + elif (config.get(section_name, 'dburi') == '$POSTGRESQL_FIXTURE_DBURI$'): f = PostgresqlSchemaFixture() self.useFixture(f) - self.config.set(section_name, 'dburi', f.dburi) + config.set(section_name, 'dburi', f.dburi) + return config class ZuulGithubAppTestCase(ZuulTestCase): - def setup_config(self): - super().setup_config() - for section_name in self.config.sections(): + def setup_config(self, config_file: str): + config = super(ZuulGithubAppTestCase, self).setup_config(config_file) + for section_name in config.sections(): con_match = re.match(r'^connection ([\'\"]?)(.*)(\1)$', section_name, re.I) if not con_match: continue - if self.config.get(section_name, 'driver') == 'github': - if (self.config.get(section_name, 'app_key', - fallback=None) == + if config.get(section_name, 'driver') == 'github': + if (config.get(section_name, 'app_key', + fallback=None) == '$APP_KEY_FIXTURE$'): - self.config.set(section_name, 'app_key', - os.path.join(FIXTURE_DIR, 'app_key')) + config.set(section_name, 'app_key', + os.path.join(FIXTURE_DIR, 'app_key')) + return config diff --git a/tests/unit/test_configloader.py b/tests/unit/test_configloader.py index 4521ac7110..21975bf012 100644 --- a/tests/unit/test_configloader.py +++ b/tests/unit/test_configloader.py @@ -11,6 +11,7 @@ # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations # under the License. +from configparser import ConfigParser import fixtures import logging @@ -28,7 +29,7 @@ class TenantParserTestCase(ZuulTestCase): 'project-template', 'nodeset', 'secret']) UNTRUSTED_SET = CONFIG_SET - set(['pipeline']) - def setupAllProjectKeys(self): + def setupAllProjectKeys(self, config: ConfigParser): for project in ['common-config', 'org/project1', 'org/project2']: self.setupProjectKeys('gerrit', project) @@ -333,9 +334,6 @@ class TestTenantExcludeAll(TenantParserTestCase): class TestSplitConfig(ZuulTestCase): tenant_config_file = 'config/split-config/main.yaml' - def setup_config(self): - super(TestSplitConfig, self).setup_config() - def test_split_config(self): tenant = self.sched.abide.tenants.get('tenant-one') self.assertIn('project-test1', tenant.layout.jobs) diff --git a/tests/unit/test_executor.py b/tests/unit/test_executor.py index 050f312662..b85780f1c3 100644 --- a/tests/unit/test_executor.py +++ b/tests/unit/test_executor.py @@ -819,10 +819,11 @@ class TestExecutorFacts(AnsibleZuulTestCase): class TestExecutorStart(ZuulTestCase): tenant_config_file = 'config/single-tenant/main.yaml' - def setup_config(self): - super(TestExecutorStart, self).setup_config() + def setup_config(self, config_file: str): + config = super(TestExecutorStart, self).setup_config(config_file) self.junk_dir = os.path.join(self.jobdir_root, 'junk') os.makedirs(self.junk_dir) + return config def test_executor_start(self): self.assertFalse(os.path.exists(self.junk_dir)) diff --git a/tests/unit/test_gerrit_crd.py b/tests/unit/test_gerrit_crd.py index 032d5d4e27..2e8d6323a3 100644 --- a/tests/unit/test_gerrit_crd.py +++ b/tests/unit/test_gerrit_crd.py @@ -726,12 +726,11 @@ class TestGerritCRD(ZuulTestCase): class TestGerritCRDAltBaseUrl(ZuulTestCase): tenant_config_file = 'config/single-tenant/main.yaml' - def setup_config(self): - super().setup_config() + def setup_config(self, config_file: str): + config = super(TestGerritCRDAltBaseUrl, self).setup_config(config_file) self.baseurl = 'https://review.example.com/prefixed_gerrit_ui/' - self.config.set( - 'connection gerrit', - 'baseurl', self.baseurl) + config.set('connection gerrit', 'baseurl', self.baseurl) + return config def test_basic_crd_check(self): "Test basic cross-repo dependencies with an alternate gerrit baseurl" diff --git a/tests/unit/test_git_driver.py b/tests/unit/test_git_driver.py index 056a46735c..cc0444757d 100644 --- a/tests/unit/test_git_driver.py +++ b/tests/unit/test_git_driver.py @@ -29,9 +29,10 @@ class TestGitDriver(ZuulTestCase): self.git_connection = self.sched.connections.getSource('git').\ connection - def setup_config(self): - super(TestGitDriver, self).setup_config() - self.config.set('connection git', 'baseurl', self.upstream_root) + def setup_config(self, config_file: str): + config = super(TestGitDriver, self).setup_config(config_file) + config.set('connection git', 'baseurl', self.upstream_root) + return config def test_basic(self): tenant = self.sched.abide.tenants.get('tenant-one') diff --git a/tests/unit/test_multi_driver.py b/tests/unit/test_multi_driver.py index 1844c3371f..89ab219f92 100644 --- a/tests/unit/test_multi_driver.py +++ b/tests/unit/test_multi_driver.py @@ -20,9 +20,6 @@ class TestGerritAndGithub(ZuulTestCase): config_file = 'zuul-connections-gerrit-and-github.conf' tenant_config_file = 'config/multi-driver/main.yaml' - def setup_config(self): - super(TestGerritAndGithub, self).setup_config() - def test_multiple_project_gerrit_and_github(self): self.executor_server.hold_jobs_in_build = True diff --git a/tests/unit/test_push_reqs.py b/tests/unit/test_push_reqs.py index 80c3be97c1..6fb01b4cf2 100644 --- a/tests/unit/test_push_reqs.py +++ b/tests/unit/test_push_reqs.py @@ -19,9 +19,6 @@ class TestPushRequirements(ZuulTestCase): config_file = 'zuul-push-reqs.conf' tenant_config_file = 'config/push-reqs/main.yaml' - def setup_config(self): - super(TestPushRequirements, self).setup_config() - def test_push_requirements(self): self.executor_server.hold_jobs_in_build = True diff --git a/tests/unit/test_scheduler.py b/tests/unit/test_scheduler.py index 17476de2e0..0710d81c98 100644 --- a/tests/unit/test_scheduler.py +++ b/tests/unit/test_scheduler.py @@ -72,9 +72,10 @@ class TestSchedulerZone(ZuulTestCase): super(TestSchedulerZone, self).setUp() self.fake_nodepool.attributes = {'executor-zone': 'test-provider.vpn'} - def setup_config(self): - super(TestSchedulerZone, self).setup_config() - self.config.set('executor', 'zone', 'test-provider.vpn') + def setup_config(self, config_file: str): + config = super(TestSchedulerZone, self).setup_config(config_file) + config.set('executor', 'zone', 'test-provider.vpn') + return config def test_jobs_executed(self): "Test that jobs are executed and a change is merged per zone"