text: ##############################################################################
  # Copyright (c) 2015 Huawei Technologies Co.,Ltd and others.
  #
  # All rights reserved. This program and the accompanying materials
  # are made available under the terms of the Apache License, Version 2.0
  # which accompanies this distribution, and is available at
  # http://www.apache.org/licenses/LICENSE-2.0
  ##############################################################################
  
  """ Handler for yardstick command 'testcase' """
  from yardstick.cmd import print_hbar
  from yardstick.common.task_template import TaskTemplate
  from yardstick.common.utils import cliargs
  import os
  import yaml
  import sys
  
  
  class TestcaseCommands(object):
      '''Testcase commands.
  
         Set of commands to discover and display test cases.
      '''
      def __init__(self):
          self.test_case_path = 'tests/opnfv/test_cases/'
          self.testcase_list = []
  
      def do_list(self, args):
          '''List existing test cases'''
  
          try:
              testcase_files = os.listdir(self.test_case_path)
          except Exception as e:
              print(("Failed to list dir:\n%(path)s\n%(err)s\n")
                    % {"path": self.test_case_path, "err": e})
              raise e
          testcase_files.sort()
  
          for testcase_file in testcase_files:
              record = self._get_record(testcase_file)
              self.testcase_list.append(record)
  
          self._format_print(self.testcase_list)
          return True
  
      @cliargs("casename", type=str, help="test case name", nargs=1)
      def do_show(self, args):
          '''Show details of a specific test case'''
          testcase_name = args.casename[0]
          testcase_path = self.test_case_path + testcase_name + ".yaml"
          try:
              with open(testcase_path) as f:
                  try:
                      testcase_info = f.read()
                      print testcase_info
  
                  except Exception as e:
                      print(("Failed to load test cases:"
                             "\n%(testcase_file)s\n%(err)s\n")
                            % {"testcase_file": testcase_path, "err": e})
                      raise e
          except IOError as ioerror:
              sys.exit(ioerror)
          return True
  
      def _get_record(self, testcase_file):
  
          try:
              with open(self.test_case_path + testcase_file) as f:
                  try:
                      testcase_info = f.read()
                  except Exception as e:
                      print(("Failed to load test cases:"
                             "\n%(testcase_file)s\n%(err)s\n")
                            % {"testcase_file": testcase_file, "err": e})
                      raise e
                  description, installer, deploy_scenarios = \
                      self._parse_testcase(testcase_info)
  
                  record = {'Name': testcase_file.split(".")[0],
                            'Description': description,
                            'installer': installer,
                            'deploy_scenarios': deploy_scenarios}
                  return record
          except IOError as ioerror:
              sys.exit(ioerror)
  
      def _parse_testcase(self, testcase_info):
  
          kw = {}
          rendered_testcase = TaskTemplate.render(testcase_info, **kw)
          testcase_cfg = yaml.load(rendered_testcase)
          test_precondition = testcase_cfg.get('precondition', None)
          installer_type = 'all'
          deploy_scenarios = 'all'
          if test_precondition is not None:
              installer_type = test_precondition.get('installer_type', 'all')
              deploy_scenarios = test_precondition.get('deploy_scenarios', 'all')
  
          description = testcase_info.split("\n")[2][1:].strip()
          return description, installer_type, deploy_scenarios
  
      def _format_print(self, testcase_list):
          '''format output'''
  
          print_hbar(88)
          print("| %-21s | %-60s" % ("Testcase Name", "Description"))
          print_hbar(88)
          for testcase_record in testcase_list:
              print "| %-16s | %-60s" % (testcase_record['Name'],
                                         testcase_record['Description'])
          print_hbar(88)
  