You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
94 lines
2.9 KiB
94 lines
2.9 KiB
#!/usr/bin/python3
|
|
#
|
|
# Copyright: 2013-2015 Sipwise Development Team <support@sipwise.com>
|
|
#
|
|
# This program is free software: you can redistribute it and/or modify
|
|
# it under the terms of the GNU General Public License as published by
|
|
# the Free Software Foundation, either version 3 of the License, or
|
|
# (at your option) any later version.
|
|
#
|
|
# This package is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
#
|
|
# On Debian systems, the complete text of the GNU General
|
|
# Public License version 3 can be found in "/usr/share/common-licenses/GPL-3".
|
|
#
|
|
from yaml import load
|
|
import junitxml
|
|
import os
|
|
import sys
|
|
import unittest
|
|
import fnmatch
|
|
|
|
try:
|
|
from yaml import CLoader as Loader
|
|
except ImportError:
|
|
from yaml import Loader
|
|
|
|
|
|
class ParametrizedTestCase(unittest.TestCase):
|
|
|
|
""" TestCase classes that want to be parametrized should
|
|
inherit from this class.
|
|
http://eli.thegreenplace.net/
|
|
2011/08/02/python-unit-testing-parametrized-test-cases
|
|
"""
|
|
|
|
def __init__(self, methodName="runTest", param=None):
|
|
super(ParametrizedTestCase, self).__init__(methodName)
|
|
self.param = param
|
|
self.scenario = os.path.dirname(self.param)
|
|
|
|
def id(self):
|
|
return "%s_%s" % (
|
|
super(ParametrizedTestCase, self).id(),
|
|
self.scenario,
|
|
)
|
|
|
|
@staticmethod
|
|
def parametrize(testcase_klass, param=None):
|
|
""" Create a suite containing all tests taken from the given
|
|
subclass, passing them the parameter 'param'.
|
|
"""
|
|
testloader = unittest.TestLoader()
|
|
testnames = testloader.getTestCaseNames(testcase_klass)
|
|
suite = unittest.TestSuite()
|
|
for name in testnames:
|
|
suite.addTest(testcase_klass(name, param=param))
|
|
return suite
|
|
|
|
|
|
class TestYmlLint(ParametrizedTestCase):
|
|
def setUp(self):
|
|
self.yaml = load(open(self.param, "r"), Loader=Loader)
|
|
|
|
def testFlow(self):
|
|
self.assertTrue("flow" in self.yaml)
|
|
self.assertIsInstance(self.yaml["flow"], list)
|
|
|
|
def testSipIn(self):
|
|
self.assertTrue("sip_in" in self.yaml)
|
|
self.assertIsInstance(self.yaml["sip_in"], list)
|
|
|
|
def testSipOut(self):
|
|
self.assertTrue("sip_out" in self.yaml)
|
|
self.assertIsInstance(self.yaml["sip_out"], list)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
assert len(sys.argv) == 2
|
|
assert os.path.exists(sys.argv[1])
|
|
suite = unittest.TestSuite()
|
|
suite.addTest(
|
|
ParametrizedTestCase.parametrize(TestYmlLint, param=sys.argv[1])
|
|
)
|
|
result = junitxml.JUnitXmlResult(sys.stdout)
|
|
result.startTestRun()
|
|
suite.run(result)
|
|
result.stopTestRun()
|