def test_suppress_import(self): """ Test the suppress file importing. """ generated_file = os.path.join(self._test_workspace, "generated.suppress") extract_cmd = ['CodeChecker', 'parse', os.path.join(self._test_workspace, "reports"), "--suppress", generated_file, "--export-source-suppress" ] ret = call_cmd(extract_cmd, self._test_project_path, env.test_env(self._test_workspace)) self.assertEqual(ret, 0, "Failed to generate suppress file.") codechecker_cfg = env.import_test_cfg( self._test_workspace)['codechecker_cfg'] product_url = env.parts_to_url(codechecker_cfg) import_cmd = ['CodeChecker', 'cmd', 'suppress', '-i', generated_file, '--url', product_url, self._run_name] print(import_cmd) ret = call_cmd(import_cmd, self._test_project_path, env.test_env(self._test_workspace)) self.assertEqual(ret, 0, "Failed to import suppress file.")
def setup_package(): """Setup the environment for testing detection_status.""" global TEST_WORKSPACE TEST_WORKSPACE = env.get_workspace('detection_status') # Set the TEST_WORKSPACE used by the tests. os.environ['TEST_WORKSPACE'] = TEST_WORKSPACE # Configuration options. codechecker_cfg = { 'suppress_file': None, 'skip_list_file': None, 'check_env': env.test_env(TEST_WORKSPACE), 'workspace': TEST_WORKSPACE, 'checkers': [], 'reportdir': os.path.join(TEST_WORKSPACE, 'reports'), 'test_project': 'hello' } # Start or connect to the running CodeChecker server and get connection # details. print("This test uses a CodeChecker server... connecting...") server_access = codechecker.start_or_get_server() server_access['viewer_product'] = 'detection_status' codechecker.add_test_package_product(server_access, TEST_WORKSPACE) # Extend the checker configuration with the server access. codechecker_cfg.update(server_access) # Export the test configuration to the workspace. env.export_test_cfg(TEST_WORKSPACE, {'codechecker_cfg': codechecker_cfg})
def setup_package(): """Setup the environment for the tests then start the server.""" global TEST_WORKSPACE TEST_WORKSPACE = env.get_workspace('store_test') os.environ['TEST_WORKSPACE'] = TEST_WORKSPACE # Configuration options. codechecker_cfg = { 'suppress_file': None, 'skip_list_file': None, 'check_env': env.test_env(TEST_WORKSPACE), 'workspace': TEST_WORKSPACE, 'checkers': [], 'reportdir': os.path.join(TEST_WORKSPACE, 'reports'), 'test_project': 'store_test' } # Start or connect to the running CodeChecker server and get connection # details. print("This test uses a CodeChecker server... connecting...") server_access = codechecker.start_or_get_server() server_access['viewer_product'] = 'store_test' codechecker.add_test_package_product(server_access, TEST_WORKSPACE) # Extend the checker configuration with the server access. codechecker_cfg.update(server_access) # Export the test configuration to the workspace. env.export_test_cfg(TEST_WORKSPACE, {'codechecker_cfg': codechecker_cfg})
def test_source_suppress_export(self): """ Test exporting a source suppress comment automatically to file. """ generated_file = os.path.join(self._test_workspace, "generated.suppress") extract_cmd = ['CodeChecker', 'parse', os.path.join(self._test_workspace, "reports"), "--suppress", generated_file, "--export-source-suppress" ] ret = call_cmd(extract_cmd, self._test_project_path, env.test_env(self._test_workspace)) self.assertEqual(ret, 0, "Failed to generate suppress file.") with open(generated_file, 'r') as generated: with open(os.path.join(self._test_project_path, "suppress.expected"), 'r') as expected: generated_content = generated.read() expected_content = expected.read() logging.debug(generated_content) logging.debug(expected_content) diff = set(expected_content).difference(generated_content) self.assertEqual(len(diff), 0, "The generated suppress file does not " "look like what was expected")
def setup_package(): """Setup the environment for testing blame information.""" global TEST_WORKSPACE TEST_WORKSPACE = env.get_workspace('blame') os.environ['TEST_WORKSPACE'] = TEST_WORKSPACE test_project = 'cpp' test_config = {} project_info = project.get_info(test_project) test_project_path = os.path.join(TEST_WORKSPACE, "test_proj") shutil.copytree(project.path(test_project), test_project_path) project_info['project_path'] = test_project_path test_project_name = project_info['name'] + '_' + uuid.uuid4().hex test_config['test_project'] = project_info suppress_file = None skip_list_file = None test_env = env.test_env(TEST_WORKSPACE) codechecker_cfg = { 'suppress_file': suppress_file, 'skip_list_file': skip_list_file, 'check_env': test_env, 'workspace': TEST_WORKSPACE, 'checkers': [], 'clean': True } # Start or connect to the running CodeChecker server and get connection # details. print("This test uses a CodeChecker server... connecting...") server_access = codechecker.start_or_get_server(auth_required=True) server_access['viewer_product'] = 'blame' codechecker.add_test_package_product(server_access, TEST_WORKSPACE) # Extend the checker configuration with the server access. codechecker_cfg.update(server_access) # Clean the test project, if needed by the tests. ret = project.clean(test_project) if ret: sys.exit(ret) ret = codechecker.check_and_store( codechecker_cfg, test_project_name, project.path(test_project)) if ret: sys.exit(1) print("Analyzing test project was succcessful.") # Save the run names in the configuration. codechecker_cfg['run_names'] = [test_project_name] test_config['codechecker_cfg'] = codechecker_cfg # Export the test configuration to the workspace. env.export_test_cfg(TEST_WORKSPACE, test_config)
def test_source_suppress_export(self): """ Test exporting a source suppress comment automatically to file. """ generated_file = os.path.join(self._test_workspace, "generated.suppress") extract_cmd = [ 'CodeChecker', 'parse', os.path.join(self._test_workspace, "reports"), "--suppress", generated_file, "--export-source-suppress" ] ret = call_cmd(extract_cmd, self._test_project_path, env.test_env(self._test_workspace)) self.assertEqual(ret, 0, "Failed to generate suppress file.") with open(generated_file, 'r') as generated: with open( os.path.join(self._test_project_path, "suppress.expected"), 'r') as expected: generated_content = generated.read() expected_content = expected.read() logging.debug(generated_content) logging.debug(expected_content) diff = set(expected_content).difference(generated_content) self.assertEqual( len(diff), 0, "The generated suppress file does not " "look like what was expected")
def setup_package(): """Setup the environment for the tests.""" global TEST_WORKSPACE TEST_WORKSPACE = env.get_workspace('config') # Set the TEST_WORKSPACE used by the tests. os.environ['TEST_WORKSPACE'] = TEST_WORKSPACE # Create a basic CodeChecker config for the tests, this should # be imported by the tests and they should only depend on these # configuration options. codechecker_cfg = { 'workspace': TEST_WORKSPACE, 'check_env': env.test_env(TEST_WORKSPACE), 'reportdir': os.path.join(TEST_WORKSPACE, 'reports') } # Start or connect to the running CodeChecker server and get connection # details. print("This test uses a CodeChecker server... connecting...") server_access = codechecker.start_or_get_server() server_access['viewer_product'] = 'config' codechecker.add_test_package_product(server_access, TEST_WORKSPACE) # Extend the checker configuration with the server access. codechecker_cfg.update(server_access) test_config = {'codechecker_cfg': codechecker_cfg} env.export_test_cfg(TEST_WORKSPACE, test_config)
def setup_package(): """Setup the environment for testing detection_status.""" global TEST_WORKSPACE TEST_WORKSPACE = env.get_workspace('extended_report_data') # Set the TEST_WORKSPACE used by the tests. os.environ['TEST_WORKSPACE'] = TEST_WORKSPACE test_env = env.test_env(TEST_WORKSPACE) # Configuration options. codechecker_cfg = { 'check_env': test_env, 'workspace': TEST_WORKSPACE, 'run_names': [] } # Start or connect to the running CodeChecker server and get connection # details. print("This test uses a CodeChecker server... connecting...") server_access = codechecker.start_or_get_server() server_access['viewer_product'] = 'extended_report_data' codechecker.add_test_package_product(server_access, TEST_WORKSPACE) # Extend the checker configuration with the server access. codechecker_cfg.update(server_access) # Copy test projects and replace file path in plist files. test_projects = ['notes', 'macros'] for test_project in test_projects: test_project_path = os.path.join(TEST_WORKSPACE, "test_proj", test_project) shutil.copytree(project.path(test_project), test_project_path) for test_file in os.listdir(test_project_path): if test_file.endswith(".plist"): test_file_path = os.path.join(test_project_path, test_file) with open(test_file_path, 'r+', encoding="utf-8", errors="ignore") as plist_file: content = plist_file.read() new_content = content.replace("$FILE_PATH$", test_project_path) plist_file.seek(0) plist_file.truncate() plist_file.write(new_content) codechecker_cfg['reportdir'] = test_project_path ret = codechecker.store(codechecker_cfg, test_project) if ret: sys.exit(1) print("Analyzing test project was succcessful.") codechecker_cfg['run_names'].append(test_project) # Export the test configuration to the workspace. env.export_test_cfg(TEST_WORKSPACE, {'codechecker_cfg': codechecker_cfg})
def setup_package(): """Setup the environment for testing review_status.""" global TEST_WORKSPACE TEST_WORKSPACE = env.get_workspace('review_status') os.environ['TEST_WORKSPACE'] = TEST_WORKSPACE dir_path = os.path.dirname(os.path.realpath(__file__)) shutil.copytree(os.path.join(dir_path, 'review_status_files'), os.path.join(TEST_WORKSPACE, 'review_status_files')) test_project = 'single_bug' test_config = {} project_info = project.get_info(test_project) test_config['test_project'] = project_info skip_list_file = None test_env = env.test_env(TEST_WORKSPACE) codechecker_cfg = { 'suppress_file': None, 'skip_list_file': skip_list_file, 'check_env': test_env, 'workspace': TEST_WORKSPACE, 'checkers': [] } ret = project.clean(test_project, test_env) if ret: sys.exit(ret) # Start or connect to the running CodeChecker server and get connection # details. print("This test uses a CodeChecker server... connecting...") server_access = codechecker.start_or_get_server() server_access['viewer_product'] = 'review_status' codechecker.add_test_package_product(server_access, TEST_WORKSPACE) # Extend the checker configuration with the server access. codechecker_cfg.update(server_access) test_project_name = project_info['name'] + '_' + uuid.uuid4().hex ret = codechecker.check_and_store(codechecker_cfg, test_project_name, project.path(test_project)) if ret: sys.exit(1) print("Analyzing the test project was successful.") codechecker_cfg['run_names'] = [test_project_name] test_config['codechecker_cfg'] = codechecker_cfg env.export_test_cfg(TEST_WORKSPACE, test_config)
def setup_package(): """Setup the environment for testing detection_status.""" global TEST_WORKSPACE TEST_WORKSPACE = env.get_workspace('extended_report_data') # Set the TEST_WORKSPACE used by the tests. os.environ['TEST_WORKSPACE'] = TEST_WORKSPACE test_env = env.test_env(TEST_WORKSPACE) # Configuration options. codechecker_cfg = { 'check_env': test_env, 'workspace': TEST_WORKSPACE, 'run_names': [] } # Start or connect to the running CodeChecker server and get connection # details. print("This test uses a CodeChecker server... connecting...") server_access = codechecker.start_or_get_server() server_access['viewer_product'] = 'extended_report_data' codechecker.add_test_package_product(server_access, TEST_WORKSPACE) # Extend the checker configuration with the server access. codechecker_cfg.update(server_access) # Copy test projects and replace file path in plist files. test_projects = ['notes', 'macros'] for test_project in test_projects: test_project_path = os.path.join(TEST_WORKSPACE, "test_proj", test_project) shutil.copytree(project.path(test_project), test_project_path) for test_file in os.listdir(test_project_path): if test_file.endswith(".plist"): test_file_path = os.path.join(test_project_path, test_file) with open(test_file_path, 'r+') as plist_file: content = plist_file.read() new_content = content.replace("$FILE_PATH$", test_project_path) plist_file.seek(0) plist_file.truncate() plist_file.write(new_content) codechecker_cfg['reportdir'] = test_project_path ret = codechecker.store(codechecker_cfg, test_project) if ret: sys.exit(1) print("Analyzing test project was succcessful.") codechecker_cfg['run_names'].append(test_project) # Export the test configuration to the workspace. env.export_test_cfg(TEST_WORKSPACE, {'codechecker_cfg': codechecker_cfg})
def setup_package(): """Setup the environment for testing review_status.""" global TEST_WORKSPACE TEST_WORKSPACE = env.get_workspace('review_status') os.environ['TEST_WORKSPACE'] = TEST_WORKSPACE test_project = 'single_bug' test_config = {} project_info = project.get_info(test_project) test_config['test_project'] = project_info skip_list_file = None test_env = env.test_env(TEST_WORKSPACE) codechecker_cfg = { 'suppress_file': None, 'skip_list_file': skip_list_file, 'check_env': test_env, 'workspace': TEST_WORKSPACE, 'checkers': [] } ret = project.clean(test_project, test_env) if ret: sys.exit(ret) # Start or connect to the running CodeChecker server and get connection # details. print("This test uses a CodeChecker server... connecting...") server_access = codechecker.start_or_get_server() server_access['viewer_product'] = 'review_status' codechecker.add_test_package_product(server_access, TEST_WORKSPACE) # Extend the checker configuration with the server access. codechecker_cfg.update(server_access) test_project_name = project_info['name'] + '_' + uuid.uuid4().hex ret = codechecker.check(codechecker_cfg, test_project_name, project.path(test_project)) if ret: sys.exit(1) print("Analyzing the test project was successful.") codechecker_cfg['run_names'] = [test_project_name] test_config['codechecker_cfg'] = codechecker_cfg env.export_test_cfg(TEST_WORKSPACE, test_config)
def setup_package(): """Setup the environment for the tests.""" global TEST_WORKSPACE TEST_WORKSPACE = env.get_workspace('suppress') os.environ['TEST_WORKSPACE'] = TEST_WORKSPACE test_project = 'suppress' test_config = {} project_info = project.get_info(test_project) test_proj_path = os.path.join(TEST_WORKSPACE, "test_proj") shutil.copytree(project.path(test_project), test_proj_path) project_info['project_path'] = test_proj_path test_config['test_project'] = project_info # Generate a suppress file for the tests. suppress_file = os.path.join(TEST_WORKSPACE, 'suppress_file') if os.path.isfile(suppress_file): os.remove(suppress_file) _generate_suppress_file(suppress_file) test_env = env.test_env(TEST_WORKSPACE) codechecker_cfg = { 'suppress_file': None, 'skip_list_file': None, 'check_env': test_env, 'workspace': TEST_WORKSPACE, 'checkers': [] } ret = project.clean(test_project, test_env) if ret: sys.exit(ret) output_dir = codechecker_cfg['reportdir'] \ if 'reportdir' in codechecker_cfg \ else os.path.join(codechecker_cfg['workspace'], 'reports') codechecker_cfg['reportdir'] = output_dir ret = codechecker.log_and_analyze(codechecker_cfg, project.path(test_project)) if ret: sys.exit(1) print("Analyzing the test project was successful.") test_config['codechecker_cfg'] = codechecker_cfg env.export_test_cfg(TEST_WORKSPACE, test_config)
def setup_package(): """Setup the environment for the tests. """ global TEST_WORKSPACE TEST_WORKSPACE = env.get_workspace('update') os.environ['TEST_WORKSPACE'] = TEST_WORKSPACE test_config = {} test_project_name = uuid.uuid4().hex test_project_path = os.path.join(test_dir, "test_proj") temp_test_project_data = project.prepare(test_project_path, TEST_WORKSPACE) test_config['test_project'] = temp_test_project_data test_env = env.test_env(TEST_WORKSPACE) base_reports = os.path.join(temp_test_project_data['test_project_reports'], 'base') codechecker_cfg = { 'suppress_file': None, 'skip_list_file': None, 'check_env': test_env, 'workspace': TEST_WORKSPACE, 'checkers': [], 'reportdir': base_reports } # Start or connect to the running CodeChecker server and get connection # details. print("This test uses a CodeChecker server... connecting...") server_access = codechecker.start_or_get_server() server_access['viewer_product'] = 'update' codechecker.add_test_package_product(server_access, TEST_WORKSPACE) # Extend the checker configuration with the server access. codechecker_cfg.update(server_access) ret = codechecker.store(codechecker_cfg, test_project_name) if ret: sys.exit(1) print("Storing the base reports was succcessful.") codechecker_cfg['run_names'] = [test_project_name] test_config['codechecker_cfg'] = codechecker_cfg env.export_test_cfg(TEST_WORKSPACE, test_config)
def setup_package(): """Setup the environment for testing statistics.""" global TEST_WORKSPACE TEST_WORKSPACE = env.get_workspace('statistics') # Set the TEST_WORKSPACE used by the tests. os.environ['TEST_WORKSPACE'] = TEST_WORKSPACE test_config = {} test_project = 'cpp' project_info = project.get_info(test_project) # Copy the test project to the workspace. The tests should # work only on this test project. test_proj_path = os.path.join(TEST_WORKSPACE, "test_proj") shutil.copytree(project.path(test_project), test_proj_path) project_info['project_path'] = test_proj_path test_config['test_project'] = project_info # Suppress file should be set here if needed by the tests. suppress_file = None # Skip list file should be set here if needed by the tests. skip_list_file = None # Get an environment which should be used by the tests. test_env = env.test_env(TEST_WORKSPACE) # Create a basic CodeChecker config for the tests, this should # be imported by the tests and they should only depend on these # configuration options. codechecker_cfg = { 'suppress_file': suppress_file, 'skip_list_file': skip_list_file, 'check_env': test_env, 'workspace': TEST_WORKSPACE, 'checkers': [] } # Clean the test project, if needed by the tests. ret = project.clean(test_project) if ret: sys.exit(ret) test_config['codechecker_cfg'] = codechecker_cfg # Export the test configuration to the workspace. env.export_test_cfg(TEST_WORKSPACE, test_config)
def setup_package(): """Setup the environment for the tests then start the server.""" global TEST_WORKSPACE TEST_WORKSPACE = env.get_workspace('instances') os.environ['TEST_WORKSPACE'] = TEST_WORKSPACE test_config = {} test_env = env.test_env(TEST_WORKSPACE) # Setup environment variables for the test cases. host_port_cfg = { 'viewer_host': 'localhost', 'viewer_port': env.get_free_port() } codechecker_cfg = { 'workspace': TEST_WORKSPACE, 'check_env': test_env, 'run_names': [], 'checkers': [] } codechecker_cfg.update(host_port_cfg) test_config['codechecker_1'] = codechecker_cfg # We need a second server codechecker_cfg = { 'workspace': TEST_WORKSPACE, 'check_env': test_env, 'run_names': [], 'checkers': [] } host_port_cfg = { 'viewer_host': 'localhost', 'viewer_port': env.get_free_port() } if host_port_cfg['viewer_port'] == \ test_config['codechecker_1']['viewer_port']: host_port_cfg['viewer_port'] = int(host_port_cfg['viewer_port']) + 1 codechecker_cfg.update(host_port_cfg) test_config['codechecker_2'] = codechecker_cfg # Export configuration for the tests. env.export_test_cfg(TEST_WORKSPACE, test_config) # Wait for previous test instances to terminate properly and # clean the instance file in the user's home directory. time.sleep(5)
def setup_package(): """Setup the environment for the tests then start the server.""" global TEST_WORKSPACE TEST_WORKSPACE = env.get_workspace('authentication') os.environ['TEST_WORKSPACE'] = TEST_WORKSPACE test_project_path = project.path() clang_version = env.clang_to_test() pg_db_config = env.get_postgresql_cfg() test_config = {} project_info = project.get_info(project.path()) test_config['test_project'] = project_info suppress_file = None skip_list_file = None # Setup environment varaibled for the test cases. host_port_cfg = env.get_host_port_cfg() test_env = env.test_env() codechecker_cfg = { 'suppress_file': suppress_file, 'skip_list_file': skip_list_file, 'check_env': test_env, 'workspace': TEST_WORKSPACE, 'pg_db_config': pg_db_config, 'checkers': [] } codechecker_cfg.update(host_port_cfg) codechecker_cfg['run_names'] = [] test_config['codechecker_cfg'] = codechecker_cfg # Export configuration for the tests. env.export_test_cfg(TEST_WORKSPACE, test_config) # Enable authentication and start the CodeChecker server. enable_auth(TEST_WORKSPACE) print("Starting server to get results") _start_server(codechecker_cfg, test_config, False)
def __call(command): try: print(' '.join(command)) proc = subprocess.Popen(shlex.split(' '.join(command)), cwd=self._test_project_path, stdout=subprocess.PIPE, stderr=subprocess.PIPE, env=env.test_env(self._test_workspace)) out, err = proc.communicate() print(out) print(err) return 0 except CalledProcessError as cerr: print("Failed to call:\n" + ' '.join(cerr.cmd)) return cerr.returncode
def setup_package(): """Setup the environment for the tests. """ global TEST_WORKSPACE TEST_WORKSPACE = env.get_workspace('cleanup_plan') os.environ['TEST_WORKSPACE'] = TEST_WORKSPACE test_project = 'cpp' test_project_path = project.path(test_project) test_config = {} project_info = project.get_info(test_project) test_config['test_project'] = project_info test_env = env.test_env(TEST_WORKSPACE) codechecker_cfg = { 'check_env': test_env, 'workspace': TEST_WORKSPACE, 'reportdir': os.path.join(TEST_WORKSPACE, 'reports'), 'checkers': [] } # Start or connect to the running CodeChecker server and get connection # details. print("This test uses a CodeChecker server... connecting...") server_access = codechecker.start_or_get_server() server_access['viewer_product'] = 'cleanup_plan' codechecker.add_test_package_product(server_access, TEST_WORKSPACE) # Extend the checker configuration with the server access. codechecker_cfg.update(server_access) # Check the test project for the first time. test_project_name = project_info['name'] + '_' + uuid.uuid4().hex ret = codechecker.check_and_store(codechecker_cfg, test_project_name, test_project_path) if ret: sys.exit(1) print("Analyzing test project was successful.") codechecker_cfg['run_names'] = [test_project_name] test_config['codechecker_cfg'] = codechecker_cfg env.export_test_cfg(TEST_WORKSPACE, test_config)
def setup_package(): """Setup the environment for the tests then start the server.""" global TEST_WORKSPACE TEST_WORKSPACE = env.get_workspace('instances') os.environ['TEST_WORKSPACE'] = TEST_WORKSPACE test_config = {} test_env = env.test_env(TEST_WORKSPACE) # Setup environment variables for the test cases. host_port_cfg = {'viewer_host': 'localhost', 'viewer_port': env.get_free_port()} codechecker_cfg = { 'workspace': TEST_WORKSPACE, 'check_env': test_env, 'run_names': [], 'checkers': [] } codechecker_cfg.update(host_port_cfg) test_config['codechecker_1'] = codechecker_cfg # We need a second server codechecker_cfg = { 'workspace': TEST_WORKSPACE, 'check_env': test_env, 'run_names': [], 'checkers': [] } host_port_cfg = {'viewer_host': 'localhost', 'viewer_port': env.get_free_port()} if host_port_cfg['viewer_port'] == \ test_config['codechecker_1']['viewer_port']: host_port_cfg['viewer_port'] = int(host_port_cfg['viewer_port']) + 1 codechecker_cfg.update(host_port_cfg) test_config['codechecker_2'] = codechecker_cfg # Export configuration for the tests. env.export_test_cfg(TEST_WORKSPACE, test_config) # Wait for previous test instances to terminate properly and # clean the instance file in the user's home directory. time.sleep(5)
def test_doubled_suppress(self): """ Test to catch repeated suppress comments with same bug. """ skip_file = os.path.join(self._test_directory, "duplicated_suppress.skip") cmd = [env.codechecker_cmd(), 'parse', os.path.join(self._test_workspace, "reports"), "--ignore", skip_file] _, _, ret = codechecker.call_command( cmd, self._test_project_path, env.test_env(self._test_workspace)) self.assertEqual(ret, 1, "Repeated suppress comment not recognized.")
def test_doubled_suppress_by_all(self): """ Test to catch multiple suppress comments in a line when "all" is one of them. """ skip_file = os.path.join(self._test_directory, "suppress_by_all.skip") cmd = [env.codechecker_cmd(), 'parse', os.path.join(self._test_workspace, "reports"), "--ignore", skip_file] _, _, ret = codechecker.call_command( cmd, self._test_project_path, env.test_env(self._test_workspace)) self.assertEqual(ret, 1, "Already covered suppress comment not " "recognized.")
def test_suppress_with_no_bug_is_ok(self): """ Test that the suppress comment that suppresses non existent bug does not cause fail. """ skip_file = os.path.join(self._test_directory, "suppress_without_bug.skip") cmd = [env.codechecker_cmd(), 'parse', os.path.join(self._test_workspace, "reports"), "--ignore", skip_file] _, _, ret = codechecker.call_command( cmd, self._test_project_path, env.test_env(self._test_workspace)) self.assertEqual(ret, 0, "Suppress without existent bug causes error.")
def test_confirmed_already_suppressed(self): """ Test to catch unnecessary confirmed comment that was covered by a suppress all comment in the previous line. """ skip_file = os.path.join(self._test_directory, "suppress_already_confirmed.skip") cmd = [env.codechecker_cmd(), 'parse', os.path.join(self._test_workspace, "reports"), "--ignore", skip_file] _, _, ret = codechecker.call_command( cmd, self._test_project_path, env.test_env(self._test_workspace)) self.assertEqual(ret, 1, "Already suppressed comment must not be " "confirmed.")
def test_doubled_suppress_by_all_in_two_lines(self): """ Test to catch unnecessary suppress comment that was covered by a suppress all comment in the previous line. """ skip_file = os.path.join(self._test_directory, "suppress_by_all_in_two_lines.skip") cmd = [env.codechecker_cmd(), 'parse', os.path.join(self._test_workspace, "reports"), "--ignore", skip_file] _, _, ret = codechecker.call_command( cmd, self._test_project_path, env.test_env(self._test_workspace)) self.assertEqual(ret, 1, "Already covered suppress comment not " "recognized.")
def setup_package(): """Setup the environment for the tests then start the server.""" global TEST_WORKSPACE TEST_WORKSPACE = env.get_workspace('store_test') os.environ['TEST_WORKSPACE'] = TEST_WORKSPACE # Configuration options. codechecker_cfg = { 'check_env': env.test_env(TEST_WORKSPACE), 'workspace': TEST_WORKSPACE, 'checkers': [], 'reportdir': os.path.join(TEST_WORKSPACE, 'reports'), 'test_project': 'store_test' } # Start or connect to the running CodeChecker server and get connection # details. print("This test uses a CodeChecker server... connecting...") server_access = codechecker.start_or_get_server() server_access['viewer_product'] = 'store_test' codechecker.add_test_package_product(server_access, TEST_WORKSPACE) # Extend the checker configuration with the server access. codechecker_cfg.update(server_access) # Export the test configuration to the workspace. env.export_test_cfg(TEST_WORKSPACE, {'codechecker_cfg': codechecker_cfg}) # Copy test files to a temporary directory not to modify the # files in the repository. # Report files will be overwritten during the tests. test_dir = os.path.dirname(os.path.realpath(__file__)) dst_dir = os.path.join(TEST_WORKSPACE, "test_proj") shutil.copytree(os.path.join(test_dir, "test_proj"), dst_dir) prefix_file_paths = [ os.path.join(dst_dir, "divide_zero", "divide_zero.plist"), os.path.join(dst_dir, "double_suppress", "double_suppress.plist") ] for file_name in prefix_file_paths: plist_test.prefix_file_path(file_name, os.path.dirname(file_name))
def setup_package(): """Setup the environment for the tests then start the server.""" global TEST_WORKSPACE TEST_WORKSPACE = env.get_workspace('storage_of_analysis_statistics') os.environ['TEST_WORKSPACE'] = TEST_WORKSPACE test_config = {} # Setup environment variables for the test cases. host_port_cfg = { 'viewer_host': 'localhost', 'viewer_port': env.get_free_port(), 'viewer_product': 'storage_of_analysis_statistics' } test_env = env.test_env(TEST_WORKSPACE) codechecker_cfg = { 'check_env': test_env, 'workspace': TEST_WORKSPACE, 'checkers': [], 'viewer_product': 'storage_of_analysis_statistics', 'reportdir': os.path.join(TEST_WORKSPACE, 'reports') } codechecker_cfg.update(host_port_cfg) codechecker_cfg['run_names'] = [] test_config['codechecker_cfg'] = codechecker_cfg # Export configuration for the tests. env.export_test_cfg(TEST_WORKSPACE, test_config) # Enable storage of analysis statistics and start the CodeChecker server. env.enable_storage_of_analysis_statistics(TEST_WORKSPACE) print("Starting server to get results") server_access = codechecker.start_server(codechecker_cfg, EVENT_1) server_access['viewer_product'] = codechecker_cfg['viewer_product'] codechecker.add_test_package_product(server_access, TEST_WORKSPACE)
def setup_package(): """ Setup the environment for the report_server_api test. """ global TEST_WORKSPACE TEST_WORKSPACE = env.get_workspace('report_server_api') os.environ['TEST_WORKSPACE'] = TEST_WORKSPACE test_project_path = project.path() pg_db_config = env.get_postgresql_cfg() test_config = {} suppress_file = None skip_list_file = None # Setup env vars for test cases. host_port_cfg = env.get_host_port_cfg() test_env = env.test_env() codechecker_cfg = { 'suppress_file': suppress_file, 'skip_list_file': skip_list_file, 'check_env': test_env, 'workspace': TEST_WORKSPACE, 'pg_db_config': pg_db_config, 'checkers': [] } codechecker_cfg.update(host_port_cfg) test_config['codechecker_cfg'] = codechecker_cfg # Export test configuration. env.export_test_cfg(TEST_WORKSPACE, test_config) # Start the CodeChecker server. _start_server(codechecker_cfg, test_config, False)
def setup_package(): """Setup the environment for the tests then start the server.""" global TEST_WORKSPACE TEST_WORKSPACE = env.get_workspace('ssl') os.environ['TEST_WORKSPACE'] = TEST_WORKSPACE test_config = {} # Setup environment variables for the test cases. host_port_cfg = { 'viewer_host': 'localhost', 'viewer_port': env.get_free_port(), 'viewer_product': 'ssl' } test_env = env.test_env(TEST_WORKSPACE) codechecker_cfg = { 'check_env': test_env, 'workspace': TEST_WORKSPACE, 'checkers': [] } codechecker_cfg.update(host_port_cfg) test_config['codechecker_cfg'] = codechecker_cfg # Export configuration for the tests. env.export_test_cfg(TEST_WORKSPACE, test_config) # Enable SSL # ON travis auto-test fails because due to the environment # self signed certs are not accepted # [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:661) # Operation not permitted # Will need to solve this to re-enable SSL in this test. # env.enable_ssl(TEST_WORKSPACE) # Enable authentication and start the CodeChecker server. env.enable_auth(TEST_WORKSPACE) print("Starting server to get results") _start_server(codechecker_cfg, test_config, False)
def setup_package(): """Setup the environment for the tests then start the server.""" global TEST_WORKSPACE TEST_WORKSPACE = env.get_workspace('storage_of_analysis_statistics') os.environ['TEST_WORKSPACE'] = TEST_WORKSPACE test_config = {} # Setup environment variables for the test cases. host_port_cfg = {'viewer_host': 'localhost', 'viewer_port': env.get_free_port(), 'viewer_product': 'storage_of_analysis_statistics'} test_env = env.test_env(TEST_WORKSPACE) codechecker_cfg = { 'check_env': test_env, 'workspace': TEST_WORKSPACE, 'checkers': [], 'viewer_product': 'storage_of_analysis_statistics', 'reportdir': os.path.join(TEST_WORKSPACE, 'reports') } codechecker_cfg.update(host_port_cfg) codechecker_cfg['run_names'] = [] test_config['codechecker_cfg'] = codechecker_cfg # Export configuration for the tests. env.export_test_cfg(TEST_WORKSPACE, test_config) # Enable storage of analysis statistics and start the CodeChecker server. env.enable_storage_of_analysis_statistics(TEST_WORKSPACE) print("Starting server to get results") server_access = codechecker.start_server(codechecker_cfg, EVENT_1) server_access['viewer_product'] = codechecker_cfg['viewer_product'] codechecker.add_test_package_product(server_access, TEST_WORKSPACE)
def setup_package(): """Setup the environment for the tests then start the server.""" global TEST_WORKSPACE TEST_WORKSPACE = env.get_workspace('authentication') os.environ['TEST_WORKSPACE'] = TEST_WORKSPACE test_config = {} # Setup environment variables for the test cases. host_port_cfg = { 'viewer_host': 'localhost', 'viewer_port': env.get_free_port(), 'viewer_product': 'authentication' } test_env = env.test_env(TEST_WORKSPACE) codechecker_cfg = { 'check_env': test_env, 'workspace': TEST_WORKSPACE, 'checkers': [] } codechecker_cfg.update(host_port_cfg) codechecker_cfg['run_names'] = [] test_config['codechecker_cfg'] = codechecker_cfg # Export configuration for the tests. env.export_test_cfg(TEST_WORKSPACE, test_config) # Enable authentication and start the CodeChecker server. env.enable_auth(TEST_WORKSPACE) print("Starting server to get results") codechecker.start_server(codechecker_cfg, __STOP_SERVER) codechecker.add_test_package_product(host_port_cfg, TEST_WORKSPACE)
def setup_package(): """Setup the environment for the tests then start the server.""" global TEST_WORKSPACE TEST_WORKSPACE = env.get_workspace('ssl') os.environ['TEST_WORKSPACE'] = TEST_WORKSPACE test_config = {} # Setup environment variables for the test cases. host_port_cfg = {'viewer_host': 'localhost', 'viewer_port': env.get_free_port(), 'viewer_product': 'ssl'} test_env = env.test_env(TEST_WORKSPACE) codechecker_cfg = { 'check_env': test_env, 'workspace': TEST_WORKSPACE, 'checkers': [] } codechecker_cfg.update(host_port_cfg) test_config['codechecker_cfg'] = codechecker_cfg # Export configuration for the tests. env.export_test_cfg(TEST_WORKSPACE, test_config) # Enable SSL # ON travis auto-test fails because due to the environment # self signed certs are not accepted # [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:661) # Operation not permitted # Will need to solve this to re-enable SSL in this test. # env.enable_ssl(TEST_WORKSPACE) # Enable authentication and start the CodeChecker server. env.enable_auth(TEST_WORKSPACE) print("Starting server to get results") codechecker.start_server(codechecker_cfg, __STOP_SERVER)
def test_source_suppress_export(self): """ Test exporting a source suppress comment automatically to file. """ generated_file = os.path.join(self._test_workspace, "generated.suppress") skip_file = os.path.join(self._test_directory, "suppress_export.skip") extract_cmd = [env.codechecker_cmd(), 'parse', os.path.join(self._test_workspace, "reports"), "--suppress", generated_file, "--export-source-suppress", "--ignore", skip_file] _, _, ret = codechecker.call_command( extract_cmd, self._test_project_path, env.test_env(self._test_directory)) self.assertEqual(ret, 2, "Failed to generate suppress file.") with open(generated_file, 'r', encoding='utf-8', errors='ignore') as generated: expected_file = os.path.join(self._test_directory, "suppress.expected") with open(expected_file, 'r', encoding='utf-8', errors='ignore') as expected: generated_content = generated.read() expected_content = expected.read() print("generated") print(generated_content) print("expected") print(expected_content) diff = set(expected_content).symmetric_difference( generated_content) print("difference") {print(elem) for elem in diff} self.assertEqual(len(diff), 0, "The generated suppress file does not " "look like what was expected")
def setup_package(): """Setup the environment for testing db_cleanup.""" global TEST_WORKSPACE TEST_WORKSPACE = env.get_workspace('db_cleanup') # Set the TEST_WORKSPACE used by the tests. os.environ['TEST_WORKSPACE'] = TEST_WORKSPACE # Create a basic CodeChecker config for the tests, this should # be imported by the tests and they should only depend on these # configuration options. codechecker_cfg = { 'suppress_file': None, 'skip_list_file': None, 'check_env': env.test_env(TEST_WORKSPACE), 'workspace': TEST_WORKSPACE, 'checkers': [], 'viewer_host': 'localhost', 'viewer_product': 'db_cleanup' } env.export_test_cfg(TEST_WORKSPACE, {'codechecker_cfg': codechecker_cfg})
def start_server(codechecker_cfg, test_config, event): """Start the CodeChecker server.""" def start_server_proc(event, server_cmd, checking_env): """Target function for starting the CodeChecker server.""" proc = subprocess.Popen(server_cmd, env=checking_env) # Blocking termination until event is set. event.wait() # If proc is still running, stop it. if proc.poll() is None: proc.terminate() server_cmd = codechecker.serv_cmd(codechecker_cfg, test_config) server_proc = multiprocessing.Process(name='server', target=start_server_proc, args=(event, server_cmd, env.test_env())) server_proc.start() # Wait for server to start and connect to database. time.sleep(15)
def setup_package(): """Setup the environment for the tests then start the server.""" global TEST_WORKSPACE TEST_WORKSPACE = env.get_workspace('authentication') os.environ['TEST_WORKSPACE'] = TEST_WORKSPACE test_config = {} # Setup environment variables for the test cases. host_port_cfg = {'viewer_host': 'localhost', 'viewer_port': env.get_free_port(), 'viewer_product': 'authentication'} test_env = env.test_env(TEST_WORKSPACE) codechecker_cfg = { 'check_env': test_env, 'workspace': TEST_WORKSPACE, 'checkers': [] } codechecker_cfg.update(host_port_cfg) codechecker_cfg['run_names'] = [] test_config['codechecker_cfg'] = codechecker_cfg # Export configuration for the tests. env.export_test_cfg(TEST_WORKSPACE, test_config) # Enable authentication and start the CodeChecker server. env.enable_auth(TEST_WORKSPACE) print("Starting server to get results") codechecker.start_server(codechecker_cfg, __STOP_SERVER)
def setup_package(): """Setup the environment for testing server_configuration.""" global TEST_WORKSPACE TEST_WORKSPACE = env.get_workspace('server_configuration') # Set the TEST_WORKSPACE used by the tests. os.environ['TEST_WORKSPACE'] = TEST_WORKSPACE test_config = {} # Get an environment which should be used by the tests. test_env = env.test_env(TEST_WORKSPACE) codechecker_cfg = { 'check_env': test_env, 'workspace': TEST_WORKSPACE, 'checkers': [] } # Start or connect to the running CodeChecker server and get connection # details. print("This test uses a CodeChecker server... connecting...") server_access = codechecker.start_or_get_server() server_access['viewer_product'] = 'server_configuration' codechecker.add_test_package_product(server_access, TEST_WORKSPACE) # Extend the checker configuration with the server access. codechecker_cfg.update(server_access) # Save the run names in the configuration. codechecker_cfg['run_names'] = [] test_config['codechecker_cfg'] = codechecker_cfg # Export the test configuration to the workspace. env.export_test_cfg(TEST_WORKSPACE, test_config)
def setup_package(): """Setup the environment for testing server_configuration.""" global TEST_WORKSPACE TEST_WORKSPACE = env.get_workspace('server_configuration') # Set the TEST_WORKSPACE used by the tests. os.environ['TEST_WORKSPACE'] = TEST_WORKSPACE test_config = {} # Get an environment which should be used by the tests. test_env = env.test_env(TEST_WORKSPACE) codechecker_cfg = { 'check_env': test_env, 'workspace': TEST_WORKSPACE, 'checkers': [] } # Start or connect to the running CodeChecker server and get connection # details. print("This test uses a CodeChecker server... connecting...") server_access = codechecker.start_or_get_server(auth_required=True) server_access['viewer_product'] = 'server_configuration' codechecker.add_test_package_product(server_access, TEST_WORKSPACE) # Extend the checker configuration with the server access. codechecker_cfg.update(server_access) # Save the run names in the configuration. codechecker_cfg['run_names'] = [] test_config['codechecker_cfg'] = codechecker_cfg # Export the test configuration to the workspace. env.export_test_cfg(TEST_WORKSPACE, test_config)
def setup_package(): """Setup the environment for testing db_cleanup.""" global TEST_WORKSPACE TEST_WORKSPACE = env.get_workspace('db_cleanup') # Set the TEST_WORKSPACE used by the tests. os.environ['TEST_WORKSPACE'] = TEST_WORKSPACE # Create a basic CodeChecker config for the tests, this should # be imported by the tests and they should only depend on these # configuration options. codechecker_cfg = { 'suppress_file': None, 'skip_list_file': None, 'check_env': env.test_env(TEST_WORKSPACE), 'workspace': TEST_WORKSPACE, 'checkers': [], 'viewer_host': 'localhost', 'viewer_product': 'db_cleanup', 'reportdir': os.path.join(TEST_WORKSPACE, 'reports') } env.export_test_cfg(TEST_WORKSPACE, {'codechecker_cfg': codechecker_cfg})
def setup_package(): """Setup the environment for the tests. """ global TEST_WORKSPACE TEST_WORKSPACE = env.get_workspace('comment') os.environ['TEST_WORKSPACE'] = TEST_WORKSPACE test_project = 'cpp' test_project_path = project.path(test_project) test_config = {} project_info = project.get_info(test_project) test_config['test_project'] = project_info suppress_file = None skip_list_file = None test_env = env.test_env(TEST_WORKSPACE) codechecker_cfg = { 'suppress_file': suppress_file, 'skip_list_file': skip_list_file, 'check_env': test_env, 'workspace': TEST_WORKSPACE, 'reportdir': os.path.join(TEST_WORKSPACE, 'reports'), 'checkers': ['-d', 'core.CallAndMessage', '-e', 'core.StackAddressEscape'] } # Start or connect to the running CodeChecker server and get connection # details. print("This test uses a CodeChecker server... connecting...") server_access = codechecker.start_or_get_server() server_access['viewer_product'] = 'comment' codechecker.add_test_package_product(server_access, TEST_WORKSPACE) # Extend the checker configuration with the server access. codechecker_cfg.update(server_access) # Check the test project for the first time. test_project_names = [] test_project_name = project_info['name'] + '_' + uuid.uuid4().hex test_project_names.append(test_project_name) ret = codechecker.check(codechecker_cfg, test_project_name, test_project_path) if ret: sys.exit(1) print("Analyzing test project was successful.") # Check the test project again. test_project_name = project_info['name'] + '_' + uuid.uuid4().hex test_project_names.append(test_project_name) ret = codechecker.check(codechecker_cfg, test_project_name, test_project_path) if ret: sys.exit(1) print("Analyzing test project was succcessful.") codechecker_cfg['run_names'] = test_project_names test_config['codechecker_cfg'] = codechecker_cfg env.export_test_cfg(TEST_WORKSPACE, test_config)
def setup_package(): """Setup the environment for the tests.""" global TEST_WORKSPACE TEST_WORKSPACE = env.get_workspace('cmdline') os.environ['TEST_WORKSPACE'] = TEST_WORKSPACE test_project = 'cpp' test_config = {} project_info = project.get_info(test_project) # Copy the test project to the workspace. The tests should # work only on this test project. test_proj_path = os.path.join(TEST_WORKSPACE, "test_proj") shutil.copytree(project.path(test_project), test_proj_path) project_info['project_path'] = test_proj_path test_config['test_project'] = project_info suppress_file = None skip_list_file = None test_env = env.test_env(TEST_WORKSPACE) codechecker_cfg = { 'suppress_file': suppress_file, 'skip_list_file': skip_list_file, 'check_env': test_env, 'workspace': TEST_WORKSPACE, 'checkers': [] } ret = project.clean(test_project) if ret: sys.exit(ret) # Start or connect to the running CodeChecker server and get connection # details. print("This test uses a CodeChecker server... connecting...") server_access = codechecker.start_or_get_server() server_access['viewer_product'] = 'cmdline' codechecker.add_test_package_product(server_access, TEST_WORKSPACE) # Extend the checker configuration with the server access. codechecker_cfg.update(server_access) # Generate a unique name for this test run. test_project_name_1 = project_info['name'] + '1_' + uuid.uuid4().hex ret = codechecker.check(codechecker_cfg, test_project_name_1, project.path(test_project)) if ret: sys.exit(1) print("Analyzing the test project was successful.") test_project_name_2 = project_info['name'] + '2_' + uuid.uuid4().hex ret = codechecker.check(codechecker_cfg, test_project_name_2, project.path(test_project)) if ret: sys.exit(1) print("Analyzing the test project was successful.") codechecker_cfg['run_names'] = [test_project_name_1, test_project_name_2] test_config['codechecker_cfg'] = codechecker_cfg env.export_test_cfg(TEST_WORKSPACE, test_config)
def setup_package(): """Setup the environment for testing delete_runs.""" global TEST_WORKSPACE TEST_WORKSPACE = env.get_workspace('delete_runs') # Set the TEST_WORKSPACE used by the tests. os.environ['TEST_WORKSPACE'] = TEST_WORKSPACE # PostgreSQL configuration might be empty if tests are run # with SQLite. pg_db_config = env.get_postgresql_cfg() test_config = {} test_project = 'simple' project_info = project.get_info(test_project) # Copy the test project to the workspace. The tests should # work only on this test project. test_proj_path = os.path.join(TEST_WORKSPACE, "test_proj") shutil.copytree(project.path(test_project), test_proj_path) project_info['project_path'] = test_proj_path # Generate a unique name for this test run. test_project_name = project_info['name'] test_config['test_project'] = project_info # Suppress file should be set here if needed by the tests. suppress_file = None # Skip list file should be set here if needed by the tests. skip_list_file = None # Get an environment which should be used by the tests. test_env = env.test_env() # Create a basic CodeChecker config for the tests, this should # be imported by the tests and they should only depend on these # configuration options. codechecker_cfg = { 'suppress_file': suppress_file, 'skip_list_file': skip_list_file, 'check_env': test_env, 'workspace': TEST_WORKSPACE, 'pg_db_config': pg_db_config, 'checkers': [] } # Get new unique port numbers for this test run. host_port_cfg = env.get_host_port_cfg() # Extend the checker configuration with the port numbers. codechecker_cfg.update(host_port_cfg) # Start the CodeChecker server. print("Starting server to get results") _start_server(codechecker_cfg, test_config, False) for i in range(0, 5): # Clean the test project, if needed by the tests. ret = project.clean(test_project) if ret: sys.exit(ret) # Check the test project, if needed by the tests. ret = codechecker.check(codechecker_cfg, test_project_name + '_' + str(i), test_proj_path) if ret: sys.exit(1) print("Analyzing the test project was successful {}.".format(str(i))) # If the check process is very fast, datetime of multiple runs can be # almost the same different in microseconds. Test cases of delete runs # can be failed for this reason because we didn't process microseconds # in command line arguments. time.sleep(1) # Save the run names in the configuration. codechecker_cfg['run_names'] \ = [test_project_name + '_' + str(i) for i in range(0, 5)] test_config['codechecker_cfg'] = codechecker_cfg # Export the test configuration to the workspace. env.export_test_cfg(TEST_WORKSPACE, test_config)
def setup_package(): """ Setup the environment for the tests. Check the test project twice. """ global TEST_WORKSPACE TEST_WORKSPACE = env.get_workspace('diff') os.environ['TEST_WORKSPACE'] = TEST_WORKSPACE test_project = 'cpp' test_project_path = project.path(test_project) test_project_path_altered = os.path.join(TEST_WORKSPACE, "cpp_copy") # We create a copy of the test project which we will change # to simulate code editing. dir_util.copy_tree(test_project_path, test_project_path_altered) test_config = {} project_info = project.get_info(test_project) test_config['test_project'] = project_info suppress_file = None skip_list_file = None test_env = env.test_env(TEST_WORKSPACE) codechecker_cfg = { 'suppress_file': suppress_file, 'skip_list_file': skip_list_file, 'check_env': test_env, 'force': True, 'workspace': TEST_WORKSPACE, 'reportdir': os.path.join(TEST_WORKSPACE, 'reports'), 'checkers': ['-d', 'core.CallAndMessage', '-e', 'core.StackAddressEscape'] } test_config['codechecker_cfg'] = codechecker_cfg ret = project.clean(test_project, test_env) if ret: sys.exit(ret) # Start or connect to the running CodeChecker server and get connection # details. print("This test uses a CodeChecker server... connecting...") server_access = codechecker.start_or_get_server() server_access['viewer_product'] = 'diff' codechecker.add_test_package_product(server_access, TEST_WORKSPACE) # Extend the checker configuration with the server access. codechecker_cfg.update(server_access) test_project_name_base = project_info['name'] + '_' + uuid.uuid4().hex ret = codechecker.check(codechecker_cfg, test_project_name_base, test_project_path) if ret: sys.exit(1) print("First analysis of the test project was successful.") dir_util.copy_tree(codechecker_cfg['reportdir'], os.path.join(TEST_WORKSPACE, 'reports_baseline')) ret = project.clean(test_project, test_env) if ret: sys.exit(ret) test_project_name_new = project_info['name'] + '_' + uuid.uuid4().hex # Let's run the second analysis with different # checkers to have some real difference. codechecker_cfg['checkers'] = ['-e', 'core.CallAndMessage', '-d', 'core.StackAddressEscape' ] ret = codechecker.check(codechecker_cfg, test_project_name_new, test_project_path_altered) if ret: sys.exit(1) print("Second analysis of the test project was successful.") # Insert a real suppression into the code altered_file = os.path.join(test_project_path_altered, "call_and_message.cpp") insert_suppression(altered_file) test_project_name_update = project_info['name'] + '_' + uuid.uuid4().hex codechecker_cfg['tag'] = 't1' codechecker_cfg['checkers'] = ['-d', 'core.CallAndMessage', '-e', 'core.StackAddressEscape' ] codechecker_cfg['reportdir'] = os.path.join(TEST_WORKSPACE, 'reports2') ret = codechecker.check(codechecker_cfg, test_project_name_update, test_project_path) if ret: sys.exit(1) print("Third analysis of the test project was successful.") codechecker_cfg['tag'] = 't2' codechecker_cfg['checkers'] = ['-e', 'core.CallAndMessage', '-d', 'core.StackAddressEscape' ] ret = codechecker.check(codechecker_cfg, test_project_name_update, test_project_path) if ret: sys.exit(1) print("Fourth analysis of the test project was successful.") codechecker_cfg['tag'] = 't3' ret = codechecker.check(codechecker_cfg, test_project_name_update, test_project_path) if ret: sys.exit(1) print("Fifth analysis of the test project was successful.") # Order of the test run names matter at comparison! codechecker_cfg['run_names'] = [test_project_name_base, test_project_name_new, test_project_name_update] test_config['codechecker_cfg'] = codechecker_cfg # Export test configuration to the workspace. env.export_test_cfg(TEST_WORKSPACE, test_config)
def setup_package(): """Setup the environment for testing components.""" global TEST_WORKSPACE TEST_WORKSPACE = env.get_workspace('component') os.environ['TEST_WORKSPACE'] = TEST_WORKSPACE test_project = 'cpp' test_config = {} project_info = project.get_info(test_project) test_project_path = os.path.join(TEST_WORKSPACE, "test_proj") shutil.copytree(project.path(test_project), test_project_path) project_info['project_path'] = test_project_path test_project_name = project_info['name'] + '_' + uuid.uuid4().hex test_config['test_project'] = project_info suppress_file = None skip_list_file = None test_env = env.test_env(TEST_WORKSPACE) codechecker_cfg = { 'suppress_file': suppress_file, 'skip_list_file': skip_list_file, 'check_env': test_env, 'workspace': TEST_WORKSPACE, 'checkers': [] } # Start or connect to the running CodeChecker server and get connection # details. print("This test uses a CodeChecker server... connecting...") server_access = codechecker.start_or_get_server() server_access['viewer_product'] = 'component' codechecker.add_test_package_product(server_access, TEST_WORKSPACE) # Extend the checker configuration with the server access. codechecker_cfg.update(server_access) # Clean the test project, if needed by the tests. ret = project.clean(test_project) if ret: sys.exit(ret) ret = codechecker.check(codechecker_cfg, test_project_name, test_project_path) if ret: sys.exit(1) print("Analyzing test project was succcessful.") # Save the run names in the configuration. codechecker_cfg['run_names'] = [test_project_name] test_config['codechecker_cfg'] = codechecker_cfg # Export the test configuration to the workspace. env.export_test_cfg(TEST_WORKSPACE, test_config)
def setup_package(): """Setup the environment for the tests. """ global TEST_WORKSPACE TEST_WORKSPACE = env.get_workspace('update') os.environ['TEST_WORKSPACE'] = TEST_WORKSPACE test_project_path = project.path() clang_version = env.clang_to_test() pg_db_config = env.get_postgresql_cfg() test_config = {} project_info = project.get_info(project.path()) test_project_path = os.path.join(TEST_WORKSPACE, "test_proj") shutil.copytree(project.path(), test_project_path) project_info['project_path'] = test_project_path test_project_name = project_info['name'] + '_' + uuid.uuid4().hex test_config['test_project'] = project_info suppress_file = None skip_list_file = None # Get port numbers for the tests. host_port_cfg = env.get_host_port_cfg() test_env = env.test_env() codechecker_cfg = { 'suppress_file': suppress_file, 'skip_list_file': skip_list_file, 'check_env': test_env, 'workspace': TEST_WORKSPACE, 'pg_db_config': pg_db_config, 'checkers': [] } codechecker_cfg.update(host_port_cfg) ret = project.clean(test_project_path, test_env) if ret: sys.exit(ret) ret = codechecker.check(codechecker_cfg, test_project_name, test_project_path) if ret: sys.exit(1) print("Analyzing test project was succcessful.") if pg_db_config: print("Waiting for PotgreSQL to stop.") codechecker.wait_for_postgres_shutdown(TEST_WORKSPACE) codechecker_cfg['run_names'] = [test_project_name] test_config['codechecker_cfg'] = codechecker_cfg env.export_test_cfg(TEST_WORKSPACE, test_config) # Start the CodeChecker server. print("Starting server to get results") _start_server(codechecker_cfg, test_config, False)
def setup_package(): """Setup the environment for testing delete_runs.""" global TEST_WORKSPACE TEST_WORKSPACE = env.get_workspace('delete_runs') # Set the TEST_WORKSPACE used by the tests. os.environ['TEST_WORKSPACE'] = TEST_WORKSPACE test_config = {} test_project = 'simple' project_info = project.get_info(test_project) # Copy the test project to the workspace. The tests should # work only on this test project. test_proj_path = os.path.join(TEST_WORKSPACE, "test_proj") shutil.copytree(project.path(test_project), test_proj_path) project_info['project_path'] = test_proj_path # Generate a unique name for this test run. test_project_name = project_info['name'] test_config['test_project'] = project_info # Suppress file should be set here if needed by the tests. suppress_file = None # Skip list file should be set here if needed by the tests. skip_list_file = None # Get an environment which should be used by the tests. test_env = env.test_env(TEST_WORKSPACE) # Create a basic CodeChecker config for the tests, this should # be imported by the tests and they should only depend on these # configuration options. codechecker_cfg = { 'suppress_file': suppress_file, 'skip_list_file': skip_list_file, 'check_env': test_env, 'workspace': TEST_WORKSPACE, 'checkers': [] } # Start or connect to the running CodeChecker server and get connection # details. print("This test uses a CodeChecker server... connecting...") server_access = codechecker.start_or_get_server() server_access['viewer_product'] = 'delete_runs' codechecker.add_test_package_product(server_access, TEST_WORKSPACE) # Extend the checker configuration with the server access. codechecker_cfg.update(server_access) for i in range(0, 5): # Clean the test project, if needed by the tests. ret = project.clean(test_project) if ret: sys.exit(ret) # Check the test project, if needed by the tests. ret = codechecker.check(codechecker_cfg, test_project_name + '_' + str(i), test_proj_path) if ret: sys.exit(1) print("Analyzing the test project was successful {}.".format(str(i))) # If the check process is very fast, datetime of multiple runs can be # almost the same different in microseconds. Test cases of delete runs # can be failed for this reason because we didn't process microseconds # in command line arguments. time.sleep(1) # Save the run names in the configuration. codechecker_cfg['run_names'] \ = [test_project_name + '_' + str(i) for i in range(0, 5)] test_config['codechecker_cfg'] = codechecker_cfg # Export the test configuration to the workspace. env.export_test_cfg(TEST_WORKSPACE, test_config)
def setup_package(): """Setup the environment for the tests.""" global TEST_WORKSPACE TEST_WORKSPACE = env.get_workspace('report_viewer_api') os.environ['TEST_WORKSPACE'] = TEST_WORKSPACE test_project = 'cpp' test_config = {} project_info = project.get_info(test_project) test_proj_path = os.path.join(TEST_WORKSPACE, "test_proj") shutil.copytree(project.path(test_project), test_proj_path) project_info['project_path'] = test_proj_path test_config['test_project'] = project_info suppress_file = None skip_list_file = None tag = 'v1.0' test_env = env.test_env(TEST_WORKSPACE) codechecker_cfg = { 'suppress_file': suppress_file, 'skip_list_file': skip_list_file, 'check_env': test_env, 'workspace': TEST_WORKSPACE, 'checkers': [], 'tag': tag } ret = project.clean(test_project) if ret: sys.exit(ret) # Start or connect to the running CodeChecker server and get connection # details. print("This test uses a CodeChecker server... connecting...") server_access = codechecker.start_or_get_server() server_access['viewer_product'] = 'report_viewer_api' codechecker.add_test_package_product(server_access, TEST_WORKSPACE) # Extend the checker configuration with the server access. codechecker_cfg.update(server_access) test_project_name = project_info['name'] + '_' + uuid.uuid4().hex + '**' ret = codechecker.check(codechecker_cfg, test_project_name, project.path(test_project)) if ret: sys.exit(1) print("Analyzing the test project was successful.") test_project_name_new = project_info['name'] + '*' + uuid.uuid4().hex + '%' # Let's run the second analysis with different # checkers to have some real difference. codechecker_cfg['checkers'] = ['-e', 'core.CallAndMessage', '-d', 'core.StackAddressEscape', '-d', 'unix.Malloc' ] codechecker_cfg['tag'] = None ret = codechecker.check(codechecker_cfg, test_project_name_new, project.path(test_project)) if ret: sys.exit(1) print("Second analysis of the test project was successful.") test_project_name_third = project_info['name'] + uuid.uuid4().hex # Let's run the third analysis. ret = codechecker.check(codechecker_cfg, test_project_name_third, project.path(test_project)) if ret: sys.exit(1) print("Third analysis of the test project was successful.") codechecker_cfg['run_names'] = [test_project_name, test_project_name_new] test_config['codechecker_cfg'] = codechecker_cfg env.export_test_cfg(TEST_WORKSPACE, test_config)
def setup_package(): """Setup the environment for testing products.""" global TEST_WORKSPACE TEST_WORKSPACE = env.get_workspace('producttest') # Set the TEST_WORKSPACE used by the tests. os.environ['TEST_WORKSPACE'] = TEST_WORKSPACE test_config = {} test_project = 'single_bug' project_info = project.get_info(test_project) # Copy the test project to the workspace. The tests should # work only on this test project. test_proj_path = os.path.join(TEST_WORKSPACE, "test_proj") shutil.copytree(project.path(test_project), test_proj_path) project_info['project_path'] = test_proj_path # Generate a unique name for this test run. test_project_name = project_info['name'] + '_' + uuid.uuid4().hex test_config['test_project'] = project_info # Get an environment which should be used by the tests. test_env = env.test_env(TEST_WORKSPACE) # Create a basic CodeChecker config for the tests, this should # be imported by the tests and they should only depend on these # configuration options. codechecker_cfg = { 'check_env': test_env, 'workspace': TEST_WORKSPACE, 'checkers': [] } # Start or connect to the running CodeChecker server and get connection # details. print("This test uses a CodeChecker server... connecting...") server_access = codechecker.start_or_get_server() server_access['viewer_product'] = 'producttest' codechecker.add_test_package_product(server_access, TEST_WORKSPACE) # Extend the checker configuration with the server access. codechecker_cfg.update(server_access) # Clean the test project, if needed by the tests. ret = project.clean(test_project) if ret: sys.exit(ret) # Check the test project, if needed by the tests. ret = codechecker.check(codechecker_cfg, test_project_name, project.path(test_project)) if ret: sys.exit(1) print("Analyzing the test project was successful.") # Save the run names in the configuration. codechecker_cfg['run_names'] = [test_project_name] test_config['codechecker_cfg'] = codechecker_cfg # Export the test configuration to the workspace. env.export_test_cfg(TEST_WORKSPACE, test_config)