#coding:utf-8 # # id: bugs.core_4582 # title: Within linger period one can not change some database properties # decription: # Confirmed on WI-T3.0.0.31374 Beta 1: running GFIX -buffers N has NO affect if this is done within linger period # Results for 22.05.2017: # fb30Cs, build 3.0.3.32725: OK, 4.703ss. # fb30SC, build 3.0.3.32725: OK, 2.469ss. # FB30SS, build 3.0.3.32725: OK, 1.922ss. # FB40CS, build 4.0.0.645: OK, 5.047ss. # FB40SC, build 4.0.0.645: OK, 2.703ss. # FB40SS, build 4.0.0.645: OK, 2.187ss. # # tracker_id: CORE-4582 # min_versions: ['3.0'] # versions: 3.0 # qmid: import pytest from firebird.qa import db_factory, isql_act, Action # version: 3.0 # resources: None substitutions_1 = [('^((?!:::MSG:::|buffers|before|after|Attributes).)*$', ''), ('Page buffers([\t]|[ ])+', 'Page buffers '), ('Attributes([\t]|[ ])+', 'Attributes '), ('N/A', 'YES')] init_script_1 = """ -- Result of this test on WI-T3.0.0.31374 Beta 1: -- Expected standard output from Python does not match actual output. -- - GFIX could change buffers ? => YES -- ? ^^^ -- + GFIX could change buffers ? => NO! -- ? ^^^ set term ^; -- Aux procedure that determines: is current connection to SuperServer ? -- If yes, returns current value of page buffers, otherwise (SC/CS) always return -1, in order to -- make final output = 'N/A' and give 'substitutions' section handle this case as acceptable. create or alter procedure sp_get_buff returns(mon_buffers int) as begin mon_buffers = -1; if ( exists( select * from mon$attachments where mon$user containing 'cache writer' and mon$system_flag = 1 ) ) then select mon$page_buffers from mon$database into mon_buffers; suspend; end ^ set term ;^ commit; recreate table log(buf_before int, buf_after int); commit; """ db_1 = db_factory(sql_dialect=3, init=init_script_1) # test_script_1 #--- # # import os # os.environ["ISC_USER"] = user_name # os.environ["ISC_PASSWORD"] = user_password # db_conn.close() # # script=''' # insert into log(buf_before) select mon_buffers from sp_get_buff; # commit; # alter database set linger to 15; # commit; # set list on; # select rdb$linger as ":::MSG::: linger_time" from rdb$database; # ''' # # print (':::MSG::: Starting ISQL setting new value for linger...') # runProgram('isql',[dsn],script) # print (':::MSG::: ISQL setting new value for linger finished.') # # print (':::MSG::: Starting GFIX setting new value for page buffers...') # runProgram('gfix',[dsn,'-buffers','3791']) # runProgram('gfix',[dsn,'-w','async']) # runProgram('gfix',[dsn,'-mode','read_only']) # runProgram('gfix',[dsn,'-sh','single', '-at', '20']) # runProgram('gstat',['-h',dsn]) # runProgram('gfix',[dsn,'-online']) # runProgram('gfix',[dsn,'-mode','read_write']) # print (':::MSG::: GFIX setting new value for page buffers finished.') # print (':::MSG::: Starting ISQL for extract old and new value of page buffers...') # script=''' # set list on; # update log set buf_after = (select mon_buffers from sp_get_buff); # commit; # select iif( g.buf_before > 0, # iif( g.buf_before is distinct from g.buf_after, 'YES', 'NO!' ), # 'N/A' # ) as "GFIX could change buffers ? =>" # from log g; # ''' # runProgram('isql',[dsn],script) # print (':::MSG::: ISQL for extract old and new value of page finished.') # #--- #act_1 = python_act('db_1', test_script_1, substitutions=substitutions_1) expected_stdout_1 = """ :::MSG::: Starting ISQL setting new value for linger... :::MSG::: linger_time 15 :::MSG::: ISQL setting new value for linger finished. :::MSG::: Starting GFIX setting new value for page buffers... Page buffers 3791 Attributes single-user maintenance, read only :::MSG::: GFIX setting new value for page buffers finished. :::MSG::: Starting ISQL for extract old and new value of page buffers... GFIX could change buffers ? => YES :::MSG::: ISQL for extract old and new value of page finished. """ @pytest.mark.version('>=3.0') @pytest.mark.xfail def test_1(db_1): pytest.fail("Test not IMPLEMENTED")