blob: b2b1327669718c9a65077af9f4c79ff4154efe5e [file] [log] [blame]
# pylint: disable=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 os
import pytest
@pytest.fixture(scope="function")
def temp_site(tmp_path_factory):
return tmp_path_factory.mktemp("gerrit-index-test")
@pytest.fixture(scope="function")
def container_run_endless(request, docker_client, gerrit_init_image, temp_site):
container_run = docker_client.containers.run(
image=gerrit_init_image.id,
entrypoint="/bin/ash",
command=["-c", "tail -f /dev/null"],
volumes={str(temp_site): {"bind": "/var/gerrit", "mode": "rw"}},
user="gerrit",
detach=True,
auto_remove=True,
platform="linux/amd64",
)
def stop_container():
container_run.stop(timeout=1)
request.addfinalizer(stop_container)
return container_run
@pytest.mark.incremental
class TestGerritReindex:
def _get_indices(self, container):
_, indices = container.exec_run(
"git config -f /var/gerrit/index/gerrit_index.config "
+ "--name-only "
+ "--get-regexp index"
)
indices = indices.decode().strip().splitlines()
return [index.split(".")[1] for index in indices]
def test_gerrit_init_skips_reindexing_on_fresh_site(
self, temp_site, container_run_endless
):
assert not os.path.exists(
os.path.join(temp_site, "index", "gerrit_index.config")
)
exit_code, _ = container_run_endless.exec_run(
(
"python3 /var/tools/gerrit-initializer "
"-s /var/gerrit -c /var/config/gerrit-init.yaml init"
)
)
assert exit_code == 0
expected_files = ["gerrit_index.config"] + self._get_indices(
container_run_endless
)
for expected_file in expected_files:
assert os.path.exists(os.path.join(temp_site, "index", expected_file))
timestamp_index_dir = os.path.getctime(os.path.join(temp_site, "index"))
exit_code, _ = container_run_endless.exec_run(
(
"python3 /var/tools/gerrit-initializer "
"-s /var/gerrit -c /var/config/gerrit-init.yaml reindex"
)
)
assert exit_code == 0
assert timestamp_index_dir == os.path.getctime(os.path.join(temp_site, "index"))
def test_gerrit_init_fixes_missing_index_config(
self, container_run_endless, temp_site
):
container_run_endless.exec_run(
(
"python3 /var/tools/gerrit-initializer "
"-s /var/gerrit -c /var/config/gerrit-init.yaml init"
)
)
os.remove(os.path.join(temp_site, "index", "gerrit_index.config"))
exit_code, _ = container_run_endless.exec_run(
(
"python3 /var/tools/gerrit-initializer "
"-s /var/gerrit -c /var/config/gerrit-init.yaml reindex"
)
)
assert exit_code == 0
exit_code, _ = container_run_endless.exec_run("/var/gerrit/bin/gerrit.sh start")
assert exit_code == 0
def test_gerrit_init_fixes_unready_indices(self, container_run_endless):
container_run_endless.exec_run(
(
"python3 /var/tools/gerrit-initializer "
"-s /var/gerrit -c /var/config/gerrit-init.yaml init"
)
)
indices = self._get_indices(container_run_endless)
assert indices
container_run_endless.exec_run(
f"git config -f /var/gerrit/index/gerrit_index.config {indices[0]} false"
)
exit_code, _ = container_run_endless.exec_run(
(
"python3 /var/tools/gerrit-initializer "
"-s /var/gerrit -c /var/config/gerrit-init.yaml reindex"
)
)
assert exit_code == 0
exit_code, _ = container_run_endless.exec_run("/var/gerrit/bin/gerrit.sh start")
assert exit_code == 0
def test_gerrit_init_fixes_outdated_indices(self, container_run_endless, temp_site):
container_run_endless.exec_run(
(
"python3 /var/tools/gerrit-initializer "
"-s /var/gerrit -c /var/config/gerrit-init.yaml init"
)
)
index = self._get_indices(container_run_endless)[0]
(name, version) = index.split("_")
os.rename(
os.path.join(temp_site, "index", index),
os.path.join(temp_site, "index", f"{name}_{int(version) - 1:04d}"),
)
exit_code, _ = container_run_endless.exec_run(
(
"python3 /var/tools/gerrit-initializer "
"-s /var/gerrit -c /var/config/gerrit-init.yaml reindex"
)
)
assert exit_code == 0
exit_code, _ = container_run_endless.exec_run("/var/gerrit/bin/gerrit.sh start")
assert exit_code == 0