############################################################################## # 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 # yardstick/benchmark/core/testcase.py """ Handler for vnftest command 'testcase' """ from __future__ import absolute_import from __future__ import print_function import os import logging from vnftest.common.task_template import TaskTemplate from vnftest.common import constants as consts from vnftest.common.yaml_loader import yaml_load LOG = logging.getLogger(__name__) class Testcase(object): """Testcase commands. Set of commands to discover and display test cases. """ def list_all(self, args): """List existing test cases""" testcase_files = self._get_testcase_file_list() testcase_list = [self._get_record(f) for f in testcase_files] return testcase_list def _get_testcase_file_list(self): try: testcase_files = sorted(os.listdir(consts.TESTCASE_DIR)) except OSError: LOG.exception('Failed to list dir:\n%s\n', consts.TESTCASE_DIR) raise return testcase_files def _get_record(self, testcase_file): file_path = os.path.join(consts.TESTCASE_DIR, testcase_file) with open(file_path) as f: try: testcase_info = f.read() except IOError: LOG.exception('Failed to load test case:\n%s\n', testcase_file) raise description, installer, deploy_steps = self._parse_testcase( testcase_info) record = { 'Name': testcase_file.split(".")[0], 'Description': description, 'installer': installer, 'deploy_steps': deploy_steps } return record def _parse_testcase(self, testcase_info): rendered_testcase = TaskTemplate.render(testcase_info) testcase_cfg = yaml_load(rendered_testcase) test_precondition = testcase_cfg.get('precondition', {}) installer_type = test_precondition.get('installer_type', 'all') deploy_steps = test_precondition.get('deploy_steps', 'all') description = self._get_description(testcase_cfg) return description, installer_type, deploy_steps def _get_description(self, testcase_cfg): try: description_list = testcase_cfg['description'].split(';') except KeyError: return '' else: try: return description_list[1].replace(os.linesep, '').strip() except IndexError: return description_list[0].replace(os.linesep, '').strip() def show(self, args): """Show details of a specific test case""" testcase_name = args.casename[0] testcase_path = os.path.join(consts.TESTCASE_DIR, testcase_name + ".yaml") with open(testcase_path) as f: try: testcase_info = f.read() except IOError: LOG.exception('Failed to load test case:\n%s\n', testcase_path) raise print(testcase_info) return True