Skip to content

Commit 8659495

Browse files
authored
YDB FQ: Oracle integration tests (#7671)
1 parent 1d65019 commit 8659495

34 files changed

+1673
-20
lines changed

ydb/library/yql/providers/generic/connector/tests/common_test_cases/base.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ def name(self) -> str:
2626
return f'{self.name_}_{EProtocol.Name(self.protocol)}'
2727
case EDataSourceKind.MYSQL:
2828
return self.name_
29+
case EDataSourceKind.ORACLE:
30+
return self.name_
2931
case EDataSourceKind.POSTGRESQL:
3032
return self.name_
3133
case EDataSourceKind.YDB:
@@ -44,6 +46,8 @@ def database(self) -> Database:
4446
return Database(self.name, self.data_source_kind)
4547
case EDataSourceKind.MYSQL:
4648
return Database("db", self.data_source_kind)
49+
case EDataSourceKind.ORACLE:
50+
return Database(self.name, self.data_source_kind)
4751
case EDataSourceKind.POSTGRESQL:
4852
return Database(self.name, self.data_source_kind)
4953
case EDataSourceKind.YDB:
@@ -60,6 +64,8 @@ def table_name(self) -> str:
6064
return 't' + make_random_string(8)
6165
case EDataSourceKind.MYSQL:
6266
return self.name
67+
case EDataSourceKind.ORACLE:
68+
return self.name
6369
case EDataSourceKind.POSTGRESQL:
6470
return 't' + make_random_string(8)
6571
case EDataSourceKind.YDB:
@@ -89,6 +95,11 @@ def generic_settings(self) -> GenericSettings:
8995
date_time_format=EDateTimeFormat.YQL_FORMAT,
9096
mysql_clusters=[GenericSettings.MySQLCluster(database=self.database.name)],
9197
)
98+
case EDataSourceKind.ORACLE:
99+
return GenericSettings(
100+
date_time_format=EDateTimeFormat.YQL_FORMAT,
101+
oracle_clusters=[GenericSettings.OracleCluster(database=self.database.name, service_name=None)],
102+
)
92103
case EDataSourceKind.POSTGRESQL:
93104
return GenericSettings(
94105
date_time_format=EDateTimeFormat.YQL_FORMAT,

ydb/library/yql/providers/generic/connector/tests/common_test_cases/select_missing_database.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,16 @@
11
from typing import List
22
from dataclasses import dataclass
33

4+
from ydb.library.yql.providers.generic.connector.tests.utils.settings import Settings
45
from ydb.library.yql.providers.generic.connector.api.common.data_source_pb2 import EDataSourceKind, EProtocol
56
from ydb.library.yql.providers.generic.connector.tests.common_test_cases.base import BaseTestCase
67
from ydb.library.yql.providers.generic.connector.tests.utils.settings import GenericSettings
78

89

910
@dataclass
1011
class TestCase(BaseTestCase):
12+
service_name: str = None
13+
1114
@property
1215
def generic_settings(self) -> GenericSettings:
1316
gs = super().generic_settings
@@ -16,17 +19,26 @@ def generic_settings(self) -> GenericSettings:
1619
if self.data_source_kind == EDataSourceKind.MYSQL:
1720
for cluster in gs.mysql_clusters:
1821
cluster.database = "missing_database"
22+
for cluster in gs.oracle_clusters:
23+
if self.service_name is not None:
24+
cluster.service_name = self.service_name
1925

2026
return gs
2127

2228

2329
class Factory:
30+
ss: Settings
31+
32+
def __init__(self, ss: Settings):
33+
self.ss = ss
34+
2435
def make_test_cases(self, data_source_kind: EDataSourceKind) -> List[TestCase]:
2536
return [
2637
TestCase(
2738
name_="missing_database",
2839
data_source_kind=data_source_kind,
2940
protocol=EProtocol.NATIVE,
3041
pragmas=dict(),
42+
service_name=self.ss.oracle.service_name if self.ss.oracle is not None else None,
3143
)
3244
]

ydb/library/yql/providers/generic/connector/tests/common_test_cases/select_missing_table.py

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,36 @@
11
from typing import List
2+
from dataclasses import dataclass
3+
from typing import Sequence
24

5+
from ydb.library.yql.providers.generic.connector.tests.utils.settings import Settings
36
from ydb.library.yql.providers.generic.connector.api.common.data_source_pb2 import EDataSourceKind, EProtocol
47
from ydb.library.yql.providers.generic.connector.tests.common_test_cases.base import BaseTestCase
8+
from ydb.library.yql.providers.generic.connector.tests.utils.settings import GenericSettings
59

610

7-
TestCase = BaseTestCase
11+
@dataclass
12+
class TestCase(BaseTestCase):
13+
service_name: str = None
14+
15+
@property
16+
def data_out(self) -> Sequence:
17+
return self.data_out_ if self.data_out_ else self.data_in
18+
19+
@property
20+
def generic_settings(self) -> GenericSettings:
21+
gs = super().generic_settings
22+
for cluster in gs.oracle_clusters:
23+
if self.service_name is not None:
24+
cluster.service_name = self.service_name
25+
return gs
826

927

1028
class Factory:
29+
ss: Settings
30+
31+
def __init__(self, ss: Settings):
32+
self.ss = ss
33+
1134
def make_test_cases(self, data_source_kind: EDataSourceKind) -> List[TestCase]:
1235
test_cases = []
1336

@@ -18,6 +41,7 @@ def make_test_cases(self, data_source_kind: EDataSourceKind) -> List[TestCase]:
1841
data_source_kind=data_source_kind,
1942
protocol=EProtocol.NATIVE,
2043
pragmas=dict(),
44+
service_name=self.ss.oracle.service_name if self.ss.oracle is not None else None,
2145
)
2246

2347
test_cases.append(test_case)

ydb/library/yql/providers/generic/connector/tests/common_test_cases/select_positive_common.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -304,6 +304,8 @@ def make_test_cases(self, data_source_kind: EDataSourceKind) -> Sequence[TestCas
304304
self._large_table(),
305305
)
306306
)
307+
elif data_source_kind == EDataSourceKind.ORACLE:
308+
raise 'Common test cases are not supported by Oracle due to the lack of Int32 columns'
307309
else:
308310
raise f'Unexpected data source kind: {data_source_kind}'
309311

ydb/library/yql/providers/generic/connector/tests/datasource/clickhouse/collection.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@ class Collection(object):
1717

1818
def __init__(self, ss: Settings):
1919
self._test_cases = {
20-
'select_missing_database': select_missing_database.Factory().make_test_cases(EDataSourceKind.CLICKHOUSE),
21-
'select_missing_table': select_missing_table.Factory().make_test_cases(EDataSourceKind.CLICKHOUSE),
20+
'select_missing_database': select_missing_database.Factory(ss).make_test_cases(EDataSourceKind.CLICKHOUSE),
21+
'select_missing_table': select_missing_table.Factory(ss).make_test_cases(EDataSourceKind.CLICKHOUSE),
2222
'select_positive': select_positive.Factory().make_test_cases()
2323
+ select_positive_common.Factory(ss).make_test_cases(EDataSourceKind.CLICKHOUSE),
2424
'select_datetime': select_datetime.Factory().make_test_cases(),

ydb/library/yql/providers/generic/connector/tests/datasource/clickhouse/docker-compose.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ services:
1212
- 8123
1313
fq-connector-go:
1414
container_name: fq-tests-ch-fq-connector-go
15-
image: ghcr.io/ydb-platform/fq-connector-go:v0.5.0@sha256:6d3cec43478bef88dda195cd38c10e4df719c8ce6d13c9bd288c7ec40410e9d8
15+
image: ghcr.io/ydb-platform/fq-connector-go:v0.5.2@sha256:c007dc10b89aa0342bea93d843cca7097e66b2e45310010d9321259aeee453cc
1616
ports:
1717
- 2130
1818
volumes:

ydb/library/yql/providers/generic/connector/tests/datasource/mysql/collection.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@ class Collection(object):
1717

1818
def __init__(self, ss: Settings):
1919
self._test_cases = {
20-
'select_missing_database': select_missing_database.Factory().make_test_cases(EDataSourceKind.MYSQL),
21-
'select_missing_table': select_missing_table.Factory().make_test_cases(EDataSourceKind.MYSQL),
20+
'select_missing_database': select_missing_database.Factory(ss).make_test_cases(EDataSourceKind.MYSQL),
21+
'select_missing_table': select_missing_table.Factory(ss).make_test_cases(EDataSourceKind.MYSQL),
2222
'select_positive': select_positive.Factory().make_test_cases()
2323
+ select_positive_common.Factory(ss).make_test_cases(EDataSourceKind.MYSQL),
2424
'select_datetime': select_datetime.Factory().make_test_cases(),

ydb/library/yql/providers/generic/connector/tests/datasource/mysql/docker-compose.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
services:
22
fq-connector-go:
33
container_name: fq-tests-my-fq-connector-go
4-
image: ghcr.io/ydb-platform/fq-connector-go:v0.5.0@sha256:6d3cec43478bef88dda195cd38c10e4df719c8ce6d13c9bd288c7ec40410e9d8
4+
image: ghcr.io/ydb-platform/fq-connector-go:v0.5.2@sha256:c007dc10b89aa0342bea93d843cca7097e66b2e45310010d9321259aeee453cc
55
ports:
66
- 2130
77
volumes:
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
from typing import Sequence, Mapping
2+
3+
from ydb.library.yql.providers.generic.connector.api.common.data_source_pb2 import EDataSourceKind
4+
# import ydb.library.yql.providers.generic.connector.tests.common_test_cases.select_missing_database as select_missing_database
5+
import ydb.library.yql.providers.generic.connector.tests.common_test_cases.select_missing_table as select_missing_table
6+
# import ydb.library.yql.providers.generic.connector.tests.common_test_cases.select_positive_common as select_positive_common
7+
import select_datetime_with_service_name
8+
import select_positive_with_service_name
9+
10+
# import select_positive_with_schema
11+
12+
from ydb.library.yql.providers.generic.connector.tests.utils.settings import Settings
13+
14+
15+
class Collection(object):
16+
_test_cases: Mapping[str, Sequence]
17+
18+
def __init__(self, ss: Settings):
19+
self._test_cases = {
20+
# 'select_missing_database': select_missing_database.Factory(ss).make_test_cases(EDataSourceKind.ORACLE), # TODO YQ-3413
21+
'select_missing_table': select_missing_table.Factory(ss).make_test_cases(EDataSourceKind.ORACLE),
22+
'select_positive': select_positive_with_service_name.Factory(ss).make_test_cases(),
23+
# + select_positive_common.Factory(ss).make_test_cases(EDataSourceKind.ORACLE), # TODO does not work because of cast to uppercase and lack of Int32 column type
24+
'select_datetime': select_datetime_with_service_name.Factory(ss).make_test_cases(),
25+
}
26+
27+
def get(self, key: str) -> Sequence:
28+
if key not in self._test_cases:
29+
raise ValueError(f'no such test: {key}')
30+
31+
return self._test_cases[key]
32+
33+
def ids(self, key: str) -> Sequence[str]:
34+
if key not in self._test_cases:
35+
raise ValueError(f'no such test: {key}')
36+
37+
return [tc.name for tc in self._test_cases[key]]
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
from typing import Final
2+
import pathlib
3+
4+
import pytest
5+
6+
7+
from ydb.library.yql.providers.generic.connector.api.common.data_source_pb2 import EDataSourceKind
8+
from ydb.library.yql.providers.generic.connector.tests.utils.settings import Settings
9+
10+
11+
docker_compose_dir: Final = pathlib.Path("ydb/library/yql/providers/generic/connector/tests/datasource/oracle")
12+
13+
14+
@pytest.fixture
15+
def settings() -> Settings:
16+
return Settings.from_env(docker_compose_dir=docker_compose_dir, data_source_kinds=[EDataSourceKind.ORACLE])

0 commit comments

Comments
 (0)