def remote_add_endpoints_access(self, ss_api_config, security_server_conf, client_conf, service_description_conf): try: client_controller = ClientController() clients_api = ClientsApi(ApiClient(ss_api_config)) client = client_controller.find_client(clients_api, security_server_conf, client_conf) if client: service_clients_candidates = client_controller.get_clients_service_client_candidates( clients_api, client.id, []) try: service_controller = ServiceController() clients_api = ClientsApi(ApiClient(ss_api_config)) service_description = service_controller.get_client_service_description( clients_api, client, service_description_conf) if service_description.type != ServiceType().WSDL: self.remote_add_endpoint_access( ss_api_config, service_description, service_description_conf, service_clients_candidates) except ApiException as find_err: BaseController.log_api_error( ClientController. CLIENTS_API_GET_CLIENT_SERVICE_DESCRIPTION, find_err) except ApiException as find_err: BaseController.log_api_error( ClientController.CLIENTS_API_FIND_CLIENTS, find_err)
def step_enable_service_description(self, client_id): service_controller = ServiceController() for security_server in self.config["security_server"]: configuration = service_controller.create_api_config(security_server, self.config) for client in security_server["clients"]: if 'service_descriptions' in client: for service_description in client["service_descriptions"]: service_controller.remote_enable_service_description(configuration, security_server, client, service_description) description = get_service_description(self.config, client_id) assert description["disabled"] is False
def step_add_service_access(self, client_id): service_controller = ServiceController() for security_server in self.config["security_server"]: configuration = service_controller.create_api_config(security_server, self.config) for client in security_server["clients"]: if 'service_descriptions' in client: for service_description in client["service_descriptions"]: service_controller.remote_add_access_rights(configuration, security_server, client, service_description) description = get_service_description(self.config, client_id) service_clients = get_service_clients(self.config, description["services"][0]["id"]) assert len(service_clients) == 1
def step_update_service_parameters(self, client_id): service_controller = ServiceController() description = get_service_description(self.config, client_id) assert description["services"][0]["timeout"] == 60 assert description["services"][0]["url"] == 'http://petstore.swagger.io/v1' for security_server in self.config["security_server"]: configuration = service_controller.create_api_config(security_server, self.config) for client in security_server["clients"]: if "service_descriptions" in client: for service_description in client["service_descriptions"]: service_controller.remote_update_service_parameters(configuration, security_server, client, service_description) description = get_service_description(self.config, client_id) assert description["services"][0]["timeout"] == 120 assert description["services"][0]["url"] == 'http://petstore.xxx'
def remote_add_service_endpoints(self, ss_api_config, security_server_conf, client_conf, service_description_conf, endpoint_conf): try: clients_api = ClientsApi(ApiClient(ss_api_config)) client_controller = ClientController() client = client_controller.find_client(clients_api, security_server_conf, client_conf) if client: try: service_description = ServiceController( ).get_client_service_description(clients_api, client, service_description_conf) if service_description: if service_description.type == ServiceType().WSDL: BaseController.log_info( "Wrong service description, endpoints for WSDL services are not" " allowed, skipped endpoint creation " + EndpointController.FOR_SERVICE + "'" + service_description.url + "'") else: self.remote_add_endpoint(ss_api_config, service_description, service_description_conf, endpoint_conf) except ApiException as find_err: BaseController.log_api_error( ClientController. CLIENTS_API_GET_CLIENT_SERVICE_DESCRIPTION, find_err) except ApiException as find_err: BaseController.log_api_error( ClientController.CLIENTS_API_FIND_CLIENTS, find_err)
def test_service_description_add_client_not_found(self): class ClientNotFound: status = 404 data = '{"status":404,"error":{"code":"service_description_client_not_found"}}' reason = None def getheaders(self): return None with XRDSSTTest() as app: with mock.patch( 'xrdsst.api.clients_api.ClientsApi.find_clients', side_effect=ApiException(http_resp=ClientNotFound())): service_controller = ServiceController() service_controller.app = app service_controller.load_config = (lambda: self.ss_config) service_controller.get_server_status = ( lambda x, y: StatusTestData. server_status_essentials_complete) service_controller.add_description() out, err = self.capsys.readouterr() assert err.count("service_description_client_not_found") > 0 with self.capsys.disabled(): sys.stdout.write(out) sys.stderr.write(err)
def test_service_description_add(self): with XRDSSTTest() as app: with mock.patch('xrdsst.api.clients_api.ClientsApi.find_clients', return_value=[ Client(id='DEV:GOV:9876:SUB1', instance_id='DEV', member_class='GOV', member_code='9876', subsystem_code='SUB1', connection_type=ConnectionType.HTTP, status=ClientStatus.REGISTERED, owner=True, has_valid_local_sign_cert=True) ]): with mock.patch( 'xrdsst.api.clients_api.ClientsApi.add_client_service_description', return_value=ServiceTestData.add_description_response): service_controller = ServiceController() service_controller.app = app service_controller.load_config = (lambda: self.ss_config) service_controller.get_server_status = ( lambda x, y: StatusTestData. server_status_essentials_complete) service_controller.add_description() out, err = self.capsys.readouterr() assert out.count("Added service description with type") > 0 with self.capsys.disabled(): sys.stdout.write(out) sys.stderr.write(err)
def test_service_add_access_already_added(self): class AlreadyAddedResponse: status = 409 data = '{"status":409,"error":{"code":"duplicate_accessright"}}' reason = None def getheaders(self): return None with XRDSSTTest() as app: with mock.patch('xrdsst.api.clients_api.ClientsApi.find_clients', return_value=[ Client(id='DEV:GOV:9876:SUB1', instance_id='DEV', member_name='ACME', member_class='GOV', member_code='9876', subsystem_code='SUB1', connection_type=ConnectionType.HTTP, status=ClientStatus.REGISTERED, owner=True, has_valid_local_sign_cert=True) ]): with mock.patch( 'xrdsst.api.clients_api.ClientsApi.get_client_service_descriptions', return_value=[ ServiceTestData.add_description_response ]): with mock.patch( 'xrdsst.api.clients_api.ClientsApi.find_service_client_candidates', return_value=[ ServiceClient( id='DEV:security-server-owners', name='Security server owners', local_group_code=None, service_client_type=ServiceClientType. GLOBALGROUP, rights_given_at=datetime.now().isoformat()) ]): with mock.patch( 'xrdsst.api.services_api.ServicesApi.add_service_service_clients', side_effect=ApiException( http_resp=AlreadyAddedResponse())): service_controller = ServiceController() service_controller.app = app service_controller.load_config = ( lambda: self.ss_config) service_controller.get_server_status = ( lambda x, y: StatusTestData. server_status_essentials_complete) service_controller.add_access() out, err = self.capsys.readouterr() assert out.count("already added") > 0 with self.capsys.disabled(): sys.stdout.write(out) sys.stderr.write(err)
def step_enable_service_description(self, client_id): with XRDSSTTest() as app: service_controller = ServiceController() service_controller.app = app service_controller.load_config = (lambda: self.config) service_controller.enable_description() service_description = get_service_description( self.config, client_id) assert service_description["disabled"] is False
def step_add_service_access(self, client_id): with XRDSSTTest() as app: service_controller = ServiceController() service_controller.app = app service_controller.load_config = (lambda: self.config) service_controller.add_access() description = get_service_description(self.config, client_id) service_clients = get_service_clients( self.config, description["services"][0]["id"]) assert len(service_clients) == 1
def test_service_update_parameters(self): with XRDSSTTest() as app: with mock.patch('xrdsst.api.clients_api.ClientsApi.find_clients', return_value=[ Client(id='DEV:GOV:9876:SUB1', instance_id='DEV', member_name='ACME', member_class='GOV', member_code='9876', subsystem_code='SUB1', connection_type=ConnectionType.HTTP, status=ClientStatus.REGISTERED, owner=True, has_valid_local_sign_cert=True) ]): with mock.patch( 'xrdsst.api.clients_api.ClientsApi.get_client_service_descriptions', return_value=[ ServiceTestData.add_description_response ]): with mock.patch( 'xrdsst.api.services_api.ServicesApi.update_service', return_value=Service( id='DEV:GOV:9876:SUB1:Petstore', full_service_code='DEV:GOV:9876:SUB1:Petstore', service_code='Petstore', timeout=120, title='title', ssl_auth=False, subjects_count=0, url='url', endpoints=[])): service_controller = ServiceController() service_controller.app = app service_controller.load_config = ( lambda: self.ss_config) service_controller.get_server_status = ( lambda x, y: StatusTestData. server_status_essentials_complete) service_controller.update_parameters() out, err = self.capsys.readouterr() assert out.count("Updated service parameters") > 0 with self.capsys.disabled(): sys.stdout.write(out) sys.stderr.write(err)
def step_update_service_parameters(self, client_id): with XRDSSTTest() as app: service_controller = ServiceController() description = get_service_description(self.config, client_id) assert description["services"][0]["timeout"] == 60 assert description["services"][0][ "url"] == 'http://petstore.swagger.io/v1' service_controller.app = app service_controller.load_config = (lambda: self.config) service_controller.update_parameters() description = get_service_description(self.config, client_id) assert description["services"][0]["timeout"] == 120 assert description["services"][0]["url"] == 'http://petstore.xxx'
def test_service_description_enable_already_enabled(self): class AlreadyEnabledResponse: status = 409 data = '{"status":409,"error":{"code":"service_description_already_enabled"}}' reason = None def getheaders(self): return None with XRDSSTTest() as app: with mock.patch('xrdsst.api.clients_api.ClientsApi.find_clients', return_value=[ Client(id='DEV:GOV:9876:SUB1', instance_id='DEV', member_class='GOV', member_code='9876', subsystem_code='SUB1', connection_type=ConnectionType.HTTP, status=ClientStatus.REGISTERED, owner=True, has_valid_local_sign_cert=True) ]): with mock.patch( 'xrdsst.api.clients_api.ClientsApi.get_client_service_descriptions', return_value=[ ServiceTestData.add_description_response ]): with mock.patch( 'xrdsst.api.service_descriptions_api.ServiceDescriptionsApi.enable_service_description', side_effect=ApiException( http_resp=AlreadyEnabledResponse())): service_controller = ServiceController() service_controller.app = app service_controller.load_config = ( lambda: self.ss_config) service_controller.get_server_status = ( lambda x, y: StatusTestData. server_status_essentials_complete) service_controller.enable_description() out, err = self.capsys.readouterr() assert out.count("already enabled") > 0 with self.capsys.disabled(): sys.stdout.write(out) sys.stderr.write(err)
def test_service_apply(self): with XRDSSTTest() as app: with mock.patch('xrdsst.api.clients_api.ClientsApi.find_clients', return_value=[ Client(id='DEV:GOV:9876:SUB1', instance_id='DEV', member_class='GOV', member_code='9876', subsystem_code='SUB1', connection_type=ConnectionType.HTTP, status=ClientStatus.REGISTERED, owner=True, has_valid_local_sign_cert=True) ]): with mock.patch( 'xrdsst.api.clients_api.ClientsApi.add_client_service_description', return_value=ServiceTestData.add_description_response): with mock.patch( 'xrdsst.api.clients_api.ClientsApi.get_client_service_descriptions', return_value=[ ServiceTestData.add_description_response ]): with mock.patch( 'xrdsst.api.service_descriptions_api.ServiceDescriptionsApi.enable_service_description', return_value=None): with mock.patch( 'xrdsst.api.clients_api.ClientsApi.find_service_client_candidates', return_value=[ ServiceClient( id='DEV:security-server-owners', name='Security server owners', local_group_code=None, service_client_type= ServiceClientType.GLOBALGROUP, rights_given_at=datetime.now( ).isoformat()) ]): with mock.patch( 'xrdsst.api.services_api.ServicesApi.add_service_service_clients', return_value=[ ServiceClient( id='DEV:security-server-owners', name='Security server owners', local_group_code=None, service_client_type= ServiceClientType.GLOBALGROUP, rights_given_at=datetime.now( ).isoformat()) ]): with mock.patch( 'xrdsst.api.services_api.ServicesApi.update_service', return_value=Service( id='DEV:GOV:9876:SUB1:Petstore', full_service_code= 'DEV:GOV:9876:SUB1:Petstore', service_code='Petstore', timeout=120, title='title', ssl_auth=False, subjects_count=0, url='url', endpoints=[])): service_controller = ServiceController( ) service_controller.app = app service_controller.load_config = ( lambda: self.ss_config) service_controller.get_server_status = ( lambda x, y: StatusTestData. server_status_essentials_complete) service_controller.apply() out, err = self.capsys.readouterr() assert out.count( "Added service description with type" ) > 0 assert out.count( "enabled successfully") > 0 assert out.count( "Added access rights") > 0 assert out.count( "Updated service parameters") > 0 with self.capsys.disabled(): sys.stdout.write(out) sys.stderr.write(err)