def test_sort_run_data(self): """ Test sort runs by different field types. """ # Sort runs by number of unresolved reports field. sort_mode = RunSortMode(RunSortType.UNRESOLVED_REPORTS, Order.ASC) runs = self._cc_client.getRunData(None, None, 0, sort_mode) for i in range(len(runs) - 1): self.assertTrue(runs[i].resultCount <= runs[i + 1].resultCount) # Sort runs by date field. sort_mode = RunSortMode(RunSortType.DATE, Order.ASC) runs = self._cc_client.getRunData(None, None, 0, sort_mode) for i in range(len(runs) - 1): date1 = datetime.strptime(runs[i].runDate, '%Y-%m-%d %H:%M:%S.%f') date2 = datetime.strptime(runs[i + 1].runDate, '%Y-%m-%d %H:%M:%S.%f') self.assertTrue(date1 <= date2) # Sort runs by CodeChecker version field. sort_mode = RunSortMode(RunSortType.CC_VERSION, Order.ASC) runs = self._cc_client.getRunData(None, None, 0, sort_mode) for i in range(len(runs) - 1): cc_version1 = runs[i].codeCheckerVersion cc_version2 = runs[i + 1].codeCheckerVersion self.assertTrue(cc_version1 <= cc_version2) # Sort runs by name field. We are not comparing the run names in python # code because Python and SQL compare strings differently if it # contains special characters. sort_mode = RunSortMode(RunSortType.NAME, Order.ASC) self._cc_client.getRunData(None, None, 0, sort_mode)
def setUp(self): test_workspace = os.environ['TEST_WORKSPACE'] test_class = self.__class__.__name__ print('Running ' + test_class + ' tests in ' + test_workspace) self._codechecker_cfg = env.import_codechecker_cfg(test_workspace) self._test_dir = os.path.join(test_workspace, 'test_files') # Get the clang version which is tested. self._clang_to_test = env.clang_to_test() self._testproject_data = env.setup_test_proj_cfg(test_workspace) self.assertIsNotNone(self._testproject_data) self._cc_client = env.setup_viewer_client(test_workspace) self.assertIsNotNone(self._cc_client) # Get the run names which belong to this test. run_names = env.get_run_names(test_workspace) sort_mode = RunSortMode(RunSortType.DATE, Order.ASC) runs = self._cc_client.getRunData(None, None, 0, sort_mode) test_runs = [run for run in runs if run.name in run_names] self._runid = test_runs[0].runId
def test_sort_run_data_order(self): """ Test sort runs by different order types. """ # Sort runs in ascending order. sort_mode = RunSortMode(RunSortType.DURATION, Order.ASC) runs = self._cc_client.getRunData(None, None, 0, sort_mode) for i in range(len(runs) - 1): self.assertTrue(runs[i].duration <= runs[i + 1].duration) # Sort runs in descending order. sort_mode = RunSortMode(RunSortType.DURATION, Order.DESC) runs = self._cc_client.getRunData(None, None, 0, sort_mode) for i in range(len(runs) - 1): self.assertTrue(runs[i].duration >= runs[i + 1].duration)
def setUp(self): # TEST_WORKSPACE is automatically set by test package __init__.py . self.test_workspace = os.environ['TEST_WORKSPACE'] test_class = self.__class__.__name__ print('Running ' + test_class + ' tests in ' + self.test_workspace) # Get the test configuration from the prepared int the test workspace. self.test_cfg = env.import_test_cfg(self.test_workspace) # Get the clang version which is tested. self._clang_to_test = env.clang_to_test() # Get the test project configuration from the prepared test workspace. self._testproject_data = env.setup_test_proj_cfg(self.test_workspace) self.assertIsNotNone(self._testproject_data) # Setup a viewer client to test viewer API calls. self._cc_client = env.setup_viewer_client(self.test_workspace) self.assertIsNotNone(self._cc_client) # Get the CodeChecker cmd if needed for the tests. self._codechecker_cmd = env.codechecker_cmd() # Get the run names which belong to this test. # Name order matters from __init__ ! run_names = env.get_run_names(self.test_workspace) sort_mode = RunSortMode(RunSortType.DATE, Order.ASC) runs = self._cc_client.getRunData(None, None, 0, sort_mode) self._test_runs = [run for run in runs if run.name in run_names] # There should be at least two runs for this test. self.assertIsNotNone(runs) self.assertNotEqual(len(runs), 0) self.assertGreaterEqual(len(runs), 2) # Name order matters from __init__ ! self._base_runid = self._test_runs[0].runId self._new_runid = self._test_runs[1].runId self._update_runid = self._test_runs[2].runId self._url = env.parts_to_url(self.test_cfg['codechecker_cfg']) self._env = self.test_cfg['codechecker_cfg']['check_env']
def test_remove_run_results(self): """ Test for removing run results and run. """ # Run the anaysis again with different setup. test_project_path = self._testproject_data['project_path'] ret = project.clean(test_project_path) if ret: sys.exit(ret) codechecker.check_and_store(self._codechecker_cfg, 'remove_run_results', test_project_path) run_filter = RunFilter(names=['remove_run_results'], exactMatch=True) sort_mode = RunSortMode(RunSortType.DATE, Order.ASC) runs = self._cc_client.getRunData(run_filter, None, 0, sort_mode) self.assertEqual(len(runs), 1) run_id = runs[0].runId orig_results_count = \ self._cc_client.getRunResultCount([run_id], None, None) self.assertNotEqual(orig_results_count, 0) checker_filter = ReportFilter(checkerName=["core.CallAndMessage"]) res_count = self._cc_client.getRunResultCount([run_id], checker_filter, None) self.assertNotEqual(res_count, 0) self._cc_client.removeRunReports([run_id], checker_filter, None) res_count = self._cc_client.getRunResultCount([run_id], checker_filter, None) self.assertEqual(res_count, 0) # Remove the run. self._cc_client.removeRun(run_id, None) # Check that we removed all results from the run. res = self._cc_client.getRunResultCount([run_id], None, None) self.assertEqual(res, 0)
def setUp(self): test_workspace = os.environ['TEST_WORKSPACE'] self.maxDiff = None test_class = self.__class__.__name__ print('Running ' + test_class + ' tests in ' + test_workspace) # Get the clang version which is tested. self._clang_to_test = env.clang_to_test() self._testproject_data = env.setup_test_proj_cfg(test_workspace) self.assertIsNotNone(self._testproject_data) self._cc_client = env.setup_viewer_client(test_workspace) self.assertIsNotNone(self._cc_client) # Get the run names which belong to this test. run_names = env.get_run_names(test_workspace) sort_mode = RunSortMode(RunSortType.DATE, Order.ASC) runs = self._cc_client.getRunData(None, None, 0, sort_mode) self._test_runs = [run for run in runs if run.name in run_names] self._runids = [r.runId for r in self._test_runs] self.run1_checkers = \ {'core.CallAndMessage': 5, 'core.DivideZero': 10, 'core.NullDereference': 4, 'core.StackAddrEscapeBase': 3, 'cplusplus.NewDelete': 5, 'deadcode.DeadStores': 6, 'unix.Malloc': 1} self.run2_checkers = \ {'core.CallAndMessage': 5, 'core.DivideZero': 10, 'core.NullDereference': 4, 'cplusplus.NewDelete': 5, 'deadcode.DeadStores': 6, 'unix.MismatchedDeallocator': 1} self.run1_sev_counts = { Severity.UNSPECIFIED: 3, Severity.MEDIUM: 1, Severity.LOW: 6, Severity.HIGH: 24 } self.run2_sev_counts = { Severity.MEDIUM: 1, Severity.LOW: 6, Severity.HIGH: 24 } self.run1_detection_counts = \ {DetectionStatus.NEW: 34} self.run2_detection_counts = \ {DetectionStatus.NEW: 31} self.run1_files = \ {'file_to_be_skipped.cpp': 2, 'null_dereference.cpp': 5, 'new_delete.cpp': 6, 'stack_address_escape.cpp': 3, 'call_and_message.cpp': 5, 'divide_zero.cpp': 4, 'divide_zero_duplicate.cpp': 2, 'has a space.cpp': 1, 'skip_header.cpp': 1, 'skip.h': 1, 'path_begin.cpp': 2, 'path_end.h': 2 } self.run2_files = \ {'call_and_message.cpp': 5, 'new_delete.cpp': 6, 'divide_zero.cpp': 4, 'divide_zero_duplicate.cpp': 2, 'null_dereference.cpp': 5, 'file_to_be_skipped.cpp': 2, 'has a space.cpp': 1, 'skip_header.cpp': 1, 'skip.h': 1, 'path_begin.cpp': 2, 'path_end.h': 2 }
def test_file_change(self): """ This tests the change of the detection status of bugs when the file content changes. CHECK 1 ----- CHECK 2 --------- CHECK 3 ---------- CHECK 4 | | | | 42 | | | | | | | 43 | | | | | | 42 ---------- [RESOLVED] | | | | 43 --------- [UNRESOLVED] ------- [RESOLVED] | | 44 ------------ [RESOLVED] | | 45 ----------- [UNRESOLVED] """ # ######################## 1st check ################################# # Check the first file version. self._create_source_file(0, 'test_run_tag') # ######################## 2nd check ################################# # Check the first file versions again with different run name to see # that set a run tag filter will filter the reports by the run id. self._create_source_file(0, 'test_run_tag_update') # Get the run names which belong to this test sort_mode = RunSortMode(RunSortType.DATE, Order.ASC) runs = self._cc_client.getRunData(None, None, 0, sort_mode) test_run_ids = [run.runId for run in runs] self.assertEqual(len(test_run_ids), 2) run_id = test_run_ids[1] test_run_tags = self.__get_run_tag_counts(run_id, 100, 0) run_tags_v0 = [t for t in test_run_tags if t.name == self.tags[0]] self.assertEqual(len(run_tags_v0), 1) run_tags_v0 = run_tags_v0[0] reports = self.__reports_by_tag([run_tags_v0.id]) self.assertEqual(run_tags_v0.count, len(reports)) # ######################## 3rd check ################################# # Check the second file version. self._create_source_file(1, 'test_run_tag_update') # We do not show future bugs for later tags. reports = self.__reports_by_tag([run_tags_v0.id]) self.assertEqual(run_tags_v0.count, len(reports)) test_run_tags = self.__get_run_tag_counts(run_id) run_tags_v1 = [t for t in test_run_tags if t.name == self.tags[1]] self.assertEqual(len(run_tags_v1), 1) run_tags_v1 = run_tags_v1[0] self.__check_reports(run_tags_v1) # ######################## 4th check ################################# # Check the third file version. self._create_source_file(2, 'test_run_tag_update') # We do not show future bugs for later tags. reports = self.__reports_by_tag([run_tags_v0.id]) self.assertEqual(run_tags_v0.count, len(reports)) test_run_tags = self.__get_run_tag_counts(run_id) run_tags_v2 = [t for t in test_run_tags if t.name == self.tags[2]] self.assertEqual(len(run_tags_v2), 1) run_tags_v2 = run_tags_v2[0] self.__check_reports(run_tags_v2)