Jump to: output_first_mismatch    outcomes_full_history    elapsed_time_chart
Show cross-report outcomes.

Annotation type Annotation details
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
Full history of outcomes and elapsed time, ms:
NN SNAP_INFO CS_outcome SS_outcome CS_run_time SS_run_time CS_run_beg CS_run_end SS_run_beg SS_run_end
1 4.0.6.3189 2025.02.25 1a1a5 P P 766 523 2025.06.27 13:17:21.611 2025.06.27 13:17:22.377 2025.06.27 12:18:36.790 2025.06.27 12:18:37.313
2 4.0.6.3184 2025.02.24 9388c P P 816 558 2025.02.25 10:58:54.813 2025.02.25 10:58:55.629 2025.02.25 09:41:42.927 2025.02.25 09:41:43.485
3 4.0.6.3183 2025.02.17 e4762 P P 797 566 2025.02.24 11:31:00.071 2025.02.24 11:31:00.868 2025.02.24 10:32:05.448 2025.02.24 10:32:06.014
4 4.0.6.3169 2024.12.13 42cc1 P P 780 537 2025.02.14 08:18:48.461 2025.02.14 08:18:49.241 2025.02.14 07:19:54.877 2025.02.14 07:19:55.414
5 4.0.6.3169 2024.12.08 50eb6 P P 787 536 2024.12.11 11:15:21.987 2024.12.11 11:15:22.774 2024.12.11 10:16:51.719 2024.12.11 10:16:52.255
6 4.0.6.3168 2024.12.07 98d69 P P 819 597 2024.12.08 03:58:55.894 2024.12.08 03:58:56.713 2024.12.08 02:58:34.434 2024.12.08 02:58:35.031
7 4.0.6.3168 2024.12.05 cee43 P P 844 540 2024.12.06 04:02:08.365 2024.12.06 04:02:09.209 2024.12.06 03:03:08.881 2024.12.06 03:03:09.421
8 4.0.6.3168 2024.11.28 48149 P P 779 554 2024.12.03 10:55:21.727 2024.12.03 10:55:22.506 2024.12.03 09:57:32.422 2024.12.03 09:57:32.976
9 4.0.6.3163 2024.10.30 832db P P 796 536 2024.11.28 10:54:03.174 2024.11.28 10:54:03.970 2024.11.28 09:56:25.045 2024.11.28 09:56:25.581
10 4.0.6.3163 2024.10.16 2bb10 P P 779 552 2024.10.30 11:03:03.667 2024.10.30 11:03:04.446 2024.10.30 10:05:18.163 2024.10.30 10:05:18.715
11 4.0.6.3147 2024.09.10 a4d11 F F 789 553 2024.10.16 04:10:31.443 2024.10.16 04:10:32.232 2024.10.16 02:53:40.831 2024.10.16 02:53:41.384

Elapsed time, ms. Chart for last 11 runs:

Last commits information (all timestamps in UTC):