def test_templates_template_sql_file(self): """Test loadTestsFromName for a dynamically generated sql template test method.""" test_loader = TINCTestLoader() test_suite = test_loader.loadTestsFromName('mpp.models.test.sql_related.test_sql_test_case.MockSQLTemplateTestCaseExplicit.test_template_query04') test_case = test_suite._tests[0] # Template test case should work as if it is non-template test case... self.assertEqual(test_case.name, "MockSQLTemplateTestCaseExplicit.test_template_query04") self.assertEqual(test_case.author, 'shahn17') self.assertEqual(test_case.description, 'template test case') sql_file_path = os.path.join(test_case.get_out_dir(), "MockSQLTemplateTestCaseExplicit", "template_query04.sql") ans_file_path = os.path.join(test_case.get_out_dir(), "MockSQLTemplateTestCaseExplicit", "template_query04.ans") original_sql_file_path = os.path.join(os.path.dirname(sys.modules[test_case.__class__.__module__].__file__), test_case.__class__.sql_dir, test_case.__class__.template_dir, "query04.sql") original_ans_file_path = os.path.join(os.path.dirname(sys.modules[test_case.__class__.__module__].__file__), test_case.__class__.ans_dir, test_case.__class__.template_dir, "query04.ans") self.assertEqual(test_case.sql_file, sql_file_path) self.assertEqual(test_case.ans_file, ans_file_path) self.assertEqual(test_case._original_sql_file, original_sql_file_path) self.assertEqual(test_case._original_ans_file, original_ans_file_path) self.assertTrue(os.path.exists(test_case.sql_file)) self.assertTrue(os.path.exists(test_case.ans_file)) self.assertTrue(os.path.exists(test_case._original_sql_file)) self.assertTrue(os.path.exists(test_case._original_ans_file)) # Cleanup dir_path = os.path.join(test_case.get_out_dir(), "MockSQLTemplateTestCaseExplicit") self.assertTrue(os.path.exists(dir_path)) shutil.rmtree(dir_path)
def test_infer_metadata(self): test_loader = TINCTestLoader() test_suite = test_loader.loadTestsFromTestCase(MockSQLTestCase) test_case = None for case in test_suite._tests: if case.name == "MockSQLTestCase.test_query02": test_case = case
def test_skip_when_tag_in_sql_file(self): test_loader = TINCTestLoader() test_suite = test_loader.loadTestsFromTestCase(MockSQLTestCaseForSkip) test_case = None for case in test_suite._tests: if case.name == "MockSQLTestCaseForSkip.test_query01": test_case = case
def test_templates_all_files(self): """Test loadTestsFromName for a class name""" test_loader = TINCTestLoader() test_suite = test_loader.loadTestsFromName('mpp.models.test.sql_related.test_sql_test_case.MockSQLTemplateTestCase') # 5 tests for 3 sql files in the current directory, and 2 sql files in the template directory self.assertEquals(len(test_suite._tests), 5) for test_case in test_suite._tests: if test_case.name == 'MockSQLTemplateTestCase.test_template_query04': break self.assertEqual(test_case.name, "MockSQLTemplateTestCase.test_template_query04") self.assertEqual(test_case.author, 'shahn17') self.assertEqual(test_case.description, 'template test case') sql_file_path = os.path.join(test_case.get_out_dir(), "MockSQLTemplateTestCase", "template_query04.sql") ans_file_path = os.path.join(test_case.get_out_dir(), "MockSQLTemplateTestCase", "template_query04.ans") original_sql_file_path = os.path.join(os.path.dirname(sys.modules[test_case.__class__.__module__].__file__), test_case.__class__.sql_dir, test_case.__class__.template_dir, "query04.sql") original_ans_file_path = os.path.join(os.path.dirname(sys.modules[test_case.__class__.__module__].__file__), test_case.__class__.ans_dir, test_case.__class__.template_dir, "query04.ans") self.assertEqual(test_case.sql_file, sql_file_path) self.assertEqual(test_case.ans_file, ans_file_path) self.assertEqual(test_case._original_sql_file, original_sql_file_path) self.assertEqual(test_case._original_ans_file, original_ans_file_path) self.assertTrue(os.path.exists(test_case.sql_file)) self.assertTrue(os.path.exists(test_case.ans_file)) self.assertTrue(os.path.exists(test_case._original_sql_file)) self.assertTrue(os.path.exists(test_case._original_ans_file)) # Template test case sql file should exists sql_file_path = os.path.join(test_case.get_out_dir(), "MockSQLTemplateTestCase", "template_query04.sql") self.assertTrue(os.path.exists(sql_file_path)) sql_file_data = None with open(sql_file_path, 'r') as sql_file_object: sql_file_data = sql_file_object.read() self.assertTrue(sql_file_data is not None) # Correct substitution self.assertTrue('my_percent' in sql_file_data) # Error in python code self.assertTrue('my_at@' in sql_file_data) # Error in sql template self.assertTrue('&' in sql_file_data) # Template test case ans file should exists ans_file_path = os.path.join(test_case.get_out_dir(), "MockSQLTemplateTestCase", "template_query05.ans") self.assertTrue(os.path.exists(ans_file_path)) ans_file_data = None with open(ans_file_path, 'r') as sql_file_object: ans_file_data = sql_file_object.read() self.assertTrue(ans_file_data is not None) # Correct substitution self.assertTrue('my_percent' in ans_file_data) # Error in python code self.assertTrue('my_at@' in ans_file_data) # Error in ans template self.assertTrue('&' in ans_file_data) # Cleanup dir_path = os.path.join(test_case.get_out_dir(), "MockSQLTemplateTestCase") self.assertTrue(os.path.exists(dir_path)) shutil.rmtree(dir_path)
def test_load_implicit_python_from_name(self): """Test loadTestsFromName for a dynamically generated sql test method""" test_loader = TINCTestLoader() test_suite = test_loader.loadTestsFromName('mpp.models.test.sql_related.test_sql_test_case.MockSQLTestCaseForLoader.test_query01') test_case = test_suite._tests[0] self.assertEqual(test_case.name, "MockSQLTestCaseForLoader.test_query01") self.assertEqual(test_case.author, 'lammin') self.assertEqual(test_case.description, 'test sql test case') self.assertEqual(test_case.created_datetime, datetime.strptime('2012-07-20 12:00:00', '%Y-%m-%d %H:%M:%S')) self.assertEqual(test_case.modified_datetime, datetime.strptime('2012-07-20 12:00:02', '%Y-%m-%d %H:%M:%S')) self.assertEqual(test_case.tags, set(['orca', 'hashagg', 'executor']))
def test_templates_regular_sql(self): """Test loadTestsFromName for a dynamically generated sql test method.""" test_loader = TINCTestLoader() test_suite = test_loader.loadTestsFromName('mpp.models.test.sql_related.test_sql_test_case.MockSQLTemplateTestCaseRegular.test_query01') test_case = test_suite._tests[0] # Non-template test case should work as is... self.assertEqual(test_case.name, "MockSQLTemplateTestCaseRegular.test_query01") self.assertEqual(test_case.author, 'lammin') self.assertEqual(test_case.description, 'test sql test case') self.assertEqual(test_case.created_datetime, datetime.strptime('2012-07-20 12:00:00', '%Y-%m-%d %H:%M:%S')) self.assertEqual(test_case.modified_datetime, datetime.strptime('2012-07-20 12:00:02', '%Y-%m-%d %H:%M:%S')) self.assertEqual(test_case.tags, set(['orca', 'hashagg', 'executor']))
def test_optimizer_mode_both(self): test_loader = TINCTestLoader() test_suite = test_loader.loadTestsFromTestCase(MockSQLTestCaseForOptimizerModeBoth) for test in test_suite._tests: # Data provider should exists for query01 and query03. # query02 shouldn't have it, since its optimizer mode is overwritten with value 'off' if test.name == "MockSQLTestCaseForOptimizerModeBoth.test_query01" or test.name == "MockSQLTestCaseForOptimizerModeBoth.test_query03": self.assertEqual(test.optimizer_mode, "both") self.assertEqual(test.data_provider, "optimizer_handling") else: self.assertNotEqual(test.optimizer_mode, "both") self.assertTrue(test.data_provider is None)
def test_optimizer_mode_both(self): test_loader = TINCTestLoader() test_suite = test_loader.loadTestsFromTestCase( MockSQLTestCaseForOptimizerModeBoth) for test in test_suite._tests: # Data provider should exists for query01 and query03. # query02 shouldn't have it, since its optimizer mode is overwritten with value 'off' if test.name == "MockSQLTestCaseForOptimizerModeBoth.test_query01" or test.name == "MockSQLTestCaseForOptimizerModeBoth.test_query03": self.assertEqual(test.optimizer_mode, "both") self.assertEqual(test.data_provider, "optimizer_handling") else: self.assertNotEqual(test.optimizer_mode, "both") self.assertTrue(test.data_provider is None)
def test_infer_metadata(self): test_loader = TINCTestLoader() test_suite = test_loader.loadTestsFromTestCase(MockSQLTestCase) test_case = None for case in test_suite._tests: if case.name == "MockSQLTestCase.test_query02": test_case = case self.assertNotEqual(test_case, None) self.assertEqual(test_case.name, "MockSQLTestCase.test_query02") self.assertEqual(test_case.author, 'kumara64') self.assertEqual(test_case.description, 'test sql test case') self.assertEqual(test_case.created_datetime, datetime.strptime('2012-07-05 12:00:00', '%Y-%m-%d %H:%M:%S')) self.assertEqual(test_case.modified_datetime, datetime.strptime('2012-07-08 12:00:02', '%Y-%m-%d %H:%M:%S')) self.assertEqual(test_case.tags, set(['orca', 'hashagg', 'executor'])) self.assertEqual(test_case.gucs, set(['gp_optimizer=on', 'gp_log_optimizer=on']))
def run_test(self, method_name, skip_expected, test_case_prefix = 'tinctest.test.test_version_check.MockTINCTestCaseWithGetVersion'): loader = TINCTestLoader() tinc_test_suite = loader.loadTestsFromName('%s.%s' %(test_case_prefix, method_name), dryrun=True) with closing(_WritelnDecorator(StringIO())) as buffer: tinc_test_result = tinctest.TINCTextTestResult(buffer, True, 1) tinc_test_suite.run(tinc_test_result) text = buffer.getvalue() self.assertEqual(tinc_test_result.testsRun, 1) self.assertEqual(len(tinc_test_result.failures), 0) if skip_expected: self.assertEqual(len(tinc_test_result.skipped), 1) else: self.assertEqual(len(tinc_test_result.skipped), 0) self.assertEqual(len(tinc_test_result.errors), 0)
def test_load_test_from_class_name_with_supplementary_sqls(self): """Test loadTestsFromName for a class name""" test_loader = TINCTestLoader() test_suite = test_loader.loadTestsFromName('mpp.models.test.sql_related.test_sql_test_case.MockSQLTestCaseForLoader') # 3 tests for 3 sql tests in the current directory. self.assertEquals(len(test_suite._tests), 3) for test_case in test_suite._tests: if test_case.name == 'MockSQLTestCaseForLoader.test_query03': break self.assertEqual(test_case.name, "MockSQLTestCaseForLoader.test_query03") self.assertEqual(test_case.author, 'balasr3') self.assertEqual(test_case.description, 'test sql test case sql') self.assertEqual(test_case.created_datetime, datetime.strptime('2012-07-20 12:00:00', '%Y-%m-%d %H:%M:%S')) self.assertEqual(test_case.modified_datetime, datetime.strptime('2012-07-20 12:00:02', '%Y-%m-%d %H:%M:%S')) self.assertEqual(test_case.tags, set(['orca', 'hashagg', 'executor']))
def _populate_dict_of_test_tuples(self): """ This hidden method will parse through the log file and find all the tests. All the information will be populated in self.dict_of_test_tuples """ # All completed test cases will have the following line: # 20140417:08:34:13::[STATUS]::__init__.py:115::pid27994::MainThread:: Finished test: tinctest.test.sample.TINCTestCaseWithDataProviderComplicated.test_with_data_provider_complicated_type1_type6_type3 Result: PASS Duration: 0.39 ms Message: NONE re_compiled_object = re.compile(r"Finished test: (.*) Result: (.*) Duration: (.*) ms ") # We want to gather all of the tests in dict_of_test_tuples try: file_object = open(self.logfile, 'r') file_object.close() except: raise TINCLogFileParserException("Cannot open file %s" % self.logfile) tinctest.logger.debug("Parsing file %s" %self.logfile) with open(self.logfile, 'r') as file_object: for line in file_object: line = line.strip() if line.find('[STATUS]') == -1: continue re_result_object = re_compiled_object.search(line) if re_result_object: test_name = re_result_object.group(1) test_result = re_result_object.group(2) test_duration = re_result_object.group(3) test_case_object = TINCTestLoader.findTINCTestFromName(test_name) self.dict_of_test_tuples[test_name] = TINCLogFileParser.test_tuple(result=test_result, duration=test_duration, test_case_object=test_case_object)
def test_skip_when_tag_in_sql_file(self): test_loader = TINCTestLoader() test_suite = test_loader.loadTestsFromTestCase(MockSQLTestCaseForSkip) test_case = None for case in test_suite._tests: if case.name == "MockSQLTestCaseForSkip.test_query01": test_case = case self.assertNotEqual(test_case, None) self.assertEqual(test_case.name, "MockSQLTestCaseForSkip.test_query01") with closing(_WritelnDecorator(StringIO())) as buffer: test_result = TINCTextTestResult(buffer, True, 1) test_case.run(test_result) self.assertEqual(test_result.testsRun, 1) self.assertEqual(len(test_result.failures), 0) self.assertEqual(len(test_result.skipped), 1) self.assertEqual(len(test_result.errors), 0)
def test_load_test_from_class_name(self): """Test loadTestsFromName for a class name""" test_loader = TINCTestLoader() test_suite = test_loader.loadTestsFromName('mpp.models.test.sql_related.test_sql_test_case.MockSQLTestCaseForLoader') test_case = None for my_test_case in test_suite._tests: if my_test_case.name == 'MockSQLTestCaseForLoader.test_query01': test_case = my_test_case break self.assertTrue(test_case is not None) self.assertEqual(test_case.name, "MockSQLTestCaseForLoader.test_query01") self.assertEqual(test_case.author, 'lammin') self.assertEqual(test_case.description, 'test sql test case') self.assertEqual(test_case.created_datetime, datetime.strptime('2012-07-20 12:00:00', '%Y-%m-%d %H:%M:%S')) self.assertEqual(test_case.modified_datetime, datetime.strptime('2012-07-20 12:00:02', '%Y-%m-%d %H:%M:%S')) self.assertEqual(test_case.tags, set(['orca', 'hashagg', 'executor']))
def test_load_implicit_python_from_name(self): """Test loadTestsFromName for a dynamically generated sql test method""" test_loader = TINCTestLoader() test_suite = test_loader.loadTestsFromName( 'mpp.models.test.sql_related.test_sql_test_case.MockSQLTestCaseForLoader.test_query01' ) test_case = test_suite._tests[0] self.assertEqual(test_case.name, "MockSQLTestCaseForLoader.test_query01") self.assertEqual(test_case.author, 'lammin') self.assertEqual(test_case.description, 'test sql test case') self.assertEqual( test_case.created_datetime, datetime.strptime('2012-07-20 12:00:00', '%Y-%m-%d %H:%M:%S')) self.assertEqual( test_case.modified_datetime, datetime.strptime('2012-07-20 12:00:02', '%Y-%m-%d %H:%M:%S')) self.assertEqual(test_case.tags, set(['orca', 'hashagg', 'executor']))
def test_templates_regular_sql(self): """Test loadTestsFromName for a dynamically generated sql test method.""" test_loader = TINCTestLoader() test_suite = test_loader.loadTestsFromName( 'mpp.models.test.sql_related.test_sql_test_case.MockSQLTemplateTestCaseRegular.test_query01' ) test_case = test_suite._tests[0] # Non-template test case should work as is... self.assertEqual(test_case.name, "MockSQLTemplateTestCaseRegular.test_query01") self.assertEqual(test_case.author, 'lammin') self.assertEqual(test_case.description, 'test sql test case') self.assertEqual( test_case.created_datetime, datetime.strptime('2012-07-20 12:00:00', '%Y-%m-%d %H:%M:%S')) self.assertEqual( test_case.modified_datetime, datetime.strptime('2012-07-20 12:00:02', '%Y-%m-%d %H:%M:%S')) self.assertEqual(test_case.tags, set(['orca', 'hashagg', 'executor']))
def test_templates_template_sql_file(self): """Test loadTestsFromName for a dynamically generated sql template test method.""" test_loader = TINCTestLoader() test_suite = test_loader.loadTestsFromName( 'mpp.models.test.sql_related.test_sql_test_case.MockSQLTemplateTestCaseExplicit.test_template_query04' ) test_case = test_suite._tests[0] # Template test case should work as if it is non-template test case... self.assertEqual( test_case.name, "MockSQLTemplateTestCaseExplicit.test_template_query04") self.assertEqual(test_case.author, 'shahn17') self.assertEqual(test_case.description, 'template test case') sql_file_path = os.path.join(test_case.get_out_dir(), "MockSQLTemplateTestCaseExplicit", "template_query04.sql") ans_file_path = os.path.join(test_case.get_out_dir(), "MockSQLTemplateTestCaseExplicit", "template_query04.ans") original_sql_file_path = os.path.join( os.path.dirname( sys.modules[test_case.__class__.__module__].__file__), test_case.__class__.sql_dir, test_case.__class__.template_dir, "query04.sql") original_ans_file_path = os.path.join( os.path.dirname( sys.modules[test_case.__class__.__module__].__file__), test_case.__class__.ans_dir, test_case.__class__.template_dir, "query04.ans") self.assertEqual(test_case.sql_file, sql_file_path) self.assertEqual(test_case.ans_file, ans_file_path) self.assertEqual(test_case._original_sql_file, original_sql_file_path) self.assertEqual(test_case._original_ans_file, original_ans_file_path) self.assertTrue(os.path.exists(test_case.sql_file)) self.assertTrue(os.path.exists(test_case.ans_file)) self.assertTrue(os.path.exists(test_case._original_sql_file)) self.assertTrue(os.path.exists(test_case._original_ans_file)) # Cleanup dir_path = os.path.join(test_case.get_out_dir(), "MockSQLTemplateTestCaseExplicit") self.assertTrue(os.path.exists(dir_path)) shutil.rmtree(dir_path)
def run_test( self, method_name, skip_expected, test_case_prefix='tinctest.test.test_version_check.MockTINCTestCaseWithGetVersion' ): loader = TINCTestLoader() tinc_test_suite = loader.loadTestsFromName( '%s.%s' % (test_case_prefix, method_name), dryrun=True) with closing(_WritelnDecorator(StringIO())) as buffer: tinc_test_result = tinctest.TINCTextTestResult(buffer, True, 1) tinc_test_suite.run(tinc_test_result) text = buffer.getvalue() self.assertEqual(tinc_test_result.testsRun, 1) self.assertEqual(len(tinc_test_result.failures), 0) if skip_expected: self.assertEqual(len(tinc_test_result.skipped), 1) else: self.assertEqual(len(tinc_test_result.skipped), 0) self.assertEqual(len(tinc_test_result.errors), 0)
def test_load_test_from_class_name_with_supplementary_sqls(self): """Test loadTestsFromName for a class name""" test_loader = TINCTestLoader() test_suite = test_loader.loadTestsFromName( 'mpp.models.test.sql_related.test_sql_test_case.MockSQLTestCaseForLoader' ) # 3 tests for 3 sql tests in the current directory. self.assertEquals(len(test_suite._tests), 3) for test_case in test_suite._tests: if test_case.name == 'MockSQLTestCaseForLoader.test_query03': break self.assertEqual(test_case.name, "MockSQLTestCaseForLoader.test_query03") self.assertEqual(test_case.author, 'balasr3') self.assertEqual(test_case.description, 'test sql test case sql') self.assertEqual( test_case.created_datetime, datetime.strptime('2012-07-20 12:00:00', '%Y-%m-%d %H:%M:%S')) self.assertEqual( test_case.modified_datetime, datetime.strptime('2012-07-20 12:00:02', '%Y-%m-%d %H:%M:%S')) self.assertEqual(test_case.tags, set(['orca', 'hashagg', 'executor']))
def test_load_test_from_class_name(self): """Test loadTestsFromName for a class name""" test_loader = TINCTestLoader() test_suite = test_loader.loadTestsFromName( 'mpp.models.test.sql_related.test_sql_test_case.MockSQLTestCaseForLoader' ) test_case = None for my_test_case in test_suite._tests: if my_test_case.name == 'MockSQLTestCaseForLoader.test_query01': test_case = my_test_case break self.assertTrue(test_case is not None) self.assertEqual(test_case.name, "MockSQLTestCaseForLoader.test_query01") self.assertEqual(test_case.author, 'lammin') self.assertEqual(test_case.description, 'test sql test case') self.assertEqual( test_case.created_datetime, datetime.strptime('2012-07-20 12:00:00', '%Y-%m-%d %H:%M:%S')) self.assertEqual( test_case.modified_datetime, datetime.strptime('2012-07-20 12:00:02', '%Y-%m-%d %H:%M:%S')) self.assertEqual(test_case.tags, set(['orca', 'hashagg', 'executor']))
def test_templates_all_files(self): """Test loadTestsFromName for a class name""" test_loader = TINCTestLoader() test_suite = test_loader.loadTestsFromName( 'mpp.models.test.sql_related.test_sql_test_case.MockSQLTemplateTestCase' ) # 5 tests for 3 sql files in the current directory, and 2 sql files in the template directory self.assertEquals(len(test_suite._tests), 5) for test_case in test_suite._tests: if test_case.name == 'MockSQLTemplateTestCase.test_template_query04': break self.assertEqual(test_case.name, "MockSQLTemplateTestCase.test_template_query04") self.assertEqual(test_case.author, 'shahn17') self.assertEqual(test_case.description, 'template test case') sql_file_path = os.path.join(test_case.get_out_dir(), "MockSQLTemplateTestCase", "template_query04.sql") ans_file_path = os.path.join(test_case.get_out_dir(), "MockSQLTemplateTestCase", "template_query04.ans") original_sql_file_path = os.path.join( os.path.dirname( sys.modules[test_case.__class__.__module__].__file__), test_case.__class__.sql_dir, test_case.__class__.template_dir, "query04.sql") original_ans_file_path = os.path.join( os.path.dirname( sys.modules[test_case.__class__.__module__].__file__), test_case.__class__.ans_dir, test_case.__class__.template_dir, "query04.ans") self.assertEqual(test_case.sql_file, sql_file_path) self.assertEqual(test_case.ans_file, ans_file_path) self.assertEqual(test_case._original_sql_file, original_sql_file_path) self.assertEqual(test_case._original_ans_file, original_ans_file_path) self.assertTrue(os.path.exists(test_case.sql_file)) self.assertTrue(os.path.exists(test_case.ans_file)) self.assertTrue(os.path.exists(test_case._original_sql_file)) self.assertTrue(os.path.exists(test_case._original_ans_file)) # Template test case sql file should exists sql_file_path = os.path.join(test_case.get_out_dir(), "MockSQLTemplateTestCase", "template_query04.sql") self.assertTrue(os.path.exists(sql_file_path)) sql_file_data = None with open(sql_file_path, 'r') as sql_file_object: sql_file_data = sql_file_object.read() self.assertTrue(sql_file_data is not None) # Correct substitution self.assertTrue('my_percent' in sql_file_data) # Error in python code self.assertTrue('my_at@' in sql_file_data) # Error in sql template self.assertTrue('&' in sql_file_data) # Template test case ans file should exists ans_file_path = os.path.join(test_case.get_out_dir(), "MockSQLTemplateTestCase", "template_query05.ans") self.assertTrue(os.path.exists(ans_file_path)) ans_file_data = None with open(ans_file_path, 'r') as sql_file_object: ans_file_data = sql_file_object.read() self.assertTrue(ans_file_data is not None) # Correct substitution self.assertTrue('my_percent' in ans_file_data) # Error in python code self.assertTrue('my_at@' in ans_file_data) # Error in ans template self.assertTrue('&' in ans_file_data) # Cleanup dir_path = os.path.join(test_case.get_out_dir(), "MockSQLTemplateTestCase") self.assertTrue(os.path.exists(dir_path)) shutil.rmtree(dir_path)
def test_explicit_test_fixtures_through_loading(self): test_loader = TINCTestLoader() test_suite = test_loader.loadTestsFromTestCase(MockSQLTestCase) # 4 tests for 3 sqls in the directory and 1 explicit test method self.assertEqual(test_suite.countTestCases(), 4)