예제 #1
0
 def __init__(self, methodName):
     super(AOCSAlterColumnTestCase,self).__init__(methodName)
     self.aoco_alt_obj=AOCOAlterColumn()
예제 #2
0
class AOCSAlterColumnTestCase(ScenarioTestCase, MPPTestCase):
    ''' Testing the performance enhancement related changes done to alter table add/drop column to aoco tables '''
    
    def __init__(self, methodName):
        super(AOCSAlterColumnTestCase,self).__init__(methodName)
        self.aoco_alt_obj=AOCOAlterColumn()

    @classmethod
    def setUpClass(cls):
        super(AOCSAlterColumnTestCase, cls).setUpClass()
        '''
        Create tables with multiple varblocks and multiple segfiles upfront. They will be used in the tests .
        '''
        base_dir = os.path.dirname(sys.modules[cls.__module__].__file__)
        crtable_name = ['create_tabfor_utility_mode','create_multivarblock_table','create_multisegfile_table','create_large_table']
        for sname in crtable_name:
            aoco_alter_sql=''
            aoco_alter_sql= os.path.join(os.path.dirname(sys.modules[cls.__module__].__file__), "sql")+'/'+sname+'.sql'
            aoco_alter_ans= os.path.join(os.path.dirname(sys.modules[cls.__module__].__file__), "expected")+'/'+sname+'.ans'
            aoco_alter_out= os.path.join(os.path.dirname(sys.modules[cls.__module__].__file__), "sql")+'/'+sname+'.out'
            tinctest.logger.info( '\n Creating TABLE :  %s' % aoco_alter_sql )
            res=PSQL.run_sql_file(sql_file = aoco_alter_sql,out_file=aoco_alter_out)
            init_file=os.path.join( base_dir, "sql",'init_file')
            result = Gpdiff.are_files_equal(aoco_alter_out, aoco_alter_ans, match_sub =[init_file])
            errmsg='Gpdiff are not equal for file '+ sname
            assert result, errmsg

    def test_AOCOAlterColumnChangeTracking_05_addcolumn_largetable(self):
        ''' 
        @product_version gpdb: [4.3.2.0-]
        
        This tests the behavior of alter table in a failover/changtracking scenario 
        STEPS:
        1. Alter table add column
        2. While the alter is going on, Fail one Primary
        3. Make sure the trasaction in step 1 is aborted
        4. gprecoverseg 
        5. Alter table add column again 
        6. Make sure transaction in step 5 passes
        '''
        tinctest.logger.info("\n ===============================================")
        tinctest.logger.info("\n Starting Test: test_AOCOAlterColumnChangeTracking_05_addcolumn_largetable ") 
        tinctest.logger.info("\n ===============================================")
        self.aoco_alt_obj.run_test_ChangeTracking('largetab-altercol')


    def test_NegativeAOCOAlter_UtilityMode_06_addcolumn_utilityMode(self):
        ''' 
        @product_version gpdb: [4.3.2.0-]
        
        This tests the behavior of alter table in a utility mode connection
        STEPS:
        1. Make a Utlity Mode connection
        2. Alter table add column
        3. Make sure the alter fails
        '''
        tinctest.logger.info("\n ===============================================")
        tinctest.logger.info("\n Starting Test: test_NegativeAOCOAlter_UtilityMode_06_addcolumn_utilityMode") 
        tinctest.logger.info("\n ===============================================")
        self.aoco_alt_obj.run_test_utility_mode('alter_aoco_tab_utilitymode')




    def test_AOCOAlterColumnCatalogCheck(self):
        ''' 
        @product_version gpdb: [4.3.2.0-]
        
        These set of tests verify the correctness of catalog after alter table add/drop column
        involving multi-varblock and multi-segfile Appendonly column oriented table
        STEPS:
        1. perform alter table add/drop column to multi-varblock/multi-segfile
        2. Verify the correctness of the operation
        3. Use gpcheckcat to validate the correctness of catalog after alter table operation

        @data_provider data_types_provider
        '''
        tinctest.logger.info("\n ===============================================")
        tinctest.logger.info("\n Starting Test: %s%s " % (self.test_data[0][0], self.test_data[0][1] ))
        action = self.test_data[1][0]
        storage= self.test_data[1][1]
        tinctest.logger.info("\n SQL Action   : %s" %(action)) 
        tinctest.logger.info("\n Storage type : %s" %(storage)) 
        tinctest.logger.info("\n ===============================================")
        self.aoco_alt_obj.run_test_CatalogCheck(action,storage)
        self.aoco_alt_obj.validate_test_CatalogCheck(action,storage)