Randomize integration tests settings

This commit is contained in:
vdimir 2024-09-06 13:50:13 +00:00
parent 4c4a051d5e
commit cf9200f1d0
No known key found for this signature in database
GPG Key ID: 6EE4CE2BEDC51862
5 changed files with 71 additions and 0 deletions

View File

@ -19,6 +19,7 @@ import urllib.parse
import shlex
import urllib3
import requests
from pathlib import Path
try:
# Please, add modules that required for specific tests only here.
@ -52,6 +53,7 @@ from helpers.client import QueryRuntimeException
import docker
from .client import Client
from .random_settings import write_random_settings_config
from .retry_decorator import retry
from .config_cluster import *
@ -4602,6 +4604,8 @@ class ClickHouseInstance:
if len(self.custom_dictionaries_paths):
write_embedded_config("0_common_enable_dictionaries.xml", self.config_d_dir)
write_random_settings_config(Path(users_d_dir) / "0_random_settings.xml")
version = None
version_parts = self.tag.split(".")
if version_parts[0].isdigit() and version_parts[1].isdigit():

View File

@ -0,0 +1,28 @@
import random
def randomize_settings():
yield "max_joined_block_size_rows", random.randint(8000, 100000)
if random.random() < 0.5:
yield "max_block_size", random.randint(8000, 100000)
def write_random_settings_config(destination):
with open(destination, "w") as f:
f.write(
"""
<clickhouse>
<profiles>
<default>
"""
)
for setting, value in randomize_settings():
f.write(f"<{setting}>{value}</{setting}>\n")
f.write(
"""
</default>
</profiles>
</clickhouse>
"""
)

View File

@ -0,0 +1,7 @@
<clickhouse>
<profiles>
<default>
<max_block_size>59999</max_block_size>
</default>
</profiles>
</clickhouse>

View File

@ -0,0 +1,32 @@
import pytest
from helpers.cluster import ClickHouseCluster
cluster = ClickHouseCluster(__file__)
node = cluster.add_instance("node1", user_configs=["config/users.xml"])
@pytest.fixture(scope="module")
def started_cluster():
try:
cluster.start()
yield cluster
finally:
cluster.shutdown()
def test_settings_randomization(started_cluster):
"""
See tests/integration/helpers/random_settings.py
"""
def q(field, name):
return int(
node.query(
f"SELECT {field} FROM system.settings WHERE name = '{name}'"
).strip()
)
assert q("value", "max_block_size") == 59999
assert q("changed", "max_joined_block_size_rows") == 1
assert 8000 <= q("value", "max_joined_block_size_rows") <= 100000