Skip to content

Commit 5d408ce

Browse files
tkiliasckunki
andauthored
#200: Fixed reuse database setup (#203)
* Refactor test_runner_db_test_task.py Co-authored-by: Christoph Kuhnke <[email protected]>
1 parent 5e47e9c commit 5d408ce

File tree

2 files changed

+78
-23
lines changed

2 files changed

+78
-23
lines changed

exasol_script_languages_container_tool/lib/tasks/test/test_runner_db_test_task.py

Lines changed: 18 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,6 @@
2222
class TestRunnerDBTestTask(FlavorBaseTask,
2323
SpawnTestEnvironmentParameter,
2424
RunDBTestsInTestConfigParameter):
25-
# TODO execute tests only if the exported container is new build
26-
# - a pulled one is ok,
27-
# - needs change in image-info and export-info)
28-
# - add options force tests
29-
# - only possible if the hash of exaslc also goes into the image hashes
30-
3125
reuse_uploaded_container = luigi.BoolParameter(False, significant=False)
3226
release_goal = luigi.Parameter()
3327

@@ -62,41 +56,42 @@ def run_task(self):
6256
export_info = export_infos[self.release_goal]
6357
self.test_environment_info = self.get_values_from_future(
6458
self._test_environment_info_future) # type: EnvironmentInfo
65-
reuse_release_container = \
66-
self.reuse_database and \
67-
self.reuse_uploaded_container and \
68-
not export_info.is_new
6959
database_credentials = self.get_database_credentials()
7060
yield from self.upload_container(database_credentials,
71-
export_info,
72-
reuse_release_container)
61+
export_info)
7362
yield from self.populate_test_engine_data(self.test_environment_info, database_credentials)
7463
test_results = yield from self.run_test(self.test_environment_info, export_info)
7564
self.return_object(test_results)
7665

77-
def upload_container(self, database_credentials, export_info, reuse_release_container):
66+
def upload_container(self, database_credentials: DatabaseCredentials, export_info: ExportInfo):
67+
reuse = \
68+
self.reuse_database and \
69+
self.reuse_uploaded_container and \
70+
not export_info.is_new
7871
upload_task = self.create_child_task_with_common_params(
7972
UploadExportedContainer,
8073
export_info=export_info,
8174
environment_name=self.test_environment_info.name,
8275
test_environment_info=self.test_environment_info,
8376
release_name=export_info.name,
84-
reuse_uploaded=reuse_release_container,
77+
reuse_uploaded=reuse,
8578
bucketfs_write_password=database_credentials.bucketfs_write_password
8679
)
8780
yield from self.run_dependencies(upload_task)
8881

8982
def populate_test_engine_data(self, test_environment_info: EnvironmentInfo,
9083
database_credentials: DatabaseCredentials) -> None:
91-
task = self.create_child_task(
92-
PopulateTestEngine,
93-
test_environment_info=test_environment_info,
94-
environment_name=self.test_environment_info.name,
95-
db_user=database_credentials.db_user,
96-
db_password=database_credentials.db_password,
97-
bucketfs_write_password=database_credentials.bucketfs_write_password
98-
)
99-
yield from self.run_dependencies(task)
84+
reuse = self.reuse_database_setup and self.test_environment_info.database_info.reused
85+
if not reuse:
86+
task = self.create_child_task(
87+
PopulateTestEngine,
88+
test_environment_info=test_environment_info,
89+
environment_name=self.test_environment_info.name,
90+
db_user=database_credentials.db_user,
91+
db_password=database_credentials.db_password,
92+
bucketfs_write_password=database_credentials.bucketfs_write_password
93+
)
94+
yield from self.run_dependencies(task)
10095

10196
def get_database_credentials(self) -> DatabaseCredentials:
10297
if self.environment_type == EnvironmentType.external_db:
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
import os
2+
import unittest
3+
from pathlib import Path
4+
5+
from exasol_integration_test_docker_environment.lib.docker import ContextDockerClient
6+
from exasol_integration_test_docker_environment.lib.docker.container.utils import remove_docker_container
7+
8+
import utils as exaslct_utils
9+
10+
from typing import Dict, List
11+
12+
13+
def get_docker_container_ids(*names) -> Dict[str, str]:
14+
result = {}
15+
with ContextDockerClient() as docker_client:
16+
for name in names:
17+
result[name] = docker_client.containers.get(name).id
18+
return result
19+
20+
21+
class RunDBTestDockerDBReuseTest(unittest.TestCase):
22+
23+
def setUp(self):
24+
print(f"SetUp {self.__class__.__name__}")
25+
self.test_environment = exaslct_utils.ExaslctTestEnvironmentWithCleanUp(self, exaslct_utils.EXASLCT_DEFAULT_BIN)
26+
self._test_container_name = f"test_container_{self.test_environment.flavor_path.name}_release"
27+
self._db_container_name = f"db_container_{self.test_environment.flavor_path.name}_release"
28+
self.test_environment.clean_images()
29+
self.remove_docker_container()
30+
31+
def tearDown(self):
32+
self.remove_docker_container()
33+
self.test_environment.close()
34+
35+
def remove_docker_container(self):
36+
remove_docker_container([self._test_container_name, self._db_container_name])
37+
38+
def test_reuse(self):
39+
def run_command():
40+
command = [f"{self.test_environment.executable}",
41+
f"run-db-test",
42+
f"{exaslct_utils.get_full_test_container_folder_parameter()}",
43+
"--reuse-test-environment"]
44+
self.test_environment.run_command(" ".join(command), track_task_dependencies=True)
45+
46+
def container_ids() -> Dict[str, str]:
47+
return get_docker_container_ids(
48+
self._test_container_name,
49+
self._db_container_name,
50+
)
51+
52+
run_command()
53+
old_ids = container_ids()
54+
run_command()
55+
new_ids = container_ids()
56+
self.assertEqual(old_ids, new_ids)
57+
58+
59+
if __name__ == '__main__':
60+
unittest.main()

0 commit comments

Comments
 (0)