6
0
mirror of https://github.com/FirebirdSQL/firebird-qa.git synced 2025-01-22 21:43:06 +01:00

Added/Updated functional\gtcs\test_gtcs_proc_cast_isql.py: see details in the test source. Checked on 4.0.1.2692.

This commit is contained in:
zotov 2022-04-20 13:39:21 +03:00
parent 631aaa8296
commit 1be4813ea1

View File

@ -2,7 +2,7 @@
""" """
ID: gtcs.proc_cast_isql ID: gtcs.proc_cast_isql
FBTEST: functional.gtcs.gtcs_proc_cast_isql FBTEST: functional.gtcs.cast-datatypes // old: functional.gtcs.gtcs_proc_cast_isql
TITLE: PROC_CAST1_ISQL.script ... PROC_CAST10_ISQL.script TITLE: PROC_CAST1_ISQL.script ... PROC_CAST10_ISQL.script
DESCRIPTION: DESCRIPTION:
Original tests see in: Original tests see in:
@ -10,16 +10,34 @@ DESCRIPTION:
https://github.com/FirebirdSQL/fbtcs/blob/master/GTCS/tests/PROC_CAST2_ISQL.script https://github.com/FirebirdSQL/fbtcs/blob/master/GTCS/tests/PROC_CAST2_ISQL.script
... ...
https://github.com/FirebirdSQL/fbtcs/blob/master/GTCS/tests/PROC_CAST10_ISQL.script https://github.com/FirebirdSQL/fbtcs/blob/master/GTCS/tests/PROC_CAST10_ISQL.script
This test uses pre-created script ( <QA_ROOT>/files/gtcs-cast-gen-ddl.sql ) which produces
syntactically correct SQL code for further applying against test DB. This auto-generated
SQL code contains of lot of 'CREATE PROCEDURE' statements which create stored procedures
with accepting single input parameter and making cast of this argument to other type and
returning it to caller. All possible combinations of datatypes are covered in such manner.
Cast is performed mostly IMPLICITLY, with exception for DATE/TIME literals such as 'TODAY',
'TOMORROW' and 'YESTERDAY'.
Names of auto-generated stored procedures have form '<FromDatatype>_<ToDatatype>', e.g.:
create or alter procedure "bigint_char(10)" ( a bigint )
returns ( b char(10) ) as
begin
b = 1608.90*a/100.00;
suspend;
end^
Checked on 4.0.1.2692.
""" """
import pytest import pytest
from firebird.qa import * from firebird.qa import *
from pathlib import Path
db = db_factory() db = db_factory()
act = python_act('db', substitutions=[('BLOB_ID.*', ''), ('[ \t]+', ' ')]) act = python_act('db', substitutions=[('BLOB_ID.*', ''), ('[ \t]+', ' ')])
expected_stdout = """ test_expected_stdout = """
bigint_bigint 80 bigint_bigint 80
BLOB_ID 0:1 BLOB_ID 0:1
80.4450 80.4450
@ -281,90 +299,25 @@ expected_stdout = """
varchar(30)_time 01:02:03.4560 varchar(30)_time 01:02:03.4560
""" """
@pytest.mark.skip('FIXME: Not IMPLEMENTED') test_expected_stderr = ""
@pytest.mark.version('>=3.0.6') tmp_init_run = temp_file('tmp_cast_misc_datatypes_autogen.sql')
def test_1(act: Action):
pytest.fail("Not IMPLEMENTED")
# test_script_1 @pytest.mark.version('>=3.0.6')
#--- def test_1(act: Action, tmp_init_run: Path):
#
# import os # Generate SQL code with DDL for all possible combinations of datatypes:
# import sys act.isql(switches=['-q'], input_file = act.files_dir / 'gtcs-cast-gen-ddl.sql')
# import time assert act.clean_stderr == ""
# import subprocess
# from fdb import services tmp_init_run.write_text(act.clean_stdout)
# #f = open(r'c:\temp\tmp-gtcs-cast.tmp','w')
# os.environ["ISC_USER"] = user_name #f.write(act.clean_stdout)
# os.environ["ISC_PASSWORD"] = user_password #f.close()
#
# db_conn.close()
# # Apply auto-generated script:
# #-------------------------------------------- act.reset()
# act.isql(switches=['-q'], input_file=tmp_init_run)
# def flush_and_close( file_handle ):
# # https://docs.python.org/2/library/os.html#os.fsync act.expected_stdout = test_expected_stdout
# # If you're starting with a Python file object f, assert act.clean_stdout == act.clean_expected_stdout
# # first do f.flush(), and
# # then do os.fsync(f.fileno()), to ensure that all internal buffers associated with f are written to disk.
# global os
#
# file_handle.flush()
# if file_handle.mode not in ('r', 'rb') and file_handle.name != os.devnull:
# # otherwise: "OSError: [Errno 9] Bad file descriptor"!
# os.fsync(file_handle.fileno())
# file_handle.close()
#
# #--------------------------------------------
#
# def cleanup( f_names_list ):
# global os
# for f in f_names_list:
# if type(f) == file:
# del_name = f.name
# elif type(f) == str:
# del_name = f
# else:
# print('Unrecognized type of element:', f, ' - can not be treated as file.')
# del_name = None
#
# if del_name and os.path.isfile( del_name ):
# os.remove( del_name )
#
# #--------------------------------------------
#
# sql_gen_ddl = os.path.join(context['files_location'],'gtcs-cast-gen-ddl.sql')
#
# f_init_run=open( os.path.join(context['temp_directory'],'tmp_gtcs_cast_ddl.sql'), 'w', buffering = 0)
# f_init_err=open( os.path.join(context['temp_directory'],'tmp_gtcs_cast_ddl.err'), 'w', buffering = 0)
# subprocess.call( [context['isql_path'], dsn, '-q', '-i', sql_gen_ddl], stdout=f_init_run, stderr=f_init_err )
# flush_and_close( f_init_run )
# flush_and_close( f_init_err )
#
#
# f_cast_log=open( os.path.join(context['temp_directory'],'tmp_gtcs_cast_run.log'), 'w', buffering = 0)
# f_cast_err=open( os.path.join(context['temp_directory'],'tmp_gtcs_cast_run.err'), 'w', buffering = 0)
# subprocess.call( [context['isql_path'], dsn, '-q', '-i', f_init_run.name], stdout=f_cast_log, stderr=f_cast_err )
# flush_and_close( f_cast_log )
# flush_and_close( f_cast_err )
#
# # CHECKS:
# #########
# for g in (f_init_err, f_cast_err):
# with open(g.name, 'r') as f:
# for line in f:
# if line.split():
# print('UNEXPECTED OUTPUT in ' + os.path.split(g.name)[-1] + ': ' + line )
#
# with open(f_cast_log.name, 'r') as f:
# for line in f:
# if line.split():
# print( line.strip() )
#
# # CLEANUP:
# ##########
# # do NOT remove this pause otherwise some of logs will not be enable for deletion and test will finish with
# # Exception raised while executing Python test script. exception: WindowsError: 32
# time.sleep(1)
# cleanup( ( f_init_run, f_init_err, f_cast_log, f_cast_err ) )
#---