From acccffce615a334021e20c998829d5d599723070 Mon Sep 17 00:00:00 2001 From: Joshua Hesketh Date: Tue, 31 Mar 2015 23:38:17 +1100 Subject: [PATCH] Add in extra connections tests Test reporting back to gerrit as a different user. Test multiple gerrit instances. Squashed with: Assign fake connections to test class dynamically As multiple connections can be configured for testing purposes, it makes more sense to be able to access them all comfortably. Drawback of this change is, that the dynamicism makes the code less readable and less obvious. Previously: If50567dd5a087e9fe46cd4e30f9e0562cda794d7 Co-Authored-By: Jan Hruban Change-Id: I4652799c8b9a626bd2f7f6996d09c95da2953936 --- tests/base.py | 24 ++++---- .../layout-connections-multiple-gerrits.yaml | 37 ++++++++++++ .../layout-connections-multiple-voters.yaml | 20 +++++++ .../zuul-connections-multiple-gerrits.conf | 42 +++++++++++++ .../zuul-connections-same-gerrit.conf | 42 +++++++++++++ tests/test_connection.py | 59 +++++++++++++++++++ 6 files changed, 214 insertions(+), 10 deletions(-) create mode 100644 tests/fixtures/layout-connections-multiple-gerrits.yaml create mode 100644 tests/fixtures/layout-connections-multiple-voters.yaml create mode 100644 tests/fixtures/zuul-connections-multiple-gerrits.conf create mode 100644 tests/fixtures/zuul-connections-same-gerrit.conf diff --git a/tests/base.py b/tests/base.py index b0c7991066..f3bfa4ea8a 100755 --- a/tests/base.py +++ b/tests/base.py @@ -884,7 +884,8 @@ class ZuulTestCase(BaseTestCase): # Make per test copy of Configuration. self.setup_config() self.config.set('zuul', 'layout_config', - os.path.join(FIXTURE_DIR, "layout.yaml")) + os.path.join(FIXTURE_DIR, + self.config.get('zuul', 'layout_config'))) self.config.set('merger', 'git_dir', self.git_root) # For each project in config: @@ -938,10 +939,8 @@ class ZuulTestCase(BaseTestCase): self.sched.trigger_event_queue ] - # Set up connections and give out the default gerrit for testing self.configure_connections() self.sched.registerConnections(self.connections) - self.fake_gerrit = self.connections['gerrit'] def URLOpenerFactory(*args, **kw): if isinstance(args[0], urllib2.Request): @@ -1011,15 +1010,20 @@ class ZuulTestCase(BaseTestCase): # TODO(jhesketh): load the required class automatically if con_driver == 'gerrit': - self.gerrit_changes_dbs[con_name] = {} - self.gerrit_queues_dbs[con_name] = Queue.Queue() - self.event_queues.append(self.gerrit_queues_dbs['gerrit']) + if con_config['server'] not in self.gerrit_changes_dbs.keys(): + self.gerrit_changes_dbs[con_config['server']] = {} + if con_config['server'] not in self.gerrit_queues_dbs.keys(): + self.gerrit_queues_dbs[con_config['server']] = \ + Queue.Queue() + self.event_queues.append( + self.gerrit_queues_dbs[con_config['server']]) self.connections[con_name] = FakeGerritConnection( con_name, con_config, - changes_db=self.gerrit_changes_dbs[con_name], - queues_db=self.gerrit_queues_dbs[con_name], + changes_db=self.gerrit_changes_dbs[con_config['server']], + queues_db=self.gerrit_queues_dbs[con_config['server']], upstream_root=self.upstream_root ) + setattr(self, 'fake_' + con_name, self.connections[con_name]) elif con_driver == 'smtp': self.connections[con_name] = \ zuul.connection.smtp.SMTPConnection(con_name, con_config) @@ -1044,10 +1048,10 @@ class ZuulTestCase(BaseTestCase): zuul.connection.smtp.SMTPConnection( '_legacy_smtp', dict(self.config.items('smtp'))) - def setup_config(self): + def setup_config(self, config_file='zuul.conf'): """Per test config object. Override to set different config.""" self.config = ConfigParser.ConfigParser() - self.config.read(os.path.join(FIXTURE_DIR, "zuul.conf")) + self.config.read(os.path.join(FIXTURE_DIR, config_file)) def assertFinalState(self): # Make sure that git.Repo objects have been garbage collected. diff --git a/tests/fixtures/layout-connections-multiple-gerrits.yaml b/tests/fixtures/layout-connections-multiple-gerrits.yaml new file mode 100644 index 0000000000..029f42f4a3 --- /dev/null +++ b/tests/fixtures/layout-connections-multiple-gerrits.yaml @@ -0,0 +1,37 @@ +pipelines: + - name: check + manager: IndependentPipelineManager + source: review_gerrit + trigger: + review_gerrit: + - event: patchset-created + success: + review_gerrit: + VRFY: 1 + failure: + review_gerrit: + VRFY: -1 + + - name: another_check + manager: IndependentPipelineManager + source: another_gerrit + trigger: + another_gerrit: + - event: patchset-created + success: + another_gerrit: + VRFY: 1 + failure: + another_gerrit: + VRFY: -1 + +projects: + - name: org/project + check: + - project-review-gerrit + another_check: + - project-another-gerrit + + - name: org/project1 + another_check: + - project1-another-gerrit diff --git a/tests/fixtures/layout-connections-multiple-voters.yaml b/tests/fixtures/layout-connections-multiple-voters.yaml new file mode 100644 index 0000000000..2b8df83ee2 --- /dev/null +++ b/tests/fixtures/layout-connections-multiple-voters.yaml @@ -0,0 +1,20 @@ +pipelines: + - name: check + manager: IndependentPipelineManager + source: review_gerrit + trigger: + review_gerrit: + - event: patchset-created + success: + review_gerrit: + VRFY: 1 + failure: + alt_voting_gerrit: + VRFY: -1 + +projects: + - name: org/project + check: + - project-merge: + - project-test1 + - project-test2 diff --git a/tests/fixtures/zuul-connections-multiple-gerrits.conf b/tests/fixtures/zuul-connections-multiple-gerrits.conf new file mode 100644 index 0000000000..f067e6efd1 --- /dev/null +++ b/tests/fixtures/zuul-connections-multiple-gerrits.conf @@ -0,0 +1,42 @@ +[gearman] +server=127.0.0.1 + +[zuul] +layout_config=layout-connections-multiple-voters.yaml +url_pattern=http://logs.example.com/{change.number}/{change.patchset}/{pipeline.name}/{job.name}/{build.number} +job_name_in_report=true + +[merger] +git_dir=/tmp/zuul-test/git +git_user_email=zuul@example.com +git_user_name=zuul +zuul_url=http://zuul.example.com/p + +[swift] +authurl=https://identity.api.example.org/v2.0/ +user=username +key=password +tenant_name=" " + +default_container=logs +region_name=EXP +logserver_prefix=http://logs.example.org/server.app/ + +[connection review_gerrit] +driver=gerrit +server=review.example.com +user=jenkins +sshkey=none + +[connection another_gerrit] +driver=gerrit +server=another.example.com +user=jenkins +sshkey=none + +[connection outgoing_smtp] +driver=smtp +server=localhost +port=25 +default_from=zuul@example.com +default_to=you@example.com diff --git a/tests/fixtures/zuul-connections-same-gerrit.conf b/tests/fixtures/zuul-connections-same-gerrit.conf new file mode 100644 index 0000000000..af31c8adea --- /dev/null +++ b/tests/fixtures/zuul-connections-same-gerrit.conf @@ -0,0 +1,42 @@ +[gearman] +server=127.0.0.1 + +[zuul] +layout_config=layout-connections-multiple-voters.yaml +url_pattern=http://logs.example.com/{change.number}/{change.patchset}/{pipeline.name}/{job.name}/{build.number} +job_name_in_report=true + +[merger] +git_dir=/tmp/zuul-test/git +git_user_email=zuul@example.com +git_user_name=zuul +zuul_url=http://zuul.example.com/p + +[swift] +authurl=https://identity.api.example.org/v2.0/ +user=username +key=password +tenant_name=" " + +default_container=logs +region_name=EXP +logserver_prefix=http://logs.example.org/server.app/ + +[connection review_gerrit] +driver=gerrit +server=review.example.com +user=jenkins +sshkey=none + +[connection alt_voting_gerrit] +driver=gerrit +server=review.example.com +user=civoter +sshkey=none + +[connection outgoing_smtp] +driver=smtp +server=localhost +port=25 +default_from=zuul@example.com +default_to=you@example.com diff --git a/tests/test_connection.py b/tests/test_connection.py index b95fafab3d..c3458ac460 100644 --- a/tests/test_connection.py +++ b/tests/test_connection.py @@ -17,6 +17,8 @@ import testtools import zuul.connection.gerrit +from tests.base import ZuulTestCase + class TestGerritConnection(testtools.TestCase): log = logging.getLogger("zuul.test_connection") @@ -24,3 +26,60 @@ class TestGerritConnection(testtools.TestCase): def test_driver_name(self): self.assertEqual('gerrit', zuul.connection.gerrit.GerritConnection.driver_name) + + +class TestConnections(ZuulTestCase): + def setup_config(self, config_file='zuul-connections-same-gerrit.conf'): + super(TestConnections, self).setup_config(config_file) + + def test_multiple_connections(self): + "Test multiple connections to the one gerrit" + + A = self.fake_review_gerrit.addFakeChange('org/project', 'master', 'A') + self.fake_review_gerrit.addEvent(A.getPatchsetCreatedEvent(1)) + + self.waitUntilSettled() + + self.assertEqual(len(A.patchsets[-1]['approvals']), 1) + self.assertEqual(A.patchsets[-1]['approvals'][0]['type'], 'VRFY') + self.assertEqual(A.patchsets[-1]['approvals'][0]['value'], '1') + self.assertEqual(A.patchsets[-1]['approvals'][0]['by']['username'], + 'jenkins') + + B = self.fake_review_gerrit.addFakeChange('org/project', 'master', 'B') + self.worker.addFailTest('project-test2', B) + self.fake_review_gerrit.addEvent(B.getPatchsetCreatedEvent(1)) + + self.waitUntilSettled() + + self.assertEqual(len(B.patchsets[-1]['approvals']), 1) + self.assertEqual(B.patchsets[-1]['approvals'][0]['type'], 'VRFY') + self.assertEqual(B.patchsets[-1]['approvals'][0]['value'], '-1') + self.assertEqual(B.patchsets[-1]['approvals'][0]['by']['username'], + 'civoter') + + +class TestMultipleGerrits(ZuulTestCase): + def setup_config(self, + config_file='zuul-connections-multiple-gerrits.conf'): + super(TestMultipleGerrits, self).setup_config(config_file) + self.config.set( + 'zuul', 'layout_config', + 'layout-connections-multiple-gerrits.yaml') + + def test_multiple_project_separate_gerrits(self): + self.worker.hold_jobs_in_build = True + + A = self.fake_another_gerrit.addFakeChange( + 'org/project', 'master', 'A') + self.fake_another_gerrit.addEvent(A.getPatchsetCreatedEvent(1)) + + self.waitUntilSettled() + + self.assertEqual(1, len(self.builds)) + self.assertEqual('project-another-gerrit', self.builds[0].name) + self.assertTrue(self.job_has_changes(self.builds[0], A)) + + self.worker.hold_jobs_in_build = False + self.worker.release() + self.waitUntilSettled()