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)