def __init__(self, protocol, host, port, product, endpoint, auto_handle_connection=True, session_token=None): # Import only if necessary; some tests may not add this to PYTHONPATH. from codechecker_api.codeCheckerDBAccess_v6 import codeCheckerDBAccess from codechecker_api.codeCheckerDBAccess_v6.constants \ import MAX_QUERY_SIZE from codechecker_client.credential_manager import SESSION_COOKIE_NAME self.max_query_size = MAX_QUERY_SIZE url = create_product_url(protocol, host, port, '/' + product + '/v' + VERSION + endpoint) print("Setup viewer client: " + url) transport = THttpClient.THttpClient(url) protocol = TJSONProtocol.TJSONProtocol(transport) client = codeCheckerDBAccess.Client(protocol) if session_token: headers = {'Cookie': SESSION_COOKIE_NAME + '=' + session_token} transport.setCustomHeaders(headers) super(CCViewerHelper, self).__init__(transport, client, auto_handle_connection)
def __init__(self, protocol, host, port, uri, session_token=None, get_new_token=None): """ @param get_new_token: a function which can generate a new token. """ self.__host = host self.__port = port url = create_product_url(protocol, host, port, uri) self.transport = None try: self.transport = THttpClient.THttpClient(url) except ValueError: # Initalizing THttpClient may raise an exception if proxy settings # are used but the port number is not a valid integer. pass # Thrift do not handle the use case when invalid proxy format is # used (e.g.: no schema is specified). For this reason we need to # verify the proxy format in our side. self._validate_proxy_format() self.protocol = TJSONProtocol.TJSONProtocol(self.transport) self.client = None self.get_new_token = get_new_token self._set_token(session_token)
def add_test_package_product(server_data, test_folder, check_env=None, protocol='http'): """ Add a product for a test suite to the server provided by server_data. Server must be running before called. server_data must contain three keys: viewer_{host, port, product}. """ if not check_env: check_env = env.test_env(test_folder) codechecker_cfg = {'check_env': check_env} codechecker_cfg.update(server_data) # Clean the previous session if any exists. logout(codechecker_cfg, test_folder, protocol) url = create_product_url(protocol, server_data['viewer_host'], str(server_data['viewer_port']), '') add_command = [ 'CodeChecker', 'cmd', 'products', 'add', server_data['viewer_product'], '--url', url, '--name', os.path.basename(test_folder), '--description', "Automatically created product for test." ] # If tests are running on postgres, we need to create a database. pg_config = env.get_postgresql_cfg() if pg_config: env.add_database(server_data['viewer_product'], check_env) add_command.append('--postgresql') pg_config['dbname'] = server_data['viewer_product'] add_command += _pg_db_config_to_cmdline_params(pg_config) else: # SQLite databases are put under the workspace of the appropriate test. add_command += ['--sqlite', os.path.join(test_folder, 'data.sqlite')] print(' '.join(add_command)) # Authenticate as SUPERUSER to be able to create the product. login(codechecker_cfg, test_folder, "root", "root", protocol) # The schema creation is a synchronous call. returncode = subprocess.call(add_command, env=check_env) logout(codechecker_cfg, test_folder, protocol) # After login as SUPERUSER, continue running the test as a normal user. # login() saves the relevant administrative file login(codechecker_cfg, test_folder, "cc", "test", protocol) if returncode: raise Exception("Failed to add the product to the test server!")
def __init__(self, proto, host, port, uri, auto_handle_connection=True, session_token=None): # Import only if necessary; some tests may not add this to PYTHONPATH. from codechecker_api.Authentication_v6 import codeCheckerAuthentication from codechecker_client.credential_manager import SESSION_COOKIE_NAME url = create_product_url(proto, host, port, '/v' + VERSION + uri) transport = THttpClient.THttpClient(url) protocol = TJSONProtocol.TJSONProtocol(transport) client = codeCheckerAuthentication.Client(protocol) if session_token: headers = {'Cookie': SESSION_COOKIE_NAME + '=' + session_token} transport.setCustomHeaders(headers) super(CCAuthHelper, self).__init__(transport, client, auto_handle_connection)
def __init__(self, proto, host, port, uri, auto_handle_connection=True, session_token=None): from codechecker_api.Configuration_v6 import configurationService from codechecker_client.credential_manager import SESSION_COOKIE_NAME full_uri = '/v' + VERSION + uri url = create_product_url(proto, host, port, full_uri) transport = THttpClient.THttpClient(url) protocol = TJSONProtocol.TJSONProtocol(transport) client = configurationService.Client(protocol) if session_token: headers = {'Cookie': SESSION_COOKIE_NAME + '=' + session_token} transport.setCustomHeaders(headers) super(CCConfigHelper, self).__init__(transport, client, auto_handle_connection)
def remove_test_package_product(test_folder, check_env=None, protocol='http'): """ Remove the product associated with the given test folder. The folder must exist, as the server configuration is read from the folder. """ if not check_env: check_env = env.test_env(test_folder) server_data = env.import_test_cfg(test_folder)['codechecker_cfg'] print(server_data) if 'check_env' not in server_data: server_data['check_env'] = check_env # Clean the previous session if any exists. logout(server_data, test_folder, protocol) url = create_product_url(protocol, server_data['viewer_host'], str(server_data['viewer_port']), '') del_command = [ 'CodeChecker', 'cmd', 'products', 'del', server_data['viewer_product'], '--url', url ] print(' '.join(del_command)) # Authenticate as SUPERUSER to be able to create the product. login(server_data, test_folder, "root", "root", protocol) returncode = subprocess.call(del_command, env=check_env, encoding="utf-8", errors="ignore") logout(server_data, test_folder, protocol) # If tests are running on postgres, we need to delete the database. # SQLite databases are deleted automatically as part of the # workspace removal. if env.get_postgresql_cfg(): env.del_database(server_data['viewer_product'], check_env) if returncode: raise Exception("Failed to remove the product from the test server!")
def __init__(self, protocol, host, port, uri, session_token=None, get_new_token=None): """ @param get_new_token: a function which can generate a new token. """ self.__host = host self.__port = port url = create_product_url(protocol, host, port, uri) self.transport = THttpClient.THttpClient(url) self.protocol = TJSONProtocol.TJSONProtocol(self.transport) self.client = None self.get_new_token = get_new_token self._set_token(session_token)
def add_test_package_product(server_data, test_folder, check_env=None, protocol='http', user_permissions=DEFAULT_USER_PERMISSIONS): """ Add a product for a test suite to the server provided by server_data. Server must be running before called. server_data must contain three keys: viewer_{host, port, product}. """ if not check_env: check_env = env.test_env(test_folder) codechecker_cfg = {'check_env': check_env} codechecker_cfg.update(server_data) # Clean the previous session if any exists. logout(codechecker_cfg, test_folder, protocol) url = create_product_url(protocol, server_data['viewer_host'], str(server_data['viewer_port']), '') add_command = [ 'CodeChecker', 'cmd', 'products', 'add', server_data['viewer_product'], '--url', url, '--name', os.path.basename(test_folder), '--description', "Automatically created product for test.", '--verbose', 'debug' ] # If tests are running on postgres, we need to create a database. pg_config = env.get_postgresql_cfg() if pg_config: env.add_database(server_data['viewer_product'], check_env) add_command.append('--postgresql') pg_config['dbname'] = server_data['viewer_product'] if os.environ.get('PGPASSWORD'): pg_config['dbpassword'] = os.environ['PGPASSWORD'] add_command += _pg_db_config_to_cmdline_params(pg_config) else: # SQLite databases are put under the workspace of the appropriate test. add_command += ['--sqlite', os.path.join(test_folder, 'data.sqlite')] print(' '.join(add_command)) # Authenticate as SUPERUSER to be able to create the product. login(codechecker_cfg, test_folder, "root", "root", protocol) # The schema creation is a synchronous call. returncode = subprocess.call(add_command, env=check_env, encoding="utf-8", errors="ignore") pr_client = env.setup_product_client(test_folder, product=server_data['viewer_product'], host=server_data['viewer_host'], port=server_data['viewer_port']) product_id = pr_client.getCurrentProduct().id # Setup an authentication client for creating sessions. auth_client = env.setup_auth_client(test_folder, host=server_data['viewer_host'], port=server_data['viewer_port']) extra_params = '{"productID":' + str(product_id) + '}' # Give permissions for the users. for user, permission in user_permissions: ret = auth_client.addPermission(permission, user, False, extra_params) if not ret: raise Exception("Failed to add permission to " + user) logout(codechecker_cfg, test_folder, protocol) # After login as SUPERUSER, continue running the test as a normal user. # login() saves the relevant administrative file login(codechecker_cfg, test_folder, "cc", "test", protocol) if returncode: raise Exception("Failed to add the product to the test server!")