[asterisk-commits] mnicholson: branch mnicholson/fancy-versions r2408 - /asterisk/team/mnicholso...
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Thu Sep 22 14:05:51 CDT 2011
Author: mnicholson
Date: Thu Sep 22 14:05:47 2011
New Revision: 2408
URL: http://svnview.digium.com/svn/testsuite?view=rev&rev=2408
Log:
added fine grained control over which tests will run with which versions of
asterisk down to the revision level
Modified:
asterisk/team/mnicholson/fancy-versions/lib/python/asterisk/TestConfig.py
Modified: asterisk/team/mnicholson/fancy-versions/lib/python/asterisk/TestConfig.py
URL: http://svnview.digium.com/svn/testsuite/asterisk/team/mnicholson/fancy-versions/lib/python/asterisk/TestConfig.py?view=diff&rev=2408&r1=2407&r2=2408
==============================================================================
--- asterisk/team/mnicholson/fancy-versions/lib/python/asterisk/TestConfig.py (original)
+++ asterisk/team/mnicholson/fancy-versions/lib/python/asterisk/TestConfig.py Thu Sep 22 14:05:47 2011
@@ -1,4 +1,5 @@
#!/usr/bin/env python
+# vim: et sw=4:
'''Asterisk external test suite driver.
Copyright (C) 2011, Digium, Inc.
@@ -16,6 +17,7 @@
import time
import yaml
import socket
+import unittest
sys.path.append("lib/python")
@@ -222,7 +224,7 @@
by that tests test.yaml file.
"""
- def __init__(self, test_name):
+ def __init__(self, test_name, dummy_config = None):
"""
Create a new TestConfig
@@ -241,7 +243,8 @@
self.deps = []
self.expectPass = True
- self.__parse_config()
+ self.__parse_config(dummy_config)
+
def __process_testinfo(self):
self.summary = "(none)"
@@ -284,19 +287,23 @@
print "ERROR: '%s' is not a valid value for expectedResult" %\
properties["expectedResult"]
- def __parse_config(self):
- test_config = "%s/test-config.yaml" % self.test_name
- try:
- f = open(test_config, "r")
- except IOError:
- print "Failed to open %s" % test_config
- return
- except:
- print "Unexpected error: %s" % sys.exc_info()[0]
- return
-
- self.config = yaml.load(f)
- f.close()
+ def __parse_config(self, dummy_config = None):
+
+ if dummy_config:
+ self.config = yaml.load(dummy_config)
+ else:
+ test_config = "%s/test-config.yaml" % self.test_name
+ try:
+ f = open(test_config, "r")
+ except IOError:
+ print "Failed to open %s" % test_config
+ return
+ except:
+ print "Unexpected error: %s" % sys.exc_info()[0]
+ return
+
+ self.config = yaml.load(f)
+ f.close()
if not self.config:
print "ERROR: Failed to load configuration for test '%s'" % \
@@ -326,6 +333,80 @@
conditions.append(c)
return conditions
+
+ def __version_is_compatible(self, ast_version):
+ """
+ Check whether or not this test should run against this version of asterisk
+
+ Arguments:
+ ast_version -- The AsteriskVersion object containing the version of Asterisk that
+ will be executed
+ """
+
+ def branch_is_compatible(ast_version, branch):
+ return ast_version.has_major_version(str(branch))
+
+ def release_is_compatible(ast_version, release):
+ return ast_version == AsteriskVersion(release)
+
+ def svn_is_compatible(ast_version, svn):
+ def rev(r):
+ # prepend "branch-" to certain version numbers
+ if isinstance(branch, int) \
+ or isinstance(branch, float) \
+ or (isinstance(branch, str) \
+ and '.' in branch \
+ and not branch.startswith("branch-")):
+
+ return AsteriskVersion("SVN-branch-%s-r%s" % (branch, r))
+ else:
+ return AsteriskVersion("SVN-%s-r%s" % (branch, r))
+
+ branch = ast_version.branch
+ if "branch" in svn:
+ branch = svn["branch"]
+ if isinstance(branch, int) or isinstance(branch, float) or '.' in branch:
+ if ast_version.branch != "branch-" + str(branch):
+ return False
+ else:
+ if ast_version.branch != branch:
+ return False
+
+ if "to" in svn:
+ if ast_version > rev(svn["to"]):
+ return False
+
+ if "from" in svn:
+ if ast_version < rev(svn["from"]):
+ return False
+
+ if "revision" in svn:
+ # XXX should we parse a standard SVN revision string (e.g. 1:20,22,25,30:35)?
+ if ast_version != rev(svn["revision"]):
+ return False
+
+ return True
+
+
+ compatibility_checks = {
+ "branch": branch_is_compatible,
+ "release": release_is_compatible,
+ "tag": release_is_compatible,
+ "svn": svn_is_compatible,
+ }
+
+ for item in self.config["properties"].get("versions") or []:
+ key, value = item.items()[0]
+
+ if key not in compatibility_checks:
+ print "ERROR: unknown version spec '%s'" % key
+ continue
+
+ if not compatibility_checks[key](ast_version, value):
+ return False
+
+ return True
+
def check_deps(self, ast_version):
"""
@@ -357,8 +438,142 @@
self.maxversion_check = False
return self.can_run
+ if not self.__version_is_compatible(ast_version):
+ self.can_run = False
+ return self.can_run
+
for d in self.deps:
if d.met is False:
self.can_run = False
break
- return self.can_run
+ return self.can_run
+
+
+class TestConfigUnitTest(unittest.TestCase):
+ def __versions_stub(self, versions):
+ import re
+ versions = re.sub(r'\n', '\n ', versions)
+ return TestConfig("test",
+"""
+testinfo:
+ summary: 'sample test'
+ description: 'sample test'
+
+properties:
+ versions:
+ """ + versions)
+
+ def test_version_compatibility_svn_from(self):
+ config = self.__versions_stub(
+"""
+- svn:
+ branch: 1.8
+ from: 1234
+""")
+ self.assertTrue(config.check_deps(AsteriskVersion("SVN-branch-1.8-r1234")))
+ self.assertFalse(config.check_deps(AsteriskVersion("SVN-branch-1.8-r1233")))
+
+ def test_version_compatibility_svn_to(self):
+ config = self.__versions_stub(
+"""
+- svn:
+ branch: 1.8
+ to: 1234
+""")
+ self.assertTrue(config.check_deps(AsteriskVersion("SVN-branch-1.8-r1234")))
+ self.assertFalse(config.check_deps(AsteriskVersion("SVN-branch-1.8-r1235")))
+
+ def test_version_compatibility_svn_branch(self):
+ config = self.__versions_stub(
+"""
+- svn:
+ branch: rmudgett-parking
+""")
+
+ self.assertTrue(config.check_deps(AsteriskVersion("SVN-rmudgett-parking-r332175-/branches/1.8")))
+
+ config = self.__versions_stub(
+"""
+- svn:
+ branch: rmudgett-parking
+ revision: 332175
+""")
+ self.assertTrue(config.check_deps(AsteriskVersion("SVN-rmudgett-parking-r332175-/branches/1.8")))
+ self.assertFalse(config.check_deps(AsteriskVersion("SVN-rmudgett-parking-r332174-/branches/1.8")))
+ self.assertFalse(config.check_deps(AsteriskVersion("SVN-rmudgett-parking-r332176-/branches/1.8")))
+
+ config = self.__versions_stub(
+"""
+- svn:
+ branch: rmudgett-parking
+ from: 332174
+ to: 332176
+""")
+ self.assertTrue(config.check_deps(AsteriskVersion("SVN-rmudgett-parking-r332175-/branches/1.8")))
+ self.assertFalse(config.check_deps(AsteriskVersion("SVN-rmudgett-parking-r332177-/branches/1.8")))
+ self.assertFalse(config.check_deps(AsteriskVersion("SVN-rmudgett-parking-r332173-/branches/1.8")))
+
+ def test_version_compatibility_svn_wrong_branch(self):
+ config = self.__versions_stub(
+"""
+- svn:
+ branch: 10
+ to: 1234
+""")
+ self.assertFalse(config.check_deps(AsteriskVersion("SVN-branch-1.8-r1234")))
+ self.assertFalse(config.check_deps(AsteriskVersion("SVN-branch-1.8-r1233")))
+
+ def test_version_compatibility_svn_revision(self):
+ config = self.__versions_stub(
+"""
+- svn:
+ revision: 1234
+""")
+ self.assertTrue(config.check_deps(AsteriskVersion("SVN-branch-1.8-r1234")))
+ self.assertTrue(config.check_deps(AsteriskVersion("SVN-branch-10-r1234")))
+ self.assertFalse(config.check_deps(AsteriskVersion("SVN-branch-10-r1233")))
+
+ def test_version_compatibility_branch(self):
+ config = self.__versions_stub(
+"""
+- branch: 1.8
+""")
+ self.assertTrue(config.check_deps(AsteriskVersion("1.8.2")))
+ self.assertFalse(config.check_deps(AsteriskVersion("10")))
+
+ config = self.__versions_stub(
+"""
+- branch: 10
+""")
+ self.assertTrue(config.check_deps(AsteriskVersion("10.1")))
+ self.assertFalse(config.check_deps(AsteriskVersion("1.6.2")))
+
+ config = self.__versions_stub(
+"""
+- branch: 1.6.2.1
+""")
+ self.assertTrue(config.check_deps(AsteriskVersion("1.6.2")))
+ self.assertFalse(config.check_deps(AsteriskVersion("10")))
+
+ def test_version_compatibility_release(self):
+ config = self.__versions_stub(
+"""
+- tag: 1.8.0.0
+""")
+ self.assertTrue(config.check_deps(AsteriskVersion("1.8.0.0")))
+ self.assertFalse(config.check_deps(AsteriskVersion("1.8.2.0")))
+ self.assertFalse(config.check_deps(AsteriskVersion("SVN-branch-10-r1233")))
+ self.assertFalse(config.check_deps(AsteriskVersion("SVN-rmudgett-parking-r332176-/branches/1.8")))
+
+ config = self.__versions_stub(
+"""
+- release: 1.8.7.0-rc1
+""")
+ self.assertTrue(config.check_deps(AsteriskVersion("1.8.7.0-rc1")))
+ self.assertFalse(config.check_deps(AsteriskVersion("1.8.7.0")))
+ self.assertFalse(config.check_deps(AsteriskVersion("1.6.2.1")))
+
+
+if __name__ == "__main__":
+ unittest.main()
+
More information about the asterisk-commits
mailing list