Skip to content

Commit 57ab64b

Browse files
committed
Improvement of database testing.
Call sql commands at once. Change initial names to understandable. Use DatabaseWrapper directly to call sql commands. Check mariadb configuration values together. Do not duplicate code. Signed-off-by: Petr "Stone" Hracek <phracek@redhat.com>
1 parent cce9f54 commit 57ab64b

8 files changed

+275
-204
lines changed

test/test_container_basics.py

Lines changed: 12 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -27,18 +27,18 @@ class TestMariaDBBasicsContainer:
2727
"""
2828

2929
def setup_method(self):
30-
self.s2i_db = build_s2i_app(app_path=VARS.TEST_DIR / "test-app")
31-
self.s2i_db.set_new_db_type(db_type="mysql")
30+
self.app_image = build_s2i_app(app_path=VARS.TEST_DIR / "test-app")
31+
self.app_image.set_new_db_type(db_type="mysql")
3232

3333
def teardown_method(self):
34-
self.s2i_db.cleanup()
34+
self.app_image.cleanup()
3535

3636
def test_s2i_usage(self):
3737
"""
3838
Test container creation fails with invalid combinations of arguments.
3939
"""
4040
cid_config_build = "s2i_config_build"
41-
self.s2i_db.assert_container_creation_fails(
41+
self.app_image.assert_container_creation_fails(
4242
cid_file_name=cid_config_build,
4343
command="",
4444
container_args=[
@@ -48,7 +48,7 @@ def test_s2i_usage(self):
4848
"-e MYSQL_ROOT_PASSWORD=pass",
4949
],
5050
)
51-
assert self.s2i_db.create_container(
51+
assert self.app_image.create_container(
5252
cid_file_name=cid_config_build,
5353
container_args=[
5454
"-e MYSQL_USER=config_test_user",
@@ -58,17 +58,12 @@ def test_s2i_usage(self):
5858
"-e MYSQL_OPERATIONS_PASSWORD=operations_user",
5959
],
6060
)
61-
cip = self.s2i_db.get_cip(cid_file_name=cid_config_build)
61+
cip = self.app_image.get_cip(cid_file_name=cid_config_build)
6262
assert cip
63-
assert self.s2i_db.test_db_connection(
63+
assert self.app_image.test_db_connection(
6464
container_ip=cip, username="operations_user", password="operations_user"
6565
)
66-
cid = self.s2i_db.get_cid(cid_file_name=cid_config_build)
67-
db_configuration = PodmanCLIWrapper.podman_exec_shell_command(
68-
cid_file_name=cid,
69-
cmd="cat /etc/my.cnf /etc/my.cnf.d/*",
70-
)
71-
assert db_configuration
66+
cid = self.app_image.get_cid(cid_file_name=cid_config_build)
7267
PodmanCLIWrapper.call_podman_command(cmd=f"stop {cid}")
7368

7469
def test_s2i_usage_with_mount(self):
@@ -83,7 +78,7 @@ def test_s2i_usage_with_mount(self):
8378
]
8479
)
8580
cid_s2i_test_mount = "s2i_test_mount"
86-
self.s2i_db.create_container(
81+
self.app_image.create_container(
8782
cid_file_name=cid_s2i_test_mount,
8883
container_args=[
8984
"-e MYSQL_USER=config_test_user",
@@ -94,20 +89,15 @@ def test_s2i_usage_with_mount(self):
9489
f"-v {data_dir}/test-app:/opt/app-root/src/:z",
9590
],
9691
)
97-
cip_test_mount = self.s2i_db.get_cip(cid_file_name=cid_s2i_test_mount)
92+
cip_test_mount = self.app_image.get_cip(cid_file_name=cid_s2i_test_mount)
9893
assert cip_test_mount
99-
assert self.s2i_db.test_db_connection(
94+
assert self.app_image.test_db_connection(
10095
container_ip=cip_test_mount,
10196
username="operations_user",
10297
password="operations_pass",
10398
max_attempts=10,
10499
)
105-
cid = self.s2i_db.get_cid(cid_file_name=cid_s2i_test_mount)
100+
cid = self.app_image.get_cid(cid_file_name=cid_s2i_test_mount)
106101
assert cid
107-
db_configuration = PodmanCLIWrapper.podman_exec_shell_command(
108-
cid_file_name=cid,
109-
cmd="cat /etc/my.cnf /etc/my.cnf.d/*",
110-
)
111-
assert db_configuration
112102
PodmanCLIWrapper.call_podman_command(cmd=f"stop {cid}")
113103
shutil.rmtree(data_dir)

test/test_container_configuration.py

Lines changed: 63 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
from container_ci_suite.container_lib import ContainerTestLib
66
from container_ci_suite.engines.podman_wrapper import PodmanCLIWrapper
7+
from container_ci_suite.container_lib import DatabaseWrapper
78

89
from conftest import VARS
910

@@ -14,9 +15,15 @@ class TestMariaDBConfigurationContainer:
1415
"""
1516

1617
def setup_method(self):
18+
"""
19+
Setup the test environment.
20+
"""
1721
self.db = ContainerTestLib(image_name=VARS.IMAGE_NAME)
1822

1923
def teardown_method(self):
24+
"""
25+
Teardown the test environment.
26+
"""
2027
self.db.cleanup()
2128

2229
def test_container_creation_fails(self):
@@ -155,11 +162,18 @@ class TestMariaDBConfigurationTests:
155162
"""
156163

157164
def setup_method(self):
158-
self.db = ContainerTestLib(image_name=VARS.IMAGE_NAME)
159-
self.db.set_new_db_type(db_type="mysql")
165+
"""
166+
Setup the test environment.
167+
"""
168+
self.db_config = ContainerTestLib(image_name=VARS.IMAGE_NAME)
169+
self.db_config.set_new_db_type(db_type="mysql")
170+
self.db_api = DatabaseWrapper(image_name=VARS.IMAGE_NAME)
160171

161172
def teardown_method(self):
162-
self.db.cleanup()
173+
"""
174+
Teardown the test environment.
175+
"""
176+
self.db_config.cleanup()
163177

164178
def test_configuration_auto_calculated_settings(self):
165179
"""
@@ -168,7 +182,7 @@ def test_configuration_auto_calculated_settings(self):
168182
cid_config_test = "auto-config_test"
169183
username = "config_test_user"
170184
password = "config_test"
171-
assert self.db.create_container(
185+
assert self.db_config.create_container(
172186
cid_file_name=cid_config_test,
173187
container_args=[
174188
"--env MYSQL_COLLATION=latin2_czech_cs",
@@ -179,57 +193,48 @@ def test_configuration_auto_calculated_settings(self):
179193
],
180194
docker_args="--memory=256m",
181195
)
182-
cip = self.db.get_cip(cid_file_name=cid_config_test)
196+
cip = self.db_config.get_cip(cid_file_name=cid_config_test)
183197
assert cip
184-
return_value = self.db.test_db_connection(
198+
assert self.db_config.test_db_connection(
185199
container_ip=cip,
186200
username=username,
187201
password=password,
188202
max_attempts=10,
189203
database=VARS.DB_NAME,
190204
)
191-
assert return_value
192-
cid = self.db.get_cid(cid_file_name=cid_config_test)
205+
cid = self.db_config.get_cid(cid_file_name=cid_config_test)
193206
db_configuration = PodmanCLIWrapper.podman_exec_shell_command(
194207
cid_file_name=cid,
195208
cmd="cat /etc/my.cnf /etc/my.cnf.d/*",
196209
)
197-
assert db_configuration
198-
assert re.search(
199-
r"key_buffer_size\s*=\s*25M",
200-
db_configuration,
201-
)
202-
assert re.search(
203-
r"read_buffer_size\s*=\s*12M",
204-
db_configuration,
205-
)
206-
assert re.search(
207-
r"innodb_log_file_size\s*=\s*38M",
208-
db_configuration,
209-
)
210-
assert re.search(
211-
r"innodb_log_buffer_size\s*=\s*38M",
212-
db_configuration,
213-
)
210+
words = [
211+
"key_buffer_size\\s*=\\s*25M",
212+
"read_buffer_size\\s*=\\s*12M",
213+
"innodb_log_file_size\\s*=\\s*38M",
214+
"innodb_log_buffer_size\\s*=\\s*38M",
215+
]
216+
for word in words:
217+
assert re.search(word, db_configuration), (
218+
f"Word {word} not found in {db_configuration}"
219+
)
214220
# do some real work to test replication in practice
215-
return_value = self.db.test_db_connection(
221+
self.db_api.run_sql_command(
216222
container_ip=cip,
217223
username=username,
218224
password=password,
225+
container_id=cid,
219226
database=VARS.DB_NAME,
220-
sql_cmd="-e 'CREATE TABLE tbl (col VARCHAR(20));'",
227+
sql_cmd="CREATE TABLE tbl (col VARCHAR(20));",
228+
podman_run_command="exec",
221229
)
222-
print(f"Creating table: {return_value}")
223-
assert self.db.test_db_connection(
230+
show_table_output = self.db_api.run_sql_command(
224231
container_ip=cip,
225232
username=username,
226233
password=password,
227-
sql_cmd="-e 'SHOW CREATE TABLE tbl;'",
234+
container_id=cid,
228235
database=VARS.DB_NAME,
229-
)
230-
show_table_output = PodmanCLIWrapper.call_podman_command(
231-
cmd=f"exec {cid} mysql -uroot -e 'SHOW CREATE TABLE tbl;' {VARS.DB_NAME}",
232-
ignore_error=True,
236+
sql_cmd="SHOW CREATE TABLE tbl;",
237+
podman_run_command="exec",
233238
)
234239
assert "CHARSET=latin2" in show_table_output
235240
assert "COLLATE=latin2_czech_cs" in show_table_output
@@ -240,7 +245,7 @@ def test_configuration_options_settings(self):
240245
Test MariaDB container configuration options.
241246
"""
242247
cid_config_test = "config_test"
243-
assert self.db.create_container(
248+
assert self.db_config.create_container(
244249
cid_file_name=cid_config_test,
245250
container_args=[
246251
"--env MYSQL_USER=config_test_user",
@@ -262,52 +267,43 @@ def test_configuration_options_settings(self):
262267
"--env WORKAROUND_DOCKER_BUG_14203=",
263268
],
264269
)
265-
cip = self.db.get_cip(cid_file_name=cid_config_test)
270+
cip = self.db_config.get_cip(cid_file_name=cid_config_test)
266271
assert cip
267-
assert self.db.test_db_connection(
272+
assert self.db_config.test_db_connection(
268273
container_ip=cip,
269274
username="config_test_user",
270275
password="config_test",
271276
database=VARS.DB_NAME,
272277
)
273-
cip = self.db.get_cip(cid_file_name=cid_config_test)
278+
cip = self.db_config.get_cip(cid_file_name=cid_config_test)
274279
assert cip
275-
return_value = self.db.test_db_connection(
280+
assert self.db_config.test_db_connection(
276281
container_ip=cip,
277282
username="config_test_user",
278283
password="config_test",
279284
max_attempts=10,
280285
database=VARS.DB_NAME,
281286
)
282-
assert return_value
283-
cid = self.db.get_cid(cid_file_name=cid_config_test)
287+
cid = self.db_config.get_cid(cid_file_name=cid_config_test)
284288
db_configuration = PodmanCLIWrapper.podman_exec_shell_command(
285289
cid_file_name=cid,
286290
cmd="cat /etc/my.cnf /etc/my.cnf.d/*",
287291
)
288-
assert db_configuration
289-
assert re.search(
290-
r"lower_case_table_names\s*=\s*1",
291-
db_configuration,
292-
)
293-
assert re.search(
294-
r"general_log\s*=\s*1",
295-
db_configuration,
296-
)
297-
assert re.search(
298-
r"max_connections\s*=\s*1337",
299-
db_configuration,
300-
re.MULTILINE | re.IGNORECASE,
301-
)
302-
assert re.search(r"ft_min_word_len\s*=\s*8", db_configuration)
303-
assert re.search(
304-
r"ft_max_word_len\s*=\s*15",
305-
db_configuration,
306-
)
307-
assert re.search(r"max_allowed_packet\s*=\s*10M", db_configuration)
308-
assert re.search(r"table_open_cache\s*=\s*100", db_configuration)
309-
assert re.search(r"sort_buffer_size\s*=\s*256K", db_configuration)
310-
assert re.search(r"key_buffer_size\s*=\s*16M", db_configuration)
311-
assert re.search(r"read_buffer_size\s*=\s*16M", db_configuration)
312-
assert re.search(r"innodb_log_file_size\s*=\s*4M", db_configuration)
313-
assert re.search(r"innodb_log_buffer_size\s*=\s*4M", db_configuration)
292+
words = [
293+
"lower_case_table_names\\s*=\\s*1",
294+
"general_log\\s*=\\s*1",
295+
"max_connections\\s*=\\s*1337",
296+
"ft_min_word_len\\s*=\\s*8",
297+
"ft_max_word_len\\s*=\\s*15",
298+
"max_allowed_packet\\s*=\\s*10M",
299+
"table_open_cache\\s*=\\s*100",
300+
"sort_buffer_size\\s*=\\s*256K",
301+
"key_buffer_size\\s*=\\s*16M",
302+
"read_buffer_size\\s*=\\s*16M",
303+
"innodb_log_file_size\\s*=\\s*4M",
304+
"innodb_log_buffer_size\\s*=\\s*4M",
305+
]
306+
for word in words:
307+
assert re.search(word, db_configuration), (
308+
f"Word {word} not found in {db_configuration}"
309+
)

0 commit comments

Comments
 (0)