From 595fb3e9eff9103a3cd1cd3286908a5e4dd982ef Mon Sep 17 00:00:00 2001 From: "James E. Blair" Date: Fri, 17 Jun 2022 14:10:07 -0700 Subject: Add ssh_server option to Gerrit driver In a multi-host Gerrit environment (HA or failover) it's plausible that admins may use one mechanism for managing ingress for HTTP requests and a different for SSH requests. Or admins may have different firewall rules for each. To accomodate these situations, Add an "ssh_server" configuration item for Gerrit. This makes the set of hostname-like items the following: * server: the HTTP hostname and default for all others * canonical_hostname: what to use for golang-style git paths * ssh_server: the hostname to use for SSH connections * baseurl: the base URL for HTTP connections The following are equivalent: server=review.example.com ssh_server=ssh-review.example.com and: server=ssh-review.example.com baseurl=https://review.example.com Change-Id: I6e9cd9f48c1a78d8d24bfe176efbb932a18ec83c --- tests/fixtures/zuul-gerrit-ssh.conf | 38 +++++++++++++++++++++++++++++++++++++ tests/unit/test_gerrit.py | 19 +++++++++++++++++++ tests/unit/test_web.py | 4 +++- 3 files changed, 60 insertions(+), 1 deletion(-) create mode 100644 tests/fixtures/zuul-gerrit-ssh.conf (limited to 'tests') diff --git a/tests/fixtures/zuul-gerrit-ssh.conf b/tests/fixtures/zuul-gerrit-ssh.conf new file mode 100644 index 000000000..2f414032c --- /dev/null +++ b/tests/fixtures/zuul-gerrit-ssh.conf @@ -0,0 +1,38 @@ +[statsd] +# note, use 127.0.0.1 rather than localhost to avoid getting ipv6 +# see: https://github.com/jsocol/pystatsd/issues/61 +server=127.0.0.1 + +[scheduler] +tenant_config=main.yaml + +[merger] +git_dir=/tmp/zuul-test/merger-git +git_user_email=zuul@example.com +git_user_name=zuul + +[executor] +git_dir=/tmp/zuul-test/executor-git +load_multiplier=100 + +[connection gerrit] +driver=gerrit +server=review.example.com +ssh_server=ssh-review.example.com +user=jenkins +sshkey=fake_id_rsa_path +password=badpassword + +[connection github] +driver=github +webhook_token=0000000000000000000000000000000000000000 + +[connection smtp] +driver=smtp +server=localhost +port=25 +default_from=zuul@example.com +default_to=you@example.com + +[database] +dburi=$MYSQL_FIXTURE_DBURI$ diff --git a/tests/unit/test_gerrit.py b/tests/unit/test_gerrit.py index bcb8f7bc8..0bb78d9ff 100644 --- a/tests/unit/test_gerrit.py +++ b/tests/unit/test_gerrit.py @@ -148,6 +148,25 @@ class TestGerrit(BaseTestCase): 'ssh://gerrit@localhost:29418/org/project', url) + def test_ssh_server_getGitURL(self): + gerrit_config = { + 'user': 'gerrit', + 'server': 'otherserver', + 'password': '1/badpassword', + 'ssh_server': 'localhost', + 'git_over_ssh': 'true', + } + # The 1/ in the password ensures we test the url encoding + # path; this is the format of password we get from + # googlesource.com. + driver = GerritDriver() + gerrit = GerritConnection(driver, 'review_gerrit', gerrit_config) + project = gerrit.source.getProject('org/project') + url = gerrit.source.getGitUrl(project) + self.assertEqual( + 'ssh://gerrit@localhost:29418/org/project', + url) + class TestGerritWeb(ZuulTestCase): config_file = 'zuul-gerrit-web.conf' diff --git a/tests/unit/test_web.py b/tests/unit/test_web.py index bbed5f426..4bbde2b41 100644 --- a/tests/unit/test_web.py +++ b/tests/unit/test_web.py @@ -316,6 +316,7 @@ class TestWeb(BaseTestWeb): 'baseurl': 'https://review.example.com', 'canonical_hostname': 'review.example.com', 'server': 'review.example.com', + 'ssh_server': 'review.example.com', 'port': 29418, } self.assertEqual([connection], data) @@ -2954,7 +2955,7 @@ class TestHeldAttributeInBuildInfo(BaseTestWeb): class TestWebMulti(BaseTestWeb): - config_file = 'zuul-gerrit-github.conf' + config_file = 'zuul-gerrit-ssh.conf' def test_web_connections_list_multi(self): data = self.get_url('api/connections').json() @@ -2966,6 +2967,7 @@ class TestWebMulti(BaseTestWeb): 'baseurl': url, 'canonical_hostname': 'review.example.com', 'server': 'review.example.com', + 'ssh_server': 'ssh-review.example.com', 'port': 29418, } github_connection = { -- cgit v1.2.1