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-25 11:22:43.710
2024-09-25 11:22:43.716 act = <firebird.qa.plugin.Action object at [hex]>
2024-09-25 11:22:43.722 tmp_sql = PosixPath('/var/tmp/qa_2024/test_11654/tmp_8253_non_ascii_ddl.sql')
2024-09-25 11:22:43.729 tmp_log = PosixPath('/var/tmp/qa_2024/test_11654/tmp_8253_non_ascii_ddl.log')
2024-09-25 11:22:43.735 capsys = <_pytest.capture.CaptureFixture object at [hex]>
2024-09-25 11:22:43.741
2024-09-25 11:22:43.747 @pytest.mark.intl
2024-09-25 11:22:43.753 @pytest.mark.version('>=4.0.6')
2024-09-25 11:22:43.759 def test_1(act: Action, tmp_sql: Path, tmp_log: Path, capsys):
2024-09-25 11:22:43.766
2024-09-25 11:22:43.772 # Scan line-by-line through databases.conf, find line starting with REQUIRED_ALIAS and extract name of file that
2024-09-25 11:22:43.778 # must be created in the $(dir_sampleDb)/qa/ folder. This name will be used further as target database (tmp_fdb).
2024-09-25 11:22:43.785 # NOTE: we have to SKIP lines which are commented out, i.e. if they starts with '#':
2024-09-25 11:22:43.791 p_required_alias_ptn = re.compile( '^(?!#)((^|\\s+)' + REQUIRED_ALIAS + ')\\s*=\\s*\\$\\(dir_sampleDb\\)/qa/', re.IGNORECASE )
2024-09-25 11:22:43.798 fname_in_dbconf = None
2024-09-25 11:22:43.804
2024-09-25 11:22:43.810 with open(act.home_dir/'databases.conf', 'r') as f:
2024-09-25 11:22:43.816 for line in f:
2024-09-25 11:22:43.823 if p_required_alias_ptn.search(line):
2024-09-25 11:22:43.829 # If databases.conf contains line like this:
2024-09-25 11:22:43.836 # tmp_8253_alias = $(dir_sampleDb)/qa/tmp_qa_8253.fdb
2024-09-25 11:22:43.844 # - then we extract filename: 'tmp_qa_8253.fdb' (see below):
2024-09-25 11:22:43.849 fname_in_dbconf = Path(line.split('=')[1].strip()).name
2024-09-25 11:22:43.855 break
2024-09-25 11:22:43.866
2024-09-25 11:22:43.874 # if 'fname_in_dbconf' remains undefined here then propably REQUIRED_ALIAS not equals to specified in the databases.conf!
2024-09-25 11:22:43.880 #
2024-09-25 11:22:43.887 assert fname_in_dbconf
2024-09-25 11:22:43.893
2024-09-25 11:22:43.899 dba_pswd = 'alterkey'
2024-09-25 11:22:43.904 g_name = 'лондонский симфонический оркестр'
2024-09-25 11:22:43.909 r_name = 'настройщик роялей'
2024-09-25 11:22:43.914 non_ascii_ddl = f'''
2024-09-25 11:22:43.920 set list on;
2024-09-25 11:22:43.925 create database '{REQUIRED_ALIAS}' user {act.db.user};
2024-09-25 11:22:43.931 create user {act.db.user} password '{dba_pswd}';
2024-09-25 11:22:43.936 commit;
2024-09-25 11:22:43.942 connect 'localhost:{REQUIRED_ALIAS}' user {act.db.user} password '{dba_pswd}';
2024-09-25 11:22:43.948 select mon$sec_database from mon$database; -- must be: 'Self'
2024-09-25 11:22:43.952 create role "{r_name}";
2024-09-25 11:22:43.957 commit;
2024-09-25 11:22:43.963 create mapping "локальная_апостроф" using any plugin from group '{g_name}' to role "{r_name}";
2024-09-25 11:22:43.968 create mapping "локальная_кавычки" using any plugin from group "{g_name}" to role "{r_name}";
2024-09-25 11:22:43.974 create global mapping "глобальная_апостроф" using any plugin from group '{g_name}' to role "{r_name}";
2024-09-25 11:22:43.982 create global mapping "глобальная_кавычки" using any plugin from group "{g_name}" to role "{r_name}";
2024-09-25 11:22:43.988 commit;
2024-09-25 11:22:43.993 set count on;
2024-09-25 11:22:44.001 select rdb$map_name,rdb$map_from,rdb$map_to from rdb$auth_mapping order by rdb$map_name;
2024-09-25 11:22:44.008 commit;
2024-09-25 11:22:44.014 '''
2024-09-25 11:22:44.020
2024-09-25 11:22:44.027 tmp_sql.write_bytes(non_ascii_ddl.encode('cp866'))
2024-09-25 11:22:44.034 act.isql(switches=['-q'], input_file=tmp_sql, credentials = False, connect_db = False, combine_output = True, charset='dos866', io_enc = 'cp866')
2024-09-25 11:22:44.040 tmp_log.write_bytes(act.clean_stdout.encode('utf-8'))
2024-09-25 11:22:44.046 with open(tmp_log, 'r', encoding = 'utf-8', errors = 'backslashreplace') as f:
2024-09-25 11:22:44.053 for line in f:
2024-09-25 11:22:44.059 print(line)
2024-09-25 11:22:44.064
2024-09-25 11:22:44.070 act.expected_stdout = f"""
2024-09-25 11:22:44.074 MON$SEC_DATABASE Self
2024-09-25 11:22:44.080 RDB$MAP_NAME глобальная_апостроф
2024-09-25 11:22:44.085 RDB$MAP_FROM {g_name}
2024-09-25 11:22:44.089 RDB$MAP_TO {r_name}
2024-09-25 11:22:44.095 RDB$MAP_NAME глобальная_кавычки
2024-09-25 11:22:44.101 RDB$MAP_FROM {g_name}
2024-09-25 11:22:44.108 RDB$MAP_TO {r_name}
2024-09-25 11:22:44.117 RDB$MAP_NAME локальная_апостроф
2024-09-25 11:22:44.125 RDB$MAP_FROM {g_name}
2024-09-25 11:22:44.133 RDB$MAP_TO {r_name}
2024-09-25 11:22:44.140 RDB$MAP_NAME локальная_кавычки
2024-09-25 11:22:44.147 RDB$MAP_FROM {g_name}
2024-09-25 11:22:44.153 RDB$MAP_TO {r_name}
2024-09-25 11:22:44.158 Records affected: 4
2024-09-25 11:22:44.164 """
2024-09-25 11:22:44.169 act.stdout = capsys.readouterr().out
2024-09-25 11:22:44.174 > assert act.clean_stdout == act.clean_expected_stdout
2024-09-25 11:22:44.179 E assert
2024-09-25 11:22:44.184 E MON$SEC_DATABASE Self
2024-09-25 11:22:44.190 E RDB$MAP_NAME глобальная_апостроф
2024-09-25 11:22:44.195 E - RDB$MAP_FROM лондонский симфонический оркестр
2024-09-25 11:22:44.200 E + RDB$MAP_FROM ???????????????????? ?????????????????????????? ??????????????
2024-09-25 11:22:44.205 E RDB$MAP_TO настройщик роялей
2024-09-25 11:22:44.213 E RDB$MAP_NAME глобальная_кавычки
2024-09-25 11:22:44.220 E - RDB$MAP_FROM лондонский симфонический оркестр
2024-09-25 11:22:44.226 E + RDB$MAP_FROM ??????????????????????????????????????????????????????????? ?????????????????????????????????????????????????????????????????????????? ??????????????????????????????????????
2024-09-25 11:22:44.232 E RDB$MAP_TO настройщик роялей
2024-09-25 11:22:44.238 E RDB$MAP_NAME локальная_апостроф
2024-09-25 11:22:44.244 E RDB$MAP_FROM лондонский симфонический оркестр
2024-09-25 11:22:44.250 E RDB$MAP_TO настройщик роялей
2024-09-25 11:22:44.256 E RDB$MAP_NAME локальная_кавычки
2024-09-25 11:22:44.262 E - RDB$MAP_FROM лондонский симфонический оркестр
2024-09-25 11:22:44.270 E + RDB$MAP_FROM ╨╗╨╛╨╜╨┤╨╛╨╜╤Б╨║╨╕╨╣ ╤Б╨╕╨╝╤Д╨╛╨╜╨╕╤З╨╡╤Б╨║╨╕╨╣ ╨╛╤А╨║╨╡╤Б╤В╤А
2024-09-25 11:22:44.276 E RDB$MAP_TO настройщик роялей
2024-09-25 11:22:44.283 E Records affected: 4
2024-09-25 11:22:44.289
2024-09-25 11:22:44.296 tests/bugs/gh_8253_test.py:111: AssertionError
2024-09-25 11:22:44.305 ---------------------------- Captured stdout setup -----------------------------
2024-09-25 11:22:44.314 Creating db: localhost:/var/tmp/qa_2024/test_11654/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_11654/tmp_8253_non_ascii_ddl.sql')
tmp_log = PosixPath('/var/tmp/qa_2024/test_11654/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
|