Move test_model.test_job_inheritance_configloader
This test (and others like it) are difficult to maintain because
they rely heavily on internal interfaces which we change frequently.
Now that more of the framework is in place, make it more of a
functional test where we validate the output of the whole system.
Change-Id: Ib987b4a289682e87c5192043c05efb085fee5942
diff --git a/tests/unit/test_model.py b/tests/unit/test_model.py
index 628a45c..63e9aaa 100644
--- a/tests/unit/test_model.py
+++ b/tests/unit/test_model.py
@@ -170,185 +170,6 @@
"Unable to modify final job"):
job.applyVariant(bad_final)
- def test_job_inheritance_configloader(self):
- # TODO(jeblair): move this to a configloader test
- tenant = model.Tenant('tenant')
- layout = model.Layout(tenant)
-
- pipeline = model.Pipeline('gate', layout)
- layout.addPipeline(pipeline)
- queue = model.ChangeQueue(pipeline)
- project = model.Project('project', self.source)
- tpc = model.TenantProjectConfig(project)
- tenant.addUntrustedProject(tpc)
-
- base = configloader.JobParser.fromYaml(tenant, layout, {
- '_source_context': self.context,
- '_start_mark': self.start_mark,
- 'name': 'base',
- 'parent': None,
- 'timeout': 30,
- 'pre-run': 'base-pre',
- 'post-run': 'base-post',
- 'nodeset': {
- 'nodes': [{
- 'name': 'controller',
- 'label': 'base',
- }],
- },
- })
- layout.addJob(base)
- python27 = configloader.JobParser.fromYaml(tenant, layout, {
- '_source_context': self.context,
- '_start_mark': self.start_mark,
- 'name': 'python27',
- 'parent': 'base',
- 'pre-run': 'py27-pre',
- 'post-run': ['py27-post-a', 'py27-post-b'],
- 'nodeset': {
- 'nodes': [{
- 'name': 'controller',
- 'label': 'new',
- }],
- },
- 'timeout': 40,
- })
- layout.addJob(python27)
- python27diablo = configloader.JobParser.fromYaml(tenant, layout, {
- '_source_context': self.context,
- '_start_mark': self.start_mark,
- 'name': 'python27',
- 'branches': [
- 'stable/diablo'
- ],
- 'pre-run': 'py27-diablo-pre',
- 'run': 'py27-diablo',
- 'post-run': 'py27-diablo-post',
- 'nodeset': {
- 'nodes': [{
- 'name': 'controller',
- 'label': 'old',
- }],
- },
- 'timeout': 50,
- })
- layout.addJob(python27diablo)
-
- python27essex = configloader.JobParser.fromYaml(tenant, layout, {
- '_source_context': self.context,
- '_start_mark': self.start_mark,
- 'name': 'python27',
- 'branches': [
- 'stable/essex'
- ],
- 'pre-run': 'py27-essex-pre',
- 'post-run': 'py27-essex-post',
- })
- layout.addJob(python27essex)
-
- project_template_parser = configloader.ProjectTemplateParser(
- tenant, layout)
- project_parser = configloader.ProjectParser(
- tenant, layout, project_template_parser)
- project_config = project_parser.fromYaml([{
- '_source_context': self.context,
- '_start_mark': self.start_mark,
- 'name': 'project',
- 'gate': {
- 'jobs': [
- 'python27'
- ]
- }
- }])
- layout.addProjectConfig(project_config)
-
- change = model.Change(project)
- # Test master
- change.branch = 'master'
- item = queue.enqueueChange(change)
- item.layout = layout
-
- self.assertTrue(base.changeMatches(change))
- self.assertTrue(python27.changeMatches(change))
- self.assertFalse(python27diablo.changeMatches(change))
- self.assertFalse(python27essex.changeMatches(change))
-
- item.freezeJobGraph()
- self.assertEqual(len(item.getJobs()), 1)
- job = item.getJobs()[0]
- self.assertEqual(job.name, 'python27')
- self.assertEqual(job.timeout, 40)
- nodes = job.nodeset.getNodes()
- self.assertEqual(len(nodes), 1)
- self.assertEqual(nodes[0].label, 'new')
- self.assertEqual([x.path for x in job.pre_run],
- ['base-pre',
- 'py27-pre'])
- self.assertEqual([x.path for x in job.post_run],
- ['py27-post-a',
- 'py27-post-b',
- 'base-post'])
- self.assertEqual([x.path for x in job.run],
- ['playbooks/python27',
- 'playbooks/base'])
-
- # Test diablo
- change.branch = 'stable/diablo'
- item = queue.enqueueChange(change)
- item.layout = layout
-
- self.assertTrue(base.changeMatches(change))
- self.assertTrue(python27.changeMatches(change))
- self.assertTrue(python27diablo.changeMatches(change))
- self.assertFalse(python27essex.changeMatches(change))
-
- item.freezeJobGraph()
- self.assertEqual(len(item.getJobs()), 1)
- job = item.getJobs()[0]
- self.assertEqual(job.name, 'python27')
- self.assertEqual(job.timeout, 50)
- nodes = job.nodeset.getNodes()
- self.assertEqual(len(nodes), 1)
- self.assertEqual(nodes[0].label, 'old')
- self.assertEqual([x.path for x in job.pre_run],
- ['base-pre',
- 'py27-pre',
- 'py27-diablo-pre'])
- self.assertEqual([x.path for x in job.post_run],
- ['py27-diablo-post',
- 'py27-post-a',
- 'py27-post-b',
- 'base-post'])
- self.assertEqual([x.path for x in job.run],
- ['py27-diablo']),
-
- # Test essex
- change.branch = 'stable/essex'
- item = queue.enqueueChange(change)
- item.layout = layout
-
- self.assertTrue(base.changeMatches(change))
- self.assertTrue(python27.changeMatches(change))
- self.assertFalse(python27diablo.changeMatches(change))
- self.assertTrue(python27essex.changeMatches(change))
-
- item.freezeJobGraph()
- self.assertEqual(len(item.getJobs()), 1)
- job = item.getJobs()[0]
- self.assertEqual(job.name, 'python27')
- self.assertEqual([x.path for x in job.pre_run],
- ['base-pre',
- 'py27-pre',
- 'py27-essex-pre'])
- self.assertEqual([x.path for x in job.post_run],
- ['py27-essex-post',
- 'py27-post-a',
- 'py27-post-b',
- 'base-post'])
- self.assertEqual([x.path for x in job.run],
- ['playbooks/python27',
- 'playbooks/base'])
-
def test_job_auth_inheritance(self):
tenant = self.tenant
layout = self.layout
diff --git a/tests/unit/test_scheduler.py b/tests/unit/test_scheduler.py
index a97e47e..22d1139 100755
--- a/tests/unit/test_scheduler.py
+++ b/tests/unit/test_scheduler.py
@@ -2430,6 +2430,62 @@
self.assertEqual(rp, set(['org/project', 'org/project0',
'org/project3']))
+ @simple_layout('layouts/job-variants.yaml')
+ def test_job_branch_variants(self):
+ self.create_branch('org/project', 'stable/diablo')
+ self.create_branch('org/project', 'stable/essex')
+ A = self.fake_gerrit.addFakeChange('org/project', 'master', 'A')
+ self.fake_gerrit.addEvent(A.getPatchsetCreatedEvent(1))
+ self.waitUntilSettled()
+
+ B = self.fake_gerrit.addFakeChange('org/project', 'stable/diablo', 'B')
+ self.fake_gerrit.addEvent(B.getPatchsetCreatedEvent(1))
+ self.waitUntilSettled()
+
+ C = self.fake_gerrit.addFakeChange('org/project', 'stable/essex', 'C')
+ self.fake_gerrit.addEvent(C.getPatchsetCreatedEvent(1))
+ self.waitUntilSettled()
+ self.assertHistory([
+ dict(name='python27', result='SUCCESS'),
+ dict(name='python27', result='SUCCESS'),
+ dict(name='python27', result='SUCCESS'),
+ ])
+
+ p = self.history[0].parameters
+ self.assertEqual(p['timeout'], 40)
+ self.assertEqual(len(p['nodes']), 1)
+ self.assertEqual(p['nodes'][0]['label'], 'new')
+ self.assertEqual([x['path'] for x in p['pre_playbooks']],
+ ['base-pre', 'py27-pre'])
+ self.assertEqual([x['path'] for x in p['post_playbooks']],
+ ['py27-post-a', 'py27-post-b', 'base-post'])
+ self.assertEqual([x['path'] for x in p['playbooks']],
+ ['playbooks/python27', 'playbooks/base'])
+
+ p = self.history[1].parameters
+ self.assertEqual(p['timeout'], 50)
+ self.assertEqual(len(p['nodes']), 1)
+ self.assertEqual(p['nodes'][0]['label'], 'old')
+ self.assertEqual([x['path'] for x in p['pre_playbooks']],
+ ['base-pre', 'py27-pre', 'py27-diablo-pre'])
+ self.assertEqual([x['path'] for x in p['post_playbooks']],
+ ['py27-diablo-post', 'py27-post-a', 'py27-post-b',
+ 'base-post'])
+ self.assertEqual([x['path'] for x in p['playbooks']],
+ ['py27-diablo'])
+
+ p = self.history[2].parameters
+ self.assertEqual(p['timeout'], 40)
+ self.assertEqual(len(p['nodes']), 1)
+ self.assertEqual(p['nodes'][0]['label'], 'new')
+ self.assertEqual([x['path'] for x in p['pre_playbooks']],
+ ['base-pre', 'py27-pre', 'py27-essex-pre'])
+ self.assertEqual([x['path'] for x in p['post_playbooks']],
+ ['py27-essex-post', 'py27-post-a', 'py27-post-b',
+ 'base-post'])
+ self.assertEqual([x['path'] for x in p['playbooks']],
+ ['playbooks/python27', 'playbooks/base'])
+
def test_queue_names(self):
"Test shared change queue names"
tenant = self.sched.abide.tenants.get('tenant-one')