Skip to content

Commit 81c4618

Browse files
vitalyisaev2marsaly79
authored andcommitted
Stabilize database initialization in ydb/library/yql/providers/generic/connector/tests/datasource/ydb (#3844)
1 parent 71d25e1 commit 81c4618

File tree

7 files changed

+61
-43
lines changed

7 files changed

+61
-43
lines changed

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
#!/bin/bash
22

3-
/ydb -p tests-ydb-client yql -s '
3+
set -ex
4+
5+
/ydb -p ${PROFILE} yql -s '
46
CREATE TABLE column_selection_A_b_C_d_E_NATIVE (COL1 Int32, col2 Int32, PRIMARY KEY (COL1));
57
COMMIT;
68
INSERT INTO column_selection_A_b_C_d_E_NATIVE (COL1, col2) VALUES
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
#!/bin/bash
2+
3+
set -ex
4+
5+
export PROFILE=tests-ydb-client-$(LC_ALL=C tr -dc A-Za-z0-9 </dev/urandom | head -c 8)
6+
7+
# Wait until server is up
8+
timeout 30s bash -c 'until /ydb --endpoint grpc://fq-tests-ydb-ydb:2136 --database /local scheme ls; do sleep 3; done'
9+
10+
# Run initialization scripts
11+
/ydb config profile create ${PROFILE} --endpoint grpc://fq-tests-ydb-ydb:2136 --database /local
12+
/bin/bash ./01_basic.sh

ydb/library/yql/providers/generic/connector/tests/utils/run/dqrun.py

Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -228,13 +228,25 @@ def run(self, test_name: str, script: str, generic_settings: GenericSettings) ->
228228

229229
# For debug add option --trace-opt to args
230230
cmd = f'{self.dqrun_path} -s -p {script_path} --fs-cfg={fs_conf_path} --gateways-cfg={gateways_conf_path} --result-file={result_path} --format="binary" -v 7'
231-
out = subprocess.run(cmd, shell=True, capture_output=True)
232231

232+
output = None
233233
data_out = None
234234
data_out_with_types = None
235235
schema = None
236+
returncode = 0
236237

237-
if out.returncode == 0:
238+
try:
239+
output = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, timeout=60)
240+
except subprocess.CalledProcessError as e:
241+
LOGGER.error(
242+
'Execution failed:\n\nSTDOUT: %s\n\nSTDERR: %s\n\n',
243+
e.stdout.decode('utf-8') if e.stdout else None,
244+
e.stderr.decode('utf-8') if e.stderr else None,
245+
)
246+
247+
output = e.stdout
248+
returncode = e.returncode
249+
else:
238250
LOGGER.info('Execution succeeded: ')
239251
# Parse output
240252
with open(result_path, 'r') as f:
@@ -250,24 +262,15 @@ def run(self, test_name: str, script: str, generic_settings: GenericSettings) ->
250262

251263
artifacts.dump_yson(data_out, test_name, "data_out.yson")
252264
artifacts.dump_str(data_out_with_types, test_name, "data_out_with_types.yson")
253-
else:
254-
LOGGER.error(
255-
'Execution failed:\n\nSTDOUT: %s\n\nSTDERR: %s\n\n',
256-
out.stdout.decode('utf-8'),
257-
out.stderr.decode('utf-8'),
258-
)
259-
260-
with open(artifacts.make_path(test_name, "dqrun.err"), "w") as f:
261-
f.write(out.stderr.decode('utf-8'))
262265

263-
with open(artifacts.make_path(test_name, "dqrun.out"), "w") as f:
264-
f.write(out.stdout.decode('utf-8'))
266+
finally:
267+
with open(artifacts.make_path(test_name, "kqprun.out"), "w") as f:
268+
f.write(output.decode('utf-8'))
265269

266270
return Result(
267271
data_out=data_out,
268272
data_out_with_types=data_out_with_types,
269273
schema=schema,
270-
stdout=out.stdout.decode('utf-8'),
271-
stderr=out.stderr.decode('utf-8'),
272-
returncode=out.returncode,
274+
output=output.decode('utf-8') if output else None,
275+
returncode=returncode,
273276
)

ydb/library/yql/providers/generic/connector/tests/utils/run/kqprun.py

Lines changed: 19 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -192,13 +192,25 @@ def run(self, test_name: str, script: str, generic_settings: GenericSettings) ->
192192

193193
# For debug add option --trace-opt to args
194194
cmd = f'{self.kqprun_path} -s {scheme_path} -p {script_path} --app-config={app_conf_path} --result-file={result_path} --result-format=full'
195-
out = subprocess.run(cmd, shell=True, capture_output=True)
196195

196+
output = None
197197
data_out = None
198198
data_out_with_types = None
199199
schema = None
200+
returncode = 0
200201

201-
if out.returncode == 0:
202+
try:
203+
output = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, timeout=60)
204+
except subprocess.CalledProcessError as e:
205+
LOGGER.error(
206+
'Execution failed:\n\nSTDOUT: %s\n\nSTDERR: %s\n\n',
207+
e.stdout.decode('utf-8') if e.stdout else None,
208+
e.stderr.decode('utf-8') if e.stderr else None,
209+
)
210+
211+
output = e.stdout
212+
returncode = e.returncode
213+
else:
202214
# Parse output
203215
with open(result_path, 'r') as f:
204216
result = json.loads(f.read().encode('ascii'), strict=False)
@@ -225,24 +237,14 @@ def run(self, test_name: str, script: str, generic_settings: GenericSettings) ->
225237
artifacts.dump_json(data_out, test_name, "data_out.yson")
226238
artifacts.dump_str(data_out_with_types, test_name, "data_out_with_types.yson")
227239

228-
else:
229-
LOGGER.error(
230-
'Execution failed:\n\nSTDOUT: %s\n\nSTDERR: %s\n\n',
231-
out.stdout.decode('utf-8'),
232-
out.stderr.decode('utf-8'),
233-
)
234-
235-
with open(artifacts.make_path(test_name, "kqprun.err"), "w") as f:
236-
f.write(out.stderr.decode('utf-8'))
237-
238-
with open(artifacts.make_path(test_name, "kqprun.out"), "w") as f:
239-
f.write(out.stdout.decode('utf-8'))
240+
finally:
241+
with open(artifacts.make_path(test_name, "kqprun.out"), "w") as f:
242+
f.write(output.decode('utf-8'))
240243

241244
return Result(
242245
data_out=data_out,
243246
data_out_with_types=data_out_with_types,
244247
schema=schema,
245-
stdout=out.stdout.decode('utf-8'),
246-
stderr=out.stderr.decode('utf-8'),
247-
returncode=out.returncode,
248+
output=output.decode('utf-8') if output else None,
249+
returncode=returncode,
248250
)

ydb/library/yql/providers/generic/connector/tests/utils/run/result.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,5 @@ class Result:
1010
data_out: Optional[yson.yson_types.YsonList]
1111
data_out_with_types: Optional[List]
1212
schema: Optional[Schema]
13-
stdout: str
14-
stderr: str
13+
output: str
1514
returncode: int

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ def select_positive(
101101
generic_settings=test_case.generic_settings,
102102
)
103103

104-
assert result.returncode == 0, result.stderr
104+
assert result.returncode == 0, result.output
105105

106106
assert data_outs_equal(test_case.data_out, result.data_out_with_types), (
107107
test_case.data_out,
@@ -128,7 +128,7 @@ def select_missing_database(
128128
generic_settings=test_case.generic_settings,
129129
)
130130

131-
assert test_case.database.missing_database_msg() in result.stderr, result.stderr
131+
assert test_case.database.missing_database_msg() in result.output, result.output
132132

133133

134134
def select_missing_table(
@@ -153,4 +153,4 @@ def select_missing_table(
153153
generic_settings=test_case.generic_settings,
154154
)
155155

156-
assert test_case.database.missing_table_msg() in result.stderr, result.stderr
156+
assert test_case.database.missing_table_msg() in result.output, result.output

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ def select_positive(
118118
generic_settings=test_case.generic_settings,
119119
)
120120

121-
assert result.returncode == 0, result.stderr
121+
assert result.returncode == 0, result.output
122122

123123
assert data_outs_equal(test_case.data_out, result.data_out_with_types), (
124124
test_case.data_out,
@@ -146,7 +146,7 @@ def select_missing_database(
146146
generic_settings=test_case.generic_settings,
147147
)
148148

149-
assert test_case.database.missing_database_msg() in result.stderr, result.stderr
149+
assert test_case.database.missing_database_msg() in result.output, result.output
150150

151151

152152
def select_missing_table(
@@ -182,7 +182,7 @@ def select_missing_table(
182182
generic_settings=test_case.generic_settings,
183183
)
184184

185-
assert test_case.database.missing_table_msg() in result.stderr, result.stderr
185+
assert test_case.database.missing_table_msg() in result.output, result.output
186186

187187

188188
def select_pg_schema(
@@ -213,7 +213,7 @@ def select_pg_schema(
213213
generic_settings=test_case.generic_settings,
214214
)
215215

216-
assert result.returncode == 0, result.stderr
216+
assert result.returncode == 0, result.output
217217

218218
assert data_outs_equal(test_case.data_out, result.data_out_with_types), (
219219
test_case.data_out,

0 commit comments

Comments
 (0)