def test_job_source_project(self): base_project = model.Project('base_project', self.source) base_context = model.SourceContext(base_project, 'master', 'test', True) tpc = model.TenantProjectConfig(base_project) self.tenant.addUntrustedProject(tpc) base = self.pcontext.job_parser.fromYaml({ '_source_context': base_context, '_start_mark': self.start_mark, 'parent': None, 'name': 'base', }) self.layout.addJob(base) other_project = model.Project('other_project', self.source) other_context = model.SourceContext(other_project, 'master', 'test', True) tpc = model.TenantProjectConfig(other_project) self.tenant.addUntrustedProject(tpc) base2 = self.pcontext.job_parser.fromYaml({ '_source_context': other_context, '_start_mark': self.start_mark, 'name': 'base', }) with testtools.ExpectedException( Exception, "Job base in other_project is not permitted " "to shadow job base in base_project"): self.layout.addJob(base2)
def setUp(self): super(TestJob, self).setUp() self.connections = zuul.lib.connections.ConnectionRegistry() self.addCleanup(self.connections.stop) self.connection = Dummy(connection_name='dummy_connection') self.source = Dummy(canonical_hostname='git.example.com', connection=self.connection) self.tenant = model.Tenant('tenant') self.tenant.default_ansible_version = AnsibleManager().default_version self.layout = model.Layout(self.tenant) self.project = model.Project('project', self.source) self.context = model.SourceContext(self.project, 'master', 'test', True) self.untrusted_context = model.SourceContext(self.project, 'master', 'test', False) self.tpc = model.TenantProjectConfig(self.project) self.tenant.addUntrustedProject(self.tpc) self.pipeline = model.Pipeline('gate', self.tenant) self.pipeline.source_context = self.context self.layout.addPipeline(self.pipeline) self.queue = model.ChangeQueue(self.pipeline) self.pcontext = configloader.ParseContext(self.connections, None, self.tenant, AnsibleManager()) private_key_file = os.path.join(FIXTURE_DIR, 'private.pem') with open(private_key_file, "rb") as f: priv, pub = encryption.deserialize_rsa_keypair(f.read()) self.project.private_secrets_key = priv self.project.public_secrets_key = pub m = yaml.Mark('name', 0, 0, 0, '', 0) self.start_mark = configloader.ZuulMark(m, m, '')
def test_add_project(self): tenant = model.Tenant('tenant') connection1 = Dummy(connection_name='dummy_connection1') source1 = Dummy( canonical_hostname='git1.example.com', name='dummy', # TODOv3(jeblair): remove connection=connection1) source1_project1 = model.Project('project1', source1) source1_project1_tpc = model.TenantProjectConfig(source1_project1) tenant.addConfigProject(source1_project1_tpc) d = {'project1': {'git1.example.com': source1_project1}} self.assertEqual(d, tenant.projects) self.assertEqual((True, source1_project1), tenant.getProject('project1')) self.assertEqual((True, source1_project1), tenant.getProject('git1.example.com/project1')) source1_project2 = model.Project('project2', source1) tpc = model.TenantProjectConfig(source1_project2) tenant.addUntrustedProject(tpc) d = { 'project1': { 'git1.example.com': source1_project1 }, 'project2': { 'git1.example.com': source1_project2 } } self.assertEqual(d, tenant.projects) self.assertEqual((False, source1_project2), tenant.getProject('project2')) self.assertEqual((False, source1_project2), tenant.getProject('git1.example.com/project2')) connection2 = Dummy(connection_name='dummy_connection2') source2 = Dummy( canonical_hostname='git2.example.com', name='dummy', # TODOv3(jeblair): remove connection=connection2) source2_project1 = model.Project('project1', source2) tpc = model.TenantProjectConfig(source2_project1) tenant.addUntrustedProject(tpc) d = { 'project1': { 'git1.example.com': source1_project1, 'git2.example.com': source2_project1 }, 'project2': { 'git1.example.com': source1_project2 } } self.assertEqual(d, tenant.projects) with testtools.ExpectedException( Exception, "Project name 'project1' is ambiguous"): tenant.getProject('project1') self.assertEqual((False, source1_project2), tenant.getProject('project2')) self.assertEqual((True, source1_project1), tenant.getProject('git1.example.com/project1')) self.assertEqual((False, source2_project1), tenant.getProject('git2.example.com/project1')) source2_project2 = model.Project('project2', source2) tpc = model.TenantProjectConfig(source2_project2) tenant.addConfigProject(tpc) d = { 'project1': { 'git1.example.com': source1_project1, 'git2.example.com': source2_project1 }, 'project2': { 'git1.example.com': source1_project2, 'git2.example.com': source2_project2 } } self.assertEqual(d, tenant.projects) with testtools.ExpectedException( Exception, "Project name 'project1' is ambiguous"): tenant.getProject('project1') with testtools.ExpectedException( Exception, "Project name 'project2' is ambiguous"): tenant.getProject('project2') self.assertEqual((True, source1_project1), tenant.getProject('git1.example.com/project1')) self.assertEqual((False, source2_project1), tenant.getProject('git2.example.com/project1')) self.assertEqual((False, source1_project2), tenant.getProject('git1.example.com/project2')) self.assertEqual((True, source2_project2), tenant.getProject('git2.example.com/project2')) source1_project2b = model.Project('subpath/project2', source1) tpc = model.TenantProjectConfig(source1_project2b) tenant.addConfigProject(tpc) d = { 'project1': { 'git1.example.com': source1_project1, 'git2.example.com': source2_project1 }, 'project2': { 'git1.example.com': source1_project2, 'git2.example.com': source2_project2 }, 'subpath/project2': { 'git1.example.com': source1_project2b } } self.assertEqual(d, tenant.projects) self.assertEqual((False, source1_project2), tenant.getProject('git1.example.com/project2')) self.assertEqual((True, source2_project2), tenant.getProject('git2.example.com/project2')) self.assertEqual((True, source1_project2b), tenant.getProject('subpath/project2')) self.assertEqual( (True, source1_project2b), tenant.getProject('git1.example.com/subpath/project2')) source2_project2b = model.Project('subpath/project2', source2) tpc = model.TenantProjectConfig(source2_project2b) tenant.addConfigProject(tpc) d = { 'project1': { 'git1.example.com': source1_project1, 'git2.example.com': source2_project1 }, 'project2': { 'git1.example.com': source1_project2, 'git2.example.com': source2_project2 }, 'subpath/project2': { 'git1.example.com': source1_project2b, 'git2.example.com': source2_project2b } } self.assertEqual(d, tenant.projects) self.assertEqual((False, source1_project2), tenant.getProject('git1.example.com/project2')) self.assertEqual((True, source2_project2), tenant.getProject('git2.example.com/project2')) with testtools.ExpectedException( Exception, "Project name 'subpath/project2' is ambiguous"): tenant.getProject('subpath/project2') self.assertEqual( (True, source1_project2b), tenant.getProject('git1.example.com/subpath/project2')) self.assertEqual( (True, source2_project2b), tenant.getProject('git2.example.com/subpath/project2')) with testtools.ExpectedException( Exception, "Project project1 is already in project index"): tenant._addProject(source1_project1_tpc)