Merge "Don't try to execute _stop commands" into feature/zuulv3
diff --git a/tests/fixtures/config/requirements/reject-username/git/common-config/zuul.yaml b/tests/fixtures/config/requirements/reject-username/git/common-config/zuul.yaml
new file mode 100644
index 0000000..92c7de2
--- /dev/null
+++ b/tests/fixtures/config/requirements/reject-username/git/common-config/zuul.yaml
@@ -0,0 +1,52 @@
+- pipeline:
+    name: pipeline
+    manager: independent
+    source:
+      gerrit
+    reject:
+      approval:
+        - username: 'jenkins'
+    trigger:
+      gerrit:
+        - event: comment-added
+    success:
+      gerrit:
+        verified: 1
+    failure:
+      gerrit:
+        verified: -1
+
+- pipeline:
+    name: trigger
+    manager: independent
+    source:
+      gerrit
+    trigger:
+      gerrit:
+        - event: comment-added
+          reject-approval:
+            - username: 'jenkins'
+    success:
+      gerrit:
+        verified: 1
+    failure:
+      gerrit:
+        verified: -1
+
+- job:
+    name: project1-job
+
+- job:
+    name: project2-job
+
+- project:
+    name: org/project1
+    pipeline:
+      jobs:
+        - project1-job
+
+- project:
+    name: org/project2
+    trigger:
+      jobs:
+        - project2-job
diff --git a/tests/fixtures/config/requirements/reject-username/git/org_project1/README b/tests/fixtures/config/requirements/reject-username/git/org_project1/README
new file mode 100644
index 0000000..9daeafb
--- /dev/null
+++ b/tests/fixtures/config/requirements/reject-username/git/org_project1/README
@@ -0,0 +1 @@
+test
diff --git a/tests/fixtures/config/requirements/reject-username/git/org_project2/README b/tests/fixtures/config/requirements/reject-username/git/org_project2/README
new file mode 100644
index 0000000..9daeafb
--- /dev/null
+++ b/tests/fixtures/config/requirements/reject-username/git/org_project2/README
@@ -0,0 +1 @@
+test
diff --git a/tests/fixtures/config/requirements/reject-username/main.yaml b/tests/fixtures/config/requirements/reject-username/main.yaml
new file mode 100644
index 0000000..a22ed5c
--- /dev/null
+++ b/tests/fixtures/config/requirements/reject-username/main.yaml
@@ -0,0 +1,6 @@
+- tenant:
+    name: tenant-one
+    source:
+      gerrit:
+        config-repos:
+          - common-config
diff --git a/tests/fixtures/layout-requirement-reject.yaml b/tests/fixtures/config/requirements/reject/git/common-config/zuul.yaml
similarity index 62%
rename from tests/fixtures/layout-requirement-reject.yaml
rename to tests/fixtures/config/requirements/reject/git/common-config/zuul.yaml
index 1f5d714..12a2538 100644
--- a/tests/fixtures/layout-requirement-reject.yaml
+++ b/tests/fixtures/config/requirements/reject/git/common-config/zuul.yaml
@@ -1,6 +1,8 @@
-pipelines:
-  - name: pipeline
-    manager: IndependentPipelineManager
+- pipeline:
+    name: pipeline
+    manager: independent
+    source:
+      gerrit
     require:
       approval:
         - username: jenkins
@@ -18,8 +20,11 @@
       gerrit:
         verified: -1
 
-  - name: trigger
-    manager: IndependentPipelineManager
+- pipeline:
+    name: trigger
+    manager: independent
+    source:
+      gerrit
     trigger:
       gerrit:
         - event: comment-added
@@ -35,10 +40,20 @@
       gerrit:
         verified: -1
 
-projects:
-  - name: org/project1
+- job:
+    name: project1-job
+
+- job:
+    name: project2-job
+
+- project:
+    name: org/project1
     pipeline:
-      - project1-pipeline
-  - name: org/project2
+      jobs:
+        - project1-job
+
+- project:
+    name: org/project2
     trigger:
-      - project2-trigger
+      jobs:
+        - project2-job
diff --git a/tests/fixtures/config/requirements/reject/git/org_project1/README b/tests/fixtures/config/requirements/reject/git/org_project1/README
new file mode 100644
index 0000000..9daeafb
--- /dev/null
+++ b/tests/fixtures/config/requirements/reject/git/org_project1/README
@@ -0,0 +1 @@
+test
diff --git a/tests/fixtures/config/requirements/reject/git/org_project2/README b/tests/fixtures/config/requirements/reject/git/org_project2/README
new file mode 100644
index 0000000..9daeafb
--- /dev/null
+++ b/tests/fixtures/config/requirements/reject/git/org_project2/README
@@ -0,0 +1 @@
+test
diff --git a/tests/fixtures/config/requirements/reject/main.yaml b/tests/fixtures/config/requirements/reject/main.yaml
new file mode 100644
index 0000000..a22ed5c
--- /dev/null
+++ b/tests/fixtures/config/requirements/reject/main.yaml
@@ -0,0 +1,6 @@
+- tenant:
+    name: tenant-one
+    source:
+      gerrit:
+        config-repos:
+          - common-config
diff --git a/tests/fixtures/config/requirements/state/git/common-config/zuul.yaml b/tests/fixtures/config/requirements/state/git/common-config/zuul.yaml
new file mode 100644
index 0000000..9491bff
--- /dev/null
+++ b/tests/fixtures/config/requirements/state/git/common-config/zuul.yaml
@@ -0,0 +1,74 @@
+- pipeline:
+    name: current-check
+    manager: independent
+    source:
+      gerrit
+    require:
+      current-patchset: True
+    trigger:
+      gerrit:
+        - event: patchset-created
+        - event: comment-added
+    success:
+      gerrit:
+        verified: 1
+    failure:
+      gerrit:
+        verified: -1
+
+- pipeline:
+    name: open-check
+    manager: independent
+    source:
+      gerrit
+    require:
+      open: True
+    trigger:
+      gerrit:
+        - event: patchset-created
+        - event: comment-added
+    success:
+      gerrit:
+        verified: 1
+    failure:
+      gerrit:
+        verified: -1
+
+- pipeline:
+    name: status-check
+    manager: independent
+    source:
+      gerrit
+    require:
+      status: NEW
+    trigger:
+      gerrit:
+        - event: patchset-created
+        - event: comment-added
+    success:
+      gerrit:
+        verified: 1
+    failure:
+      gerrit:
+        verified: -1
+
+- job:
+    name: project-job
+
+- project:
+    name: current-project
+    current-check:
+      jobs:
+        - project-job
+
+- project:
+    name: open-project
+    open-check:
+      jobs:
+        - project-job
+
+- project:
+    name: status-project
+    status-check:
+      jobs:
+        - project-job
diff --git a/tests/fixtures/config/requirements/state/git/current-project/README b/tests/fixtures/config/requirements/state/git/current-project/README
new file mode 100644
index 0000000..9daeafb
--- /dev/null
+++ b/tests/fixtures/config/requirements/state/git/current-project/README
@@ -0,0 +1 @@
+test
diff --git a/tests/fixtures/config/requirements/state/git/open-project/README b/tests/fixtures/config/requirements/state/git/open-project/README
new file mode 100644
index 0000000..9daeafb
--- /dev/null
+++ b/tests/fixtures/config/requirements/state/git/open-project/README
@@ -0,0 +1 @@
+test
diff --git a/tests/fixtures/config/requirements/state/git/status-project/README b/tests/fixtures/config/requirements/state/git/status-project/README
new file mode 100644
index 0000000..9daeafb
--- /dev/null
+++ b/tests/fixtures/config/requirements/state/git/status-project/README
@@ -0,0 +1 @@
+test
diff --git a/tests/fixtures/config/requirements/state/main.yaml b/tests/fixtures/config/requirements/state/main.yaml
new file mode 100644
index 0000000..a22ed5c
--- /dev/null
+++ b/tests/fixtures/config/requirements/state/main.yaml
@@ -0,0 +1,6 @@
+- tenant:
+    name: tenant-one
+    source:
+      gerrit:
+        config-repos:
+          - common-config
diff --git a/tests/fixtures/config/requirements/vote1/git/common-config/zuul.yaml b/tests/fixtures/config/requirements/vote1/git/common-config/zuul.yaml
new file mode 100644
index 0000000..00afe79
--- /dev/null
+++ b/tests/fixtures/config/requirements/vote1/git/common-config/zuul.yaml
@@ -0,0 +1,55 @@
+
+- pipeline:
+    name: pipeline
+    manager: independent
+    require:
+      approval:
+        - username: jenkins
+          verified: 1
+    source:
+      gerrit
+    trigger:
+      gerrit:
+        - event: comment-added
+    success:
+      gerrit:
+        verified: 1
+    failure:
+      gerrit:
+        verified: -1
+
+- pipeline:
+    name: trigger
+    manager: independent
+    source:
+      gerrit
+    trigger:
+      gerrit:
+        - event: comment-added
+          require-approval:
+            - username: jenkins
+              verified: 1
+    success:
+      gerrit:
+        verified: 1
+    failure:
+      gerrit:
+        verified: -1
+
+- job:
+    name: project1-job
+
+- job:
+    name: project2-job
+
+- project:
+    name: org/project1
+    pipeline:
+      jobs:
+        - project1-job
+
+- project:
+    name: org/project2
+    trigger:
+      jobs:
+        - project2-job
diff --git a/tests/fixtures/config/requirements/vote1/git/org_project1/README b/tests/fixtures/config/requirements/vote1/git/org_project1/README
new file mode 100644
index 0000000..9daeafb
--- /dev/null
+++ b/tests/fixtures/config/requirements/vote1/git/org_project1/README
@@ -0,0 +1 @@
+test
diff --git a/tests/fixtures/config/requirements/vote1/git/org_project2/README b/tests/fixtures/config/requirements/vote1/git/org_project2/README
new file mode 100644
index 0000000..9daeafb
--- /dev/null
+++ b/tests/fixtures/config/requirements/vote1/git/org_project2/README
@@ -0,0 +1 @@
+test
diff --git a/tests/fixtures/config/requirements/vote1/main.yaml b/tests/fixtures/config/requirements/vote1/main.yaml
new file mode 100644
index 0000000..a22ed5c
--- /dev/null
+++ b/tests/fixtures/config/requirements/vote1/main.yaml
@@ -0,0 +1,6 @@
+- tenant:
+    name: tenant-one
+    source:
+      gerrit:
+        config-repos:
+          - common-config
diff --git a/tests/fixtures/config/requirements/vote2/git/common-config/zuul.yaml b/tests/fixtures/config/requirements/vote2/git/common-config/zuul.yaml
new file mode 100644
index 0000000..73db7a7
--- /dev/null
+++ b/tests/fixtures/config/requirements/vote2/git/common-config/zuul.yaml
@@ -0,0 +1,54 @@
+- pipeline:
+    name: pipeline
+    manager: independent
+    require:
+      approval:
+        - username: jenkins
+          verified: [1, 2]
+    source:
+      gerrit
+    trigger:
+      gerrit:
+        - event: comment-added
+    success:
+      gerrit:
+        verified: 1
+    failure:
+      gerrit:
+        verified: -1
+
+- pipeline:
+    name: trigger
+    manager: independent
+    source:
+      gerrit
+    trigger:
+      gerrit:
+        - event: comment-added
+          require-approval:
+            - username: jenkins
+              verified: [1, 2]
+    success:
+      gerrit:
+        verified: 1
+    failure:
+      gerrit:
+        verified: -1
+
+- job:
+    name: project1-job
+
+- job:
+    name: project2-job
+
+- project:
+    name: org/project1
+    pipeline:
+      jobs:
+        - project1-job
+
+- project:
+    name: org/project2
+    trigger:
+      jobs:
+        - project2-job
diff --git a/tests/fixtures/config/requirements/vote2/git/org_project1/README b/tests/fixtures/config/requirements/vote2/git/org_project1/README
new file mode 100644
index 0000000..9daeafb
--- /dev/null
+++ b/tests/fixtures/config/requirements/vote2/git/org_project1/README
@@ -0,0 +1 @@
+test
diff --git a/tests/fixtures/config/requirements/vote2/git/org_project2/README b/tests/fixtures/config/requirements/vote2/git/org_project2/README
new file mode 100644
index 0000000..9daeafb
--- /dev/null
+++ b/tests/fixtures/config/requirements/vote2/git/org_project2/README
@@ -0,0 +1 @@
+test
diff --git a/tests/fixtures/config/requirements/vote2/main.yaml b/tests/fixtures/config/requirements/vote2/main.yaml
new file mode 100644
index 0000000..a22ed5c
--- /dev/null
+++ b/tests/fixtures/config/requirements/vote2/main.yaml
@@ -0,0 +1,6 @@
+- tenant:
+    name: tenant-one
+    source:
+      gerrit:
+        config-repos:
+          - common-config
diff --git a/tests/fixtures/layout-requirement-current-patchset.yaml b/tests/fixtures/layout-requirement-current-patchset.yaml
deleted file mode 100644
index 405077e..0000000
--- a/tests/fixtures/layout-requirement-current-patchset.yaml
+++ /dev/null
@@ -1,20 +0,0 @@
-pipelines:
-  - name: check
-    manager: IndependentPipelineManager
-    require:
-      current-patchset: True
-    trigger:
-      gerrit:
-        - event: patchset-created
-        - event: comment-added
-    success:
-      gerrit:
-        verified: 1
-    failure:
-      gerrit:
-        verified: -1
-
-projects:
-  - name: org/project
-    check:
-      - project-check
diff --git a/tests/fixtures/layout-requirement-open.yaml b/tests/fixtures/layout-requirement-open.yaml
deleted file mode 100644
index e62719d..0000000
--- a/tests/fixtures/layout-requirement-open.yaml
+++ /dev/null
@@ -1,20 +0,0 @@
-pipelines:
-  - name: check
-    manager: IndependentPipelineManager
-    require:
-      open: True
-    trigger:
-      gerrit:
-        - event: patchset-created
-        - event: comment-added
-    success:
-      gerrit:
-        verified: 1
-    failure:
-      gerrit:
-        verified: -1
-
-projects:
-  - name: org/project
-    check:
-      - project-check
diff --git a/tests/fixtures/layout-requirement-reject-username.yaml b/tests/fixtures/layout-requirement-reject-username.yaml
deleted file mode 100644
index 9c71045..0000000
--- a/tests/fixtures/layout-requirement-reject-username.yaml
+++ /dev/null
@@ -1,37 +0,0 @@
-pipelines:
-  - name: pipeline
-    manager: IndependentPipelineManager
-    reject:
-      approval:
-        - username: 'jenkins'
-    trigger:
-      gerrit:
-        - event: comment-added
-    success:
-      gerrit:
-        verified: 1
-    failure:
-      gerrit:
-        verified: -1
-
-  - name: trigger
-    manager: IndependentPipelineManager
-    trigger:
-      gerrit:
-        - event: comment-added
-          reject-approval:
-            - username: 'jenkins'
-    success:
-      gerrit:
-        verified: 1
-    failure:
-      gerrit:
-        verified: -1
-
-projects:
-  - name: org/project1
-    pipeline:
-      - project1-pipeline
-  - name: org/project2
-    trigger:
-      - project2-trigger
\ No newline at end of file
diff --git a/tests/fixtures/layout-requirement-status.yaml b/tests/fixtures/layout-requirement-status.yaml
deleted file mode 100644
index af33468..0000000
--- a/tests/fixtures/layout-requirement-status.yaml
+++ /dev/null
@@ -1,20 +0,0 @@
-pipelines:
-  - name: check
-    manager: IndependentPipelineManager
-    require:
-      status: NEW
-    trigger:
-      gerrit:
-        - event: patchset-created
-        - event: comment-added
-    success:
-      gerrit:
-        verified: 1
-    failure:
-      gerrit:
-        verified: -1
-
-projects:
-  - name: org/project
-    check:
-      - project-check
diff --git a/tests/fixtures/layout-requirement-vote1.yaml b/tests/fixtures/layout-requirement-vote1.yaml
deleted file mode 100644
index 7ccadff..0000000
--- a/tests/fixtures/layout-requirement-vote1.yaml
+++ /dev/null
@@ -1,39 +0,0 @@
-pipelines:
-  - name: pipeline
-    manager: IndependentPipelineManager
-    require:
-      approval:
-        - username: jenkins
-          verified: 1
-    trigger:
-      gerrit:
-        - event: comment-added
-    success:
-      gerrit:
-        verified: 1
-    failure:
-      gerrit:
-        verified: -1
-
-  - name: trigger
-    manager: IndependentPipelineManager
-    trigger:
-      gerrit:
-        - event: comment-added
-          require-approval:
-            - username: jenkins
-              verified: 1
-    success:
-      gerrit:
-        verified: 1
-    failure:
-      gerrit:
-        verified: -1
-
-projects:
-  - name: org/project1
-    pipeline:
-      - project1-pipeline
-  - name: org/project2
-    trigger:
-      - project2-trigger
diff --git a/tests/fixtures/layout-requirement-vote2.yaml b/tests/fixtures/layout-requirement-vote2.yaml
deleted file mode 100644
index 33d84d1..0000000
--- a/tests/fixtures/layout-requirement-vote2.yaml
+++ /dev/null
@@ -1,39 +0,0 @@
-pipelines:
-  - name: pipeline
-    manager: IndependentPipelineManager
-    require:
-      approval:
-        - username: jenkins
-          verified: [1, 2]
-    trigger:
-      gerrit:
-        - event: comment-added
-    success:
-      gerrit:
-        verified: 1
-    failure:
-      gerrit:
-        verified: -1
-
-  - name: trigger
-    manager: IndependentPipelineManager
-    trigger:
-      gerrit:
-        - event: comment-added
-          require-approval:
-            - username: jenkins
-              verified: [1, 2]
-    success:
-      gerrit:
-        verified: 1
-    failure:
-      gerrit:
-        verified: -1
-
-projects:
-  - name: org/project1
-    pipeline:
-      - project1-pipeline
-  - name: org/project2
-    trigger:
-      - project2-trigger
diff --git a/tests/test_requirements.py b/tests/test_requirements.py
index a33353a..eecb5fa 100644
--- a/tests/test_requirements.py
+++ b/tests/test_requirements.py
@@ -16,7 +16,6 @@
 
 import logging
 import time
-from unittest import skip
 
 from tests.base import ZuulTestCase
 
@@ -168,90 +167,82 @@
         self.assertEqual(self.history[0].name, job)
 
 
-class TestRequirements(ZuulTestCase):
-    """Test pipeline and trigger requirements"""
+class TestRequirementsVote1(ZuulTestCase):
+    """Requirements with a voting requirement"""
 
-    tenant_config_file = 'config/requirements/main.yaml'
+    tenant_config_file = 'config/requirements/vote1/main.yaml'
 
-    @skip("Disabled for early v3 development")
     def test_pipeline_require_approval_vote1(self):
         "Test pipeline requirement: approval vote with one value"
         return self._test_require_approval_vote1('org/project1',
-                                                 'project1-pipeline')
+                                                 'project1-job')
 
-    @skip("Disabled for early v3 development")
     def test_trigger_require_approval_vote1(self):
         "Test trigger requirement: approval vote with one value"
         return self._test_require_approval_vote1('org/project2',
-                                                 'project2-trigger')
+                                                 'project2-job')
 
     def _test_require_approval_vote1(self, project, job):
-        self.updateConfigLayout(
-            'tests/fixtures/layout-requirement-vote1.yaml')
-        self.sched.reconfigure(self.config)
-        self.registerJobs()
-
         A = self.fake_gerrit.addFakeChange(project, 'master', 'A')
         # A comment event that we will keep submitting to trigger
-        comment = A.addApproval('CRVW', 2, username='nobody')
+        comment = A.addApproval('code-review', 2, username='nobody')
         self.fake_gerrit.addEvent(comment)
         self.waitUntilSettled()
         # No approval from Jenkins so should not be enqueued
         self.assertEqual(len(self.history), 0)
 
         # A -1 from jenkins should not cause it to be enqueued
-        A.addApproval('VRFY', -1, username='jenkins')
+        A.addApproval('verified', -1, username='jenkins')
         self.fake_gerrit.addEvent(comment)
         self.waitUntilSettled()
         self.assertEqual(len(self.history), 0)
 
         # A +1 should allow it to be enqueued
-        A.addApproval('VRFY', 1, username='jenkins')
+        A.addApproval('verified', 1, username='jenkins')
         self.fake_gerrit.addEvent(comment)
         self.waitUntilSettled()
         self.assertEqual(len(self.history), 1)
         self.assertEqual(self.history[0].name, job)
 
-    @skip("Disabled for early v3 development")
+
+class TestRequirementsVote2(ZuulTestCase):
+    """Requirements with a voting requirement"""
+
+    tenant_config_file = 'config/requirements/vote2/main.yaml'
+
     def test_pipeline_require_approval_vote2(self):
         "Test pipeline requirement: approval vote with two values"
         return self._test_require_approval_vote2('org/project1',
-                                                 'project1-pipeline')
+                                                 'project1-job')
 
-    @skip("Disabled for early v3 development")
     def test_trigger_require_approval_vote2(self):
         "Test trigger requirement: approval vote with two values"
         return self._test_require_approval_vote2('org/project2',
-                                                 'project2-trigger')
+                                                 'project2-job')
 
     def _test_require_approval_vote2(self, project, job):
-        self.updateConfigLayout(
-            'tests/fixtures/layout-requirement-vote2.yaml')
-        self.sched.reconfigure(self.config)
-        self.registerJobs()
-
         A = self.fake_gerrit.addFakeChange(project, 'master', 'A')
         # A comment event that we will keep submitting to trigger
-        comment = A.addApproval('CRVW', 2, username='nobody')
+        comment = A.addApproval('code-review', 2, username='nobody')
         self.fake_gerrit.addEvent(comment)
         self.waitUntilSettled()
         # No approval from Jenkins so should not be enqueued
         self.assertEqual(len(self.history), 0)
 
         # A -1 from jenkins should not cause it to be enqueued
-        A.addApproval('VRFY', -1, username='jenkins')
+        A.addApproval('verified', -1, username='jenkins')
         self.fake_gerrit.addEvent(comment)
         self.waitUntilSettled()
         self.assertEqual(len(self.history), 0)
 
         # A -2 from jenkins should not cause it to be enqueued
-        A.addApproval('VRFY', -2, username='jenkins')
+        A.addApproval('verified', -2, username='jenkins')
         self.fake_gerrit.addEvent(comment)
         self.waitUntilSettled()
         self.assertEqual(len(self.history), 0)
 
         # A +1 from jenkins should allow it to be enqueued
-        A.addApproval('VRFY', 1, username='jenkins')
+        A.addApproval('verified', 1, username='jenkins')
         self.fake_gerrit.addEvent(comment)
         self.waitUntilSettled()
         self.assertEqual(len(self.history), 1)
@@ -260,32 +251,32 @@
         # A +2 should allow it to be enqueued
         B = self.fake_gerrit.addFakeChange(project, 'master', 'B')
         # A comment event that we will keep submitting to trigger
-        comment = B.addApproval('CRVW', 2, username='nobody')
+        comment = B.addApproval('code-review', 2, username='nobody')
         self.fake_gerrit.addEvent(comment)
         self.waitUntilSettled()
         self.assertEqual(len(self.history), 1)
 
-        B.addApproval('VRFY', 2, username='jenkins')
+        B.addApproval('verified', 2, username='jenkins')
         self.fake_gerrit.addEvent(comment)
         self.waitUntilSettled()
         self.assertEqual(len(self.history), 2)
         self.assertEqual(self.history[1].name, job)
 
-    @skip("Disabled for early v3 development")
+
+class TestRequirementsState(ZuulTestCase):
+    """Requirements with simple state requirement"""
+
+    tenant_config_file = 'config/requirements/state/main.yaml'
+
     def test_pipeline_require_current_patchset(self):
-        "Test pipeline requirement: current-patchset"
-        self.updateConfigLayout(
-            'tests/fixtures/layout-requirement-current-patchset.yaml')
-        self.sched.reconfigure(self.config)
-        self.registerJobs()
         # Create two patchsets and let their tests settle out. Then
         # comment on first patchset and check that no additional
         # jobs are run.
-        A = self.fake_gerrit.addFakeChange('org/project', 'master', 'A')
-        self.fake_gerrit.addEvent(A.addApproval('CRVW', 1))
+        A = self.fake_gerrit.addFakeChange('current-project', 'master', 'A')
+        self.fake_gerrit.addEvent(A.addApproval('code-review', 1))
         self.waitUntilSettled()
         A.addPatchset()
-        self.fake_gerrit.addEvent(A.addApproval('CRVW', 1))
+        self.fake_gerrit.addEvent(A.addApproval('code-review', 1))
         self.waitUntilSettled()
 
         self.assertEqual(len(self.history), 2)  # one job for each ps
@@ -300,144 +291,129 @@
         self.waitUntilSettled()
         self.assertEqual(len(self.history), 3)
 
-    @skip("Disabled for early v3 development")
     def test_pipeline_require_open(self):
-        "Test pipeline requirement: open"
-        self.updateConfigLayout(
-            'tests/fixtures/layout-requirement-open.yaml')
-        self.sched.reconfigure(self.config)
-        self.registerJobs()
-
-        A = self.fake_gerrit.addFakeChange('org/project', 'master', 'A',
+        A = self.fake_gerrit.addFakeChange('open-project', 'master', 'A',
                                            status='MERGED')
-        self.fake_gerrit.addEvent(A.addApproval('CRVW', 2))
+        self.fake_gerrit.addEvent(A.addApproval('code-review', 2))
         self.waitUntilSettled()
         self.assertEqual(len(self.history), 0)
 
-        B = self.fake_gerrit.addFakeChange('org/project', 'master', 'B')
-        self.fake_gerrit.addEvent(B.addApproval('CRVW', 2))
+        B = self.fake_gerrit.addFakeChange('open-project', 'master', 'B')
+        self.fake_gerrit.addEvent(B.addApproval('code-review', 2))
         self.waitUntilSettled()
         self.assertEqual(len(self.history), 1)
 
-    @skip("Disabled for early v3 development")
     def test_pipeline_require_status(self):
-        "Test pipeline requirement: status"
-        self.updateConfigLayout(
-            'tests/fixtures/layout-requirement-status.yaml')
-        self.sched.reconfigure(self.config)
-        self.registerJobs()
-
-        A = self.fake_gerrit.addFakeChange('org/project', 'master', 'A',
+        A = self.fake_gerrit.addFakeChange('status-project', 'master', 'A',
                                            status='MERGED')
-        self.fake_gerrit.addEvent(A.addApproval('CRVW', 2))
+        self.fake_gerrit.addEvent(A.addApproval('code-review', 2))
         self.waitUntilSettled()
         self.assertEqual(len(self.history), 0)
 
-        B = self.fake_gerrit.addFakeChange('org/project', 'master', 'B')
-        self.fake_gerrit.addEvent(B.addApproval('CRVW', 2))
+        B = self.fake_gerrit.addFakeChange('status-project', 'master', 'B')
+        self.fake_gerrit.addEvent(B.addApproval('code-review', 2))
         self.waitUntilSettled()
         self.assertEqual(len(self.history), 1)
 
+
+class TestRequirementsRejectUsername(ZuulTestCase):
+    """Requirements with reject username requirement"""
+
+    tenant_config_file = 'config/requirements/reject-username/main.yaml'
+
     def _test_require_reject_username(self, project, job):
         "Test negative username's match"
         # Should only trigger if Jenkins hasn't voted.
-        self.updateConfigLayout(
-            'tests/fixtures/layout-requirement-reject-username.yaml')
-        self.sched.reconfigure(self.config)
-        self.registerJobs()
-
         # add in a change with no comments
         A = self.fake_gerrit.addFakeChange(project, 'master', 'A')
         self.waitUntilSettled()
         self.assertEqual(len(self.history), 0)
 
         # add in a comment that will trigger
-        self.fake_gerrit.addEvent(A.addApproval('CRVW', 1,
+        self.fake_gerrit.addEvent(A.addApproval('code-review', 1,
                                                 username='reviewer'))
         self.waitUntilSettled()
         self.assertEqual(len(self.history), 1)
         self.assertEqual(self.history[0].name, job)
 
         # add in a comment from jenkins user which shouldn't trigger
-        self.fake_gerrit.addEvent(A.addApproval('VRFY', 1, username='jenkins'))
+        self.fake_gerrit.addEvent(A.addApproval('verified', 1,
+                                                username='jenkins'))
         self.waitUntilSettled()
         self.assertEqual(len(self.history), 1)
 
         # Check future reviews also won't trigger as a 'jenkins' user has
         # commented previously
-        self.fake_gerrit.addEvent(A.addApproval('CRVW', 1,
+        self.fake_gerrit.addEvent(A.addApproval('code-review', 1,
                                                 username='reviewer'))
         self.waitUntilSettled()
         self.assertEqual(len(self.history), 1)
 
-    @skip("Disabled for early v3 development")
     def test_pipeline_reject_username(self):
         "Test negative pipeline requirement: no comment from jenkins"
         return self._test_require_reject_username('org/project1',
-                                                  'project1-pipeline')
+                                                  'project1-job')
 
-    @skip("Disabled for early v3 development")
     def test_trigger_reject_username(self):
         "Test negative trigger requirement: no comment from jenkins"
         return self._test_require_reject_username('org/project2',
-                                                  'project2-trigger')
+                                                  'project2-job')
+
+
+class TestRequirementsReject(ZuulTestCase):
+    """Requirements with reject requirement"""
+
+    tenant_config_file = 'config/requirements/reject/main.yaml'
 
     def _test_require_reject(self, project, job):
         "Test no approval matches a reject param"
-        self.updateConfigLayout(
-            'tests/fixtures/layout-requirement-reject.yaml')
-        self.sched.reconfigure(self.config)
-        self.registerJobs()
-
         A = self.fake_gerrit.addFakeChange(project, 'master', 'A')
         self.waitUntilSettled()
         self.assertEqual(len(self.history), 0)
 
         # First positive vote should not queue until jenkins has +1'd
-        comment = A.addApproval('VRFY', 1, username='reviewer_a')
+        comment = A.addApproval('verified', 1, username='reviewer_a')
         self.fake_gerrit.addEvent(comment)
         self.waitUntilSettled()
         self.assertEqual(len(self.history), 0)
 
         # Jenkins should put in a +1 which will also queue
-        comment = A.addApproval('VRFY', 1, username='jenkins')
+        comment = A.addApproval('verified', 1, username='jenkins')
         self.fake_gerrit.addEvent(comment)
         self.waitUntilSettled()
         self.assertEqual(len(self.history), 1)
         self.assertEqual(self.history[0].name, job)
 
         # Negative vote should not queue
-        comment = A.addApproval('VRFY', -1, username='reviewer_b')
+        comment = A.addApproval('verified', -1, username='reviewer_b')
         self.fake_gerrit.addEvent(comment)
         self.waitUntilSettled()
         self.assertEqual(len(self.history), 1)
 
         # Future approvals should do nothing
-        comment = A.addApproval('VRFY', 1, username='reviewer_c')
+        comment = A.addApproval('verified', 1, username='reviewer_c')
         self.fake_gerrit.addEvent(comment)
         self.waitUntilSettled()
         self.assertEqual(len(self.history), 1)
 
         # Change/update negative vote should queue
-        comment = A.addApproval('VRFY', 1, username='reviewer_b')
+        comment = A.addApproval('verified', 1, username='reviewer_b')
         self.fake_gerrit.addEvent(comment)
         self.waitUntilSettled()
         self.assertEqual(len(self.history), 2)
         self.assertEqual(self.history[1].name, job)
 
         # Future approvals should also queue
-        comment = A.addApproval('VRFY', 1, username='reviewer_d')
+        comment = A.addApproval('verified', 1, username='reviewer_d')
         self.fake_gerrit.addEvent(comment)
         self.waitUntilSettled()
         self.assertEqual(len(self.history), 3)
         self.assertEqual(self.history[2].name, job)
 
-    @skip("Disabled for early v3 development")
     def test_pipeline_require_reject(self):
         "Test pipeline requirement: rejections absent"
-        return self._test_require_reject('org/project1', 'project1-pipeline')
+        return self._test_require_reject('org/project1', 'project1-job')
 
-    @skip("Disabled for early v3 development")
     def test_trigger_require_reject(self):
         "Test trigger requirement: rejections absent"
-        return self._test_require_reject('org/project2', 'project2-trigger')
+        return self._test_require_reject('org/project2', 'project2-job')