| # pylint: disable=W0613, E1101 |
| |
| # Copyright (C) 2018 The Android Open Source Project |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); |
| # you may not use this file except in compliance with the License. |
| # You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| |
| import re |
| import time |
| |
| import pytest |
| import requests |
| |
| |
| @pytest.fixture(scope="module") |
| def tmp_dir(tmp_path_factory): |
| return tmp_path_factory.mktemp("gerrit-test") |
| |
| |
| @pytest.fixture(scope="class") |
| def container_run( |
| docker_client, docker_network, tmp_dir, gerrit_image, gerrit_container_factory |
| ): |
| configs = { |
| "gerrit.config": """ |
| [gerrit] |
| basePath = git |
| |
| [httpd] |
| listenUrl = http://*:8081 |
| |
| [test] |
| success = True |
| """, |
| "secure.config": """ |
| [test] |
| success = True |
| """, |
| "replication.config": """ |
| [test] |
| success = True |
| """, |
| } |
| test_setup = gerrit_container_factory( |
| docker_client, docker_network, tmp_dir, gerrit_image, configs, 8081 |
| ) |
| test_setup.start() |
| |
| yield test_setup.gerrit_container |
| |
| test_setup.stop() |
| |
| |
| @pytest.fixture(params=["gerrit.config", "secure.config", "replication.config"]) |
| def config_file_to_test(request): |
| return request.param |
| |
| |
| @pytest.mark.docker |
| @pytest.mark.incremental |
| @pytest.mark.integration |
| @pytest.mark.slow |
| class TestGerritStartScript: |
| @pytest.mark.timeout(60) |
| def test_gerrit_gerrit_starts_up(self, container_run): |
| def wait_for_gerrit_start(): |
| log = container_run.logs().decode("utf-8") |
| return re.search(r"Gerrit Code Review .+ ready", log) |
| |
| while not wait_for_gerrit_start: |
| continue |
| |
| def test_gerrit_custom_gerrit_config_available( |
| self, container_run, config_file_to_test |
| ): |
| exit_code, output = container_run.exec_run( |
| "git config --file=/var/gerrit/etc/%s --get test.success" |
| % config_file_to_test |
| ) |
| output = output.decode("utf-8").strip() |
| assert exit_code == 0 |
| assert output == "True" |
| |
| @pytest.mark.timeout(60) |
| def test_gerrit_httpd_is_responding(self, container_run): |
| status = None |
| while not status == 200: |
| try: |
| response = requests.get("http://localhost:8081") |
| status = response.status_code |
| except requests.exceptions.ConnectionError: |
| time.sleep(1) |
| |
| assert response.status_code == 200 |
| assert re.search(r'content="Gerrit Code Review"', response.text) |