summaryrefslogtreecommitdiffstats
path: root/yardstick/vTC/apexlake/experimental_framework/api.py
diff options
context:
space:
mode:
Diffstat (limited to 'yardstick/vTC/apexlake/experimental_framework/api.py')
-rw-r--r--yardstick/vTC/apexlake/experimental_framework/api.py137
1 files changed, 137 insertions, 0 deletions
diff --git a/yardstick/vTC/apexlake/experimental_framework/api.py b/yardstick/vTC/apexlake/experimental_framework/api.py
new file mode 100644
index 000000000..b9e806157
--- /dev/null
+++ b/yardstick/vTC/apexlake/experimental_framework/api.py
@@ -0,0 +1,137 @@
+# Copyright (c) 2015 Intel Research and Development Ireland Ltd.
+#
+# Licensed under the Apache License, Version 2.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
+#
+# Unless required by applicable law or agreed to in writing, 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.
+
+import experimental_framework.benchmarking_unit as b_unit
+from experimental_framework import heat_template_generation, common
+
+
+class FrameworkApi(object):
+
+ @staticmethod
+ def init():
+ """
+ Initializes the Framework
+
+ :return: None
+ """
+ common.init(api=True)
+
+ @staticmethod
+ def get_available_test_cases():
+ """
+ Returns a list of available test cases.
+ This list include eventual modules developed by the user, if any.
+ Each test case is returned as a string that represents the full name
+ of the test case and that can be used to get more information
+ calling get_test_case_features(test_case_name)
+
+ :return: list of strings
+ """
+ return b_unit.BenchmarkingUnit.get_available_test_cases()
+
+ @staticmethod
+ def get_test_case_features(test_case):
+ """
+ Returns a list of features (description, requested parameters,
+ allowed values, etc.) for a specified test case.
+
+ :param test_case: name of the test case (string)
+ The string represents the test case and can be
+ obtained calling "get_available_test_cases()"
+ method.
+
+ :return: dict() containing the features of the test case
+ """
+ if not isinstance(test_case, str):
+ raise ValueError('The provided test_case parameter has to be '
+ 'a string')
+ benchmark = b_unit.BenchmarkingUnit.get_required_benchmarks(
+ [test_case])[0]
+ return benchmark.get_features()
+
+ @staticmethod
+ def execute_framework(
+ test_cases,
+ iterations,
+ heat_template,
+ heat_template_parameters,
+ deployment_configuration,
+ openstack_credentials
+ ):
+ """
+ Executes the framework according the inputs
+
+ :param test_cases: Test cases to be ran on the workload
+ (dict() of dict())
+ Each string represents a test case and it is one
+ of the strings provided by the
+ "get_available_test_cases()" function output.
+
+ :param iterations: Number of cycles to be executed (int)
+
+ :param heat_template: (string) File name of the heat template of the
+ workload to be deployed. It contains the
+ parameters to be evaluated in the form of
+ #parameter_name. (See heat_templates/vTC.yaml as
+ example).
+
+ :param heat_template_parameters: (dict) Parameters to be provided
+ as input to the heat template.
+ See http://docs.openstack.org/developer/heat/
+ template_guide/hot_guide.html - section
+ "Template input parameters" for further info.
+
+ :param deployment_configuration: ( dict[string] = list(strings) ) )
+ Dictionary of parameters representing the
+ deployment configuration of the workload
+ The key is a string corresponding to the name of
+ the parameter, the value is a list of strings
+ representing the value to be assumed by a specific
+ param.
+ The parameters are user defined: they have to
+ correspond to the place holders (#parameter_name)
+ specified in the heat template.
+
+ :return: None
+ """
+
+ # Input Validation
+ common.InputValidation.validate_os_credentials(openstack_credentials)
+ credentials = openstack_credentials
+ msg = 'The provided heat_template does not exist'
+ template = "{}{}".format(common.get_template_dir(), heat_template)
+ common.InputValidation.validate_file_exist(template, msg)
+ msg = 'The provided iterations variable must be an integer value'
+ common.InputValidation.validate_integer(iterations, msg)
+ msg = 'The provided heat_template_parameters variable must be a ' \
+ 'dictionary'
+ common.InputValidation.validate_dictionary(heat_template_parameters,
+ msg)
+ log_msg = "Generation of all the heat templates " \
+ "required by the experiment"
+ common.LOG.info(log_msg)
+ heat_template_generation.generates_templates(heat_template,
+ deployment_configuration)
+ benchmarking_unit = \
+ b_unit.BenchmarkingUnit(
+ heat_template, credentials, heat_template_parameters,
+ iterations, test_cases)
+ try:
+ common.LOG.info("Benchmarking Unit initialization")
+ benchmarking_unit.initialize()
+ common.LOG.info("Benchmarking Unit Running")
+ benchmarking_unit.run_benchmarks()
+ finally:
+ common.LOG.info("Benchmarking Unit Finalization")
+ benchmarking_unit.finalize()