summaryrefslogtreecommitdiff
path: root/tests/unit/test_v3.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/unit/test_v3.py')
-rw-r--r--tests/unit/test_v3.py153
1 files changed, 153 insertions, 0 deletions
diff --git a/tests/unit/test_v3.py b/tests/unit/test_v3.py
index 37a9c092f..ac10eda47 100644
--- a/tests/unit/test_v3.py
+++ b/tests/unit/test_v3.py
@@ -1479,6 +1479,38 @@ class TestInRepoConfig(ZuulTestCase):
"A should have failed the check pipeline")
self.assertHistory([])
+ def test_dynamic_nonexistent_job_dependency(self):
+ # Tests that a reference to a nonexistent job dependency is an
+ # error.
+ in_repo_conf = textwrap.dedent(
+ """
+ - job:
+ name: project-test1
+ run: playbooks/project-test1.yaml
+
+ - project:
+ name: org/project
+ check:
+ jobs:
+ - project-test1:
+ dependencies:
+ - name: non-existent-job
+ soft: true
+ """)
+
+ file_dict = {'.zuul.yaml': in_repo_conf}
+ A = self.fake_gerrit.addFakeChange('org/project', 'master', 'A',
+ files=file_dict)
+ self.fake_gerrit.addEvent(A.getPatchsetCreatedEvent(1))
+ self.waitUntilSettled()
+ self.assertEqual(A.reported, 1,
+ "A should report failure")
+ self.assertEqual(A.patchsets[0]['approvals'][0]['value'], "-1")
+ self.assertIn('Job non-existent-job not defined', A.messages[0],
+ "A should have failed the check pipeline")
+ self.assertNotIn('freezing', A.messages[0])
+ self.assertHistory([])
+
def test_dynamic_config_new_patchset(self):
self.executor_server.hold_jobs_in_build = True
@@ -8048,3 +8080,124 @@ class TestConnectionVars(AnsibleZuulTestCase):
# job_output = self._get_file(job, 'work/logs/job-output.txt')
# self.log.debug(job_output)
# self.assertNotIn("/bin/du", job_output)
+
+
+class IncludeBranchesTestCase(ZuulTestCase):
+ def _test_include_branches(self, history1, history2, history3, history4):
+ self.create_branch('org/project', 'stable')
+ self.create_branch('org/project', 'feature/foo')
+ self.fake_gerrit.addEvent(
+ self.fake_gerrit.getFakeBranchCreatedEvent(
+ 'org/project', 'stable'))
+ self.fake_gerrit.addEvent(
+ self.fake_gerrit.getFakeBranchCreatedEvent(
+ 'org/project', 'feature/foo'))
+ self.waitUntilSettled()
+
+ # Test the jobs on the master branch.
+ A = self.fake_gerrit.addFakeChange('org/project', 'master', 'A')
+ self.fake_gerrit.addEvent(A.getPatchsetCreatedEvent(1))
+ self.waitUntilSettled()
+
+ self.assertHistory(history1, ordered=False)
+
+ # Test the jobs on the excluded feature branch.
+ B = self.fake_gerrit.addFakeChange('org/project', 'feature/foo', 'A')
+ self.fake_gerrit.addEvent(B.getPatchsetCreatedEvent(1))
+ self.waitUntilSettled()
+
+ self.assertHistory(history1 + history2, ordered=False)
+
+ # Test in-repo config proposed on the excluded feature branch.
+ conf = textwrap.dedent(
+ """
+ - job:
+ name: project-dynamic
+
+ - project:
+ check:
+ jobs:
+ - project-dynamic
+ """)
+ file_dict = {'zuul.yaml': conf}
+ C = self.fake_gerrit.addFakeChange('org/project', 'feature/foo', 'A',
+ files=file_dict)
+ self.fake_gerrit.addEvent(C.getPatchsetCreatedEvent(1))
+ self.waitUntilSettled()
+
+ self.assertHistory(history1 + history2 + history3, ordered=False)
+
+ old = self.scheds.first.sched.tenant_layout_state.get('tenant-one')
+ # Merge a change to the excluded feature branch.
+ B.addApproval('Code-Review', 2)
+ self.fake_gerrit.addEvent(B.addApproval('Approved', 1))
+ self.waitUntilSettled()
+ self.assertEqual(B.data['status'], 'MERGED')
+ self.assertHistory(history1 + history2 + history3 + history4,
+ ordered=False)
+ new = self.scheds.first.sched.tenant_layout_state.get('tenant-one')
+ # Verify we haven't performed a tenant reconfiguration
+ self.assertTrue(old == new)
+
+
+class TestIncludeBranchesProject(IncludeBranchesTestCase):
+ tenant_config_file = 'config/dynamic-only-project/include.yaml'
+
+ def test_include_branches(self):
+ history1 = [
+ dict(name='central-test', result='SUCCESS', changes='1,1'),
+ dict(name='project-test', result='SUCCESS', changes='1,1'),
+ ]
+ history2 = [
+ dict(name='central-test', result='SUCCESS', changes='2,1'),
+ ]
+ history3 = [
+ dict(name='central-test', result='SUCCESS', changes='3,1'),
+ ]
+ history4 = [
+ dict(name='central-test', result='SUCCESS', changes='2,1'),
+ ]
+ self._test_include_branches(history1, history2, history3, history4)
+
+
+class TestExcludeBranchesProject(IncludeBranchesTestCase):
+ tenant_config_file = 'config/dynamic-only-project/exclude.yaml'
+
+ def test_exclude_branches(self):
+ history1 = [
+ dict(name='central-test', result='SUCCESS', changes='1,1'),
+ dict(name='project-test', result='SUCCESS', changes='1,1'),
+ ]
+ history2 = [
+ dict(name='central-test', result='SUCCESS', changes='2,1'),
+ ]
+ history3 = [
+ dict(name='central-test', result='SUCCESS', changes='3,1'),
+ ]
+ history4 = [
+ dict(name='central-test', result='SUCCESS', changes='2,1'),
+ ]
+ self._test_include_branches(history1, history2, history3, history4)
+
+
+class TestDynamicBranchesProject(IncludeBranchesTestCase):
+ tenant_config_file = 'config/dynamic-only-project/dynamic.yaml'
+
+ def test_dynamic_branches(self):
+ history1 = [
+ dict(name='central-test', result='SUCCESS', changes='1,1'),
+ dict(name='project-test', result='SUCCESS', changes='1,1'),
+ ]
+ history2 = [
+ dict(name='central-test', result='SUCCESS', changes='2,1'),
+ dict(name='project-test', result='SUCCESS', changes='2,1'),
+ ]
+ history3 = [
+ dict(name='central-test', result='SUCCESS', changes='3,1'),
+ dict(name='project-dynamic', result='SUCCESS', changes='3,1'),
+ ]
+ history4 = [
+ dict(name='central-test', result='SUCCESS', changes='2,1'),
+ dict(name='project-test', result='SUCCESS', changes='2,1'),
+ ]
+ self._test_include_branches(history1, history2, history3, history4)