6
0
mirror of https://github.com/FirebirdSQL/firebird-qa.git synced 2025-01-23 05:53:06 +01:00
firebird-qa/tests/bugs/core_4380_test.py

195 lines
6.2 KiB
Python

#coding:utf-8
#
# id: bugs.core_4380
# title: ISQL truncates blob when reading an empty segment
# decription:
# Checked on: 4.0.0.138 (both Windows and POSIX); 3.0.0.32484.
#
# tracker_id: CORE-4380
# min_versions: ['3.0']
# versions: 3.0
# qmid: None
import pytest
import re
from firebird.qa import db_factory, python_act, Action
# version: 3.0
# resources: None
substitutions_1 = []
init_script_1 = """
set term ^;
create procedure sp_test_master(a_id int) returns(o_txt varchar(20)) as
begin
end
^
set term ;^
commit;
"""
db_1 = db_factory(sql_dialect=3, init=init_script_1)
# test_script_1
#---
# import os
# import subprocess
# import re
#
# os.environ["ISC_USER"] = user_name
# os.environ["ISC_PASSWORD"] = user_password
#
# # -- NB: i'm not sure that this test properly reflects the trouble described in the ticket.
# # -- At least on 3.0 Alpha 1, Alpha 2 and Beta 2 (31807) output is identical.
# # -- Note that value in "BLR to Source mapping" under 'Column' was changed to reflect
# # -- real offset from the beginning of line in THIS .fbt file (right shifted on 4 character).
#
# sql_script=''' set blob all;
# set list on;
# select rdb$debug_info from rdb$procedures;
# '''
#
# f_blob_sql = open( os.path.join(context['temp_directory'],'tmp_blob_4380.sql'), 'w')
# f_blob_sql.write(sql_script)
# f_blob_sql.close()
#
# f_blob_log = open( os.path.join(context['temp_directory'],'tmp_blob_4380.log'), 'w')
#
# subprocess.call( [ context['isql_path'], dsn, "-i", f_blob_sql.name],
# stdout = f_blob_log,
# stderr = subprocess.STDOUT
# )
# f_blob_log.close()
#
# # RDB$DEBUG_INFO 1a:1e1
# # Parameters:
# # Number Name Type
# # --------------------------------------------------
# # 0 A_ID INPUT
# # 0 O_TXT OUTPUT
# #
# # Variables:
# # Number Name
# # -------------------------------------------
# # 0 O_TXT
# #
# # BLR to Source mapping:
# # BLR offset Line Column
# # --------------------------------
# # 42 2 79
# # ^ ^ ^
# # | | |
# # +-----------+----------+---- all of them can vary!
#
# # Print content of log with filtering lines:we are interesting only for rows
# # which contain words: {'Parameters', 'Number', 'Variables', 'BLR'}.
# # For last line (with three numbers for offset, line and col) we just check
# # matching of row to appropriate pattern.
#
# # NB: we remove all exsessive spaces from printed lines.
#
# pattern = re.compile("[\\s]+[0-9]+[\\s]+[0-9]+[\\s]+[0-9]+")
#
# with open( f_blob_log.name,'r') as f:
# for line in f:
# line = line.upper()
#
# if ('PARAMETER' in line or
# 'NUMBER' in line or
# 'INPUT' in line or
# 'OUTPUT' in line or
# 'VARIABLE' in line or
# 'BLR' in line):
# print(' '.join(line.split()).upper())
#
# if pattern.match(line):
# print('VALUES: <OFFSET> <LINE> <COLUMN>')
#
# ################################################
# # Cleanup
#
# f_list=[]
# f_list.append(f_blob_sql)
# f_list.append(f_blob_log)
#
# for i in range(len(f_list)):
# if os.path.isfile(f_list[i].name):
# os.remove(f_list[i].name)
#
#
#---
act_1 = python_act('db_1', substitutions=substitutions_1)
expected_stdout_1 = """
PARAMETERS:
NUMBER NAME TYPE
0 A_ID INPUT
0 O_TXT OUTPUT
VARIABLES:
NUMBER NAME
BLR TO SOURCE MAPPING:
BLR OFFSET LINE COLUMN
VALUES: <OFFSET> <LINE> <COLUMN>
"""
@pytest.mark.version('>=3.0')
def test_1(act_1: Action, capsys):
# -- NB: i'm not sure that this test properly reflects the trouble described in the ticket.
# -- At least on 3.0 Alpha 1, Alpha 2 and Beta 2 (31807) output is identical.
# -- Note that value in "BLR to Source mapping" under 'Column' was changed to reflect
# -- real offset from the beginning of line in THIS .fbt file (right shifted on 4 character).
sql_script = """
set blob all;
set list on;
select rdb$debug_info from rdb$procedures;
"""
act_1.isql(switches=[], input=sql_script)
# RDB$DEBUG_INFO 1a:1e1
# Parameters:
# Number Name Type
# --------------------------------------------------
# 0 A_ID INPUT
# 0 O_TXT OUTPUT
#
# Variables:
# Number Name
# -------------------------------------------
# 0 O_TXT
#
# BLR to Source mapping:
# BLR offset Line Column
# --------------------------------
# 42 2 79
# ^ ^ ^
# | | |
# +-----------+----------+---- all of them can vary!
# Print content of log with filtering lines:we are interesting only for rows
# which contain words: {'Parameters', 'Number', 'Variables', 'BLR'}.
# For last line (with three numbers for offset, line and col) we just check
# matching of row to appropriate pattern.
# NB: we remove all exsessive spaces from printed lines.
pattern = re.compile("[\\s]+[0-9]+[\\s]+[0-9]+[\\s]+[0-9]+")
for line in act_1.stdout.splitlines():
line = line.upper()
if ('PARAMETER' in line or
'NUMBER' in line or
'INPUT' in line or
'OUTPUT' in line or
'VARIABLE' in line or
'BLR' in line):
print(' '.join(line.split()).upper())
if pattern.match(line):
print('VALUES: <OFFSET> <LINE> <COLUMN>')
# Test
act_1.reset()
act_1.expected_stdout = expected_stdout_1
act_1.stdout = capsys.readouterr().out
assert act_1.clean_stdout == act_1.clean_expected_stdout