summaryrefslogtreecommitdiffstats
path: root/vnftest/onap/steps
diff options
context:
space:
mode:
Diffstat (limited to 'vnftest/onap/steps')
-rw-r--r--vnftest/onap/steps/__init__.py0
-rw-r--r--vnftest/onap/steps/base.py89
-rw-r--r--vnftest/onap/steps/dummy/__init__.py0
-rw-r--r--vnftest/onap/steps/dummy/dummy.py42
-rw-r--r--vnftest/onap/steps/onap_api_call.py145
-rw-r--r--vnftest/onap/steps/onboard/__init__.py0
-rw-r--r--vnftest/onap/steps/onboard/create_vlm.yaml28
7 files changed, 304 insertions, 0 deletions
diff --git a/vnftest/onap/steps/__init__.py b/vnftest/onap/steps/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/vnftest/onap/steps/__init__.py
diff --git a/vnftest/onap/steps/base.py b/vnftest/onap/steps/base.py
new file mode 100644
index 0000000..d5c606a
--- /dev/null
+++ b/vnftest/onap/steps/base.py
@@ -0,0 +1,89 @@
+##############################################################################
+# Copyright 2018 EuropeanSoftwareMarketingLtd.
+# ===================================================================
+# Licensed under the ApacheLicense, Version2.0 (the"License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# software distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and limitations under
+# the License
+##############################################################################
+# vnftest comment: this is a modified copy of
+# rally/rally/benchmark/steps/base.py
+
+""" Step base class
+"""
+
+from __future__ import absolute_import
+import vnftest.common.utils as utils
+
+
+class Step(object):
+
+ def setup(self):
+ """ default impl for step setup """
+ pass
+
+ def run(self, args):
+ """ catcher for not implemented run methods in subclasses """
+ raise RuntimeError("run method not implemented")
+
+ def teardown(self):
+ """ default impl for step teardown """
+ pass
+
+ @staticmethod
+ def get_types():
+ """return a list of known runner type (class) names"""
+ steps = []
+ for step in utils.itersubclasses(Step):
+ steps.append(step)
+ return steps
+
+ @staticmethod
+ def get_cls(step_type):
+ """return class of specified type"""
+ for step in utils.itersubclasses(Step):
+ if step_type == step.__step_type__:
+ return step
+
+ raise RuntimeError("No such step type %s" % step_type)
+
+ @staticmethod
+ def get(step_type):
+ """Returns instance of a step runner for execution type.
+ """
+ for step in utils.itersubclasses(Step):
+ if step_type == step.__step_type__:
+ return step.__module__ + "." + step.__name__
+
+ raise RuntimeError("No such step type %s" % step_type)
+
+ @classmethod
+ def get_step_type(cls):
+ """Return a string with the step type, if defined"""
+ return str(getattr(cls, '__step_type__', None))
+
+ @classmethod
+ def get_description(cls):
+ """Return a single line string with the class description
+
+ This function will retrieve the class docstring and return the first
+ line, or 'None' if it's empty.
+ """
+ return cls.__doc__.splitlines()[0] if cls.__doc__ else str(None)
+
+ def _push_to_outputs(self, keys, values):
+ return dict(zip(keys, values))
+
+ def _change_obj_to_dict(self, obj):
+ dic = {}
+ for k, v in vars(obj).items():
+ try:
+ vars(v)
+ except TypeError:
+ dic[k] = v
+ return dic
diff --git a/vnftest/onap/steps/dummy/__init__.py b/vnftest/onap/steps/dummy/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/vnftest/onap/steps/dummy/__init__.py
diff --git a/vnftest/onap/steps/dummy/dummy.py b/vnftest/onap/steps/dummy/dummy.py
new file mode 100644
index 0000000..27e9a32
--- /dev/null
+++ b/vnftest/onap/steps/dummy/dummy.py
@@ -0,0 +1,42 @@
+##############################################################################
+# Copyright 2018 EuropeanSoftwareMarketingLtd.
+# ===================================================================
+# Licensed under the ApacheLicense, Version2.0 (the"License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# software distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and limitations under
+# the License
+##############################################################################
+from __future__ import absolute_import
+import logging
+
+from vnftest.onap.steps import base
+
+LOG = logging.getLogger(__name__)
+
+
+class Dummy(base.Step):
+ """Execute Dummy echo
+ """
+ __step_type__ = "Dummy"
+
+ def __init__(self, step_cfg, context_cfg):
+ self.step_cfg = step_cfg
+ self.context_cfg = context_cfg
+ self.setup_done = False
+
+ def setup(self):
+ """step setup"""
+ self.setup_done = True
+
+ def run(self, result):
+ """execute the benchmark"""
+ if not self.setup_done:
+ self.setup()
+
+ result["hello"] = "vnftest"
+ LOG.info("Dummy echo hello vnftest!")
diff --git a/vnftest/onap/steps/onap_api_call.py b/vnftest/onap/steps/onap_api_call.py
new file mode 100644
index 0000000..ecb2ce3
--- /dev/null
+++ b/vnftest/onap/steps/onap_api_call.py
@@ -0,0 +1,145 @@
+##############################################################################
+# Copyright 2018 EuropeanSoftwareMarketingLtd.
+# ===================================================================
+# Licensed under the ApacheLicense, Version2.0 (the"License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# software distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and limitations under
+# the License
+##############################################################################
+from __future__ import absolute_import
+
+import logging
+import time
+import os
+import yaml
+import copy
+from vnftest.onap.steps import base
+from vnftest.common import rest_client
+from vnftest.common import constants as consts
+
+LOG = logging.getLogger(__name__)
+
+
+class OnapApiCall(base.Step):
+
+ __step_type__ = "OnapApiCall"
+
+ def __init__(self, step_cfg, context_cfg):
+ self.step_cfg = step_cfg
+ self.context_cfg = context_cfg
+ self.input = None
+ self.output = None
+ self.rest_def_file = None
+ self.setup_done = False
+ self.curr_path = os.path.dirname(os.path.abspath(__file__))
+
+ def setup(self):
+ options = self.step_cfg['options']
+ self.rest_def_file = options.get("file")
+ self.input = options.get("input")
+ self.output = options.get("output")
+ self.setup_done = True
+
+ def run(self, args):
+ if not self.setup_done:
+ self.setup()
+ params = copy.deepcopy(consts.component_constants)
+ for input_parameter in self.input:
+ param_name = input_parameter['parameter_name']
+ param_value = input_parameter['value']
+ params[param_name] = param_value
+ result = self.execute_operation(params)
+ result_body = result['body']
+ for output_parameter in self.output:
+ param_name = output_parameter['parameter_name']
+ param_path = output_parameter['path']
+ path_list = param_path.split("|")
+ param_value = result_body
+ for path_element in path_list:
+ param_value = param_value[path_element]
+ self.context_cfg[param_name] = param_value
+
+ def execute_operation(self, params, attempt=0):
+ try:
+ return self.execute_operation_impl(params)
+ except Exception as e:
+ LOG.info(str(e))
+ if attempt < 2:
+ time.sleep(15)
+ LOG.info("############# retry operation ##########")
+ attempt = attempt + 1
+ return self.execute_operation(params, attempt)
+ else:
+ raise e
+
+ def execute_operation_impl(self, params):
+ input_yaml = self.rest_def_file
+ LOG.info("########## processing " + input_yaml + "##########")
+ yaml_path = os.path.join(self.curr_path, input_yaml)
+ with open(yaml_path) as info:
+ operation = yaml.load(info)
+ operation = self.format(operation, params)
+ url = operation['url']
+ headers = operation['headers']
+ body = {}
+ if 'body' in operation:
+ body = operation['body']
+ LOG.info(url)
+ LOG.info(headers)
+ LOG.info(body)
+ if 'file' in operation:
+ file_path = operation['file']
+ LOG.info(file_path)
+ files = {'upload': open(file_path)}
+ result = rest_client.upload_file(url, headers, files, LOG)
+ else:
+ result = rest_client.call(url,
+ operation['method'],
+ headers,
+ body,
+ LOG)
+ if result['return_code'] >= 300:
+ raise RuntimeError(
+ "Operation failed. return_code:{}, message:{}".format(result['return_code'], result['body']))
+ LOG.info("Results: " + str(result))
+ return result
+
+ def format(self, d, params):
+ ret = None
+ if isinstance(d, dict):
+ ret = {}
+ for k, v in d.iteritems():
+ if isinstance(v, basestring):
+ v = self.format_string(v, params)
+ else:
+ v = self.format(v, params)
+ ret[k] = v
+ if isinstance(d, list):
+ ret = []
+ for v in d:
+ if isinstance(v, basestring):
+ v = self.format_string(v, params)
+ else:
+ v = self.format(v, params)
+ ret.append(v)
+ if isinstance(d, basestring):
+ ret = self.format_string(d, params)
+ return ret
+
+ def format_string(self, st, params):
+ try:
+ return st.format(**params)
+ except Exception as e:
+ s = str(e)
+ s = s.replace("'", "")
+ LOG.info(s)
+ params[s] = ""
+ LOG.info("param" + params[s])
+ return st.format(**params)
+
+
diff --git a/vnftest/onap/steps/onboard/__init__.py b/vnftest/onap/steps/onboard/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/vnftest/onap/steps/onboard/__init__.py
diff --git a/vnftest/onap/steps/onboard/create_vlm.yaml b/vnftest/onap/steps/onboard/create_vlm.yaml
new file mode 100644
index 0000000..dce110a
--- /dev/null
+++ b/vnftest/onap/steps/onboard/create_vlm.yaml
@@ -0,0 +1,28 @@
+##############################################################################
+# Copyright 2018 EuropeanSoftwareMarketingLtd.
+# ===================================================================
+# Licensed under the ApacheLicense, Version2.0 (the"License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# software distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and limitations under
+# the License
+##############################################################################
+
+---
+method: "POST"
+url: "http://{sdc_ip}:{sdc_port}/onboarding-api/v1.0/vendor-license-models"
+headers: {
+ "Content-Type": "application/json",
+ "Authorization": "Basic SW5mcmFQb3J0YWxDbGllbnQ6cGFzc3dvcmQxJA==",
+ "USER_ID": "{sdc_designer_user}",
+ "Accept": "application/json"
+ }
+body: {
+ "vendorName": "{vendor_name}",
+ "description": "vlm via dovetail",
+ "iconRef": "icon"
+ } \ No newline at end of file