From 3b3e483c62b559b584999ddfa4bc953fa5d91f49 Mon Sep 17 00:00:00 2001 From: pavel-zotov Date: Thu, 23 Feb 2023 00:14:30 +0300 Subject: [PATCH] Added/Updated tests\bugs\gh_7239_test.py: Checked on 4.0.3.2903, 5.0.0.958 - all fine. --- tests/bugs/gh_7239_test.py | 57 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 tests/bugs/gh_7239_test.py diff --git a/tests/bugs/gh_7239_test.py b/tests/bugs/gh_7239_test.py new file mode 100644 index 00000000..ad3579a0 --- /dev/null +++ b/tests/bugs/gh_7239_test.py @@ -0,0 +1,57 @@ +#coding:utf-8 + +""" +ID: issue-7239 +ISSUE: 7239 +TITLE: Connect using XNET protocol shows different exception if DB is in shutdown state (comparing to INET) +DESCRIPTION: +NOTES: + [22.02.2023] pzotov + Confirmed bug on 4.0.2.2817, 5.0.0.592. + Checked on 4.0.3.2903, 5.0.0.958 - all fine. +""" + +import pytest +from firebird.qa import * +from firebird.driver import NetProtocol, ShutdownMode, ShutdownMethod +import locale +import re + +db = db_factory() + +act = python_act('db', substitutions = [('database .* shutdown', 'database shutdown')]) + +@pytest.mark.version('>=4.0.2') +def test_1(act: Action, capsys): + + with act.connect_server() as srv: + srv.database.shutdown(database = act.db.db_path, mode = ShutdownMode.FULL, method = ShutdownMethod.FORCED, timeout = 0) + + try: + protocols_list = [ NetProtocol.INET, ] + expected_fail = """ + """ + if act.platform == 'Windows': + protocols_list.append(NetProtocol.XNET) + if act.is_version('<5'): + protocols_list.append(NetProtocol.WNET) + + for p in protocols_list: + dsn = p.name.lower() + '://' + str(act.db.db_path) + act.isql(switches=['-q'], input = f'connect {dsn};quit;', io_enc = locale.getpreferredencoding(), combine_output = True, connect_db = False) + expected_fail += f""" + {p.name.upper()} + Statement failed, SQLSTATE = HY000 + database shutdown + """ + print(p.name) + print(act.stdout) + except Exception as e: + print(e.__str__()) + + with act.connect_server() as srv: + srv.database.bring_online(database = act.db.db_path) + + act.expected_stdout = expected_fail + act.stdout = capsys.readouterr().out + assert act.clean_stdout == act.clean_expected_stdout