def test_valid_yaml_config(self): """ Store with a valid YAML configuration file. """ cc_env = env.codechecker_env() cc_env["CC_REPORT_DIR"] = self.codechecker_cfg['reportdir'] with open(self.config_file_yaml, 'w+', encoding="utf-8", errors="ignore") as config_f: config_f.write(f""" # Storage related options. store: - --name=store_config - --trim-path-prefix=$HOME - --url={env.parts_to_url(self.codechecker_cfg)} - $CC_REPORT_DIR""") store_cmd = [ env.codechecker_cmd(), 'store', '--config', self.config_file_yaml ] try: subprocess.check_output(store_cmd, env=cc_env, encoding="utf-8", errors="ignore") except subprocess.CalledProcessError as cerr: print(cerr.output) raise
def setUp(self): """ Set up workspace.""" # 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 CodeChecker cmd if needed for the tests. self._codechecker_cmd = env.codechecker_cmd() self.env = env.codechecker_env() self.report_dir = os.path.join(self.test_workspace, 'reports') os.makedirs(self.report_dir) self.test_dir = os.path.join(os.path.dirname(__file__), 'test_files') # Get if clang is CTU-capable or not. cmd = [self._codechecker_cmd, 'analyze', '-h'] output, _ = call_command(cmd, cwd=self.test_dir, env=self.env) self.ctu_capable = '--ctu-' in output print("'analyze' reported CTU-compatibility? " + str(self.ctu_capable)) # Fix the "template" build JSONs to contain a proper directory # so the tests work. raw_buildlog = os.path.join(self.test_dir, 'buildlog.json') with open(raw_buildlog) as log_file: build_json = json.load(log_file) for command in build_json: command['directory'] = self.test_dir self.__old_pwd = os.getcwd() os.chdir(self.test_workspace) self.buildlog = os.path.join(self.test_workspace, 'buildlog.json') with open(self.buildlog, 'w') as log_file: json.dump(build_json, log_file)
def test_valid_json_config(self): """ Store with a valid JSON configuration file. """ cc_env = env.codechecker_env() cc_env["CC_REPORT_DIR"] = self.codechecker_cfg['reportdir'] with open(self.config_file_json, 'w+', encoding="utf-8", errors="ignore") as config_f: json.dump( { 'store': [ '--name=' + 'store_config', '--trim-path-prefix=$HOME', '--url=' + env.parts_to_url(self.codechecker_cfg), '$CC_REPORT_DIR' ] }, config_f) store_cmd = [ env.codechecker_cmd(), 'store', '--config', self.config_file_json ] try: subprocess.check_output(store_cmd, env=cc_env, encoding="utf-8", errors="ignore") except subprocess.CalledProcessError as cerr: print(cerr.output) raise
def setUp(self): """ Set up workspace.""" # 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 CodeChecker cmd if needed for the tests. self._codechecker_cmd = env.codechecker_cmd() self.env = env.codechecker_env() self.report_dir = os.path.join(self.test_workspace, 'reports') os.makedirs(self.report_dir) self.test_dir = os.path.join(os.path.dirname(__file__), 'test_files') # Get if clang is CTU-capable or not. cmd = [self._codechecker_cmd, 'analyze', '-h'] output, _ = call_command(cmd, cwd=self.test_dir, env=self.env) self.ctu_capable = '--ctu-' in output print("'analyze' reported CTU-compatibility? " + str(self.ctu_capable)) # Fix the "template" build JSONs to contain a proper directory # so the tests work. raw_buildlog = os.path.join(self.test_dir, 'buildlog.json') with open(raw_buildlog) as log_file: build_json = json.load(log_file) for command in build_json: command['directory'] = self.test_dir self.__old_pwd = os.getcwd() os.chdir(self.test_workspace) self.buildlog = os.path.join(self.test_workspace, 'buildlog.json') with open(self.buildlog, 'w') as log_file: json.dump(build_json, log_file)
def setup_class(cls): """Setup the class.""" # Get an environment with CodeChecker command in it. cls.env = env.codechecker_env() cls.test_dir = os.path.join( os.path.dirname(__file__), 'quickcheck_test_files') # Change working dir to testfile dir so CodeChecker can be run easily. os.chdir(cls.test_dir)
def setUp(self): # TEST_WORKSPACE is automatically set by test package __init__.py . test_workspace = os.environ['TEST_WORKSPACE'] test_class = self.__class__.__name__ print('Running ' + test_class + ' tests in ' + test_workspace) # Get the test project configuration from the prepared test workspace. self._testproject_data = env.setup_test_proj_cfg(test_workspace) self.assertIsNotNone(self._testproject_data) # Get the CodeChecker cmd if needed for the tests. self._codechecker_cmd = env.codechecker_cmd() self.env = env.codechecker_env() # Get if the package is able to collect statistics or not. cmd = [self._codechecker_cmd, 'analyze', '-h'] output, _ = call_command(cmd, cwd=test_workspace, env=self.env) self.stats_capable = '--stats' in output print("'analyze' reported statistics collector-compatibility? " + str(self.stats_capable)) if not self.stats_capable: try: self.stats_capable = bool( util.strtobool(os.environ['CC_TEST_FORCE_STATS_CAPABLE'])) except (ValueError, KeyError): pass test_project_path = self._testproject_data['project_path'] test_project_build = shlex.split(self._testproject_data['build_cmd']) test_project_clean = shlex.split(self._testproject_data['clean_cmd']) # Clean the test project before logging the compiler commands. output, err = call_command(test_project_clean, cwd=test_project_path, env=self.env) print(output) print(err) # Create compilation log used in the tests. log_cmd = [ self._codechecker_cmd, 'log', '-o', 'compile_command.json', '-b' ] log_cmd.extend(test_project_build) output, err = call_command(log_cmd, cwd=test_project_path, env=self.env) print(output) print(err)
def setUp(self): """ Set up workspace.""" # 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 CodeChecker cmd if needed for the tests. self._codechecker_cmd = env.codechecker_cmd() self.env = env.codechecker_env() self.report_dir = os.path.join(self.test_workspace, 'reports') os.makedirs(self.report_dir)
def setUp(self): """ Set up workspace.""" # 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 CodeChecker cmd if needed for the tests. self._codechecker_cmd = env.codechecker_cmd() self.env = env.codechecker_env() self.report_dir = os.path.join(self.test_workspace, 'reports') os.makedirs(self.report_dir)
def setup_class(cls): """Setup the class.""" # TEST_WORKSPACE is automatically set by test package __init__.py test_workspace = os.environ['TEST_WORKSPACE'] cls.test_workspaces = { 'NORMAL': os.path.join(test_workspace, 'NORMAL'), 'QUICKCHECK': os.path.join(test_workspace, 'QUICKCHECK') } # Get an environment with CodeChecker command in it. cls.env = env.codechecker_env() cls.test_dir = os.path.join(os.path.dirname(__file__), 'test_files') # Change working dir to testfile dir so CodeChecker can be run easily. os.chdir(cls.test_dir)
def setup_class(cls): """Setup the class.""" # TEST_WORKSPACE is automatically set by test package __init__.py test_workspace = os.environ['TEST_WORKSPACE'] cls.test_workspaces = {'NORMAL': os.path.join(test_workspace, 'NORMAL'), 'CHECK': os.path.join(test_workspace, 'CHECK'), 'OUTPUT': os.path.join(test_workspace, 'OUTPUT')} # Get an environment with CodeChecker command in it. cls.env = env.codechecker_env() cls.test_dir = os.path.join( os.path.dirname(__file__), 'test_files') # 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(cls.test_workspaces['NORMAL'], "test_files", 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) # Change working dir to testfile dir so CodeChecker can be run easily. cls.__old_pwd = os.getcwd() os.chdir(cls.test_dir)
def setUp(self): """ Set up workspace.""" # 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 CodeChecker cmd if needed for the tests. self._codechecker_cmd = env.codechecker_cmd() self.env = env.codechecker_env() self.report_dir = os.path.join(self.test_workspace, 'reports') os.makedirs(self.report_dir) self.test_dir = project.path('ctu_failure') # Get if clang is CTU-capable or not. cmd = [self._codechecker_cmd, 'analyze', '-h'] output = subprocess.check_output(cmd, stderr=subprocess.STDOUT, cwd=self.test_dir, env=self.env) self.ctu_capable = '--ctu-' in output print("'analyze' reported CTU-compatibility? " + str(self.ctu_capable)) self.ctu_has_analyzer_display_ctu_progress = \ host_check.has_analyzer_feature(self.__getClangSaPath(), '-analyzer-display-ctu-progress') print("Has -analyzer-display-ctu-progress? " + str(self.ctu_capable)) # Fix the "template" build JSONs to contain a proper directory # so the tests work. raw_buildlog = os.path.join(self.test_dir, 'buildlog.json') with open(raw_buildlog) as log_file: build_json = json.load(log_file) for command in build_json: command['directory'] = self.test_dir os.chdir(self.test_workspace) self.buildlog = os.path.join(self.test_workspace, 'buildlog.json') with open(self.buildlog, 'w') as log_file: json.dump(build_json, log_file)
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 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() self._codechecker_cfg = env.import_codechecker_cfg(self.test_workspace) self.env = env.codechecker_env()
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 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() self._codechecker_cfg = env.import_codechecker_cfg(self.test_workspace) self.env = env.codechecker_env()
def setUp(self): """ Set up workspace.""" # 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 CodeChecker cmd if needed for the tests. self._codechecker_cmd = env.codechecker_cmd() self.env = env.codechecker_env() self.report_dir = os.path.join(self.test_workspace, 'reports') os.makedirs(self.report_dir) self.test_dir = os.path.join(os.path.dirname(__file__), 'test_files') # Get if clang is CTU-capable or not. cmd = [self._codechecker_cmd, 'analyze', '-h'] output, _, result = call_command(cmd, cwd=self.test_dir, env=self.env) self.assertEqual(result, 0, "Analyzing failed.") setattr(self, CTU_ATTR, '--ctu-' in output) print("'analyze' reported CTU-compatibility? " + str(getattr(self, CTU_ATTR))) setattr(self, ON_DEMAND_ATTR, '--ctu-ast-mode' in output) print("'analyze' reported CTU-on-demand-compatibility? " + str(getattr(self, ON_DEMAND_ATTR))) self.buildlog = os.path.join(self.test_workspace, 'buildlog.json') self.complex_buildlog = os.path.join( self.test_workspace, 'complex_buildlog.json') # Fix the "template" build JSONs to contain a proper directory. env.adjust_buildlog( 'buildlog.json', self.test_dir, self.test_workspace) env.adjust_buildlog( 'complex_buildlog.json', self.test_dir, self.test_workspace) self.__old_pwd = os.getcwd() os.chdir(self.test_workspace)
def setUp(self): """ Set up workspace.""" # 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 CodeChecker cmd if needed for the tests. self._codechecker_cmd = env.codechecker_cmd() self.env = env.codechecker_env() self.report_dir = os.path.join(self.test_workspace, 'reports') os.makedirs(self.report_dir) # Get if clang is CTU-capable or not. cmd = [self._codechecker_cmd, 'analyze', '-h'] output, _, result = call_command(cmd, cwd=self.test_workspace, env=self.env) self.assertEqual(result, 0, "Analyzing failed.") setattr(self, CTU_ATTR, '--ctu-' in output) print("'analyze' reported CTU compatibility? " + str(getattr(self, CTU_ATTR))) setattr(self, ON_DEMAND_ATTR, '--ctu-ast-mode' in output) print("'analyze' reported CTU-on-demand-compatibility? " + str(getattr(self, ON_DEMAND_ATTR))) setattr( self, DISPLAY_PROGRESS_ATTR, host_check.has_analyzer_config_option(self.__getClangSaPath(), 'display-ctu-progress', self.env)) print("Has display-ctu-progress=true? " + str(getattr(self, DISPLAY_PROGRESS_ATTR))) self.__old_pwd = os.getcwd()
def setUp(self): # TEST_WORKSPACE is automatically set by test package __init__.py . test_workspace = os.environ['TEST_WORKSPACE'] test_class = self.__class__.__name__ print('Running ' + test_class + ' tests in ' + test_workspace) # Get the test project configuration from the prepared test workspace. self._testproject_data = env.setup_test_proj_cfg(test_workspace) self.assertIsNotNone(self._testproject_data) # Get the CodeChecker cmd if needed for the tests. self._codechecker_cmd = env.codechecker_cmd() self.env = env.codechecker_env() # Get if the package is able to collect statistics or not. cmd = [self._codechecker_cmd, 'analyze', '-h'] output, _ = call_command(cmd, cwd=test_workspace, env=self.env) self.stats_capable = '--stats' in output print("'analyze' reported statistics collector-compatibility? " + str(self.stats_capable)) test_project_path = self._testproject_data['project_path'] test_project_build = shlex.split(self._testproject_data['build_cmd']) # Create compilation log used in the tests. log_cmd = [self._codechecker_cmd, 'log', '-o', 'compile_command.json', '-b'] log_cmd.extend(test_project_build) output, err = call_command(log_cmd, cwd=test_project_path, env=self.env) print(output) print(err)