class CloudConfigSOKeywords(object):
    """SO is an ONAP testing library for Robot Framework that provides
    functionality for interacting with the service orchestrator. """

    def __init__(self):
        super(CloudConfigSOKeywords, self).__init__()
        self.builtin = BuiltIn()
        self.reqs = RequestsHelper()
        self.templating = TemplatingKeywords()

    @keyword
    def get_cloud_configuration(self, endpoint, data_path, site_name, auth=None):
        """Gets cloud configuration in SO"""
        return self.reqs.get_request(
            alias="so",
            endpoint=endpoint,
            data_path=data_path + "/" + site_name,
            auth=auth)

    @keyword
    def create_cloud_configuration(self, endpoint, data_path, templates_folder,
                                   template, arguments, auth=None):
        """Creates a cloud configuration in SO
        so it knows how to talk to an openstack cloud"""
        self.templating.create_environment("so", templates_folder)
        data = self.templating.apply_template("so", template, arguments)
        resp = self.reqs.post_request(
            alias="so",
            endpoint=endpoint,
            data_path=data_path,
            data=data,
            auth=auth)
        self.builtin.should_match_regexp(str(resp.status_code), "^(201|200)$")

    @keyword
    def upsert_cloud_configuration(self, endpoint, data_path, templates_folder,
                                   template, arguments, auth=None):
        """Creates a cloud configuration in SO, or if it exists updates it"""
        get_resp = self.get_cloud_configuration(
            endpoint, data_path, arguments['site_name'], auth=auth)
        self.templating.create_environment("so", templates_folder)
        data = self.templating.apply_template("so", template, arguments)
        if get_resp.status_code == 404:
            resp = self.reqs.post_request(
                alias="so",
                endpoint=endpoint,
                data_path=data_path,
                data=data,
                auth=auth)
        else:
            resp = self.reqs.put_request(
                alias="so",
                endpoint=endpoint,
                data_path=data_path + "/" + arguments['site_name'],
                data=data,
                auth=auth)
        self.builtin.should_match_regexp(str(resp.status_code), "^(201|200)$")
Beispiel #2
0
class RequestSOKeywords(object):
    """SO is an ONAP testing library for Robot Framework that provides functionality for interacting with the serivce
    orchestrator. """
    def __init__(self):
        super(RequestSOKeywords, self).__init__()
        self.builtin = BuiltIn()
        self.reqs = RequestsHelper()

    @keyword
    def run_polling_get_request(self,
                                endpoint,
                                data_path,
                                complete_states=None,
                                fail_states=None,
                                tries=20,
                                interval=15,
                                auth=None):
        """Runs an SO get request until a certain state is received."""
        if fail_states is None:
            fail_states = ["FAILED"]
        if complete_states is None:
            complete_states = ["COMPLETE"]
        # do this until it is done
        for i in range(tries):
            resp = self.reqs.get_request(alias="so",
                                         endpoint=endpoint,
                                         data_path=data_path,
                                         auth=auth)
            logger.info(
                resp.json()['request']['requestStatus']['requestState'])
            if resp.json(
            )['request']['requestStatus']['requestState'] in fail_states:
                self.builtin.fail("Received failure response from so " +
                                  resp.text)
            if resp.json(
            )['request']['requestStatus']['requestState'] in complete_states:
                logger.info("Received complete response from so " + resp.text)
                return True, resp
            else:
                self.builtin.sleep(
                    interval, "Response from SO is not in requested status")
        return False, None

    @keyword
    def run_create_request(self, endpoint, data_path, data, auth=None):
        """Runs an SO create request and returns the request id and instance id."""
        response = self.reqs.post_request(alias="so",
                                          endpoint=endpoint,
                                          data_path=data_path,
                                          data=data,
                                          auth=auth)
        logger.info("Creation request submitted to SO, got response")

        req_id = response.get('requestReferences', {}).get('requestId', '')
        instance_id = response.get('requestReferences',
                                   {}).get('instanceId', '')

        return req_id, instance_id
class SNIROKeywords(object):
    """OOF is an ONAP testing library for Robot Framework that provides functionality for interacting with the
    optimiztion framework. """

    def __init__(self):
        super(SNIROKeywords, self).__init__()
        self.reqs = RequestsHelper()
        self.templating = TemplatingKeywords()
        self.base64 = Base64Keywords()
        self.builtin = BuiltIn()

    @keyword
    def run_sniro_get_request(self, endpoint, data_path, accept="application/json", auth=None):
        """Runs OOF-SNIRO Get request"""
        resp = self.reqs.get_request(alias="oof-sniro", endpoint=endpoint, data_path=data_path, accept=accept,
                                     auth=auth)
        self.builtin.should_be_equal_as_strings(resp.status_code, "200")
        return resp

    @keyword
    def reset_sniro(self, endpoint):
        logger.debug('Clearing SNIRO data')
        resp = self.reqs.post_request(alias="oof-sniro", endpoint=endpoint, data_path='/reset')
        self.builtin.should_be_equal_as_strings(resp.status_code, "200", 'Clearing SNIRO date failed.')

    @keyword
    def preload_sniro(self, endpoint, template_directory, template_sniro_data, template_sniro_request,
                      tunnelxconn_ar_name, vgw_name, vbrg_ar_name, vgmux_svc_instance_uuid, vbrg_svc_instance_uuid):
        self.templating.create_environment("sniro", template_directory)
        logger.info('Preloading SNIRO for homing service')
        replace_dict = {'tunnelxconn_ar_name': tunnelxconn_ar_name,
                        'vgw_name': vgw_name,
                        'brg_ar_name': vbrg_ar_name,
                        'vgmux_svc_instance_uuid': vgmux_svc_instance_uuid,
                        'vbrg_svc_instance_uuid': vbrg_svc_instance_uuid
                        }
        sniro_data = self.templating.apply_template("sniro", template_sniro_data, replace_dict)
        base64_sniro_data = self.base64.base64_encode(sniro_data)
        replace_dict = {'base64_sniro_data': base64_sniro_data}
        sniro_request = self.templating.apply_template("sniro", template_sniro_request, replace_dict)
        resp = self.reqs.post_request(alias="oof-sniro", endpoint=endpoint, data_path='/', data=sniro_request)
        self.builtin.should_be_equal_as_strings(resp.status_code, "200", 'SNIRO preloading failed.')
        return True
Beispiel #4
0
class BaseSDNCKeywords(object):
    """SDNC is an ONAP testing library for Robot Framework that provides functionality for interacting with the network
    controller. """
    def __init__(self):
        super(BaseSDNCKeywords, self).__init__()
        self.reqs = RequestsHelper()
        self.builtin = BuiltIn()

    @keyword
    def run_get_request(self,
                        endpoint,
                        data_path,
                        accept="application/json",
                        auth=None):
        """Runs an SDNC get request"""
        resp = self.reqs.get_request(alias="sdnc",
                                     endpoint=endpoint,
                                     data_path=data_path,
                                     accept=accept,
                                     auth=auth)
        self.builtin.should_be_equal_as_strings(resp.status_code, "200")
        return resp

    @keyword
    def run_post_request(self,
                         endpoint,
                         data_path,
                         data,
                         accept="application/json",
                         auth=None):
        """Runs an SDNC post request"""
        return self.reqs.post_request(alias="sdnc",
                                      endpoint=endpoint,
                                      data_path=data_path,
                                      data=data,
                                      accept=accept,
                                      auth=auth)

    @keyword
    def run_put_request(self,
                        endpoint,
                        data_path,
                        data,
                        accept="application/json",
                        auth=None):
        """Runs an SDNC post request"""
        return self.reqs.put_request(alias="sdnc",
                                     endpoint=endpoint,
                                     data_path=data_path,
                                     data=data,
                                     accept=accept,
                                     auth=auth)
class PreloadSDNCKeywords(object):
    """SDNC is an ONAP testing library for Robot Framework that provides functionality for interacting with the network
    controller. """
    def __init__(self):
        super(PreloadSDNCKeywords, self).__init__()
        self.reqs = RequestsHelper()
        self.templating = TemplatingKeywords()

    @keyword
    def preload_vfmodule(self, endpoint, data_path, templates_folder, template,
                         preload_dictionary):
        """Runs an SDNC request to preload certain data."""
        self.templating.create_environment("sdnc", templates_folder)
        data = self.templating.apply_template("sdnc", template,
                                              preload_dictionary)
        return self.reqs.post_request(alias="sdnc",
                                      endpoint=endpoint,
                                      data_path=data_path,
                                      data=data)
Beispiel #6
0
class BaseCLAMPKeywords(object):
    """The main interface for interacting with CLAMP. It handles low level stuff like managing the http request library
    and required fields. """
    def __init__(self):
        super(BaseCLAMPKeywords, self).__init__()
        self.reqs = RequestsHelper()

    @keyword
    def run_get_request(self,
                        endpoint,
                        data_path,
                        accept="application/json",
                        auth=None):
        """Runs an CLAMP get request"""
        return self.reqs.get_request(alias="clamp",
                                     endpoint=endpoint,
                                     data_path=data_path,
                                     accept=accept,
                                     auth=auth)

    @keyword
    def run_post_request(self,
                         endpoint,
                         data_path,
                         data,
                         accept="application/json",
                         auth=None):
        """Runs an CLAMP post request"""
        return self.reqs.post_request(alias="clamp",
                                      endpoint=endpoint,
                                      data_path=data_path,
                                      data=data,
                                      accept=accept,
                                      auth=auth)

    @keyword
    def run_put_request(self,
                        endpoint,
                        data_path,
                        data,
                        accept="application/json",
                        auth=None):
        """Runs an CLAMP post request"""
        return self.reqs.put_request(alias="clamp",
                                     endpoint=endpoint,
                                     data_path=data_path,
                                     data=data,
                                     accept=accept,
                                     auth=auth)

    @keyword
    def run_delete_request(self,
                           endpoint,
                           data_path,
                           data,
                           accept="application/json",
                           auth=None):
        """Runs an CLAMP delete request"""
        return self.reqs.delete_request(alias="clamp",
                                        endpoint=endpoint,
                                        data_path=data_path,
                                        data=data,
                                        accept=accept,
                                        auth=auth)
class BaseSDCKeywords(object):
    """The main interface for interacting with SDC. It handles low level stuff like managing the http request library
    and required fields. """
    def __init__(self):
        super(BaseSDCKeywords, self).__init__()
        self.reqs = RequestsHelper()
        self.builtin = BuiltIn()

    @keyword
    def run_get_request(self,
                        endpoint,
                        data_path,
                        user,
                        accept="application/json",
                        auth=None):
        """Runs an SDC get request"""
        return self.reqs.get_request(alias="sdc",
                                     endpoint=endpoint,
                                     data_path=data_path,
                                     sdc_user=user,
                                     accept=accept,
                                     auth=auth)

    @keyword
    def run_post_request(self,
                         endpoint,
                         data_path,
                         data,
                         user,
                         accept="application/json",
                         auth=None):
        """Runs an SDC post request"""
        return self.reqs.post_request(alias="sdc",
                                      endpoint=endpoint,
                                      data_path=data_path,
                                      data=data,
                                      sdc_user=user,
                                      accept=accept,
                                      auth=auth)

    @keyword
    def run_post_files_request(self,
                               endpoint,
                               data_path,
                               files,
                               user,
                               accept="application/json",
                               auth=None):
        """Runs an SDC post files request"""
        return self.reqs.post_request(alias="sdc",
                                      endpoint=endpoint,
                                      data_path=data_path,
                                      sdc_user=user,
                                      files=files,
                                      accept=accept,
                                      content_type="multipart/form-data",
                                      auth=auth)

    @keyword
    def run_put_request(self,
                        endpoint,
                        data_path,
                        data,
                        user,
                        accept="application/json",
                        auth=None):
        """Runs an SDC post request"""
        return self.reqs.put_request(alias="sdc",
                                     endpoint=endpoint,
                                     data_path=data_path,
                                     data=data,
                                     sdc_user=user,
                                     accept=accept,
                                     auth=auth)

    @keyword
    def run_delete_request(self,
                           endpoint,
                           data_path,
                           data,
                           user,
                           accept="application/json",
                           auth=None):
        """Runs an SDC delete request"""
        return self.reqs.delete_request(alias="sdc",
                                        endpoint=endpoint,
                                        data_path=data_path,
                                        data=data,
                                        sdc_user=user,
                                        accept=accept,
                                        auth=auth)
class BaseAAIKeywords(object):
    """The main interface for interacting with AAI. It handles low level stuff like managing the http request library
    and required fields. """
    def __init__(self):
        super(BaseAAIKeywords, self).__init__()
        self.reqs = RequestsHelper()
        self.builtin = BuiltIn()
        self.vars = VariableKeywords()
        aai_ip_addr = self.vars.get_globally_injected_parameters().get(
            'GLOBAL_INJECTED_AAI_IP_ADDR', '')
        aai_server_protocol = self.vars.get_global_parameters().get(
            'GLOBAL_AAI_SERVER_PROTOCOL', '')
        aai_server_port = self.vars.get_global_parameters().get(
            'GLOBAL_AAI_SERVER_PORT', '')
        self.aai_endpoint = str(aai_server_protocol) + '://' + str(
            aai_ip_addr) + ':' + str(aai_server_port)

    @keyword
    def run_get_request(self,
                        endpoint,
                        data_path,
                        accept="application/json",
                        auth=None,
                        client_certs=None):
        """Runs an AAI get request"""
        return self.reqs.get_request(alias="aai",
                                     endpoint=endpoint,
                                     data_path=data_path,
                                     accept=accept,
                                     auth=auth,
                                     client_certs=client_certs)

    @keyword
    def run_post_request(self,
                         endpoint,
                         data_path,
                         data,
                         accept="application/json",
                         auth=None,
                         client_certs=None):
        """Runs an AAI post request"""
        return self.reqs.post_request(alias="aai",
                                      endpoint=endpoint,
                                      data_path=data_path,
                                      data=data,
                                      accept=accept,
                                      auth=auth,
                                      client_certs=client_certs)

    @keyword
    def run_put_request(self,
                        endpoint,
                        data_path,
                        data,
                        accept="application/json",
                        auth=None,
                        client_certs=None):
        """Runs an AAI post request"""
        return self.reqs.put_request(alias="aai",
                                     endpoint=endpoint,
                                     data_path=data_path,
                                     data=data,
                                     accept=accept,
                                     auth=auth,
                                     client_certs=client_certs)

    @keyword
    def run_delete_request(self,
                           endpoint,
                           data_path,
                           resource_version,
                           accept="application/json",
                           auth=None,
                           client_certs=None):
        """Runs an AAI delete request"""
        return self.reqs.delete_request(
            alias="aai",
            endpoint=endpoint,
            accept=accept,
            auth=auth,
            client_certs=client_certs,
            data_path=data_path + '?resource-version=' + resource_version)

    @keyword
    def wait_for_node_to_exist(self,
                               search_node_type,
                               key,
                               uuid,
                               auth=None,
                               client_certs=None):
        logger.info('Waiting for AAI traversal to complete...')
        for i in range(30):
            logger.trace("running iteration " + str(i))
            time.sleep(1)
            result = self.find_node(search_node_type,
                                    key,
                                    uuid,
                                    auth=auth,
                                    client_certs=client_certs)
            if result:
                return result

        error_message = "AAI traversal didn't finish in 30 seconds. Something is wrong. Type {0}, UUID {1}".format(
            search_node_type, uuid)
        logger.error(error_message)
        self.builtin.fail(error_message)

    @keyword
    def find_node(self,
                  search_node_type,
                  key,
                  node_uuid,
                  auth=None,
                  client_certs=None):
        data_path = '/aai/v11/search/nodes-query?search-node-type={0}&filter={1}:EQUALS:{2}'.format(
            search_node_type, key, node_uuid)
        resp = self.reqs.get_request(alias="aai",
                                     endpoint=self.aai_endpoint,
                                     data_path=data_path,
                                     accept="application/json",
                                     auth=auth,
                                     client_certs=client_certs)
        response = resp.json()
        return 'result-data' in response