2 @message |
assert
MON$SEC_DATABASE Self
RDB$MAP_NAME глобальная_апостроф
- RDB$MAP_FROM лондонский симфонический оркестр
+ RDB$MAP_FROM ???????????????????? ?????????????????????????? ??????????????
RDB$MAP_TO настройщик роялей
RDB$MAP_NAME глобальная_кавычки
- RDB$MAP_FROM лондонский симфонический оркестр
+ RDB$MAP_FROM ??????????????????????????????????????????????????????????? ?????????????????????????????????????????????????????????????????????????? ??????????????????????????????????????
RDB$MAP_TO настройщик роялей
RDB$MAP_NAME локальная_апостроф
RDB$MAP_FROM лондонский симфонический оркестр
RDB$MAP_TO настройщик роялей
RDB$MAP_NAME локальная_кавычки
- RDB$MAP_FROM лондонский симфонический оркестр
+ RDB$MAP_FROM ╨╗╨╛╨╜╨┤╨╛╨╜╤Б╨║╨╕╨╣ ╤Б╨╕╨╝╤Д╨╛╨╜╨╕╤З╨╡╤Б╨║╨╕╨╣ ╨╛╤А╨║╨╡╤Б╤В╤А
RDB$MAP_TO настройщик роялей
Records affected: 4
LOG DETAILS:
2024-09-30 13:19:53.754
2024-09-30 13:19:53.760 act = <firebird.qa.plugin.Action object at [hex]>
2024-09-30 13:19:53.766 tmp_sql = PosixPath('/var/tmp/qa_2024/test_11562/tmp_8253_non_ascii_ddl.sql')
2024-09-30 13:19:53.775 tmp_log = PosixPath('/var/tmp/qa_2024/test_11562/tmp_8253_non_ascii_ddl.log')
2024-09-30 13:19:53.781 capsys = <_pytest.capture.CaptureFixture object at [hex]>
2024-09-30 13:19:53.786
2024-09-30 13:19:53.791 @pytest.mark.intl
2024-09-30 13:19:53.796 @pytest.mark.version('>=4.0.6')
2024-09-30 13:19:53.800 def test_1(act: Action, tmp_sql: Path, tmp_log: Path, capsys):
2024-09-30 13:19:53.805
2024-09-30 13:19:53.810 # Scan line-by-line through databases.conf, find line starting with REQUIRED_ALIAS and extract name of file that
2024-09-30 13:19:53.816 # must be created in the $(dir_sampleDb)/qa/ folder. This name will be used further as target database (tmp_fdb).
2024-09-30 13:19:53.824 # NOTE: we have to SKIP lines which are commented out, i.e. if they starts with '#':
2024-09-30 13:19:53.831 p_required_alias_ptn = re.compile( '^(?!#)((^|\\s+)' + REQUIRED_ALIAS + ')\\s*=\\s*\\$\\(dir_sampleDb\\)/qa/', re.IGNORECASE )
2024-09-30 13:19:53.836 fname_in_dbconf = None
2024-09-30 13:19:53.842
2024-09-30 13:19:53.847 with open(act.home_dir/'databases.conf', 'r') as f:
2024-09-30 13:19:53.853 for line in f:
2024-09-30 13:19:53.858 if p_required_alias_ptn.search(line):
2024-09-30 13:19:53.864 # If databases.conf contains line like this:
2024-09-30 13:19:53.869 # tmp_8253_alias = $(dir_sampleDb)/qa/tmp_qa_8253.fdb
2024-09-30 13:19:53.874 # - then we extract filename: 'tmp_qa_8253.fdb' (see below):
2024-09-30 13:19:53.882 fname_in_dbconf = Path(line.split('=')[1].strip()).name
2024-09-30 13:19:53.887 break
2024-09-30 13:19:53.893
2024-09-30 13:19:53.898 # if 'fname_in_dbconf' remains undefined here then propably REQUIRED_ALIAS not equals to specified in the databases.conf!
2024-09-30 13:19:53.903 #
2024-09-30 13:19:53.910 assert fname_in_dbconf
2024-09-30 13:19:53.917
2024-09-30 13:19:53.922 dba_pswd = 'alterkey'
2024-09-30 13:19:53.927 g_name = 'лондонский симфонический оркестр'
2024-09-30 13:19:53.932 r_name = 'настройщик роялей'
2024-09-30 13:19:53.937 non_ascii_ddl = f'''
2024-09-30 13:19:53.941 set list on;
2024-09-30 13:19:53.946 create database '{REQUIRED_ALIAS}' user {act.db.user};
2024-09-30 13:19:53.951 create user {act.db.user} password '{dba_pswd}';
2024-09-30 13:19:53.956 commit;
2024-09-30 13:19:53.961 connect 'localhost:{REQUIRED_ALIAS}' user {act.db.user} password '{dba_pswd}';
2024-09-30 13:19:53.966 select mon$sec_database from mon$database; -- must be: 'Self'
2024-09-30 13:19:53.971 create role "{r_name}";
2024-09-30 13:19:53.976 commit;
2024-09-30 13:19:53.980 create mapping "локальная_апостроф" using any plugin from group '{g_name}' to role "{r_name}";
2024-09-30 13:19:53.985 create mapping "локальная_кавычки" using any plugin from group "{g_name}" to role "{r_name}";
2024-09-30 13:19:53.990 create global mapping "глобальная_апостроф" using any plugin from group '{g_name}' to role "{r_name}";
2024-09-30 13:19:53.995 create global mapping "глобальная_кавычки" using any plugin from group "{g_name}" to role "{r_name}";
2024-09-30 13:19:54.001 commit;
2024-09-30 13:19:54.006 set count on;
2024-09-30 13:19:54.011 select rdb$map_name,rdb$map_from,rdb$map_to from rdb$auth_mapping order by rdb$map_name;
2024-09-30 13:19:54.017 commit;
2024-09-30 13:19:54.024 '''
2024-09-30 13:19:54.029
2024-09-30 13:19:54.035 tmp_sql.write_bytes(non_ascii_ddl.encode('cp866'))
2024-09-30 13:19:54.040 act.isql(switches=['-q'], input_file=tmp_sql, credentials = False, connect_db = False, combine_output = True, charset='dos866', io_enc = 'cp866')
2024-09-30 13:19:54.045 tmp_log.write_bytes(act.clean_stdout.encode('utf-8'))
2024-09-30 13:19:54.051 with open(tmp_log, 'r', encoding = 'utf-8', errors = 'backslashreplace') as f:
2024-09-30 13:19:54.056 for line in f:
2024-09-30 13:19:54.062 print(line)
2024-09-30 13:19:54.068
2024-09-30 13:19:54.074 act.expected_stdout = f"""
2024-09-30 13:19:54.079 MON$SEC_DATABASE Self
2024-09-30 13:19:54.085 RDB$MAP_NAME глобальная_апостроф
2024-09-30 13:19:54.091 RDB$MAP_FROM {g_name}
2024-09-30 13:19:54.096 RDB$MAP_TO {r_name}
2024-09-30 13:19:54.103 RDB$MAP_NAME глобальная_кавычки
2024-09-30 13:19:54.109 RDB$MAP_FROM {g_name}
2024-09-30 13:19:54.116 RDB$MAP_TO {r_name}
2024-09-30 13:19:54.122 RDB$MAP_NAME локальная_апостроф
2024-09-30 13:19:54.127 RDB$MAP_FROM {g_name}
2024-09-30 13:19:54.133 RDB$MAP_TO {r_name}
2024-09-30 13:19:54.140 RDB$MAP_NAME локальная_кавычки
2024-09-30 13:19:54.147 RDB$MAP_FROM {g_name}
2024-09-30 13:19:54.153 RDB$MAP_TO {r_name}
2024-09-30 13:19:54.159 Records affected: 4
2024-09-30 13:19:54.165 """
2024-09-30 13:19:54.171 act.stdout = capsys.readouterr().out
2024-09-30 13:19:54.177 > assert act.clean_stdout == act.clean_expected_stdout
2024-09-30 13:19:54.184 E assert
2024-09-30 13:19:54.189 E MON$SEC_DATABASE Self
2024-09-30 13:19:54.197 E RDB$MAP_NAME глобальная_апостроф
2024-09-30 13:19:54.207 E - RDB$MAP_FROM лондонский симфонический оркестр
2024-09-30 13:19:54.213 E + RDB$MAP_FROM ???????????????????? ?????????????????????????? ??????????????
2024-09-30 13:19:54.220 E RDB$MAP_TO настройщик роялей
2024-09-30 13:19:54.226 E RDB$MAP_NAME глобальная_кавычки
2024-09-30 13:19:54.231 E - RDB$MAP_FROM лондонский симфонический оркестр
2024-09-30 13:19:54.236 E + RDB$MAP_FROM ??????????????????????????????????????????????????????????? ?????????????????????????????????????????????????????????????????????????? ??????????????????????????????????????
2024-09-30 13:19:54.241 E RDB$MAP_TO настройщик роялей
2024-09-30 13:19:54.246 E RDB$MAP_NAME локальная_апостроф
2024-09-30 13:19:54.252 E RDB$MAP_FROM лондонский симфонический оркестр
2024-09-30 13:19:54.258 E RDB$MAP_TO настройщик роялей
2024-09-30 13:19:54.267 E RDB$MAP_NAME локальная_кавычки
2024-09-30 13:19:54.273 E - RDB$MAP_FROM лондонский симфонический оркестр
2024-09-30 13:19:54.280 E + RDB$MAP_FROM ╨╗╨╛╨╜╨┤╨╛╨╜╤Б╨║╨╕╨╣ ╤Б╨╕╨╝╤Д╨╛╨╜╨╕╤З╨╡╤Б╨║╨╕╨╣ ╨╛╤А╨║╨╡╤Б╤В╤А
2024-09-30 13:19:54.286 E RDB$MAP_TO настройщик роялей
2024-09-30 13:19:54.292 E Records affected: 4
2024-09-30 13:19:54.298
2024-09-30 13:19:54.305 tests/bugs/gh_8253_test.py:111: AssertionError
2024-09-30 13:19:54.310 ---------------------------- Captured stdout setup -----------------------------
2024-09-30 13:19:54.315 Creating db: localhost:/var/tmp/qa_2024/test_11562/test.fdb [page_size=None, sql_dialect=None, charset='NONE', user=SYSDBA, password=masterkey]
|
3 #text |
act = <firebird.qa.plugin.Action pytest object at [hex]>
tmp_sql = PosixPath('/var/tmp/qa_2024/test_11562/tmp_8253_non_ascii_ddl.sql')
tmp_log = PosixPath('/var/tmp/qa_2024/test_11562/tmp_8253_non_ascii_ddl.log')
capsys = <_pytest.capture.CaptureFixture pytest object at [hex]>
@pytest.mark.intl
@pytest.mark.version('>=4.0.6')
def test_1(act: Action, tmp_sql: Path, tmp_log: Path, capsys):
# Scan line-by-line through databases.conf, find line starting with REQUIRED_ALIAS and extract name of file that
# must be created in the $(dir_sampleDb)/qa/ folder. This name will be used further as target database (tmp_fdb).
# NOTE: we have to SKIP lines which are commented out, i.e. if they starts with '#':
p_required_alias_ptn = re.compile( '^(?!#)((^|\\s+)' + REQUIRED_ALIAS + ')\\s*=\\s*\\$\\(dir_sampleDb\\)/qa/', re.IGNORECASE )
fname_in_dbconf = None
with open(act.home_dir/'databases.conf', 'r') as f:
for line in f:
if p_required_alias_ptn.search(line):
# If databases.conf contains line like this:
# tmp_8253_alias = $(dir_sampleDb)/qa/tmp_qa_8253.fdb
# - then we extract filename: 'tmp_qa_8253.fdb' (see below):
fname_in_dbconf = Path(line.split('=')[1].strip()).name
break
# if 'fname_in_dbconf' remains undefined here then propably REQUIRED_ALIAS not equals to specified in the databases.conf!
#
assert fname_in_dbconf
dba_pswd = 'alterkey'
g_name = 'лондонский симфонический оркестр'
r_name = 'настройщик роялей'
non_ascii_ddl = f'''
set list on;
create database '{REQUIRED_ALIAS}' user {act.db.user};
create user {act.db.user} password '{dba_pswd}';
commit;
connect 'localhost:{REQUIRED_ALIAS}' user {act.db.user} password '{dba_pswd}';
select mon$sec_database from mon$database; -- must be: 'Self'
create role "{r_name}";
commit;
create mapping "локальная_апостроф" using any plugin from group '{g_name}' to role "{r_name}";
create mapping "локальная_кавычки" using any plugin from group "{g_name}" to role "{r_name}";
create global mapping "глобальная_апостроф" using any plugin from group '{g_name}' to role "{r_name}";
create global mapping "глобальная_кавычки" using any plugin from group "{g_name}" to role "{r_name}";
commit;
set count on;
select rdb$map_name,rdb$map_from,rdb$map_to from rdb$auth_mapping order by rdb$map_name;
commit;
'''
tmp_sql.write_bytes(non_ascii_ddl.encode('cp866'))
act.isql(switches=['-q'], input_file=tmp_sql, credentials = False, connect_db = False, combine_output = True, charset='dos866', io_enc = 'cp866')
tmp_log.write_bytes(act.clean_stdout.encode('utf-8'))
with open(tmp_log, 'r', encoding = 'utf-8', errors = 'backslashreplace') as f:
for line in f:
print(line)
act.expected_stdout = f"""
MON$SEC_DATABASE Self
RDB$MAP_NAME глобальная_апостроф
RDB$MAP_FROM {g_name}
RDB$MAP_TO {r_name}
RDB$MAP_NAME глобальная_кавычки
RDB$MAP_FROM {g_name}
RDB$MAP_TO {r_name}
RDB$MAP_NAME локальная_апостроф
RDB$MAP_FROM {g_name}
RDB$MAP_TO {r_name}
RDB$MAP_NAME локальная_кавычки
RDB$MAP_FROM {g_name}
RDB$MAP_TO {r_name}
Records affected: 4
"""
act.stdout = capsys.readouterr().out
> assert act.clean_stdout == act.clean_expected_stdout
E assert
E MON$SEC_DATABASE Self
E RDB$MAP_NAME глобальная_апостроф
E - RDB$MAP_FROM лондонский симфонический оркестр
E + RDB$MAP_FROM ???????????????????? ?????????????????????????? ??????????????
E RDB$MAP_TO настройщик роялей
E RDB$MAP_NAME глобальная_кавычки
E - RDB$MAP_FROM лондонский симфонический оркестр
E + RDB$MAP_FROM ??????????????????????????????????????????????????????????? ?????????????????????????????????????????????????????????????????????????? ??????????????????????????????????????
E RDB$MAP_TO настройщик роялей
E RDB$MAP_NAME локальная_апостроф
E RDB$MAP_FROM лондонский симфонический оркестр
E RDB$MAP_TO настройщик роялей
E RDB$MAP_NAME локальная_кавычки
E - RDB$MAP_FROM лондонский симфонический оркестр
E + RDB$MAP_FROM ╨╗╨╛╨╜╨┤╨╛╨╜╤Б╨║╨╕╨╣ ╤Б╨╕╨╝╤Д╨╛╨╜╨╕╤З╨╡╤Б╨║╨╕╨╣ ╨╛╤А╨║╨╡╤Б╤В╤А
E RDB$MAP_TO настройщик роялей
E Records affected: 4
tests/bugs/gh_8253_test.py:111: AssertionError
|