|
| 1 | +#coding:utf-8 |
| 2 | + |
| 3 | +""" |
| 4 | +ID: issue-8520 |
| 5 | +ISSUE: https://github.com/FirebirdSQL/firebird/issues/8520 |
| 6 | +TITLE: Error in iTransaction.getInfo() on embedded connection |
| 7 | +DESCRIPTION: |
| 8 | +NOTES: |
| 9 | + [17.04.2025] pzotov |
| 10 | + Confirmed problem on 6.0.0.686 (20-mar-2025). |
| 11 | + Checked on 6.0.0.737-cf1d367 (intermediate snapshot). |
| 12 | +""" |
| 13 | + |
| 14 | +import os |
| 15 | +import re |
| 16 | +import time |
| 17 | + |
| 18 | +import pytest |
| 19 | +from firebird.qa import * |
| 20 | +from firebird.driver import connect, driver_config, NetProtocol, DatabaseError |
| 21 | + |
| 22 | +db = db_factory() |
| 23 | +act = python_act('db') |
| 24 | + |
| 25 | +#----------------------------------------------------------- |
| 26 | + |
| 27 | +@pytest.mark.version('>=6.0') |
| 28 | +def test_1(act: Action, capsys): |
| 29 | + |
| 30 | + srv_config = driver_config.register_server(name = 'test_8520_srv', config = '') |
| 31 | + db_cfg_object = driver_config.register_database(name = 'test_8520_cfg') |
| 32 | + db_cfg_object.database.value = str(act.db.db_path) |
| 33 | + db_cfg_object.server.value = srv_config.name |
| 34 | + |
| 35 | + sql_sttm = 'select mon$remote_protocol from mon$attachments where mon$attachment_id = current_connection' |
| 36 | + |
| 37 | + protocols_list = [ None, NetProtocol.INET, ] # None - for local/embedded connection. |
| 38 | + if act.platform == 'Windows': |
| 39 | + protocols_list.append(NetProtocol.XNET) |
| 40 | + if act.is_version('<5'): |
| 41 | + protocols_list.append(NetProtocol.WNET) |
| 42 | + |
| 43 | + expected_out_map = {} |
| 44 | + for p in protocols_list: |
| 45 | + db_cfg_object.protocol.value = p |
| 46 | + with connect(db_cfg_object.name, user = act.db.user, password = act.db.password) as con: |
| 47 | + protocol_name = 'UNKNOWN' |
| 48 | + with con.cursor() as cur: |
| 49 | + for r in cur.execute(sql_sttm): |
| 50 | + protocol_name = 'NONE' if p == None else p.name.upper() |
| 51 | + try: |
| 52 | + with con.main_transaction as tr: |
| 53 | + expected_out_map[ protocol_name ] = tr.info.database |
| 54 | + except DatabaseError as e: |
| 55 | + print(f'Error encountered for {protocol_name=}:') |
| 56 | + print(e.__str__()) |
| 57 | + print(e.gds_codes) |
| 58 | + |
| 59 | + # Construct expected output + print actual result for comparison with expected one: |
| 60 | + expected_out_lst = [] |
| 61 | + for k,v in expected_out_map.items(): |
| 62 | + print(k.lower(), v.lower()) |
| 63 | + expected_out_lst.append( (k + ' ' + ('' if k == 'NONE' else k +'://') + str(act.db.db_path)).lower() ) |
| 64 | + |
| 65 | + expected_stdout = '\n'.join(expected_out_lst) |
| 66 | + act.expected_stdout = expected_stdout |
| 67 | + act.stdout = capsys.readouterr().out |
| 68 | + assert act.clean_stdout == act.clean_expected_stdout |
0 commit comments