Provide a factory providing gerrit container
So far the provisioning of a gerrit container with a factory was
only performed in the gerrit-slave container tests. Such a
container will also be needed to test the functionality of the
gerrit-init container.
This change moves the factory for a gerrit container out of the
gerrit-slave container tests to the conftests.py file for
container-image tests. Thereby, the factory is available for all
container-image tests.
Change-Id: Ica537347bef3ba72f0de408a81c5c226aaaee14d
diff --git a/tests/container-images/conftest.py b/tests/container-images/conftest.py
index 3feb67f..66892fa 100644
--- a/tests/container-images/conftest.py
+++ b/tests/container-images/conftest.py
@@ -12,6 +12,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
+import os.path
import time
from sqlalchemy import create_engine
@@ -74,3 +75,66 @@
return MySQLContainer(docker_client, docker_network, host, port, root_pwd)
return get_mysql_container
+
+class GerritContainer():
+
+ def __init__(self, docker_client, docker_network, tmp_dir, image,
+ configs, port):
+ self.docker_client = docker_client
+ self.docker_network = docker_network
+ self.tmp_dir = tmp_dir
+ self.image = image
+ self.configs = configs
+ self.port = port
+
+ self.gerrit_container = None
+
+ self._start_gerrit_container()
+
+ def _create_config_files(self):
+ tmp_config_dir = os.path.join(self.tmp_dir, "configs")
+ if not os.path.isdir(tmp_config_dir):
+ os.mkdir(tmp_config_dir)
+ config_paths = {}
+ for filename, content in self.configs.items():
+ gerrit_config_file = os.path.join(tmp_config_dir, filename)
+ with open(gerrit_config_file, "w") as config_file:
+ config_file.write(content)
+ config_paths[filename] = gerrit_config_file
+ return config_paths
+
+ def _define_volume_mounts(self):
+ volumes = {v: {
+ "bind": "/var/config/%s" % k,
+ "mode": "rw"
+ } for (k, v) in self._create_config_files().items()}
+ volumes[os.path.join(self.tmp_dir, "lib")] = {
+ "bind": "/var/gerrit/lib",
+ "mode": "rw"
+ }
+ return volumes
+
+ def _start_gerrit_container(self):
+ self.gerrit_container = self.docker_client.containers.run(
+ image=self.image.id,
+ user="gerrit",
+ volumes=self._define_volume_mounts(),
+ ports={
+ str(self.port): str(self.port)
+ },
+ network=self.docker_network.name,
+ detach=True,
+ auto_remove=True
+ )
+
+ def stop_gerrit_container(self):
+ self.gerrit_container.stop(timeout=1)
+
+@pytest.fixture(scope="session")
+def gerrit_container_factory():
+ def get_gerrit_container(docker_client, docker_network, tmp_dir, image,
+ gerrit_config, port):
+ return GerritContainer(docker_client, docker_network, tmp_dir, image,
+ gerrit_config, port)
+
+ return get_gerrit_container
diff --git a/tests/container-images/gerrit-slave/test_container_integration_gerrit_slave.py b/tests/container-images/gerrit-slave/test_container_integration_gerrit_slave.py
index 386b190..743293e 100644
--- a/tests/container-images/gerrit-slave/test_container_integration_gerrit_slave.py
+++ b/tests/container-images/gerrit-slave/test_container_integration_gerrit_slave.py
@@ -28,86 +28,36 @@
CONFIG_FILES = ["gerrit.config", "secure.config"]
-class GerritSlaveTestSetup():
-
- def __init__(self, docker_client, docker_network, tmp_dir, image,
- gerrit_config, port):
- self.docker_client = docker_client
- self.docker_network = docker_network
- self.tmp_dir = tmp_dir
- self.image = image
- self.gerrit_config = gerrit_config
- self.port = port
-
- self.gerrit_container = None
-
- self._start_gerrit_container()
-
- def _create_config_files(self):
- tmp_config_dir = os.path.join(self.tmp_dir, "configs")
- if not os.path.isdir(tmp_config_dir):
- os.mkdir(tmp_config_dir)
- configs = {}
- for config in CONFIG_FILES:
- gerrit_config_file = os.path.join(tmp_config_dir, config)
- with open(gerrit_config_file, "w") as config_file:
- config_file.write(self.gerrit_config)
- configs[config] = gerrit_config_file
- return configs
-
- def _define_volume_mounts(self):
- volumes = {v: {
- "bind": "/var/config/%s" % k,
- "mode": "rw"
- } for (k, v) in self._create_config_files().items()}
- volumes[os.path.join(self.tmp_dir, "lib")] = {
- "bind": "/var/gerrit/lib",
- "mode": "rw"
- }
- return volumes
-
- def _start_gerrit_container(self):
- self.gerrit_container = self.docker_client.containers.run(
- image=self.image.id,
- user="gerrit",
- volumes=self._define_volume_mounts(),
- ports={
- str(self.port): str(self.port)
- },
- network=self.docker_network.name,
- detach=True,
- auto_remove=True
- )
-
- def stop_gerrit_container(self):
- self.gerrit_container.stop(timeout=1)
-
-
@pytest.fixture(scope="module")
def tmp_dir(tmp_path_factory):
return tmp_path_factory.mktemp("gerrit-slave-test")
@pytest.fixture(scope="class")
def container_run_h2(request, docker_client, docker_network, tmp_dir,
- gerrit_slave_image):
- config = """
- [gerrit]
- basePath = git
+ gerrit_slave_image, gerrit_container_factory):
+ configs = {
+ "gerrit.config": """
+ [gerrit]
+ basePath = git
- [database]
- type = H2
+ [database]
+ type = H2
- [httpd]
- listenUrl = http://*:8081
+ [httpd]
+ listenUrl = http://*:8081
- [container]
- slave = true
+ [container]
+ slave = true
- [test]
- success = True
- """
- test_setup = GerritSlaveTestSetup(
- docker_client, docker_network, tmp_dir, gerrit_slave_image, config, 8081)
+ [test]
+ success = True
+ """,
+ "secure.config": """
+ [test]
+ success = True
+ """}
+ test_setup = gerrit_container_factory(
+ docker_client, docker_network, tmp_dir, gerrit_slave_image, configs, 8081)
request.addfinalizer(test_setup.stop_gerrit_container)
@@ -115,22 +65,23 @@
@pytest.fixture(scope="class")
def container_run_mysql(request, docker_client, docker_network, tmp_dir,
- gerrit_slave_image):
- config = """
- [gerrit]
- basePath = git
+ gerrit_slave_image, gerrit_container_factory):
+ configs = {
+ "gerrit.config": """
+ [gerrit]
+ basePath = git
- [database]
- type = MySQL
+ [database]
+ type = MySQL
- [httpd]
- listenUrl = http://*:8082
+ [httpd]
+ listenUrl = http://*:8082
- [container]
- slave = true
- """
- test_setup = GerritSlaveTestSetup(
- docker_client, docker_network, tmp_dir, gerrit_slave_image, config, 8082)
+ [container]
+ slave = true
+ """}
+ test_setup = gerrit_container_factory(
+ docker_client, docker_network, tmp_dir, gerrit_slave_image, configs, 8082)
request.addfinalizer(test_setup.stop_gerrit_container)