Skip to content

Commit 912ae27

Browse files
authored
Wait until db is populated in connector/fq tests (#10047)
1 parent 3fc83ea commit 912ae27

File tree

13 files changed

+107
-44
lines changed

13 files changed

+107
-44
lines changed

ydb/library/yql/providers/generic/connector/tests/datasource/ydb/init/01_basic.sh

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,10 @@ set -ex
162162
(2, @@{ "TODO": "unicode" }@@, CAST(@@{ "TODO": "unicode" }@@AS Json)),
163163
(3, @@{ }@@, NULL);
164164
COMMIT;
165+
CREATE TABLE dummy_table (name String, cnt Uint64, PRIMARY KEY(name));
166+
COMMIT;
167+
INSERT INTO dummy_table (name, cnt) SELECT "json", COUNT(*) FROM json;
168+
COMMIT;
165169
'
166170

167171
echo $(date +"%T.%6N") "SUCCESS"

ydb/library/yql/providers/generic/connector/tests/datasource/ydb/test.py

Lines changed: 3 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,7 @@
11
import pytest
2-
from datetime import datetime
3-
import time
4-
from typing import Sequence
5-
6-
import yatest.common
72

83
from ydb.library.yql.providers.generic.connector.api.common.data_source_pb2 import EDataSourceKind
94
from ydb.library.yql.providers.generic.connector.tests.utils.settings import Settings
10-
from ydb.library.yql.providers.generic.connector.tests.utils.log import make_logger
11-
from ydb.library.yql.providers.generic.connector.tests.utils.docker_compose import DockerComposeHelper
125
from ydb.library.yql.providers.generic.connector.tests.utils.run.runners import runner_types, configure_runner
136
import ydb.library.yql.providers.generic.connector.tests.utils.scenario.ydb as scenario
147
import ydb.library.yql.providers.generic.connector.tests.common_test_cases.select_positive_common as select_positive_common
@@ -19,41 +12,8 @@
1912
from conftest import docker_compose_dir
2013
from collection import Collection
2114

22-
LOGGER = make_logger(__name__)
23-
24-
25-
class OneTimeWaiter:
26-
__launched: bool = False
27-
28-
def __init__(self, expected_tables: Sequence[str]):
29-
docker_compose_file_relative_path = str(docker_compose_dir / 'docker-compose.yml')
30-
docker_compose_file_abs_path = yatest.common.source_path(docker_compose_file_relative_path)
31-
self.docker_compose_helper = DockerComposeHelper(docker_compose_yml_path=docker_compose_file_abs_path)
32-
self.expected_tables = set(expected_tables)
33-
34-
def wait(self):
35-
if self.__launched:
36-
return
37-
38-
# This should be enough for tables to initialize
39-
start = datetime.now()
40-
41-
timeout = 600
42-
while (datetime.now() - start).total_seconds() < timeout:
43-
self.actual_tables = set(self.docker_compose_helper.list_ydb_tables())
44-
45-
# check if all the required tables have been created
46-
if self.expected_tables <= self.actual_tables:
47-
self.__launched = True
48-
return
49-
50-
LOGGER.warning(f"Not enough YDB tables: expected={self.expected_tables}, actual={self.actual_tables}")
51-
time.sleep(5)
52-
53-
raise ValueError(f"YDB was not able to initialize in {timeout} seconds, latest table set: {self.actual_tables}")
54-
55-
56-
one_time_waiter = OneTimeWaiter(
15+
one_time_waiter = scenario.OneTimeWaiter(
16+
docker_compose_file_path=str(docker_compose_dir / 'docker-compose.yml'),
5717
expected_tables=[
5818
"column_selection_A_b_C_d_E",
5919
"column_selection_COL1",
@@ -68,6 +28,7 @@ def wait(self):
6828
"pushdown",
6929
"unsupported_types",
7030
"json",
31+
"dummy_table",
7132
]
7233
)
7334

ydb/library/yql/providers/generic/connector/tests/utils/scenario/ya.make

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ PEERDIR(
2020
ydb/library/yql/providers/generic/connector/tests/utils
2121
ydb/library/yql/providers/generic/connector/tests/utils/clients
2222
ydb/library/yql/providers/generic/connector/tests/utils/run
23+
ydb/library/yql/providers/generic/connector/tests/common_test_cases
2324
)
2425

2526
END()

ydb/library/yql/providers/generic/connector/tests/utils/scenario/ydb.py

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,11 @@
1+
from datetime import datetime
2+
import time
3+
from typing import Sequence
4+
5+
import yatest.common
6+
from ydb.library.yql.providers.generic.connector.tests.utils.log import make_logger
7+
from ydb.library.yql.providers.generic.connector.tests.utils.docker_compose import DockerComposeHelper
8+
19
from ydb.library.yql.providers.generic.connector.tests.utils.comparator import assert_data_outs_equal
210
from ydb.library.yql.providers.generic.connector.tests.utils.settings import Settings
311
from ydb.library.yql.providers.generic.connector.tests.utils.run.parent import Runner
@@ -7,6 +15,38 @@
715

816
# import ydb.library.yql.providers.generic.connector.tests.common_test_cases.select_missing_database as tc_select_missing_database
917

18+
LOGGER = make_logger(__name__)
19+
20+
21+
class OneTimeWaiter:
22+
__launched: bool = False
23+
24+
def __init__(self, docker_compose_file_path: str, expected_tables: Sequence[str]):
25+
docker_compose_file_abs_path = yatest.common.source_path(docker_compose_file_path)
26+
self.docker_compose_helper = DockerComposeHelper(docker_compose_yml_path=docker_compose_file_abs_path)
27+
self.expected_tables = set(expected_tables)
28+
29+
def wait(self):
30+
if self.__launched:
31+
return
32+
33+
# This should be enough for tables to initialize
34+
start = datetime.now()
35+
36+
timeout = 600
37+
while (datetime.now() - start).total_seconds() < timeout:
38+
self.actual_tables = set(self.docker_compose_helper.list_ydb_tables())
39+
40+
# check if all the required tables have been created
41+
if self.expected_tables <= self.actual_tables:
42+
self.__launched = True
43+
return
44+
45+
LOGGER.warning(f"Not enough YDB tables: expected={self.expected_tables}, actual={self.actual_tables}")
46+
time.sleep(5)
47+
48+
raise ValueError(f"YDB was not able to initialize in {timeout} seconds, latest table set: {self.actual_tables}")
49+
1050

1151
def select_positive(
1252
test_name: str,

ydb/tests/fq/generic/analytics/conftest.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,14 @@
1111

1212
from ydb.tests.fq.generic.utils.settings import Settings
1313

14+
from typing import Final
15+
16+
docker_compose_file_path: Final = "ydb/tests/fq/generic/analytics/docker-compose.yml"
17+
1418

1519
@pytest.fixture
1620
def settings() -> Settings:
17-
return Settings.from_env(docker_compose_file_path='ydb/tests/fq/generic/analytics/docker-compose.yml')
21+
return Settings.from_env(docker_compose_file_path=docker_compose_file_path)
1822

1923

2024
@pytest.fixture

ydb/tests/fq/generic/analytics/test_join.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,14 @@
66

77
from ydb.tests.tools.fq_runner.fq_client import FederatedQueryClient
88
from ydb.tests.fq.generic.utils.settings import Settings
9+
from ydb.library.yql.providers.generic.connector.tests.utils.scenario.ydb import OneTimeWaiter
10+
import conftest
11+
12+
13+
one_time_waiter = OneTimeWaiter(
14+
docker_compose_file_path=conftest.docker_compose_file_path,
15+
expected_tables=["join_table", "dummy_table"],
16+
)
917

1018

1119
class TestJoinAnalytics:
@@ -47,6 +55,8 @@ def test_simple(self, fq_client: FederatedQueryClient, settings: Settings, query
4755
password=settings.postgresql.password,
4856
)
4957

58+
one_time_waiter.wait()
59+
5060
fq_client.create_ydb_connection(
5161
name=ydb_conn_name,
5262
database_id=settings.ydb.dbname,

ydb/tests/fq/generic/analytics/test_ydb.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,14 @@
77

88
from ydb.tests.tools.fq_runner.fq_client import FederatedQueryClient
99
from ydb.tests.fq.generic.utils.settings import Settings
10+
from ydb.library.yql.providers.generic.connector.tests.utils.scenario.ydb import OneTimeWaiter
11+
import conftest
12+
13+
14+
one_time_waiter = OneTimeWaiter(
15+
docker_compose_file_path=conftest.docker_compose_file_path,
16+
expected_tables=["simple_table", "dummy_table"],
17+
)
1018

1119

1220
class TestYdb:
@@ -20,6 +28,8 @@ def test_simple(self, fq_client: FederatedQueryClient, settings: Settings):
2028
conn_name = f'conn_{table_name}'
2129
query_name = f'query_{table_name}'
2230

31+
one_time_waiter.wait()
32+
2333
fq_client.create_ydb_connection(
2434
name=conn_name,
2535
database_id=settings.ydb.dbname,

ydb/tests/fq/generic/analytics/ya.make

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ IF (OPENSOURCE)
5252
ENDIF()
5353

5454
PEERDIR(
55+
ydb/library/yql/providers/generic/connector/tests/utils/scenario
5556
ydb/tests/fq/generic/utils
5657
library/python/testing/recipe
5758
library/python/testing/yatest_common

ydb/tests/fq/generic/analytics/ydb/01_basic.sh

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,9 @@ set -ex
3535
(56, 12, "2a02:1812:1713:4f00:517e:1d79:c88b:704", "Elena", 2),
3636
(18, 17, "ivalid ip", "newUser", 12);
3737
COMMIT;
38+
39+
CREATE TABLE dummy_table(name STRING, cnt Uint64, PRIMARY KEY(name));
40+
COMMIT;
3841
'
3942

4043
retVal=$?

ydb/tests/fq/generic/streaming/conftest.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,14 @@
1010

1111
from ydb.tests.fq.generic.utils.settings import Settings
1212

13+
from typing import Final
14+
15+
docker_compose_file_path: Final = "ydb/tests/fq/generic/streaming/docker-compose.yml"
16+
1317

1418
@pytest.fixture
1519
def settings() -> Settings:
16-
return Settings.from_env(docker_compose_file_path='ydb/tests/fq/generic/streaming/docker-compose.yml')
20+
return Settings.from_env(docker_compose_file_path=docker_compose_file_path)
1721

1822

1923
@pytest.fixture

0 commit comments

Comments
 (0)