blob: 376b519c8f26cd4d5f37b9033c8695df2c1d0283 [file] [log] [blame]
# Copyright (c) 2018 Intel Corp. All rights reserved.
#
# 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 abc
import textwrap
import prettytable
import six
from stevedore import driver
NS = "vnfsdk.pkgtools.vnfreq"
def get_vnfreq_tester(name):
"""Get vnf requirement tester.
:param name: name of the vnf requirement tester
"""
loaded_driver = driver.DriverManager(NS,
name,
invoke_on_load=True)
return loaded_driver.driver
def check_and_print(test_reqs, reader, tosca):
err = 0
table = prettytable.PrettyTable(['Req ID', 'Status', 'Description'])
table.align = 'l'
for t in test_reqs:
testor = get_vnfreq_tester(t)
testor.check(reader, tosca)
if testor.err:
status = 'ERROR: ' + str(testor.err)
err = 1
else:
status = 'OK'
# wrap the testor description because it's too long
lines = textwrap.wrap(testor.DESC, width=40)
table.add_row([testor.ID, status, lines.pop(0)])
for line in lines:
table.add_row(['','',line])
if test_reqs:
print(table)
return err
class VnfRequirementError(ValueError):
pass
@six.add_metaclass(abc.ABCMeta)
class TesterBase(object):
"""Base class for vnf requirement tester."""
ID = None
DESC = None
def __init__(self):
self.err = None
@abc.abstractmethod
def _do_check(self, reader, tosca):
"""Check the vnf requirement meet or not.
:param reader: instance of package.csar._CSARReader
:param tosca: instance of validator.toscaparser_validator.ToscaparserValidator
return: 0 for success, otherwise failure
"""
def check(self, reader, tosca):
try:
self.err = self._do_check(reader, tosca)
except Exception as e:
self.err = e