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-10-16 07:26:05.626
2024-10-16 07:26:05.627 act = <firebird.qa.plugin.Action object at [hex]>
2024-10-16 07:26:05.627 tmp_sql = WindowsPath('H:/QA/temp/qa2024.tmp/fbqa/test_11588/tmp_8253_non_ascii_ddl.sql')
2024-10-16 07:26:05.627 tmp_log = WindowsPath('H:/QA/temp/qa2024.tmp/fbqa/test_11588/tmp_8253_non_ascii_ddl.log')
2024-10-16 07:26:05.627 capsys = <_pytest.capture.CaptureFixture object at [hex]>
2024-10-16 07:26:05.627
2024-10-16 07:26:05.627 @pytest.mark.intl
2024-10-16 07:26:05.627 @pytest.mark.version('>=4.0.6')
2024-10-16 07:26:05.627 def test_1(act: Action, tmp_sql: Path, tmp_log: Path, capsys):
2024-10-16 07:26:05.627
2024-10-16 07:26:05.627 # Scan line-by-line through databases.conf, find line starting with REQUIRED_ALIAS and extract name of file that
2024-10-16 07:26:05.627 # must be created in the $(dir_sampleDb)/qa/ folder. This name will be used further as target database (tmp_fdb).
2024-10-16 07:26:05.627 # NOTE: we have to SKIP lines which are commented out, i.e. if they starts with '#':
2024-10-16 07:26:05.627 p_required_alias_ptn = re.compile( '^(?!#)((^|\\s+)' + REQUIRED_ALIAS + ')\\s*=\\s*\\$\\(dir_sampleDb\\)/qa/', re.IGNORECASE )
2024-10-16 07:26:05.627 fname_in_dbconf = None
2024-10-16 07:26:05.627
2024-10-16 07:26:05.627 with open(act.home_dir/'databases.conf', 'r') as f:
2024-10-16 07:26:05.627 for line in f:
2024-10-16 07:26:05.627 if p_required_alias_ptn.search(line):
2024-10-16 07:26:05.627 # If databases.conf contains line like this:
2024-10-16 07:26:05.627 # tmp_8253_alias = $(dir_sampleDb)/qa/tmp_qa_8253.fdb
2024-10-16 07:26:05.628 # - then we extract filename: 'tmp_qa_8253.fdb' (see below):
2024-10-16 07:26:05.628 fname_in_dbconf = Path(line.split('=')[1].strip()).name
2024-10-16 07:26:05.628 break
2024-10-16 07:26:05.628
2024-10-16 07:26:05.628 # if 'fname_in_dbconf' remains undefined here then propably REQUIRED_ALIAS not equals to specified in the databases.conf!
2024-10-16 07:26:05.628 #
2024-10-16 07:26:05.628 assert fname_in_dbconf
2024-10-16 07:26:05.628
2024-10-16 07:26:05.628 dba_pswd = 'alterkey'
2024-10-16 07:26:05.628 g_name = '\u043b\u043e\u043d\u0434\u043e\u043d\u0441\u043a\u0438\u0439 \u0441\u0438\u043c\u0444\u043e\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043e\u0440\u043a\u0435\u0441\u0442\u0440'
2024-10-16 07:26:05.628 r_name = '\u043d\u0430\u0441\u0442\u0440\u043e\u0439\u0449\u0438\u043a \u0440\u043e\u044f\u043b\u0435\u0439'
2024-10-16 07:26:05.628 non_ascii_ddl = f'''
2024-10-16 07:26:05.628 set list on;
2024-10-16 07:26:05.628 create database '{REQUIRED_ALIAS}' user {act.db.user};
2024-10-16 07:26:05.628 create user {act.db.user} password '{dba_pswd}';
2024-10-16 07:26:05.628 commit;
2024-10-16 07:26:05.628 connect 'localhost:{REQUIRED_ALIAS}' user {act.db.user} password '{dba_pswd}';
2024-10-16 07:26:05.628 select mon$sec_database from mon$database; -- must be: 'Self'
2024-10-16 07:26:05.628 create role "{r_name}";
2024-10-16 07:26:05.628 commit;
2024-10-16 07:26:05.629 create mapping "\u043b\u043e\u043a\u0430\u043b\u044c\u043d\u0430\u044f_\u0430\u043f\u043e\u0441\u0442\u0440\u043e\u0444" using any plugin from group '{g_name}' to role "{r_name}";
2024-10-16 07:26:05.629 create mapping "\u043b\u043e\u043a\u0430\u043b\u044c\u043d\u0430\u044f_\u043a\u0430\u0432\u044b\u0447\u043a\u0438" using any plugin from group "{g_name}" to role "{r_name}";
2024-10-16 07:26:05.629 create global mapping "\u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u0430\u044f_\u0430\u043f\u043e\u0441\u0442\u0440\u043e\u0444" using any plugin from group '{g_name}' to role "{r_name}";
2024-10-16 07:26:05.629 create global mapping "\u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u0430\u044f_\u043a\u0430\u0432\u044b\u0447\u043a\u0438" using any plugin from group "{g_name}" to role "{r_name}";
2024-10-16 07:26:05.629 commit;
2024-10-16 07:26:05.629 set count on;
2024-10-16 07:26:05.629 select rdb$map_name,rdb$map_from,rdb$map_to from rdb$auth_mapping order by rdb$map_name;
2024-10-16 07:26:05.629 commit;
2024-10-16 07:26:05.629 '''
2024-10-16 07:26:05.629
2024-10-16 07:26:05.629 tmp_sql.write_bytes(non_ascii_ddl.encode('cp866'))
2024-10-16 07:26:05.629 act.isql(switches=['-q'], input_file=tmp_sql, credentials = False, connect_db = False, combine_output = True, charset='dos866', io_enc = 'cp866')
2024-10-16 07:26:05.629 tmp_log.write_bytes(act.clean_stdout.encode('utf-8'))
2024-10-16 07:26:05.629 with open(tmp_log, 'r', encoding = 'utf-8', errors = 'backslashreplace') as f:
2024-10-16 07:26:05.629 for line in f:
2024-10-16 07:26:05.629 print(line)
2024-10-16 07:26:05.629
2024-10-16 07:26:05.629 act.expected_stdout = f"""
2024-10-16 07:26:05.629 MON$SEC_DATABASE Self
2024-10-16 07:26:05.629 RDB$MAP_NAME \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u0430\u044f_\u0430\u043f\u043e\u0441\u0442\u0440\u043e\u0444
2024-10-16 07:26:05.630 RDB$MAP_FROM {g_name}
2024-10-16 07:26:05.630 RDB$MAP_TO {r_name}
2024-10-16 07:26:05.630 RDB$MAP_NAME \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u0430\u044f_\u043a\u0430\u0432\u044b\u0447\u043a\u0438
2024-10-16 07:26:05.630 RDB$MAP_FROM {g_name}
2024-10-16 07:26:05.630 RDB$MAP_TO {r_name}
2024-10-16 07:26:05.630 RDB$MAP_NAME \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u0430\u044f_\u0430\u043f\u043e\u0441\u0442\u0440\u043e\u0444
2024-10-16 07:26:05.630 RDB$MAP_FROM {g_name}
2024-10-16 07:26:05.630 RDB$MAP_TO {r_name}
2024-10-16 07:26:05.630 RDB$MAP_NAME \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u0430\u044f_\u043a\u0430\u0432\u044b\u0447\u043a\u0438
2024-10-16 07:26:05.630 RDB$MAP_FROM {g_name}
2024-10-16 07:26:05.630 RDB$MAP_TO {r_name}
2024-10-16 07:26:05.630 Records affected: 4
2024-10-16 07:26:05.630 """
2024-10-16 07:26:05.630 act.stdout = capsys.readouterr().out
2024-10-16 07:26:05.630 > assert act.clean_stdout == act.clean_expected_stdout
2024-10-16 07:26:05.630 E assert
2024-10-16 07:26:05.630 E MON$SEC_DATABASE Self
2024-10-16 07:26:05.630 E RDB$MAP_NAME \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u0430\u044f_\u0430\u043f\u043e\u0441\u0442\u0440\u043e\u0444
2024-10-16 07:26:05.631 E - RDB$MAP_FROM \u043b\u043e\u043d\u0434\u043e\u043d\u0441\u043a\u0438\u0439 \u0441\u0438\u043c\u0444\u043e\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043e\u0440\u043a\u0435\u0441\u0442\u0440
2024-10-16 07:26:05.631 E + RDB$MAP_FROM ???????????????????? ?????????????????????????? ??????????????
2024-10-16 07:26:05.631 E RDB$MAP_TO \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u0449\u0438\u043a \u0440\u043e\u044f\u043b\u0435\u0439
2024-10-16 07:26:05.631 E RDB$MAP_NAME \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u0430\u044f_\u043a\u0430\u0432\u044b\u0447\u043a\u0438
2024-10-16 07:26:05.631 E - RDB$MAP_FROM \u043b\u043e\u043d\u0434\u043e\u043d\u0441\u043a\u0438\u0439 \u0441\u0438\u043c\u0444\u043e\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043e\u0440\u043a\u0435\u0441\u0442\u0440
2024-10-16 07:26:05.631 E + RDB$MAP_FROM ??????????????????????????????????????????????????????????? ?????????????????????????????????????????????????????????????????????????? ??????????????????????????????????????
2024-10-16 07:26:05.631 E RDB$MAP_TO \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u0449\u0438\u043a \u0440\u043e\u044f\u043b\u0435\u0439
2024-10-16 07:26:05.631 E RDB$MAP_NAME \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u0430\u044f_\u0430\u043f\u043e\u0441\u0442\u0440\u043e\u0444
2024-10-16 07:26:05.631 E RDB$MAP_FROM \u043b\u043e\u043d\u0434\u043e\u043d\u0441\u043a\u0438\u0439 \u0441\u0438\u043c\u0444\u043e\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043e\u0440\u043a\u0435\u0441\u0442\u0440
2024-10-16 07:26:05.631 E RDB$MAP_TO \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u0449\u0438\u043a \u0440\u043e\u044f\u043b\u0435\u0439
2024-10-16 07:26:05.631 E RDB$MAP_NAME \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u0430\u044f_\u043a\u0430\u0432\u044b\u0447\u043a\u0438
2024-10-16 07:26:05.631 E - RDB$MAP_FROM \u043b\u043e\u043d\u0434\u043e\u043d\u0441\u043a\u0438\u0439 \u0441\u0438\u043c\u0444\u043e\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043e\u0440\u043a\u0435\u0441\u0442\u0440
2024-10-16 07:26:05.631 E + RDB$MAP_FROM \u2568\u2557\u2568\u255b\u2568\u255c\u2568\u2524\u2568\u255b\u2568\u255c\u2564\u0411\u2568\u2551\u2568\u2555\u2568\u2563 \u2564\u0411\u2568\u2555\u2568\u255d\u2564\u0414\u2568\u255b\u2568\u255c\u2568\u2555\u2564\u0417\u2568\u2561\u2564\u0411\u2568\u2551\u2568\u2555\u2568\u2563 \u2568\u255b\u2564\u0410\u2568\u2551\u2568\u2561\u2564\u0411\u2564\u0412\u2564\u0410
2024-10-16 07:26:05.631 E RDB$MAP_TO \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u0449\u0438\u043a \u0440\u043e\u044f\u043b\u0435\u0439
2024-10-16 07:26:05.631 E Records affected: 4
2024-10-16 07:26:05.631
2024-10-16 07:26:05.631 tests\bugs\gh_8253_test.py:111: AssertionError
2024-10-16 07:26:05.631 ---------------------------- Captured stdout setup ----------------------------
2024-10-16 07:26:05.631 Creating db: localhost:H:\QA\temp\qa2024.tmp\fbqa\test_11588\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 = WindowsPath('H:/QA/temp/qa2024.tmp/fbqa/test_11588/tmp_8253_non_ascii_ddl.sql')
tmp_log = WindowsPath('H:/QA/temp/qa2024.tmp/fbqa/test_11588/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
|