[Asterisk-code-review] Remove checks for Asterisk version. (testsuite[master])

Corey Farrell asteriskteam at digium.com
Fri Mar 30 07:32:57 CDT 2018


Corey Farrell has uploaded this change for review. ( https://gerrit.asterisk.org/8706


Change subject: Remove checks for Asterisk version.
......................................................................

Remove checks for Asterisk version.

It is no longer needed to check for Asterisk version.  This removes all
version detection code and conditionals based on version.

This change results in some minor changes of behavior:
* Some places where output included "Asterisk <version>" now just says
  "Asterisk".
* The Asterisk version is no longer provided as a command-line argument
  when running individual tests.
* tests/http_server/servername no longer checks the specific version,
  only that unconfigured server name matches regular expression
  "^Asterisk/.".

Change-Id: I1ef916e1e52b9712b3c25bf63ee750b4b456f09e
---
M README.txt
M lib/python/asterisk/apptest.py
M lib/python/asterisk/asterisk.py
M lib/python/asterisk/test_case.py
M lib/python/asterisk/test_config.py
M lib/python/asterisk/test_runner.py
M lib/python/asterisk/thread_test_condition.py
D lib/python/asterisk/version.py
M runtests.py
M sample-yaml/test-config.yaml.sample
M test-config.yaml
M tests/apps/bridge/bridge_transfer_callee/run-test
M tests/apps/confbridge/confbridge_nominal/run-test
M tests/apps/directed_pickup/pickup_chan/run-test
M tests/apps/queues/queue_baseline/run-test
M tests/apps/queues/reason_pause_ami/run-test
M tests/apps/queues/set_penalty/run-test
M tests/bridge/atxfer_nominal/transfer.py
M tests/bridge/blonde_nominal/transfer.py
M tests/bridge/dial_LS_options/Tester.py
M tests/bridge/parkcall/Executioner.py
M tests/bridge/parkcall_blindxfer/Hangup.py
M tests/bridge/parkcall_bridgefeatures/Executioner.py
M tests/bridge/parkcall_timeout/comebacktoorigin_no/Executioner.py
M tests/bridge/parkcall_timeout/comebacktoorigin_yes/Executioner.py
M tests/callparking/run-test
M tests/callparking_retrieval/run-test
M tests/channels/SIP/SDP_attribute_passthrough/run-test
D tests/channels/SIP/SDP_attribute_passthrough/sipp/phone_A_h263.xml
D tests/channels/SIP/SDP_attribute_passthrough/sipp/phone_A_h264.xml
D tests/channels/SIP/SDP_attribute_passthrough/sipp/phone_B_h263.xml
D tests/channels/SIP/SDP_attribute_passthrough/sipp/phone_B_h264.xml
M tests/channels/SIP/SDP_offer_answer/run-test
D tests/channels/SIP/SDP_offer_answer/sipp/decline_unsupported_image_multi_1.8.xml
M tests/channels/SIP/info_dtmf/run-test
M tests/channels/SIP/nat_supertest/run-test
M tests/channels/SIP/sip_attended_transfer/attended_transfer.py
M tests/channels/SIP/sip_blind_transfer/callee_refer_only/run-test
M tests/channels/SIP/sip_blind_transfer/callee_with_reinvite/run-test
M tests/channels/SIP/sip_blind_transfer/caller_refer_only/run-test
M tests/channels/SIP/sip_blind_transfer/caller_with_reinvite/run-test
M tests/channels/SIP/sip_hold/run-test
M tests/channels/SIP/sip_hold_direct_media/run-test
M tests/channels/SIP/sip_hold_ice/run-test
M tests/channels/SIP/sip_one_legged_transfer/run-test
M tests/channels/SIP/sip_tls_call/run-test
M tests/channels/pjsip/sdp_offer_answer/attribute_passthrough/speex_h263_h264/run-test
M tests/fax/pjsip/t38_fast_reject/run-test
M tests/feature_call_pickup/run-test
M tests/http_server/servername/run-test
M tests/masquerade/run-test
M tests/rest_api/danger/safe/safe.py
M usage.py
53 files changed, 146 insertions(+), 2,363 deletions(-)



  git pull ssh://gerrit.asterisk.org:29418/testsuite refs/changes/06/8706/1

diff --git a/README.txt b/README.txt
index 2135791..91bc21e 100644
--- a/README.txt
+++ b/README.txt
@@ -458,9 +458,7 @@
 # The properties section contains information about requirements and
 # dependencies for this test.
 properties:
-    minversion : '1.8.0.0' # minimum Asterisk version compatible with this test
     buildoption : 'TEST_FRAMEWORK' # OPTIONAL - Asterisk compilation flag
-    maxversion : '10.5.1' # OPTIONAL
     features:
         # List features the Asterisk version under test must support for this test
         # to execute.  All features must be satisfied for the test to run.
diff --git a/lib/python/asterisk/apptest.py b/lib/python/asterisk/apptest.py
index 77d74e2..1fc8496 100644
--- a/lib/python/asterisk/apptest.py
+++ b/lib/python/asterisk/apptest.py
@@ -20,7 +20,6 @@
 sys.path.append("lib/python")
 from test_case import TestCase
 from ami import AMIEventInstance
-from version import AsteriskVersion
 
 LOGGER = logging.getLogger(__name__)
 
@@ -87,14 +86,6 @@
 
     def _create_application_event_instances(self, channel_id, events):
         for event_config in events:
-            minversion = event_config.get('minversion')
-            maxversion = event_config.get('maxversion')
-            if (minversion is not None and
-                    AsteriskVersion() < AsteriskVersion(minversion)):
-                continue
-            if (maxversion is not None and
-                    AsteriskVersion() >= AsteriskVersion(maxversion)):
-                continue
             ae_instance = ApplicationEventInstance(channel_id,
                                                    event_config,
                                                    self)
diff --git a/lib/python/asterisk/asterisk.py b/lib/python/asterisk/asterisk.py
index 10ee683..985afea 100755
--- a/lib/python/asterisk/asterisk.py
+++ b/lib/python/asterisk/asterisk.py
@@ -21,7 +21,6 @@
 import test_suite_utils
 
 from config import ConfigFile
-from version import AsteriskVersion
 
 from twisted.internet import reactor, protocol, defer, utils, error
 from twisted.python.failure import Failure
@@ -369,15 +368,10 @@
         self.process = None
         self.astetcdir = ""
         self.original_astmoddir = ""
-        self.ast_version = None
         self.remote_config = remote_config
         self.memcheck_delay_stop = 0
         if test_config is not None and 'memcheck-delay-stop' in test_config:
             self.memcheck_delay_stop = test_config['memcheck-delay-stop'] or 0
-
-        # If the process is remote, don't bother
-        if not self.remote_config:
-            self.ast_version = AsteriskVersion()
 
         valgrind_env = os.getenv("VALGRIND_ENABLE") or ""
         self.valgrind_enabled = True if "true" in valgrind_env else False
@@ -579,10 +573,7 @@
         def __send_stop_gracefully():
             """Send a core stop gracefully CLI command"""
             LOGGER.debug('sending stop gracefully')
-            if self.ast_version and self.ast_version < AsteriskVersion("1.6.0"):
-                cli_deferred = self.cli_exec("stop gracefully")
-            else:
-                cli_deferred = self.cli_exec("core stop gracefully")
+            cli_deferred = self.cli_exec("core stop gracefully")
             cli_deferred.addCallbacks(__stop_gracefully_callback, __stop_gracefully_error)
 
         def __stop_gracefully_callback(cli_command):
@@ -771,8 +762,7 @@
             LOGGER.error("Config file '%s' does not exist" % cfg_path)
             return
 
-        tmp = "%s/%s/%s" % (os.path.dirname(cfg_path),
-                            self.ast_version.branch if self.ast_version else '',
+        tmp = "%s/%s" % (os.path.dirname(cfg_path),
                             os.path.basename(cfg_path))
         if os.path.exists(tmp):
             cfg_path = tmp
@@ -860,10 +850,7 @@
                 "<tech/data> application <appname> appdata\n"
                 "<tech/data> extension <exten>@<context>")
 
-        if self.ast_version and self.ast_version < AsteriskVersion("1.6.2"):
-            return self.cli_exec("originate %s" % argstr)
-        else:
-            return self.cli_exec("channel originate %s" % argstr)
+        return self.cli_exec("channel originate %s" % argstr)
 
     def cli_exec(self, cli_cmd):
         """Execute a CLI command on this instance of Asterisk.
diff --git a/lib/python/asterisk/test_case.py b/lib/python/asterisk/test_case.py
index 1ef360e..80321f7 100644
--- a/lib/python/asterisk/test_case.py
+++ b/lib/python/asterisk/test_case.py
@@ -22,7 +22,6 @@
 from asterisk import Asterisk
 from test_config import TestConfig
 from test_conditions import TestConditionController
-from version import AsteriskVersion
 
 
 try:
@@ -135,7 +134,6 @@
         self.create_pcap = False
         self._stopping = False
         self.testlogdir = self._set_test_log_directory()
-        self.ast_version = AsteriskVersion()
         self._start_callbacks = []
         self._stop_callbacks = []
         self._ami_connect_callbacks = []
diff --git a/lib/python/asterisk/test_config.py b/lib/python/asterisk/test_config.py
index 260d292..8fdb884 100644
--- a/lib/python/asterisk/test_config.py
+++ b/lib/python/asterisk/test_config.py
@@ -20,7 +20,6 @@
 
 import test_suite_utils
 
-from version import AsteriskVersion
 from asterisk import Asterisk
 from buildoptions import AsteriskBuildOptions
 from sippversion import SIPpVersion
@@ -294,11 +293,6 @@
         self.config = None
         self.summary = None
         self.description = None
-        self.maxversion = []
-        self.maxversion_check = False
-        self.minversion = []
-        self.minversion_check = False
-        self.forced_version = None
         self.deps = []
         self.tags = []
         self.expect_pass = True
@@ -326,7 +320,6 @@
         if self.global_test_config is not None:
             settings = self.global_test_config
             self.condition_definitions = settings.condition_definitions
-            self.forced_version = settings.forced_version
             return
 
         if "global-settings" in self.config:
@@ -369,16 +362,6 @@
         if "properties" not in self.config:
             return
         properties = self.config["properties"]
-        minversion = properties.get("minversion", ["1.4"])
-
-        if not isinstance(minversion, list):
-            minversion = [minversion]
-        self.minversion = [AsteriskVersion(ver) for ver in minversion]
-
-        maxversion = properties.get("maxversion", [])
-        if not isinstance(maxversion, list):
-            maxversion = [maxversion]
-        self.maxversion = [AsteriskVersion(ver) for ver in maxversion]
 
         self.expect_pass = (properties.get("expectedResult", self.expect_pass) and
                             properties.get("expected-result", self.expect_pass))
@@ -386,15 +369,9 @@
             self.tags = properties["tags"]
         if "features" in properties:
             self.features = set(properties["features"])
-        if "forced-version" in properties:
-            self.forced_version = AsteriskVersion(properties["forced-version"])
-
-        for ver in self.minversion:
-            if ver.feature:
-                self.features.add(ver.feature)
 
         for feature in self.features:
-            self.feature_check[feature] = False
+            self.feature_check[feature] = True
 
     def _parse_config(self):
         """Parse the test-config YAML file."""
@@ -469,49 +446,15 @@
             ]
         return self.deps
 
-    def check_deps(self, ast_version):
+    def check_deps(self):
         """Check whether or not a test should execute based on its dependencies
 
-        Keyword arguments:
-        ast_version The AsteriskVersion object containing the version of
-                    Asterisk that will be executed
         Returns:
         can_run True if the test can execute, False otherwise
         """
 
         if not self.config:
             return False
-
-        if self.forced_version is not None:
-            ast_version = self.forced_version
-
-        # If we have a minimum version for our branch; use that. Otherwise,
-        # compare against all listed minimum versions.
-        min_candidates = [ver for ver in self.minversion
-                          if ver.major == ast_version.major]
-        if not len(min_candidates):
-            min_candidates = self.minversion
-        self.minversion_check = all([ast_version >= ver
-                                     for ver in min_candidates])
-
-        # Max version is a bit different: generally, it is a hard cut-off
-        # (as what the test covers has been removed).  If we have a maximum
-        # version for our branch; use that.  Otherwise, compare against all
-        # listed maximum versions.
-        max_candidates = [ver for ver in self.maxversion
-                          if ver.major == ast_version.major]
-        if not len(max_candidates):
-            max_candidates = self.maxversion
-        self.maxversion_check = all([ast_version < ver
-                                     for ver in max_candidates])
-
-        if not self.minversion_check or not self.maxversion_check:
-            self.can_run = False
-
-        for feature in self.features:
-            self.feature_check[feature] = ast_version.has_feature(feature)
-            if not self.feature_check[feature]:
-                self.can_run = False
 
         for dep in self.get_deps():
             if dep.met is False:
diff --git a/lib/python/asterisk/test_runner.py b/lib/python/asterisk/test_runner.py
index a31c8ca..644d117 100755
--- a/lib/python/asterisk/test_runner.py
+++ b/lib/python/asterisk/test_runner.py
@@ -25,8 +25,6 @@
 
 sys.path.append('lib/python')
 
-from version import AsteriskVersion
-
 
 class TestModuleFinder(object):
     """Determines if a module is a test module that can be loaded"""
@@ -94,13 +92,12 @@
 sys.path_hooks.append(TestModuleFinder)
 
 
-def load_test_modules(test_config, test_object, ast_version):
+def load_test_modules(test_config, test_object):
     """Load the pluggable modules for a test
 
     Keyword Arguments:
     test_config The test configuration object
     test_object The test object that the modules will attach to
-    ast_version A string containing the Asterisk version
     """
 
     if not test_object:
@@ -113,75 +110,18 @@
         return
 
     for module_spec in test_config['test-modules']['modules']:
-        if check_module_version(module_spec, ast_version):
-            # If there's a specific portion of the config for this module,
-            # use it
-            if ('config-section' in module_spec
-                    and module_spec['config-section'] in test_config):
-                module_config = test_config[module_spec['config-section']]
-            else:
-                module_config = test_config
-
-            module_type = load_and_parse_module(module_spec['typename'])
-            # Modules take in two parameters: the module configuration object,
-            # and the test object that they attach to
-            module_type(module_config, test_object)
+        # If there's a specific portion of the config for this module,
+        # use it
+        if ('config-section' in module_spec
+                and module_spec['config-section'] in test_config):
+            module_config = test_config[module_spec['config-section']]
         else:
-            LOGGER.debug("Skipping the loading of test module %s due to it's "
-                         "minversion and/or maxversion not being met." %
-                         module_spec['typename'])
+            module_config = test_config
 
-
-def check_module_version(module_spec, ast_version):
-    """Check the module configuration for minversion and maxversion and check
-    if the Asterisk version meets the version(s) if found
-
-    Keyword Arguments:
-    module_spec A dictionary of a pluggable module configuration
-    ast_version A string containing the Asterisk version
-
-    Returns:
-    False if minversion or maxversion are found and do not meet the Asterisk
-    version, True otherwise
-    """
-
-    running_version = AsteriskVersion(ast_version)
-
-    minversion = module_spec.get("minversion", [])
-    if not isinstance(minversion, list):
-        minversion = [minversion]
-    min_versions = [AsteriskVersion(ver) for ver in minversion]
-
-    # If we have a minimum version for our branch; use that.  Otherwise,
-    # compare against all listed minimum versions.
-    min_candidates = [ver for ver in min_versions
-                      if ver.major == running_version.major]
-    if not len(min_candidates):
-        min_candidates = min_versions
-    min_version_check = all([running_version >= ver for ver in min_candidates])
-
-    if not min_version_check:
-        return False
-
-    maxversion = module_spec.get("maxversion", [])
-    if not isinstance(maxversion, list):
-        maxversion = [maxversion]
-    max_versions = [AsteriskVersion(ver) for ver in maxversion]
-
-    # Max version is a bit different: generally, it is a hard cut-off
-    # (as what the test covers has been removed).  If we have a maximum
-    # version for our branch; use that.  Otherwise, compare against all
-    # listed maximum versions.
-    max_candidates = [ver for ver in max_versions
-                      if ver.major == running_version.major]
-    if not len(max_candidates):
-        max_candidates = max_versions
-    max_version_check = all([running_version < ver for ver in max_candidates])
-
-    if not max_version_check:
-        return False
-
-    return True
+        module_type = load_and_parse_module(module_spec['typename'])
+        # Modules take in two parameters: the module configuration object,
+        # and the test object that they attach to
+        module_type(module_config, test_object)
 
 
 def load_and_parse_module(type_name):
@@ -213,7 +153,7 @@
     return module
 
 
-def create_test_object(test_path, test_config, ast_version):
+def create_test_object(test_path, test_config):
     """Create the specified test object from the test configuration
 
     Parameters:
@@ -231,8 +171,7 @@
         objs = test_config['test-modules']['test-object']
         if not isinstance(objs, list):
             objs = [objs]
-        return next((obj for obj in objs if check_module_version(
-            obj, ast_version)), None)
+        return next((obj for obj in objs), None)
 
     if not 'test-modules' in test_config:
         LOGGER.error("No test-modules block in configuration")
@@ -338,18 +277,6 @@
         return 1
     test_directory = args[1]
 
-    if (len(args) < 3):
-        LOGGER.error("test_runner requires the Asterisk version to execute")
-        return 1
-    ast_version = args[2]
-
-    try:
-        AsteriskVersion()
-    except OSError:
-        # If there is no Asterisk version on the local system, then we need to
-        # set the version to the one that was passed into the application.
-        AsteriskVersion(default=ast_version)
-
     LOGGER.info("Starting test run for %s" % test_directory)
     test_config = load_test_config(test_directory)
     if test_config is None:
@@ -357,16 +284,16 @@
 
     read_module_paths(test_config, test_directory)
 
-    test_object = create_test_object(test_directory, test_config, ast_version)
+    test_object = create_test_object(test_directory, test_config)
     if test_object is None:
         return 1
 
     # Load other modules that may be specified
-    load_test_modules(test_config, test_object, ast_version)
+    load_test_modules(test_config, test_object)
 
     # Load global modules as well
     if test_object.global_config.config:
-        load_test_modules(test_object.global_config.config, test_object, ast_version)
+        load_test_modules(test_object.global_config.config, test_object)
 
     # Kick off the twisted reactor
     reactor.run()
diff --git a/lib/python/asterisk/thread_test_condition.py b/lib/python/asterisk/thread_test_condition.py
index 0b622ea..595e3ce 100644
--- a/lib/python/asterisk/thread_test_condition.py
+++ b/lib/python/asterisk/thread_test_condition.py
@@ -10,7 +10,6 @@
 
 import logging
 from test_conditions import TestCondition
-from version import AsteriskVersion
 from twisted.internet import defer
 
 LOGGER = logging.getLogger(__name__)
@@ -23,9 +22,6 @@
     check thread usage in Asterisk.  It provides common functionality for
     parsing out the results of the 'core show threads' Asterisk command
     """
-
-    _ast_version = AsteriskVersion()
-    _ast_version_10 = AsteriskVersion("10")
 
     def __init__(self, test_config):
         """Constructor
@@ -62,15 +58,9 @@
             if 'threads listed' in line or 'Asterisk ending' in line:
                 continue
 
-            # get the name and thread ID - strip off the cli_exec / pthread ID
-            initial_partition = line.partition(' ')
-
-            #In v10 and greater, the result of core show threads introduces the
-            # Asterisk thread ID immediately after the pthread ID.  Use that if
-            # it's available.
-
-            if (ThreadTestCondition._ast_version >= ThreadTestCondition._ast_version_10):
-                initial_partition = initial_partition[2].partition(' ')
+            # The result of core show threads includes the Asterisk thread ID
+            # immediately after the pthread ID.
+            initial_partition = initial_partition[2].partition(' ')
             thread_id = initial_partition[0]
             thread_name = initial_partition[2].partition(' ')[0]
             if (thread_id != "" and thread_name != ""
diff --git a/lib/python/asterisk/version.py b/lib/python/asterisk/version.py
deleted file mode 100644
index 5c25032..0000000
--- a/lib/python/asterisk/version.py
+++ /dev/null
@@ -1,804 +0,0 @@
-#!/usr/bin/env python
-"""Asterisk Version String Handling
-
-This module implements an Asterisk version string parser.  It can also compare
-version strings to determine which version is considered newer.
-
-Copyright (C) 2012, Digium, Inc.
-Russell Bryant <russell at digium.com>
-Matt Jordan <mjordan at digium.com>
-
-This program is free software, distributed under the terms of
-the GNU General Public License Version 2.
-"""
-
-import re
-import unittest
-import logging
-import sys
-import subprocess
-
-import test_suite_utils
-
-LOGGER = logging.getLogger(__name__)
-
-
-def parse_svn_branch_name(branch_tokens):
-    """Parse an Asterisk SVN branch version"""
-    name = branch_tokens[0]
-    munched = 0
-    for i in range(1, len(branch_tokens)):
-        # Stop when we hit the revision
-        if branch_tokens[i][0] == 'r':
-            candidate = branch_tokens[i].replace('r', '')
-            candidate = candidate.replace('M', '').replace('m', '')
-            if candidate.isdigit():
-                break
-        name += '-' + branch_tokens[i]
-        munched += 1
-    return (name, munched)
-
-
-def parse_version(version_string):
-    """Parse a 'standard' Asterisk version"""
-    parsed_numbers = [0, 0, 0]
-    if '/' in version_string:
-        # Strip off any prefix
-        version_string = version_string[version_string.index('/') + 1:]
-    version_tokens = version_string.split('.')
-    count = 0
-    if not version_tokens[0].isdigit():
-        return (parsed_numbers, False)
-    for token in version_tokens:
-        if count == 0 and int(token) == 1:
-            # Skip '1' in '1.8' branches - it adds no value
-            continue
-        parsed_numbers[count] = int(token)
-        count += 1
-    return (parsed_numbers, True)
-
-
-def parse_revision(revision_string):
-    """Parse a modified version of Asterisk"""
-    candidate = revision_string.replace('M', '')
-    candidate = candidate.replace('r', '').replace('m', '')
-    if candidate.isdigit():
-        return (int(candidate), True)
-    return (0, False)
-
-
-def parse_feature(feature_string):
-    """Parse a feature from a version"""
-    for feature in AsteriskVersion.supported_features:
-        if feature in feature_string:
-            feature_string = feature_string.replace(feature, '')
-            iteration = -1
-            if (len(feature_string) > 0):
-                iteration = int(feature_string)
-            return (feature, iteration, True)
-    return ('', -1, False)
-
-
-def parse_version_modifier(version_modifier):
-    """Parse a version modifier"""
-    for modifier in AsteriskVersion.supported_modifiers:
-        if modifier in version_modifier:
-            version_modifier = version_modifier.replace(modifier, '')
-            iteration = -1
-            if (len(version_modifier) > 0):
-                iteration = int(version_modifier)
-            return (modifier, iteration, True)
-    return ('', -1, False)
-
-
-def parse_parent_branch(parent_branch):
-    """Parse a parent branch out of a version branch"""
-    # Parent branch can be just about anything, so just accept it.
-    # This should be the last thing called.
-    return (parent_branch, True)
-
-DEFAULT_VERSION = None
-
-class AsteriskVersion(object):
-    """An Asterisk Version.
-
-    This class handles Asterisk version strings.
-
-    Attributes:
-    raw_version - The pre-parsed version string
-    branch      - If true, this is a branch and not a tag. Note that
-                  if svn is True, then this implies that we think this
-                  must be 'trunk'. This is always True if git is True.
-    svn         - The Asterisk version is derived from Subversion
-    git         - The Asterisk version is derived from Git
-    major       - The major version number
-    minor       - The minor version number
-    patch       - The patch version number
-    feature     - Asterisk specific branch/tag features, e.g., 'cert'
-    modifier    - Asterisk tag release modifiers, e.g., 'rc'
-    iteration   - Iteration of the modifier, e.g., 1 for 'rc1'
-    parent      - If a parent SVN branch exists, what branch this was
-                  derived from
-    name        - The name of the team branch or 'trunk' for SVN, or
-                  'master' for Git. If None, then a major/minor/patch
-                  version should be available.
-    """
-
-    supported_features = ['cert', 'digiumphones', 'dfsg']
-
-    supported_modifiers = ['rc', 'beta']
-
-    def __init__(self, version=None, default=None):
-        """Construct an Asterisk Version parser.
-
-        Keyword Arguments:
-        version -- The Asterisk version string to parse.
-        default -- Set a default version value. Whenever the initializer is
-                   called without the version keyword argument, then this
-                   default version will get returned instead. This setting
-                   persists beyond the lifetime of this object.
-        """
-        global DEFAULT_VERSION
-
-        if default:
-            DEFAULT_VERSION = default
-
-        if not version:
-            if DEFAULT_VERSION:
-                version = DEFAULT_VERSION
-            else:
-                version = AsteriskVersion.get_version_from_binary()
-
-        self.raw_version = version
-        self.branch = False
-        self.svn = False
-        self.git = False
-        self.major = 0
-        self.minor = 0
-        self.patch = 0
-        self.iteration = 0
-        self.revision = None
-        self.feature = None
-        self.modifier = None
-        self.parent = None
-        self.name = None
-
-        self.parse_version_string(self.raw_version)
-
-    def parse_version_string(self, raw_version):
-        """Parse a raw version string into its parts"""
-        parsed_numbers = [0, 0, 0]
-        raw_version = raw_version.replace('Asterisk ', '')
-
-        tokens = re.split('[-~]', raw_version)
-        count = 0
-        while (count < len(tokens)):
-            token = tokens[count]
-            # Determine if we're a subversion branch
-            if 'SVN' == token:
-                self.svn = True
-            elif 'GIT' == token:
-                # All Git versions are branches
-                self.git = True
-                self.branch = True
-            elif 'branch' == token:
-                self.branch = True
-            else:
-                if self.svn and not self.branch and not self.name:
-                    # Team branch or trunk.  This will modify the current
-                    # position based on the number of tokens consumed
-                    (self.name,
-                     munched) = parse_svn_branch_name(tokens[count:])
-                    count += munched
-                elif self.git and token == 'master':
-                    # It's a Git branch! This should contain our upstream
-                    # major branch, so we only care if the current token
-                    # says this is master.
-                    self.name = token
-                else:
-                    handled = False
-                    if (len([num for num in parsed_numbers if num != 0]) == 0):
-                        (parsed_numbers, handled) = parse_version(token)
-                        self.major = parsed_numbers[0]
-                        self.minor = parsed_numbers[1]
-                        self.patch = parsed_numbers[2]
-                    if not handled and '/' in token and not self.feature and not self.revision:
-                        # Strip off any prefix and update the version numbers
-                        token = token[token.index('/') + 1:]
-                        ((self.major, self.minor, self.patch), handled) = parse_version(token)
-                    if not handled and not self.feature:
-                        # If a feature returns back a number, its actually the
-                        # 'patch' version number (e.g., 1.8.11-cert3)
-                        (self.feature, temp, handled) = parse_feature(token)
-                        if (temp > 0):
-                            self.patch = temp
-                    if not handled and not self.modifier:
-                        (self.modifier,
-                         self.iteration,
-                         handled) = parse_version_modifier(token)
-                    if not handled and not self.revision and not self.git:
-                        (self.revision, handled) = parse_revision(token)
-                    if not handled and not self.parent and not self.git:
-                        (self.parent, handled) = parse_parent_branch(token)
-                    if not handled and self.git:
-                        if self.revision:
-                            self.revision = '{0}-{1}'.format(self.revision, token)
-                        else:
-                            self.revision = token
-                        handled = True
-                    if not handled:
-                        LOGGER.error("Unable to parse token '%s' in version "
-                                     "string '%s'" % (token, raw_version))
-            count += 1
-
-    def __str__(self):
-        """Return the raw Asterisk version as a string"""
-        return self.raw_version
-
-    def __int__(self):
-        """Convert the Asterisk version to an integer for comparisons"""
-        if self.name:
-            return sys.maxint
-        elif (self.branch):
-            # Branches are a little odd. The more you specify, the less your
-            # calculated value is. This keeps the following relationships true:
-            # branch-1.8 > 1.8.12.0 > branch-1.8.11-cert
-            value = self.major * 100000000
-            if (self.minor == 0):
-                value += 9900000
-            else:
-                value += self.minor * 100000
-            if (self.patch == 0):
-                value += 99000
-            else:
-                value += self.patch * 1000
-            value += 999
-            return value
-        else:
-            return (self._modifier_weight() + self.patch * 1000 +
-                    self.minor * 100000 + self.major * 100000000)
-
-    def __lt__(self, other):
-        """Test if self < other """
-        if int(self) < int(other):
-            return True
-        elif self.svn and other.svn:
-            return self.revision < other.revision
-        else:
-            return False
-
-    def __le__(self, other):
-        """Test if self <= other"""
-        if int(self) <= int(other):
-            return True
-        elif self.svn and other.svn:
-            return self.revision <= other.revision
-        else:
-            return False
-
-    def __eq__(self, other):
-        """Test if self == other"""
-        if int(self) != int(other):
-            return False
-        if (self.svn and other.svn) or (self.git and other.git):
-            return self.revision == other.revision
-        return True
-
-    def __ne__(self, other):
-        """Test if self != other"""
-        if int(self) == int(other):
-            if (self.svn and other.svn) or (self.git and other.git):
-                return self.revision != other.revision
-            else:
-                return False
-        return True
-
-    def __gt__(self, other):
-        """Test if self > other"""
-        if int(self) > int(other):
-            return True
-        elif self.svn and other.svn:
-            return self.revision > other.revision
-        else:
-            return False
-
-    def __ge__(self, other):
-        """Test if self >= other"""
-        if int(self) >= int(other):
-            return True
-        elif self.svn and other.svn:
-            return self.revision >= other.revision
-        else:
-            return False
-
-    def _modifier_weight(self):
-        """Determine the relative weight due to a modifier"""
-        if self.modifier:
-            if self.modifier == 'rc':
-                return self.iteration * 10
-            else:
-                return self.iteration
-        return 100
-
-    def has_feature(self, feature):
-        """Returns:
-        True if this AsteriskVersion has a feature
-        False otherwise
-        """
-        if (self.name or self.major >= 11):
-            # Assume that 11 or trunk has all the features
-            return True
-        if feature == self.feature:
-            return True
-        else:
-            if feature == 'digiumphones' and self.feature == 'cert':
-                return True
-        return False
-
-    @classmethod
-    def get_version_from_binary(cls):
-        """Obtain the version from the installed instance of Asterisk
-
-        This method will invoke Asterisk, get the version, parse the
-        result, and cache it. Once cached, the cached version will
-        always be returned.
-
-        Returns: The installed Asterisk version
-        """
-        if not hasattr(cls, "_asterisk_version_from_binary"):
-            version = ""
-            ast_binary = (test_suite_utils.which("asterisk") or
-                          "/usr/sbin/asterisk")
-            cmd = [
-                ast_binary,
-                "-V",
-            ]
-
-            try:
-                process = subprocess.Popen(cmd, stdout=subprocess.PIPE,
-                                           stderr=None)
-                version = process.stdout.read()
-            except OSError as o_excep:
-                LOGGER.error("OSError [%d]: %s" % (o_excep.errno,
-                                                   o_excep.strerror))
-                raise
-            process.wait()
-            cls._asterisk_version_from_binary = version.replace(
-                "Asterisk ", "")
-        return cls._asterisk_version_from_binary
-
-
-class AsteriskVersionTests(unittest.TestCase):
-    """Unit tests for AsteriskVersion"""
-
-    def test_version_18_1(self):
-        """Test parsing 1.8 version string"""
-        version = AsteriskVersion("1.8.6.0")
-        self.assertFalse(version.svn)
-        self.assertFalse(version.branch)
-        self.assertEqual(str(version), "1.8.6.0")
-        self.assertEqual(version.major, 8)
-        self.assertEqual(version.minor, 6)
-        self.assertEqual(version.patch, 0)
-
-    def test_version_18_2(self):
-        """Test parsing another 1.8 version string"""
-        version = AsteriskVersion("Asterisk 1.8.13.1")
-        self.assertFalse(version.svn)
-        self.assertFalse(version.branch)
-        self.assertEqual(str(version), "Asterisk 1.8.13.1")
-        self.assertEqual(version.major, 8)
-        self.assertEqual(version.minor, 13)
-        self.assertEqual(version.patch, 1)
-
-    def test_version_10_1(self):
-        """Test parsing a 10 version string"""
-        version = AsteriskVersion("10.0")
-        self.assertFalse(version.svn)
-        self.assertFalse(version.branch)
-        self.assertEqual(str(version), "10.0")
-        self.assertEqual(version.major, 10)
-        self.assertEqual(version.minor, 0)
-        self.assertEqual(version.patch, 0)
-
-    def test_version_10_2(self):
-        """Test parsing another 10 version string"""
-        version = AsteriskVersion("Asterisk 10.5.1")
-        self.assertFalse(version.svn)
-        self.assertFalse(version.branch)
-        self.assertEqual(str(version), "Asterisk 10.5.1")
-        self.assertEqual(version.major, 10)
-        self.assertEqual(version.minor, 5)
-        self.assertEqual(version.patch, 1)
-
-    def test_version_11_1(self):
-        """Test parsing an 11 version string"""
-        version = AsteriskVersion("11")
-        self.assertFalse(version.svn)
-        self.assertFalse(version.branch)
-        self.assertEqual(str(version), "11")
-        self.assertEqual(version.major, 11)
-        self.assertEqual(version.minor, 0)
-        self.assertEqual(version.patch, 0)
-
-    def test_version_11_2(self):
-        """Test parsing another 11 version string"""
-        version = AsteriskVersion("11.1.9")
-        self.assertFalse(version.svn)
-        self.assertFalse(version.branch)
-        self.assertEqual(str(version), "11.1.9")
-        self.assertEqual(version.major, 11)
-        self.assertEqual(version.minor, 1)
-        self.assertEqual(version.patch, 9)
-
-    def test_version_11_3(self):
-        """Test parsing yet another 11 version string"""
-        version = AsteriskVersion("Asterisk 11.0")
-        self.assertFalse(version.svn)
-        self.assertFalse(version.branch)
-        self.assertEqual(str(version), "Asterisk 11.0")
-        self.assertEqual(version.major, 11)
-        self.assertEqual(version.minor, 0)
-        self.assertEqual(version.patch, 0)
-
-    def test_svn_version_trunk_1(self):
-        """Test parsing a trunk version with revision"""
-        version = AsteriskVersion("SVN-trunk-r252849")
-        self.assertTrue(version.svn)
-        self.assertFalse(version.branch)
-        self.assertEqual(str(version), "SVN-trunk-r252849")
-        self.assertEqual(version.name, "trunk")
-        self.assertEqual(version.revision, 252849)
-
-    def test_svn_version_trunk_2(self):
-        """Test parsing a modified trunk version with revision"""
-        version = AsteriskVersion("Asterisk SVN-trunk-r252849M")
-        self.assertTrue(version.svn)
-        self.assertFalse(version.branch)
-        self.assertEqual(str(version), "Asterisk SVN-trunk-r252849M")
-        self.assertEqual(version.name, "trunk")
-        self.assertEqual(version.revision, 252849)
-
-    def test_svn_version_teambranch_1(self):
-        """Test parsing a rather long team branch"""
-        version = AsteriskVersion("SVN-russell-cdr-q-r249059M-/trunk")
-        self.assertTrue(version.svn)
-        self.assertFalse(version.branch)
-        self.assertEqual(str(version), "SVN-russell-cdr-q-r249059M-/trunk")
-        self.assertEqual(version.name, "russell-cdr-q")
-        self.assertEqual(version.revision, 249059)
-        self.assertEqual(version.parent, "/trunk")
-
-    def test_svn_version_teambranch_2(self):
-        """Test parsing a slightly shorter team branch"""
-        version = AsteriskVersion("Asterisk SVN-russell-rest-r12345")
-        self.assertTrue(version.svn)
-        self.assertFalse(version.branch)
-        self.assertEqual(str(version), "Asterisk SVN-russell-rest-r12345")
-        self.assertEqual(version.name, "russell-rest")
-        self.assertEqual(version.revision, 12345)
-
-    def test_svn_branch_10_1(self):
-        """Test parsing an Asterisk 10 version branch"""
-        version = AsteriskVersion("SVN-branch-10-r11111")
-        self.assertTrue(version.svn)
-        self.assertTrue(version.branch)
-        self.assertEqual(str(version), "SVN-branch-10-r11111")
-        self.assertEqual(version.major, 10)
-        self.assertEqual(version.minor, 0)
-        self.assertEqual(version.patch, 0)
-        self.assertEqual(version.revision, 11111)
-
-    def test_svn_branch_18_features_1(self):
-        """Test parsing a 1.8 branch with features"""
-        ver = "SVN-branch-1.8-digiumphones-r357808-/branches/1.8"
-        version = AsteriskVersion(ver)
-        self.assertTrue(version.svn)
-        self.assertTrue(version.branch)
-        self.assertEqual(version.major, 8)
-        self.assertEqual(version.minor, 0)
-        self.assertEqual(version.patch, 0)
-        self.assertEqual(version.revision, 357808)
-        self.assertEqual(version.parent, '/branches/1.8')
-        self.assertTrue(version.feature, 'digiumphones')
-
-    def test_svn_branch_10_features_1(self):
-        """Test parsing a 10 branch with features"""
-        ver = "SVN-branch-10-digiumphones-r365402-/branches/10"
-        version = AsteriskVersion(ver)
-        self.assertTrue(version.svn)
-        self.assertTrue(version.branch)
-        self.assertEqual(version.major, 10)
-        self.assertEqual(version.minor, 0)
-        self.assertEqual(version.patch, 0)
-        self.assertEqual(version.revision, 365402)
-        self.assertEqual(version.parent, '/branches/10')
-        self.assertEqual(version.feature, 'digiumphones')
-
-    def test_svn_branch_10_features_2(self):
-        """Test parsing another 10 feature branch"""
-        ver = "Asterisk SVN-branch-10-digiumphones-r365402"
-        version = AsteriskVersion(ver)
-        self.assertTrue(version.svn)
-        self.assertTrue(version.branch)
-        self.assertEqual(version.major, 10)
-        self.assertEqual(version.minor, 0)
-        self.assertEqual(version.patch, 0)
-        self.assertEqual(version.revision, 365402)
-        self.assertEqual(version.feature, 'digiumphones')
-
-    def test_version_10_with_features_and_modifier(self):
-        """Test parsing a 10 feature branch with a modifier"""
-        version = AsteriskVersion("Asterisk 10.6.1-digiumphones-beta3")
-        self.assertFalse(version.svn)
-        self.assertFalse(version.branch)
-        self.assertEqual(version.major, 10)
-        self.assertEqual(version.minor, 6)
-        self.assertEqual(version.patch, 1)
-        self.assertEqual(version.feature, 'digiumphones')
-        self.assertEqual(version.modifier, 'beta')
-        self.assertEqual(version.iteration, 3)
-
-    def test_svn_1811_certified_1(self):
-        """Test a CA 1.8 version tag"""
-        version = AsteriskVersion("Asterisk 1.8.11-cert1")
-        self.assertFalse(version.svn)
-        self.assertFalse(version.branch)
-        self.assertEqual(version.major, 8)
-        self.assertEqual(version.minor, 11)
-        self.assertEqual(version.patch, 1)
-        self.assertEqual(version.feature, 'cert')
-
-    def test_svn_1811_certified_2(self):
-        """Test another CA 1.8 version tag"""
-        version = AsteriskVersion("1.8.11-cert2")
-        self.assertFalse(version.svn)
-        self.assertFalse(version.branch)
-        self.assertEqual(version.major, 8)
-        self.assertEqual(version.minor, 11)
-        self.assertEqual(version.patch, 2)
-        self.assertEqual(version.feature, 'cert')
-
-    def test_svn_1811_certified_3(self):
-        """Test a CA 1.8 version tag with modifier"""
-        version = AsteriskVersion("Asterisk 1.8.11-cert3-rc1")
-        self.assertFalse(version.svn)
-        self.assertFalse(version.branch)
-        self.assertEqual(version.major, 8)
-        self.assertEqual(version.minor, 11)
-        self.assertEqual(version.patch, 3)
-        self.assertEqual(version.feature, 'cert')
-        self.assertEqual(version.modifier, 'rc')
-        self.assertEqual(version.iteration, 1)
-
-    def test_svn_1811_certified_branch(self):
-        """Test a CA 1.8 version branch"""
-        version = AsteriskVersion("Asterisk SVN-branch-1.8.11-cert-r368608")
-        self.assertTrue(version.svn)
-        self.assertTrue(version.branch)
-        self.assertEqual(version.major, 8)
-        self.assertEqual(version.minor, 11)
-        self.assertEqual(version.patch, 0)
-        self.assertEqual(version.feature, 'cert')
-        self.assertEqual(version.revision, 368608)
-
-    def test_git_11_branch(self):
-        """Test a Git checkout from master"""
-        version = AsteriskVersion("Asterisk GIT-11-a987f3")
-        self.assertFalse(version.svn)
-        self.assertTrue(version.git)
-        self.assertTrue(version.branch)
-        self.assertEqual(version.major, 11)
-        self.assertEqual(version.minor, 0)
-        self.assertEqual(version.patch, 0)
-        self.assertEqual(version.revision, "a987f3")
-
-    def test_git_116_certified_branch(self):
-        """Test a Git checkout from master"""
-        version = AsteriskVersion("Asterisk GIT-11.6-cert-a987f3")
-        self.assertFalse(version.svn)
-        self.assertTrue(version.git)
-        self.assertTrue(version.branch)
-        self.assertTrue(version.branch)
-        self.assertEqual(version.major, 11)
-        self.assertEqual(version.minor, 6)
-        self.assertEqual(version.patch, 0)
-        self.assertEqual(version.feature, 'cert')
-        self.assertEqual(version.name, None)
-        self.assertEqual(version.revision, "a987f3")
-
-    def test_git_131_certified_branch(self):
-        """Test a Git checkout from certified/13.1 branch
-
-        Note that in this test, the last known tag is 13.1-cert3, but
-        modifications have been made since then on the branch
-        """
-        version = AsteriskVersion("Asterisk GIT-13-certified/13.1-cert3-1-hsd81h23")
-        self.assertFalse(version.svn)
-        self.assertTrue(version.git)
-        self.assertTrue(version.branch)
-        self.assertEqual(version.major, 13)
-        self.assertEqual(version.minor, 1)
-        self.assertEqual(version.patch, 3)
-        self.assertEqual(version.feature, 'cert')
-        self.assertEqual(version.name, None)
-        self.assertEqual(version.revision, '1-hsd81h23')
-
-    def test_git_131_certified_tag(self):
-        """Test a Git created tag from the certified/13.1 branch"""
-        version = AsteriskVersion("Asterisk certified/13.1-cert3-rc1")
-        self.assertFalse(version.svn)
-        # This is just a tag that happened to be made from git
-        self.assertFalse(version.git)
-        self.assertFalse(version.branch)
-        self.assertEqual(version.major, 13)
-        self.assertEqual(version.minor, 1)
-        self.assertEqual(version.patch, 3)
-        self.assertEqual(version.feature, 'cert')
-        self.assertEqual(version.name, None)
-        self.assertEqual(version.modifier, 'rc')
-        self.assertEqual(version.iteration, 1)
-
-    def test_git_master(self):
-        """Test a Git checkout from master"""
-        version = AsteriskVersion("Asterisk GIT-master-a987f3")
-        self.assertFalse(version.svn)
-        self.assertTrue(version.git)
-        self.assertTrue(version.branch)
-        self.assertEqual(version.name, "master")
-        self.assertEqual(version.revision, "a987f3")
-
-    def test_cmp1(self):
-        """Compare two trunk versions, an 11 tag, and a 1.8 branch"""
-        version1 = AsteriskVersion("SVN-trunk-r252849")
-        version2 = AsteriskVersion("SVN-branch-1.8-r245581M")
-        version3 = AsteriskVersion("Asterisk 11.0.1")
-        version4 = AsteriskVersion("SVN-trunk-r300000")
-        self.assertTrue(version1 > version2)
-        self.assertTrue(version1 > version3)
-        self.assertFalse(version1 > version4)
-
-    def test_cmp2(self):
-        """Compare trunk against a team branch"""
-        version1 = AsteriskVersion("SVN-trunk-r252849")
-        version2 = AsteriskVersion("SVN-russell-cdr-q-r249059M-/trunk")
-        self.assertTrue(version1 > version2)
-
-    def test_cmp3(self):
-        """Compare 10 branch against 1.8 branch"""
-        version1 = AsteriskVersion("SVN-branch-10-r245581M")
-        version2 = AsteriskVersion("SVN-branch-1.8-r245581M")
-        self.assertTrue(version1 > version2)
-
-    def test_cmp4(self):
-        """Compare two version tags"""
-        version1 = AsteriskVersion("10.0")
-        version2 = AsteriskVersion("1.8")
-        self.assertTrue(version1 > version2)
-
-    def test_cmp5(self):
-        """Compare the simplest version tags"""
-        version1 = AsteriskVersion("10")
-        version2 = AsteriskVersion("1.8")
-        self.assertTrue(version1 > version2)
-
-    def test_cmp6(self):
-        """Compare trunk against 10 branch"""
-        version1 = AsteriskVersion("SVN-trunk-r245581")
-        version2 = AsteriskVersion("SVN-branch-10-r251232")
-        self.assertTrue(version1 > version2)
-
-    def test_cmp16(self):
-        """Compare two versions, one with a modifier"""
-        version1 = AsteriskVersion("1.8.6.0-rc1")
-        version2 = AsteriskVersion("1.8.6.0")
-        self.assertTrue(version1 < version2)
-
-    def test_cmp17(self):
-        """Compare two modifiers"""
-        version1 = AsteriskVersion("1.8.8.0-beta1")
-        version2 = AsteriskVersion("1.8.8.0-rc1")
-        self.assertTrue(version1 < version2)
-
-    def test_cmp18(self):
-        """Compare two versions with the same modifier"""
-        version1 = AsteriskVersion("1.8.6.0-rc2")
-        version2 = AsteriskVersion("1.8.6.0-rc1")
-        self.assertTrue(version1 > version2)
-
-    def test_cmp19(self):
-        """Compare a high modifier against the next higher version"""
-        version1 = AsteriskVersion("1.8.6.1")
-        version2 = AsteriskVersion("1.8.6.0-rc11")
-        self.assertTrue(version1 > version2)
-
-    def test_cmp20(self):
-        """Compare two versions with a regression/security difference"""
-        version1 = AsteriskVersion("1.8.5.0")
-        version2 = AsteriskVersion("1.8.5.1")
-        self.assertTrue(version1 < version2)
-
-    def test_cmp21(self):
-        """Compare a tag against the same major version branch"""
-        version1 = AsteriskVersion("1.8.10")
-        version2 = AsteriskVersion("SVN-branch-1.8-r360138")
-        self.assertTrue(version1 < version2)
-
-    def test_cmp22(self):
-        """Compare a tag against a modified same major version branch"""
-        version1 = AsteriskVersion("1.8.10")
-        version2 = AsteriskVersion("SVN-branch-1.8-r360138M")
-        self.assertTrue(version1 < version2)
-
-    def test_cmp23(self):
-        """Compare the same CA version with a patch difference"""
-        version1 = AsteriskVersion("1.8.11-cert1")
-        version2 = AsteriskVersion("1.8.11-cert2")
-        self.assertTrue(version1 < version2)
-
-    def test_cmp24(self):
-        """Compare two CA versions"""
-        version1 = AsteriskVersion("1.8.11-cert1")
-        version2 = AsteriskVersion("1.8.15-cert1")
-        self.assertTrue(version1 < version2)
-
-    def test_cmp25(self):
-        """Compare a CA version against a standard release from the branch"""
-        version1 = AsteriskVersion("1.8.11-cert1")
-        version2 = AsteriskVersion("1.8.13.0")
-        self.assertTrue(version1 < version2)
-
-    def test_cmp26(self):
-        """Compare a CA branch against a tagged version"""
-        version1 = AsteriskVersion("SVN-branch-1.8.11-cert-r363674")
-        version2 = AsteriskVersion("1.8.12.0")
-        self.assertTrue(version1 < version2)
-
-    def test_cmp27(self):
-        """Compare two CA branches"""
-        version1 = AsteriskVersion("SVN-branch-1.8.11-r363674")
-        version2 = AsteriskVersion("SVN-branch-1.8.15-r363674")
-        self.assertTrue(version1 < version2)
-
-    def test_cmp28(self):
-        """Compare a CA branch against the standard branch"""
-        version1 = AsteriskVersion("SVN-branch-1.8.11-r363674")
-        version2 = AsteriskVersion("SVN-branch-1.8-r369138M")
-        self.assertTrue(version1 < version2)
-
-    def test_cmp29(self):
-        """Compare a CA version against a CA branch"""
-        version1 = AsteriskVersion("1.8.11-cert1")
-        version2 = AsteriskVersion("Asterisk SVN-branch-1.8.11-cert-r368608")
-        self.assertTrue(version1 < version2)
-
-    def test_cmp_git_18_11(self):
-        """Compare a Git 1.8 branch to an 11 branch"""
-        version1 = AsteriskVersion("Asterisk GIT-1.8-18has09")
-        version2 = AsteriskVersion("Asterisk GIT-11-81yhas90")
-        self.assertTrue(version1 < version2)
-
-    def test_cmp_git_11(self):
-        """Compare two Git 11 branch versions"""
-        version1 = AsteriskVersion("Asterisk GIT-11-a9suh193")
-        version2 = AsteriskVersion("Asterisk GIT-11-aj981bnd")
-        self.assertTrue(version1 != version2)
-        self.assertFalse(version1 < version2)
-        self.assertFalse(version1 > version2)
-        self.assertFalse(version1 == version2)
-
-    def test_cmp_git_1811_1811branch(self):
-        """Compare a CA version against a Git CA branch"""
-        version1 = AsteriskVersion("1.8.11-cert2")
-        version2 = AsteriskVersion("Asterisk GIT-1.8.11-cert-89haskljh")
-        self.assertTrue(version1 < version2)
-
-
-def main():
-    """Run the unit tests"""
-    logging.basicConfig()
-    unittest.main()
-
-
-if __name__ == "__main__":
-    main()
diff --git a/runtests.py b/runtests.py
index d684f86..8089387 100755
--- a/runtests.py
+++ b/runtests.py
@@ -53,7 +53,6 @@
     new_PYTHONPATH.append(os.getenv("PYTHONPATH"))
 new_PYTHONPATH.append("lib/python")
 
-from asterisk.version import AsteriskVersion
 from asterisk.asterisk import Asterisk
 from asterisk.test_config import TestConfig
 from mailer import send_email
@@ -92,16 +91,15 @@
 ref_debug_is_enabled = False
 
 class TestRun:
-    def __init__(self, test_name, ast_version, options, global_config=None, timeout=-1):
+    def __init__(self, test_name, options, global_config=None, timeout=-1):
         self.can_run = False
         self.did_run = False
         self.time = 0.0
         self.test_name = test_name
-        self.ast_version = ast_version
         self.options = options
         self.test_config = TestConfig(test_name, global_config)
         self.failure_message = ""
-        self.__check_can_run(ast_version)
+        self.__check_can_run()
         self.stdout = ""
         self.timeout = timeout
         self.cleanup = options.cleanup
@@ -133,7 +131,6 @@
                 os.environ['PCAP'] = "yes"
 
             self.stdout_print("Running %s ..." % cmd)
-            cmd.append(str(self.ast_version).rstrip())
             p = subprocess.Popen(cmd, stdout=subprocess.PIPE,
                                  stderr=subprocess.STDOUT)
             self.pid = p.pid
@@ -445,9 +442,9 @@
         self._archive_files(run_dir, archive_dir, 'dumpfile.pcap')
         self._archive_files(run_dir, archive_dir, 'packet.pcap')
 
-    def __check_can_run(self, ast_version):
+    def __check_can_run(self):
         """Check tags and dependencies in the test config."""
-        if self.test_config.check_deps(ast_version) and \
+        if self.test_config.check_deps() and \
                 self.test_config.check_tags(self.options.tags, self.options.skip_tags):
             self.can_run = True
 
@@ -456,13 +453,13 @@
 
 
 class TestSuite:
-    def __init__(self, ast_version, options):
+    def __init__(self, options):
         self.options = options
 
         self.tests = []
         self.start_time = None
         self.global_config = self._parse_global_config()
-        self.tests = self._parse_test_yaml("tests", ast_version)
+        self.tests = self._parse_test_yaml("tests")
         if self.options.randomorder:
             random.shuffle(self.tests)
         else:
@@ -475,7 +472,7 @@
     def _parse_global_config(self):
         return TestConfig(os.getcwd())
 
-    def _parse_test_yaml(self, test_dir, ast_version):
+    def _parse_test_yaml(self, test_dir):
         tests = []
 
         config = load_yaml_config("%s/%s" % (test_dir, TESTS_CONFIG))
@@ -503,10 +500,10 @@
                                     for test in self.options.skip_tests_regex)):
                         continue
 
-                    tests.append(TestRun(path, ast_version, self.options,
+                    tests.append(TestRun(path, self.options,
                                          self.global_config, self.options.timeout))
                 elif val == "dir":
-                    tests += self._parse_test_yaml(path, ast_version)
+                    tests += self._parse_test_yaml(path)
 
         return tests
 
@@ -538,13 +535,6 @@
             print "      --> Summary: %s" % t.test_config.summary
             if t.test_config.skip is not None:
                 print "      --> Skip: %s" % t.test_config.skip
-            print ("      --> Minimum Version: %s (%s)" %
-                   (", ".join([str(v) for v in t.test_config.minversion]),
-                    t.test_config.minversion_check))
-            if t.test_config.maxversion is not None:
-                print ("      --> Maximum Version: %s (%s)" %
-                       (", ".join([str(v) for v in t.test_config.maxversion]),
-                        t.test_config.maxversion_check))
             if t.test_config.features:
                 print "      --> Features:"
                 for feature_name in t.test_config.features:
@@ -611,16 +601,6 @@
                     self.total_skipped += 1
                     continue
                 print "--> Cannot run test '%s'" % t.test_name
-                if t.test_config.forced_version is not None:
-                    print "--- --> Forced Asterisk Version: %s" % \
-                        (str(t.test_config.forced_version))
-                print ("--- --> Minimum Version: %s (%s)" %
-                       (", ".join([str(v) for v in t.test_config.minversion]),
-                        t.test_config.minversion_check))
-                if t.test_config.maxversion is not None:
-                    print ("--- --> Maximum Version: %s (%s)" %
-                           (", ".join([str(v) for v in t.test_config.maxversion]),
-                            t.test_config.maxversion_check))
                 for f in t.test_config.features:
                     print "--- --> Version Feature: %s - %s" % (
                         f, str(t.test_config.feature_check[f]))
@@ -873,10 +853,8 @@
     signal.signal(signal.SIGUSR1, handle_usr1)
     signal.signal(signal.SIGTERM, handle_term)
 
-    ast_version = AsteriskVersion(default=options.version)
-
     if options.list_tests or options.list_tags or options.list_terse :
-        test_suite = TestSuite(ast_version, options)
+        test_suite = TestSuite(options)
 
         if options.list_tests:
             test_suite.list_tests()
@@ -912,10 +890,10 @@
         syslog.openlog('AsteriskTestsuite', syslog.LOG_PID)
     while ((iteration < options.number or continue_forever) and not abandon_test_suite):
 
-        test_suite = TestSuite(ast_version, options)
+        test_suite = TestSuite(options)
 
-        running_str = "Running tests for Asterisk {0} (run {1} of {2})...\n".format(
-            str(ast_version).strip('\n'), iteration + 1, options.number)
+        running_str = "Running tests for Asterisk (run {0} of {1})...\n".format(
+            iteration + 1, options.number)
         print running_str
         if options.syslog:
             syslog.syslog(running_str)
diff --git a/sample-yaml/test-config.yaml.sample b/sample-yaml/test-config.yaml.sample
index 8d78b80..773b98f 100644
--- a/sample-yaml/test-config.yaml.sample
+++ b/sample-yaml/test-config.yaml.sample
@@ -27,12 +27,6 @@
 # dependencies for this test.
 properties:
 
-    # The minimum version of Asterisk necessary to run the test
-    minversion: '1.8.0.0'
-
-    # The maximum version of Asterisk that this test can exeucte under
-    maxversion: '10.5.1' # OPTIONAL
-
     # A sequence of feature specifies that the version of Asterisk under test must support.
     features: # OPTIONAL
         # List features the Asterisk version under test must support for this test
@@ -194,23 +188,12 @@
     modules: # OPTIONAL
         -
             # The keyword in the test-config.yaml file that provides the configuration for the module
-            config-section: 'ami-config-1.3'
+            config-section: 'ami-config'
 
             # The fully qualified package.module.class to instantiate as the module.
             # A few that are available:
             # ami.AMIEventModule, cdr.CDRModule
             typename: 'ami.AMIEventModule'
-
-            # The minimum version of Asterisk necessary to load this module
-            minversion: '1.8.0.0' # OPTIONAL
-
-            # The maximum version of Asterisk that this module can load under
-            maxversion: '11.0.0' # OPTIONAL
-        -
-            # Similar to above but with different Asterisk version requirements
-            config-section: 'ami-config-1.4'
-            typename: 'ami.AMIEventModule'
-            minversion: '12.0.0'
 
 # The configuration for the test object. The configuration will differ depending
 # on the test object used
@@ -241,23 +224,7 @@
 
 # The configuration for a pluggable module. See other *-config.yaml.sample files
 # for more details.
-ami-config-1.3:
-    -
-        type: 'headermatch'
-        id: '0'
-        conditions:
-            match:
-                Event: 'Newexten'
-                Channel: 'Local/play at default-00000000;2'
-                Application: 'NoOp'
-        requirements:
-            match:
-                AppData: 'AMI 1.3'
-        count: '1'
-
-# The configuration for a pluggable module. See other *-config.yaml.sample files
-# for more details.
-ami-config-1.4:
+ami-config:
     -
         type: 'headermatch'
         id: '0'
diff --git a/test-config.yaml b/test-config.yaml
index a7e1a8f..2e03fb3 100644
--- a/test-config.yaml
+++ b/test-config.yaml
@@ -140,13 +140,6 @@
             - name: 'sip-channels'
             - name: 'memory'
 
-config-specific-version:
-    properties:
-        # Override the version of Asterisk under test to the specified version.
-        # This is particularly useful if the version under test is from a team
-        # branch not based on Asterisk trunk.
-        forced-version: 1.8.0.0
-
 # This section demonstrates how to integrate automatic realtime testing into
 # the testsuite. If realtime-config is specified, then Asterisk will replace known
 # configuration file data with realtime equivalents when running tests.
diff --git a/tests/apps/bridge/bridge_transfer_callee/run-test b/tests/apps/bridge/bridge_transfer_callee/run-test
index 38d06ed..a30f8eb 100755
--- a/tests/apps/bridge/bridge_transfer_callee/run-test
+++ b/tests/apps/bridge/bridge_transfer_callee/run-test
@@ -17,7 +17,6 @@
 sys.path.append("lib/python")
 
 from asterisk.test_case import TestCase
-from asterisk.version import AsteriskVersion
 
 LOGGER = logging.getLogger(__name__)
 
@@ -39,10 +38,7 @@
         """ Register for all events we care about """
 
         ami.registerEvent("UserEvent", self.user_event)
-        if AsteriskVersion() >= AsteriskVersion('12'):
-            ami.registerEvent("BridgeEnter", self.bridge_enter_event)
-        else:
-            ami.registerEvent("BridgeExec", self.bridge_event)
+        ami.registerEvent("BridgeEnter", self.bridge_enter_event)
         #originate the bridgee
         df = ami.originate(channel = "Local/local at call1", exten = "call", context = "test_context", priority = 1)
         df.addErrback(self.handle_originate_failure)
@@ -91,16 +87,6 @@
             LOGGER.info("All Bridge Transfer tests complete. Test Successful.")
             self.passed = True
             self.stop_reactor()
-
-    def bridge_event(self, ami, event):
-        if (event.get('response') == 'Success'):
-            channel = event.get('channel1')
-            if channel is not None:
-                ami.hangup(channel)
-            else:
-                LOGGER.error("bridge event didn't include a channel1. That's not supposed to happen.")
-        else:
-            LOGGER.error("A bridge failed. That's rather abnormal.")
 
     def bridge_enter_event(self, ami, event):
         if self.hangup_channel is None:
diff --git a/tests/apps/confbridge/confbridge_nominal/run-test b/tests/apps/confbridge/confbridge_nominal/run-test
index 5e795a6..60e7138 100755
--- a/tests/apps/confbridge/confbridge_nominal/run-test
+++ b/tests/apps/confbridge/confbridge_nominal/run-test
@@ -23,7 +23,6 @@
 from asterisk.test_state import FailureTestState
 from asterisk.confbridge import ConfbridgeTestState
 from asterisk.confbridge import ConfbridgeChannelObject
-from asterisk.version import AsteriskVersion
 
 logger = logging.getLogger(__name__)
 
@@ -92,20 +91,11 @@
     def __handle_confbridge_join(self, channel):
         """ Handles when the ConfBridge notifies the users that someone has joined """
         self.test_case.reset_timeout()
-        if AsteriskVersion() < AsteriskVersion('13.12.0'):
-            # Prior to 13.12.0, the join sound was played once to the channel
-            # that joined and once to the entire bridge.
-            if channel == self.__bridge_channel:
-                self.__joined_bridges += 1
-            else:
-                self.__joined_channels += 1
-        else:
-            # For 13.12.0 and up, the join sound is only played to the entire
-            # bridge. We just go ahead and bump both the joined_channels and
-            # joined_bridges counts together and "lie" about having the sound
-            # played to the individual channel
-            self.__joined_channels += 1
-            self.__joined_bridges += 1
+        # The join sound is only played to the entire bridge. We just go ahead
+        # and bump both the joined_channels and joined_bridges counts together
+        # and "lie" about having the sound played to the individual channel
+        self.__joined_channels += 1
+        self.__joined_bridges += 1
 
         if (self.__joined_bridges == len(self.calls)):
             self.test_case.expectedEvents['joinannouncetoall'] = True
diff --git a/tests/apps/directed_pickup/pickup_chan/run-test b/tests/apps/directed_pickup/pickup_chan/run-test
index 95cce85..c006b49 100755
--- a/tests/apps/directed_pickup/pickup_chan/run-test
+++ b/tests/apps/directed_pickup/pickup_chan/run-test
@@ -15,7 +15,6 @@
 
 sys.path.append("lib/python")
 from asterisk.asterisk import Asterisk
-from asterisk.version import AsteriskVersion
 from asterisk.test_case import TestCase
 
 LOGGER = logging.getLogger(__name__)
@@ -29,7 +28,6 @@
         self.bridgeCount = 0
         self.create_asterisk()
 
-        self.bridgingModel12 = False
         self.bridge = None
         self.firstChannelBridged = False
         self.secondChannelBridged = False
@@ -40,7 +38,7 @@
 
     def check_test_done(self):
 
-        if self.picked_up and (not self.bridgingModel12 or (self.firstChannelBridged and self.secondChannelBridged)):
+        if self.picked_up and self.firstChannelBridged and self.secondChannelBridged:
             self.set_passed(True)
             self.ami[0].hangup(self.firstChannel).addCallback(self.hangup)
             LOGGER.info("Both first and second channel detected; passing test")
@@ -91,8 +89,6 @@
 
         LOGGER.info("Detected second channel in Pickup: %s" % self.secondChannel)
         self.picked_up = True
-        if not self.bridgingModel12:
-            self.ami[0].registerEvent('Bridge', self.check_Bridge)
         self.check_test_done()
 
     def check_UserEvent(self, ami, event):
@@ -105,8 +101,7 @@
 
         self.ami[0].registerEvent('Pickup', self.check_Pickup)
 
-        if self.bridgingModel12:
-            self.ami[0].registerEvent('BridgeEnter', self.check_BridgeEnter)
+        self.ami[0].registerEvent('BridgeEnter', self.check_BridgeEnter)
 
         LOGGER.info("Originating Pickup attempt")
         self.ami[0].originate(
@@ -122,15 +117,7 @@
         LOGGER.info("Detected first channel %s" % self.firstChannel)
 
     def ami_connect(self, ami):
-        running_version = AsteriskVersion()
-        post_version = AsteriskVersion("12.0.0")
-        if running_version < post_version:
-            # Pre-Asterisk 12
-            self.ami[0].registerEvent("Dial", self.check_Dial)
-        else:
-            # Asterisk 12+
-            self.bridgingModel12 = True
-            self.ami[0].registerEvent("DialBegin", self.check_Dial)
+        self.ami[0].registerEvent("DialBegin", self.check_Dial)
         self.ami[0].registerEvent("UserEvent", self.check_UserEvent)
         LOGGER.info("Originating channel to be picked up")
         self.ami[0].originate(
diff --git a/tests/apps/queues/queue_baseline/run-test b/tests/apps/queues/queue_baseline/run-test
index bd2e5a9..87fb71a 100755
--- a/tests/apps/queues/queue_baseline/run-test
+++ b/tests/apps/queues/queue_baseline/run-test
@@ -20,7 +20,6 @@
 sys.path.append("lib/python")
 
 from asterisk.test_case import TestCase
-from asterisk.version import AsteriskVersion
 
 logger = logging.getLogger(__name__)
 
@@ -29,20 +28,12 @@
 
     def __init__(self):
         super(QueueBaseline, self).__init__()
-        self.ast_version = AsteriskVersion()
-
-        if self.ast_version < AsteriskVersion("12"):
-            join = "Join"
-            leave = "Leave"
-        else:
-            join = "QueueCallerJoin"
-            leave = "QueueCallerLeave"
 
         self.expected_events = {
-            join: False,
+            "QueueCallerJoin": False,
             "AgentCalled": False,
             "AgentConnect": False,
-            leave: False,
+            "QueueCallerLeave": False,
             "AgentComplete": False
             }
         self.events_received = 0
diff --git a/tests/apps/queues/reason_pause_ami/run-test b/tests/apps/queues/reason_pause_ami/run-test
index 4f31bed..1e6c87a 100755
--- a/tests/apps/queues/reason_pause_ami/run-test
+++ b/tests/apps/queues/reason_pause_ami/run-test
@@ -13,7 +13,6 @@
 sys.path.append("lib/python")
 from asterisk.asterisk import Asterisk
 from asterisk.test_case import TestCase
-from asterisk.version import AsteriskVersion
 from twisted.internet import reactor, defer
 from starpy import manager
 
diff --git a/tests/apps/queues/set_penalty/run-test b/tests/apps/queues/set_penalty/run-test
index ba8162e..8d78211 100755
--- a/tests/apps/queues/set_penalty/run-test
+++ b/tests/apps/queues/set_penalty/run-test
@@ -13,7 +13,6 @@
 sys.path.append("lib/python")
 from asterisk.asterisk import Asterisk
 from asterisk.test_case import TestCase
-from asterisk.version import AsteriskVersion
 from twisted.internet import reactor, defer
 from starpy import manager
 
@@ -32,12 +31,6 @@
         self.state = 0 # State of the test... determines next action and next event expectations.
         self.passed = False
         self.state_passed_flags = 0 # Meant to be used like a bit array for storing condition successes on specific states.
-        self.ast_version = AsteriskVersion()
-
-        if self.ast_version < AsteriskVersion("12"):
-            self.interface = 'location'
-        else:
-            self.interface = 'interface'
 
     #Setup loopback for QueueMemberPenalty events and set first test state
     def ami_connect(self, ami):
@@ -53,7 +46,7 @@
     #Evaluates events according to the expectations of a given state and advances the state when finished.
     def state_receive(self, event, ami):
         if (self.state == 1):
-            if (event['queue'] == "queue1" and event[self.interface] == "sip/mem1" and event['penalty'] == "1"):
+            if (event['queue'] == "queue1" and event['interface'] == "sip/mem1" and event['penalty'] == "1"):
                 logger.info("state 1: Successfully Completed")
                 self.state_advance(ami)
 
@@ -62,11 +55,11 @@
                 self.stop_reactor()
 
         elif (self.state == 2):
-            if (event['queue'] == "queue1" and event[self.interface] == "sip/mem2" and event['penalty'] == "2"):
+            if (event['queue'] == "queue1" and event['interface'] == "sip/mem2" and event['penalty'] == "2"):
                 logger.info("state 2: verified condition 1")
                 self.state_passed_flags = self.state_passed_flags | 1
 
-            elif (event['queue'] == "queue2" and event[self.interface] == "sip/mem2" and event['penalty'] == '2'):
+            elif (event['queue'] == "queue2" and event['interface'] == "sip/mem2" and event['penalty'] == '2'):
                 logger.info("state 2: verified condition 2")
                 self.state_passed_flags = self.state_passed_flags | 2
 
@@ -79,15 +72,15 @@
                 self.state_advance(ami)
 
         elif (self.state == 3):
-            if (event['queue'] == "queue1" and event[self.interface] == "sip/mem3" and event['penalty'] == '3'):
+            if (event['queue'] == "queue1" and event['interface'] == "sip/mem3" and event['penalty'] == '3'):
                 logger.info("state 3: verified condition 1")
                 self.state_passed_flags = self.state_passed_flags | 1
 
-            elif (event['queue'] == "queue2" and event[self.interface] == "sip/mem3" and event['penalty'] == '3'):
+            elif (event['queue'] == "queue2" and event['interface'] == "sip/mem3" and event['penalty'] == '3'):
                 logger.info("state 3: verified condition 2")
                 self.state_passed_flags = self.state_passed_flags | 2
 
-            elif (event['queue'] == "queue3" and event[self.interface] == "sip/mem3" and event['penalty'] == '3'):
+            elif (event['queue'] == "queue3" and event['interface'] == "sip/mem3" and event['penalty'] == '3'):
                 logger.info("state 3: verified condition 3")
                 self.state_passed_flags = self.state_passed_flags | 4
 
@@ -100,7 +93,7 @@
                 self.state_advance(ami)
 
         elif (self.state == 4):
-            if (event['queue'] == "queue3" and event[self.interface] == "sip/mem1" and event['penalty'] == '4'):
+            if (event['queue'] == "queue3" and event['interface'] == "sip/mem1" and event['penalty'] == '4'):
                 logger.info("state 4: Successfully Completed")
                 self.state_advance(ami)
 
diff --git a/tests/bridge/atxfer_nominal/transfer.py b/tests/bridge/atxfer_nominal/transfer.py
index e6eb527..97994e3 100644
--- a/tests/bridge/atxfer_nominal/transfer.py
+++ b/tests/bridge/atxfer_nominal/transfer.py
@@ -11,7 +11,6 @@
 import logging
 
 sys.path.append("lib/python")
-from version import AsteriskVersion
 
 LOGGER = logging.getLogger(__name__)
 
@@ -47,10 +46,7 @@
         self._current_feature = None
 
         self.test_object.register_feature_start_observer(self._handle_feature_start)
-        if AsteriskVersion() >= AsteriskVersion('12'):
-            self.test_object.register_ami_observer(self._handle_ami_connect)
-        else:
-            self.test_object.register_feature_end_observer(self._handle_feature_end)
+        self.test_object.register_ami_observer(self._handle_ami_connect)
 
         if (Transfer.__singleton_instance == None):
             Transfer.__singleton_instance = self
@@ -71,13 +67,8 @@
         LOGGER.debug('Setting current feature to %s' % str(feature))
         self._current_feature = feature
 
-    def _handle_feature_end(self, test_object, feature):
-        ''' Callback for the BridgeTestCase feature detected event
-
-        Keyword Arguments:
-        test_object The BridgeTestCase object
-        feature The specific feature that was executed
-        '''
+    def _handle_feature_end(self):
+        ''' Callback for the BridgeTestCase feature detected event'''
         LOGGER.debug("current_feature: %s\n" % self._current_feature)
         if self._current_feature['who'] == 'alice':
             ami = self.test_object.ami_bob
@@ -96,7 +87,7 @@
         ''' Handle the AttendedTransfer event. Once the event has
         triggered, the call can be torn down. '''
         LOGGER.debug('ami %d: received event %s' % (ami.id, event))
-        self._handle_feature_end(None, None)
+        self._handle_feature_end()
 
     def complete_attended_transfer(self):
         '''
diff --git a/tests/bridge/blonde_nominal/transfer.py b/tests/bridge/blonde_nominal/transfer.py
index bd5ffac..600c28e 100644
--- a/tests/bridge/blonde_nominal/transfer.py
+++ b/tests/bridge/blonde_nominal/transfer.py
@@ -11,7 +11,6 @@
 import logging
 
 sys.path.append("lib/python")
-from version import AsteriskVersion
 
 LOGGER = logging.getLogger(__name__)
 
@@ -47,8 +46,6 @@
         self._current_feature = None
 
         self.test_object.register_feature_start_observer(self._handle_feature_start)
-        if AsteriskVersion() < AsteriskVersion('12'):
-            self.test_object.register_feature_end_observer(self._handle_feature_end)
         self.test_object.register_ami_observer(self._handle_ami_connect)
 
         if (Transfer.__singleton_instance == None):
@@ -59,8 +56,7 @@
         if (ami.id != 0):
             return
         ami.registerEvent('Newstate', self._handle_new_state)
-        if AsteriskVersion() >= AsteriskVersion('12'):
-            ami.registerEvent('AttendedTransfer', self._handle_attended_transfer)
+        ami.registerEvent('AttendedTransfer', self._handle_attended_transfer)
 
     def _handle_new_state(self, ami, event):
         ''' Handle a new state change. When we get a ringing back on the
@@ -87,13 +83,8 @@
         LOGGER.debug('Setting current feature to %s' % str(feature))
         self._current_feature = feature
 
-    def _handle_feature_end(self, test_object, feature):
-        ''' Callback for the BridgeTestCase feature detected event
-
-        Keyword Arguments:
-        test_object The BridgeTestCase object
-        feature The specific feature that was executed
-        '''
+    def _handle_feature_end(self):
+        ''' Callback for the BridgeTestCase feature detected event'''
         if self._current_feature['who'] == 'alice':
             ami = self.test_object.ami_bob
             channel = self.test_object.bob_channel
@@ -110,5 +101,5 @@
     def _handle_attended_transfer(self, ami, event):
         ''' Handle the AttendedTransfer event. Once the event has
         triggered, the call can be torn down. '''
-        self._handle_feature_end(None, None)
+        self._handle_feature_end()
 
diff --git a/tests/bridge/dial_LS_options/Tester.py b/tests/bridge/dial_LS_options/Tester.py
index af2557b..9ed7b46 100755
--- a/tests/bridge/dial_LS_options/Tester.py
+++ b/tests/bridge/dial_LS_options/Tester.py
@@ -13,7 +13,6 @@
 import time
 
 sys.path.append("lib/python")
-from version import AsteriskVersion
 
 LOGGER = logging.getLogger(__name__)
 TOLERANCE = 1.0
@@ -52,15 +51,7 @@
         self.ami = ami
         self.ami.registerEvent('Hangup', self.log_hangup_time)
         self.ami.registerEvent('TestEvent', self.log_warnings)
-        if AsteriskVersion() >= AsteriskVersion('12'):
-            self.ami.registerEvent('BridgeEnter', self.log_bridge_enter_time)
-        else:
-            self.ami.registerEvent('Bridge', self.log_bridge_time)
-
-    def log_bridge_time(self, ami, event):
-        if not self.bridge_time:
-            self.bridge_time = time.time()
-            LOGGER.info("Bridge started at time %f" % self.bridge_time)
+        self.ami.registerEvent('BridgeEnter', self.log_bridge_enter_time)
 
     def log_bridge_enter_time(self, ami, event):
         self.bridge_enters_received += 1
@@ -100,8 +91,7 @@
             self.test_object.set_passed(False)
 
         max_triggers = 1
-        if self.current_call['hangup_style'] == 'BRIDGE_TIMELIMIT' \
-            and AsteriskVersion() >= AsteriskVersion('12'):
+        if self.current_call['hangup_style'] == 'BRIDGE_TIMELIMIT':
             max_triggers = 2
 
         if 1 != self.num_hangup_triggers and max_triggers != self.num_hangup_triggers:
diff --git a/tests/bridge/parkcall/Executioner.py b/tests/bridge/parkcall/Executioner.py
index a4353bc..27d4813 100755
--- a/tests/bridge/parkcall/Executioner.py
+++ b/tests/bridge/parkcall/Executioner.py
@@ -13,8 +13,6 @@
 
 sys.path.append("lib/python")
 
-from version import AsteriskVersion
-
 LOGGER = logging.getLogger(__name__)
 
 
@@ -25,18 +23,9 @@
         test_object.register_ami_observer(self.ami_connect)
         self.test_object = test_object
 
-        running_version = AsteriskVersion()
-
         self.calls = []
         self.calls.append({'parker': 'alice', 'parkee': 'bob'})
         self.calls.append({'parker': 'bob', 'parkee': 'alice'})
-
-        # Parking events for this test vary with Asterisk 12 and
-        # up from prior versions.
-        if (running_version < AsteriskVersion("12.0.0")):
-            self.asterisk12Events = False
-        else:
-            self.asterisk12Events = True
 
         self.parking_events_received = 0
 
@@ -52,11 +41,7 @@
         self.ami.registerEvent('ParkedCall', self.check_park)
 
     def check_hangup(self, ami, event):
-        # We only hangup when we know that both the channel that initiated
-        # park and our zombie channel are gone. There are no zombies in
-        # Asterisk 12 mode, so we hang up on the first hangup.
-        if not self.asterisk12Events and self.hangups_processed == 1 \
-                or self.asterisk12Events and self.hangups_processed == 0:
+        if self.hangups_processed == 0:
             ami.hangup(self.parked_channel)
 
         self.hangups_processed += 1
@@ -67,12 +52,8 @@
         this_parker = this_expectation['parker']
         this_parkee = this_expectation['parkee']
 
-        if self.asterisk12Events:
-            parker_field = 'parkerdialstring'
-            parkee_field = 'parkeechannel'
-        else:
-            parker_field = 'from'
-            parkee_field = 'channel'
+        parker_field = 'parkerdialstring'
+        parkee_field = 'parkeechannel'
 
         this_result_parker = event.get(parker_field)
         this_result_parkee = event.get(parkee_field)
diff --git a/tests/bridge/parkcall_blindxfer/Hangup.py b/tests/bridge/parkcall_blindxfer/Hangup.py
index 9b79be2..84edebb 100755
--- a/tests/bridge/parkcall_blindxfer/Hangup.py
+++ b/tests/bridge/parkcall_blindxfer/Hangup.py
@@ -12,18 +12,11 @@
 
 sys.path.append("lib/python")
 
-from version import AsteriskVersion
-
 LOGGER = logging.getLogger(__name__)
 
 
 def handle_parkedcall(ami, event):
-    running_version = AsteriskVersion()
-
-    if running_version >= AsteriskVersion("12.0.0"):
-        parkee = event.get('parkeechannel')
-    else:
-        parkee = event.get('channel')
+    parkee = event.get('parkeechannel')
 
     if parkee is None:
         LOGGER.error("Receved ParkedCall event without a Parkee.\n")
diff --git a/tests/bridge/parkcall_bridgefeatures/Executioner.py b/tests/bridge/parkcall_bridgefeatures/Executioner.py
index a4353bc..5061755 100755
--- a/tests/bridge/parkcall_bridgefeatures/Executioner.py
+++ b/tests/bridge/parkcall_bridgefeatures/Executioner.py
@@ -13,8 +13,6 @@
 
 sys.path.append("lib/python")
 
-from version import AsteriskVersion
-
 LOGGER = logging.getLogger(__name__)
 
 
@@ -25,18 +23,9 @@
         test_object.register_ami_observer(self.ami_connect)
         self.test_object = test_object
 
-        running_version = AsteriskVersion()
-
         self.calls = []
         self.calls.append({'parker': 'alice', 'parkee': 'bob'})
         self.calls.append({'parker': 'bob', 'parkee': 'alice'})
-
-        # Parking events for this test vary with Asterisk 12 and
-        # up from prior versions.
-        if (running_version < AsteriskVersion("12.0.0")):
-            self.asterisk12Events = False
-        else:
-            self.asterisk12Events = True
 
         self.parking_events_received = 0
 
@@ -55,8 +44,7 @@
         # We only hangup when we know that both the channel that initiated
         # park and our zombie channel are gone. There are no zombies in
         # Asterisk 12 mode, so we hang up on the first hangup.
-        if not self.asterisk12Events and self.hangups_processed == 1 \
-                or self.asterisk12Events and self.hangups_processed == 0:
+        if self.hangups_processed == 0:
             ami.hangup(self.parked_channel)
 
         self.hangups_processed += 1
@@ -67,12 +55,8 @@
         this_parker = this_expectation['parker']
         this_parkee = this_expectation['parkee']
 
-        if self.asterisk12Events:
-            parker_field = 'parkerdialstring'
-            parkee_field = 'parkeechannel'
-        else:
-            parker_field = 'from'
-            parkee_field = 'channel'
+        parker_field = 'parkerdialstring'
+        parkee_field = 'parkeechannel'
 
         this_result_parker = event.get(parker_field)
         this_result_parkee = event.get(parkee_field)
diff --git a/tests/bridge/parkcall_timeout/comebacktoorigin_no/Executioner.py b/tests/bridge/parkcall_timeout/comebacktoorigin_no/Executioner.py
index be9a186..c08628e 100755
--- a/tests/bridge/parkcall_timeout/comebacktoorigin_no/Executioner.py
+++ b/tests/bridge/parkcall_timeout/comebacktoorigin_no/Executioner.py
@@ -12,8 +12,6 @@
 
 sys.path.append("lib/python")
 
-from version import AsteriskVersion
-
 LOGGER = logging.getLogger(__name__)
 
 
@@ -23,12 +21,6 @@
         self.parked_channel = None
         test_object.register_ami_observer(self.ami_connect)
         self.test_object = test_object
-
-        running_version = AsteriskVersion()
-        if (running_version < AsteriskVersion("12.0.0")):
-            self.asterisk12Events = False
-        else:
-            self.asterisk12Events = True
 
         self.calls = []
         self.calls.append({'test': '1', 'parker': 'SIP/alice',
@@ -64,19 +56,10 @@
         appdata = event.get('appdata')
         registrar = event.get('registrar')
 
-        if self.asterisk12Events:
-            # Asterisk 12's parking uses a different registrar from previous
-            # versions and puts features on channels directly instead of in
-            # the dialplan
-            if appdata != 'SIP/alice,3':
-                not_right = True
-            if registrar != 'res_parking':
-                not_right = True
-        else:
-            if appdata != 'SIP/alice,3,Hk':
-                not_right = True
-            if registrar != 'features':
-                not_right = True
+        if appdata != 'SIP/alice,3':
+            not_right = True
+        if registrar != 'res_parking':
+            not_right = True
 
         if not_right:
             # We don't handle failure here since the last check_user_event
diff --git a/tests/bridge/parkcall_timeout/comebacktoorigin_yes/Executioner.py b/tests/bridge/parkcall_timeout/comebacktoorigin_yes/Executioner.py
index 69166c8..26c62d8 100755
--- a/tests/bridge/parkcall_timeout/comebacktoorigin_yes/Executioner.py
+++ b/tests/bridge/parkcall_timeout/comebacktoorigin_yes/Executioner.py
@@ -14,8 +14,6 @@
 
 LOGGER = logging.getLogger(__name__)
 
-from version import AsteriskVersion
-
 
 class Executioner(object):
     def __init__(self, module_config, test_object):
@@ -24,12 +22,6 @@
         self.parked_channel = None
         test_object.register_ami_observer(self.ami_connect)
         self.test_object = test_object
-
-        running_version = AsteriskVersion()
-        if (running_version < AsteriskVersion("12.0.0")):
-            self.asterisk12Events = False
-        else:
-            self.asterisk12Events = True
 
         self.calls = []
         self.calls.append({'parker': 'SIP/alice', 'lot': 'parkinglot_test1',
@@ -82,13 +74,10 @@
         if (event.get('status') != self.current_call['status']):
             num_failures += 1
 
-        if self.asterisk12Events:
-            # These values aren't set in Asterisk 11 when
-            # comebacktoorigin = yes, but they are in 12.
-            if (event.get('slot') != self.current_call['slot']):
-                num_failures += 1
-            if (event.get('lot') != self.current_call['lot']):
-                num_failures += 1
+        if (event.get('slot') != self.current_call['slot']):
+            num_failures += 1
+        if (event.get('lot') != self.current_call['lot']):
+            num_failures += 1
 
         if (num_failures):
             LOGGER.info("Failing event: %s" % event)
diff --git a/tests/callparking/run-test b/tests/callparking/run-test
index ac6207a..cc78670 100755
--- a/tests/callparking/run-test
+++ b/tests/callparking/run-test
@@ -13,7 +13,6 @@
 
 sys.path.append("lib/python")
 from asterisk.test_case import TestCase
-from asterisk.version import AsteriskVersion
 
 logger = logging.getLogger(__name__)
 
@@ -23,10 +22,7 @@
         TestCase.__init__(self)
 
         self.ami_count = 0
-        self.parking_var = "exten"
-
-        if AsteriskVersion() >= AsteriskVersion('12'):
-            self.parking_var = "parkingspace"
+        self.parking_var = "parkingspace"
 
         # Initial parked call subtest.
         self.expected_space = 701
diff --git a/tests/callparking_retrieval/run-test b/tests/callparking_retrieval/run-test
index fd93f4a..08de7dd 100755
--- a/tests/callparking_retrieval/run-test
+++ b/tests/callparking_retrieval/run-test
@@ -13,7 +13,6 @@
 
 sys.path.append("lib/python")
 from asterisk.test_case import TestCase
-from asterisk.version import AsteriskVersion
 
 LOGGER = logging.getLogger(__name__)
 
@@ -24,11 +23,6 @@
     def __init__(self):
         """Prepare the test object"""
         TestCase.__init__(self)
-
-        self.mode_12 = False
-
-        if AsteriskVersion() >= AsteriskVersion('12'):
-            self.mode_12 = True
 
         self.channel_parked = None
         self.times_parked = 0
@@ -49,10 +43,7 @@
     def check_parkedcall(self, ami, event):
         """Check the values of a ParkedCall event against expectations"""
         self.times_parked += 1
-        if self.mode_12:
-            parkee = event.get('parkeechannel')
-        else:
-            parkee = event.get('channel')
+        parkee = event.get('parkeechannel')
         LOGGER.info("Parkee: %s" % parkee)
 
         if not "IAX2/usera-" in parkee:
@@ -87,10 +78,7 @@
     def check_unparkedcall(self, ami, event):
         """Check the values of an UnParkedCall event against expectations"""
         self.times_unparked += 1
-        if self.mode_12:
-            retriever = event.get('retrieverchannel')
-        else:
-            retriever = event.get('from')
+        retriever = event.get('retrieverchannel')
 
         LOGGER.info("Retriever: %s" % retriever)
 
diff --git a/tests/channels/SIP/SDP_attribute_passthrough/run-test b/tests/channels/SIP/SDP_attribute_passthrough/run-test
index 79b8e75..5512e5a 100755
--- a/tests/channels/SIP/SDP_attribute_passthrough/run-test
+++ b/tests/channels/SIP/SDP_attribute_passthrough/run-test
@@ -15,7 +15,6 @@
 sys.path.append("lib/python")
 
 from asterisk.asterisk import Asterisk
-from asterisk.version import AsteriskVersion
 from asterisk.test_case import TestCase
 from asterisk.sipp import SIPpScenario
 from twisted.internet import reactor
@@ -29,17 +28,10 @@
         self.create_asterisk()
         self.sipp_phone_a_scenarios = [{'scenario':'phone_A_speex.xml','-i':'127.0.0.2','-p':'5065'},]
         self.sipp_phone_b_scenarios = [{'scenario':'phone_B_speex.xml','-i':'127.0.0.3','-p':'5066'},]
-        if (AsteriskVersion() < AsteriskVersion("13")):
-            self.sipp_phone_a_scenarios.extend([{'scenario':'phone_A_h263.xml','-i':'127.0.0.2','-p':'5061'},
-                                                {'scenario':'phone_A_h264.xml','-i':'127.0.0.2','-p':'5062'},])
-                                           
-            self.sipp_phone_b_scenarios.extend([{'scenario':'phone_B_h263.xml','-i':'127.0.0.3','-p':'5063'},
-                                                {'scenario':'phone_B_h264.xml','-i':'127.0.0.3','-p':'5064'},])
-        else:
-            self.sipp_phone_a_scenarios.extend([{'scenario':'phone_A_h263_13.xml','-i':'127.0.0.2','-p':'5061'},
-                                                {'scenario':'phone_A_h264_13.xml','-i':'127.0.0.2','-p':'5062'},])
-            self.sipp_phone_b_scenarios.extend([{'scenario':'phone_B_h263_13.xml','-i':'127.0.0.3','-p':'5063'},
-                                                {'scenario':'phone_B_h264_13.xml','-i':'127.0.0.3','-p':'5064'},])
+        self.sipp_phone_a_scenarios.extend([{'scenario':'phone_A_h263_13.xml','-i':'127.0.0.2','-p':'5061'},
+                                            {'scenario':'phone_A_h264_13.xml','-i':'127.0.0.2','-p':'5062'},])
+        self.sipp_phone_b_scenarios.extend([{'scenario':'phone_B_h263_13.xml','-i':'127.0.0.3','-p':'5063'},
+                                            {'scenario':'phone_B_h264_13.xml','-i':'127.0.0.3','-p':'5064'},])
 
         self.passed = True
         self.__test_counter = 0
diff --git a/tests/channels/SIP/SDP_attribute_passthrough/sipp/phone_A_h263.xml b/tests/channels/SIP/SDP_attribute_passthrough/sipp/phone_A_h263.xml
deleted file mode 100644
index f36c678..0000000
--- a/tests/channels/SIP/SDP_attribute_passthrough/sipp/phone_A_h263.xml
+++ /dev/null
@@ -1,97 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!DOCTYPE scenario SYSTEM "sipp.dtd">
-
-<scenario name="Channel Test">
-  <send retrans="500">
-    <![CDATA[
-
-      INVITE sip:test-h263@[remote_ip]:[remote_port] SIP/2.0
-      Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
-      From: test1 <sip:phoneA@[local_ip]:[local_port]>;tag=[call_number]
-      To: test <sip:test@[remote_ip]:[remote_port]>
-      Call-ID: [call_id]
-      CSeq: 1 INVITE
-      Contact: sip:test@[local_ip]:[local_port]
-      Max-Forwards: 70
-      Subject: Performance Test
-      User-Agent: Channel Param Test
-      Content-Type: application/sdp
-      Content-Length: [len]
-
-      v=0
-      o=phoneA 53655765 2353687637 IN IP[local_ip_type] [local_ip]
-      s=-
-      c=IN IP[media_ip_type] [media_ip]
-      t=0 0
-      m=audio 6000 RTP/AVP 0
-      a=rtpmap:0 PCMU/8000
-      m=video 6002 RTP/AVP 34
-      a=rtpmap:34 H263/90000
-      a=fmtp:34 SQCIF=1;QCIF=1;CIF=1;CIF4=1;CIF16=1;F=1;I=1;J=1;T=1;K=1;N=1;PAR=255:255;BPP=65535;HRD=1
-
-    ]]>
-  </send>
-
-  <recv response="100"
-        optional="true">
-  </recv>
-
-  <recv response="180" optional="true">
-  </recv>
-
-  <recv response="183" optional="true">
-  </recv>
-
-  <recv response="200" rtd="true">
-    <action>
-      <ereg regexp="m=video [0-9]{1,5} RTP/AVP( [0-9]{1,3})+..*a=rtpmap:34 H263/90000.*a=fmtp:34 SQCIF=1;QCIF=1;CIF=1;CIF4=1;CIF16=1;F=1;I=1;J=1;T=1;K=1;N=1;PAR=255:255;BPP=65535;HRD=1"
-            search_in="body" check_it="true" assign_to="1"/>
-      <strcmp assign_to="1" variable="1" value=""/>
-    </action>
-  </recv>
-
-  <send>
-    <![CDATA[
-
-      ACK sip:test-h263@[remote_ip]:[remote_port] SIP/2.0
-      Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
-      From: test1 <sip:phoneA@[local_ip]:[local_port]>;tag=[call_number]
-      To: test <sip:test@[remote_ip]:[remote_port]>[peer_tag_param]
-      Call-ID: [call_id]
-      CSeq: 1 ACK
-      Contact: sip:kartoffelsalat@[local_ip]:[local_port]
-      Max-Forwards: 70
-      Subject: Performance Test
-      Content-Length: 0
-
-    ]]>
-  </send>
-
-  <send retrans="500">
-    <![CDATA[
-
-      BYE sip:test-h263@[remote_ip]:[remote_port] SIP/2.0
-      Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
-      From: test1 <sip:phoneA@[local_ip]:[local_port]>;tag=[call_number]
-      To: test <sip:test@[remote_ip]:[remote_port]>[peer_tag_param]
-      Call-ID: [call_id]
-      CSeq: 2 BYE
-      Contact: sip:kartoffelsalat@[local_ip]:[local_port]
-      Max-Forwards: 70
-      Subject: Performance Test
-      Content-Length: 0
-
-    ]]>
-  </send>
-
-  <recv response="200" crlf="true">
-  </recv>
-
-  <!-- definition of the response time repartition table (unit is ms)   -->
-  <ResponseTimeRepartition value="10, 20, 30, 40, 50, 100, 150, 200"/>
-
-  <!-- definition of the call length repartition table (unit is ms)     -->
-  <CallLengthRepartition value="10, 50, 100, 500, 1000, 5000, 10000"/>
-
-</scenario>
-
diff --git a/tests/channels/SIP/SDP_attribute_passthrough/sipp/phone_A_h264.xml b/tests/channels/SIP/SDP_attribute_passthrough/sipp/phone_A_h264.xml
deleted file mode 100644
index c0703eb..0000000
--- a/tests/channels/SIP/SDP_attribute_passthrough/sipp/phone_A_h264.xml
+++ /dev/null
@@ -1,97 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!DOCTYPE scenario SYSTEM "sipp.dtd">
-
-<scenario name="Channel Test">
-  <send retrans="500">
-    <![CDATA[
-
-      INVITE sip:test-h264@[remote_ip]:[remote_port] SIP/2.0
-      Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
-      From: test1 <sip:phoneA@[local_ip]:[local_port]>;tag=[call_number]
-      To: test <sip:test@[remote_ip]:[remote_port]>
-      Call-ID: [call_id]
-      CSeq: 1 INVITE
-      Contact: sip:test@[local_ip]:[local_port]
-      Max-Forwards: 70
-      Subject: Performance Test
-      User-Agent: Channel Param Test
-      Content-Type: application/sdp
-      Content-Length: [len]
-
-      v=0
-      o=phoneA 53655765 2353687637 IN IP[local_ip_type] [local_ip]
-      s=-
-      c=IN IP[media_ip_type] [media_ip]
-      t=0 0
-      m=audio 6000 RTP/AVP 0
-      a=rtpmap:0 PCMU/8000
-      m=video 6002 RTP/AVP 99
-      a=rtpmap:99 H264/90000
-      a=fmtp:99 profile-level-id=42801e;packetization-mode=1;max-mbps=48600
-
-    ]]>
-  </send>
-
-  <recv response="100"
-        optional="true">
-  </recv>
-
-  <recv response="180" optional="true">
-  </recv>
-
-  <recv response="183" optional="true">
-  </recv>
-
-  <recv response="200" rtd="true">
-    <action>
-      <ereg regexp="m=video [0-9]{1,5} RTP/AVP( [0-9]{1,3})+..*a=rtpmap:99 H264/90000.*a=fmtp:99 profile-level-id=42801E;max-mbps=48600;packetization-mode=1"
-            search_in="body" check_it="true" assign_to="1"/>
-      <strcmp assign_to="1" variable="1" value=""/>
-    </action>
-  </recv>
-
-  <send>
-    <![CDATA[
-
-      ACK sip:test-h264@[remote_ip]:[remote_port] SIP/2.0
-      Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
-      From: test1 <sip:phoneA@[local_ip]:[local_port]>;tag=[call_number]
-      To: test <sip:test@[remote_ip]:[remote_port]>[peer_tag_param]
-      Call-ID: [call_id]
-      CSeq: 1 ACK
-      Contact: sip:kartoffelsalat@[local_ip]:[local_port]
-      Max-Forwards: 70
-      Subject: Performance Test
-      Content-Length: 0
-
-    ]]>
-  </send>
-
-  <send retrans="500">
-    <![CDATA[
-
-      BYE sip:test-h264@[remote_ip]:[remote_port] SIP/2.0
-      Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
-      From: test1 <sip:phoneA@[local_ip]:[local_port]>;tag=[call_number]
-      To: test <sip:test@[remote_ip]:[remote_port]>[peer_tag_param]
-      Call-ID: [call_id]
-      CSeq: 2 BYE
-      Contact: sip:kartoffelsalat@[local_ip]:[local_port]
-      Max-Forwards: 70
-      Subject: Performance Test
-      Content-Length: 0
-
-    ]]>
-  </send>
-
-  <recv response="200" crlf="true">
-  </recv>
-
-  <!-- definition of the response time repartition table (unit is ms)   -->
-  <ResponseTimeRepartition value="10, 20, 30, 40, 50, 100, 150, 200"/>
-
-  <!-- definition of the call length repartition table (unit is ms)     -->
-  <CallLengthRepartition value="10, 50, 100, 500, 1000, 5000, 10000"/>
-
-</scenario>
-
diff --git a/tests/channels/SIP/SDP_attribute_passthrough/sipp/phone_B_h263.xml b/tests/channels/SIP/SDP_attribute_passthrough/sipp/phone_B_h263.xml
deleted file mode 100644
index bb2159e..0000000
--- a/tests/channels/SIP/SDP_attribute_passthrough/sipp/phone_B_h263.xml
+++ /dev/null
@@ -1,89 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!DOCTYPE scenario SYSTEM "sipp.dtd">
-
-<scenario name="Phone B INVITE with H.263 and answer with H.263">
-	<Global variables="global_call_id"/>
-
-	<recv request="INVITE" crlf="true">
-		<action>
-			<ereg regexp=".*"
-				header="Call-ID:"
-				search_in="hdr"
-				check_it="true"
-				assign_to="global_call_id"/>
-			<ereg regexp="m=video [0-9]{1,5} RTP/AVP( [0-9]{1,3})+..*a=rtpmap:34 H263/90000.*a=fmtp:34 SQCIF=1;QCIF=1;CIF=1;CIF4=1;CIF16=1;F=1;I=1;J=1;T=1;K=1;N=1;PAR=255:255;BPP=65535;HRD=1"
-			      search_in="body" check_it="true" assign_to="1"/>
-			<strcmp assign_to="1" variable="1" value=""/>
-
-		</action>
-	</recv>
-
-	<send>
-		<![CDATA[
-			SIP/2.0 100 Trying
-			[last_Via:]
-			[last_From:]
-			[last_To:];tag=[call_number]
-			[last_Call-ID:]
-			[last_CSeq:]
-			Contact: <sip:bob@[local_ip]:[local_port];transport=[transport]>
-			User-Agent: PolycomSoundPointIP-SPIP_430-UA/3.2.3.1734
-			Accept-Language: en
-			Content-Length: 0
-		]]>
-	</send>
-
-	<pause milliseconds="200"/>
-
-	<send retrans="500">
-		<![CDATA[
-			SIP/2.0 200 OK
-			[last_Via:]
-			[last_From:]
-			[last_To:];tag=[call_number]
-			[last_Call-ID:]
-			[last_CSeq:]
-			Contact: <sip:bob@[local_ip]:[local_port];transport=[transport]>
-			Allow: INVITE, ACK, BYE, CANCEL, OPTIONS, INFO, MESSAGE, SUBSCRIBE, NOTIFY, PRACK, UPDATE, REFER
-			Supported: 100rel,replaces
-			User-Agent: PolycomSoundPointIP-SPIP_430-UA/3.2.3.1734
-			Accept-Language: en
-			Content-Type: application/sdp
-			Content-Length: [len]
-
-			v=0
-			o=guest3 53655765 2353687637 IN IP[local_ip_type] [local_ip]
-			s=-
-			c=IN IP[media_ip_type] [media_ip]
-			t=0 0
-			m=video 6002 RTP/AVP 34
-			a=rtpmap:34 H263/90000
-			a=fmtp:34 SQCIF=1;QCIF=1;CIF=1;CIF4=1;CIF16=1;F=1;I=1;J=1;T=1;K=1;N=1;PAR=255:255;BPP=65535;HRD=1
-
-		]]>
-	</send>
-
-	<!-- RECV ACK -->
-	<recv request="ACK"/>
-
-	<recv request="BYE"/>
-
-        <send retrans="500">
-                <![CDATA[
-                        SIP/2.0 200 OK
-                        [last_Via:]
-                        [last_From:]
-                        [last_To:];tag=[call_number]
-                        [last_Call-ID:]
-                        [last_CSeq:]
-                        Contact: <sip:bob@[local_ip]:[local_port];transport=[transport]>
-                        Allow: INVITE, ACK, BYE, CANCEL, OPTIONS, INFO, MESSAGE, SUBSCRIBE, NOTIFY, PRACK, UPDATE, REFER
-                        Supported: 100rel,replaces
-                        User-Agent: PolycomSoundPointIP-SPIP_430-UA/3.2.3.1734
-                        Accept-Language: en
-                        Content-Type: application/sdp
-                        Content-Length: 0
-                ]]>
-        </send>
-
-</scenario>
diff --git a/tests/channels/SIP/SDP_attribute_passthrough/sipp/phone_B_h264.xml b/tests/channels/SIP/SDP_attribute_passthrough/sipp/phone_B_h264.xml
deleted file mode 100644
index 1716969..0000000
--- a/tests/channels/SIP/SDP_attribute_passthrough/sipp/phone_B_h264.xml
+++ /dev/null
@@ -1,89 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!DOCTYPE scenario SYSTEM "sipp.dtd">
-
-<scenario name="Phone B INVITE with H.264 and answer with H.264">
-	<Global variables="global_call_id"/>
-
-	<recv request="INVITE" crlf="true">
-		<action>
-			<ereg regexp=".*"
-				header="Call-ID:"
-				search_in="hdr"
-				check_it="true"
-				assign_to="global_call_id"/>
-			<ereg regexp="m=video [0-9]{1,5} RTP/AVP( [0-9]{1,3})+..*a=rtpmap:9[6-9]|1{0,1}[0-9]|12[0-7] H264/90000.*a=fmtp:9[6-9]|1{0,1}[0-9]|12[0-7] profile-level-id=42801E;max-mbps=48600;packetization-mode=1"
-			      search_in="body" check_it="true" assign_to="1"/>
-			<strcmp assign_to="1" variable="1" value=""/>
-
-		</action>
-	</recv>
-
-	<send>
-		<![CDATA[
-			SIP/2.0 100 Trying
-			[last_Via:]
-			[last_From:]
-			[last_To:];tag=[call_number]
-			[last_Call-ID:]
-			[last_CSeq:]
-			Contact: <sip:bob@[local_ip]:[local_port];transport=[transport]>
-			User-Agent: PolycomSoundPointIP-SPIP_430-UA/3.2.3.1734
-			Accept-Language: en
-			Content-Length: 0
-		]]>
-	</send>
-
-	<pause milliseconds="200"/>
-
-	<send retrans="500">
-		<![CDATA[
-			SIP/2.0 200 OK
-			[last_Via:]
-			[last_From:]
-			[last_To:];tag=[call_number]
-			[last_Call-ID:]
-			[last_CSeq:]
-			Contact: <sip:bob@[local_ip]:[local_port];transport=[transport]>
-			Allow: INVITE, ACK, BYE, CANCEL, OPTIONS, INFO, MESSAGE, SUBSCRIBE, NOTIFY, PRACK, UPDATE, REFER
-			Supported: 100rel,replaces
-			User-Agent: PolycomSoundPointIP-SPIP_430-UA/3.2.3.1734
-			Accept-Language: en
-			Content-Type: application/sdp
-			Content-Length: [len]
-
-			v=0
-			o=guest3 53655765 2353687637 IN IP[local_ip_type] [local_ip]
-			s=-
-			c=IN IP[media_ip_type] [media_ip]
-			t=0 0
-			m=video 6002 RTP/AVP 99
-			a=rtpmap:99 H264/90000
-			a=fmtp:99 profile-level-id=42801e;packetization-mode=1;max-mbps=48600
-
-		]]>
-	</send>
-
-	<!-- RECV ACK -->
-	<recv request="ACK"/>
-
-	<recv request="BYE"/>
-
-        <send retrans="500">
-                <![CDATA[
-                        SIP/2.0 200 OK
-                        [last_Via:]
-                        [last_From:]
-                        [last_To:];tag=[call_number]
-                        [last_Call-ID:]
-                        [last_CSeq:]
-                        Contact: <sip:bob@[local_ip]:[local_port];transport=[transport]>
-                        Allow: INVITE, ACK, BYE, CANCEL, OPTIONS, INFO, MESSAGE, SUBSCRIBE, NOTIFY, PRACK, UPDATE, REFER
-                        Supported: 100rel,replaces
-                        User-Agent: PolycomSoundPointIP-SPIP_430-UA/3.2.3.1734
-                        Accept-Language: en
-                        Content-Type: application/sdp
-                        Content-Length: 0
-                ]]>
-        </send>
-
-</scenario>
diff --git a/tests/channels/SIP/SDP_offer_answer/run-test b/tests/channels/SIP/SDP_offer_answer/run-test
index d11f55c..47a5f03 100755
--- a/tests/channels/SIP/SDP_offer_answer/run-test
+++ b/tests/channels/SIP/SDP_offer_answer/run-test
@@ -14,7 +14,6 @@
 
 from twisted.internet import reactor
 from asterisk.sipp import SIPpTest
-from asterisk.version import AsteriskVersion
 
 
 WORKING_DIR = "SIP/SDP_offer_answer"
@@ -41,11 +40,8 @@
 
 # generate SIPP scenarios with appropriate port numbers and the config to go with it
 def main():
-    if AsteriskVersion() > AsteriskVersion("11"):
-        SIPP_SCENARIOS.append({'scenario' : 'decline_multistream.xml'})
-        SIPP_SCENARIOS.append({'scenario' : 'decline_unsupported_image_multi.xml'})
-    else:
-        SIPP_SCENARIOS.append({'scenario' : 'decline_unsupported_image_multi_1.8.xml'})
+    SIPP_SCENARIOS.append({'scenario' : 'decline_multistream.xml'})
+    SIPP_SCENARIOS.append({'scenario' : 'decline_unsupported_image_multi.xml'})
     test = SIPpTest(WORKING_DIR, TEST_DIR, SIPP_SCENARIOS)
     reactor.run()
     if not test.passed:
diff --git a/tests/channels/SIP/SDP_offer_answer/sipp/decline_unsupported_image_multi_1.8.xml b/tests/channels/SIP/SDP_offer_answer/sipp/decline_unsupported_image_multi_1.8.xml
deleted file mode 100644
index b4772b5..0000000
--- a/tests/channels/SIP/SDP_offer_answer/sipp/decline_unsupported_image_multi_1.8.xml
+++ /dev/null
@@ -1,118 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!DOCTYPE scenario SYSTEM "sipp.dtd">
-
-<scenario name="Channel Test">
-  <send retrans="500">
-    <![CDATA[
-      INVITE sip:test@[remote_ip]:[remote_port] SIP/2.0
-      Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
-      From: test1 <sip:guest1@[local_ip]:[local_port]>;tag=[call_number]
-      To: test <sip:test@[remote_ip]:[remote_port]>
-      Call-ID: [call_id]
-      CSeq: 1 INVITE
-      Contact: sip:test@[local_ip]:[local_port]
-      Max-Forwards: 70
-      Subject: Performance Test
-      User-Agent: Channel Param Test
-      Content-Type: application/sdp
-      Content-Length: [len]
-
-      v=0
-      o=guest1 53655765 2353687637 IN IP[local_ip_type] [local_ip]
-      s=-
-      c=IN IP[media_ip_type] [media_ip]
-      t=0 0
-      m=image 27598 RTP/AVP t38
-      a=T38MaxBitRate:14400
-      a=T38FaxRateManagement:transferredTCF
-      a=T38FaxFillBitRemoval:0
-      a=T38FaxTranscodingMMR:0
-      a=T38FaxTranscodingJBIG:0
-      a=T38FaxVersion:0
-      a=T38FaxUdpEC:t38UDPRedundancy
-      a=sendrecv
-      m=image 34380 RTP/SAVP t38
-      a=T38MaxBitRate:14400
-      a=T38FaxRateManagement:transferredTCF
-      a=T38FaxFillBitRemoval:0
-      a=T38FaxTranscodingMMR:0
-      a=T38FaxTranscodingJBIG:0
-      a=T38FaxVersion:0
-      a=T38FaxUdpEC:t38UDPRedundancy
-      a=sendrecv
-      a=key-mgmt:mikey AQAVgPwtOloCAAAAAAAAAAAAAABZ+s2kAAAAAAUBAAVtaWtleQsA1kMaMwAAAAAKFPhiiuMYI6Rr/kmTTbCu0sR43a/HAQAA
-      ADYCAQEDBAAAAKAEBAAAAHALBAAAAFAAAQEBBAAAAIAJAQAGAQAFAQAIAQEKAQEHAQEMBAAAAAAAAAAkABAAENR6NqV530allXc23CkfQucADmG1yYfFo
-      +6Tw3+ofqCTAA==
-      a=crypto:1 AES_CM_128_HMAC_SHA1_80 inline:qa7LFKEFmfQF4exgJl2q78jJnxTGgsJGVjZqqg3u
-      m=image 34740 udptl t38
-      a=T38MaxBitRate:14400
-      a=T38FaxRateManagement:transferredTCF
-      a=T38FaxFillBitRemoval:0
-      a=T38FaxTranscodingMMR:0
-      a=T38FaxTranscodingJBIG:0
-      a=T38FaxVersion:0
-      a=T38FaxUdpEC:t38UDPRedundancy
-      a=sendrecv
-
-    ]]>
-  </send>
-
-  <recv response="100" optional="true" />
-
-  <recv response="180" optional="true" />
-
-  <recv response="183" optional="true" />
-
-  <recv response="200" rtd="true">
-    <action>
-      <ereg regexp="m=image [0-9]{1,5} udptl t38"
-            search_in="body" check_it="true" assign_to="1"/>
-    </action>
-  </recv>
-  <Reference variables="1" />
-
-  <send>
-    <![CDATA[
-
-      ACK sip:test@[remote_ip]:[remote_port] SIP/2.0
-      Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
-      From: test1 <sip:guest1@[local_ip]:[local_port]>;tag=[call_number]
-      To: test <sip:test@[remote_ip]:[remote_port]>[peer_tag_param]
-      Call-ID: [call_id]
-      CSeq: 1 ACK
-      Contact: sip:kartoffelsalat@[local_ip]:[local_port]
-      Max-Forwards: 70
-      Subject: Performance Test
-      Content-Length: 0
-
-    ]]>
-  </send>
-
-  <send retrans="500">
-    <![CDATA[
-
-      BYE sip:test@[remote_ip]:[remote_port] SIP/2.0
-      Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
-      From: test1 <sip:guest1@[local_ip]:[local_port]>;tag=[call_number]
-      To: test <sip:test@[remote_ip]:[remote_port]>[peer_tag_param]
-      Call-ID: [call_id]
-      CSeq: 2 BYE
-      Contact: sip:kartoffelsalat@[local_ip]:[local_port]
-      Max-Forwards: 70
-      Subject: Performance Test
-      Content-Length: 0
-
-    ]]>
-  </send>
-
-  <recv response="200" crlf="true">
-  </recv>
-
-  <!-- definition of the response time repartition table (unit is ms)   -->
-  <ResponseTimeRepartition value="10, 20, 30, 40, 50, 100, 150, 200"/>
-
-  <!-- definition of the call length repartition table (unit is ms)     -->
-  <CallLengthRepartition value="10, 50, 100, 500, 1000, 5000, 10000"/>
-
-</scenario>
-
diff --git a/tests/channels/SIP/info_dtmf/run-test b/tests/channels/SIP/info_dtmf/run-test
index 91f3802..862ae1a 100755
--- a/tests/channels/SIP/info_dtmf/run-test
+++ b/tests/channels/SIP/info_dtmf/run-test
@@ -17,7 +17,6 @@
 
 sys.path.append("lib/python")
 
-from asterisk.version import AsteriskVersion
 from asterisk.sipp import SIPpScenario, SIPpScenarioSequence
 from asterisk.test_case import TestCase
 
@@ -54,10 +53,7 @@
         Keyword Arguments:
         ami    -    The StarPY manager object that connected
         """
-        if (AsteriskVersion() >= AsteriskVersion('12')):
-            ami.registerEvent('DTMFEnd', self.handle_dtmf_end_event)
-        else:
-            ami.registerEvent('DTMF', self.handle_dtmf_event)
+        ami.registerEvent('DTMFEnd', self.handle_dtmf_end_event)
         sipp_scenario_params = [{'scenario':'dtmf-relay.xml','-p':'5061'}, {'scenario':'dtmf.xml','-p':'5061'}]
         sequence = SIPpScenarioSequence(test_case = self)
         for scenario_param in sipp_scenario_params:
@@ -81,22 +77,6 @@
             LOGGER.info("Received all expected events, stopping test")
             self.stop_reactor()
 
-    def handle_dtmf_event(self, ami, event):
-        """
-        Callback handler for a DTMF Event received over AMI.
-
-        Keyword Arguments:
-        ami    -    The instance of AMI that received this event
-        event    -    The AMI event object
-        """
-        digit = event["digit"]
-        end = event["end"]
-        if (end == "Yes"):
-            LOGGER.debug("Received end of DTMF digit %s" % digit)
-            self.received_events.append(digit)
-        if (len(self.received_events) == len(self.expected_events)):
-            LOGGER.info("Received all expected events, stopping test")
-            self.stop_reactor()
 
 def main():
     """
diff --git a/tests/channels/SIP/nat_supertest/run-test b/tests/channels/SIP/nat_supertest/run-test
index ebd3fa1..4e652f2 100755
--- a/tests/channels/SIP/nat_supertest/run-test
+++ b/tests/channels/SIP/nat_supertest/run-test
@@ -23,21 +23,8 @@
 logger = logging.getLogger(__name__)
 INJECT_FILE = TEST_DIR + "/sipp/inject.csv"
 
-expected_failures = {
-    'branch-1.4': [4, 6, 8, 10],
-    'branch-1.6.2': [4, 6, 8, 10],
-    'branch-1.8': [4, 8],
-    'branch-10': [4, 8],
-    'trunk': [4, 8]
-}
-
-nat_modes = {
-    'branch-1.4': {False: 'no', True: 'route'},
-    'branch-1.6.2': {False: 'no', True: 'route'},
-    'branch-1.8': {False: 'no', True: 'force_rport'},
-    'branch-10': {False: 'no', True: 'force_rport'},
-    'trunk': {False: 'no', True: 'force_rport'},
-}
+expected_failures = [4, 8]
+nat_modes = {False: 'no', True: 'force_rport'}
 
 def compute_value(val):
     """ Take an iterable of booleans (MSB-first) and return their integer value
@@ -63,7 +50,7 @@
         self.create_ami_factory()
 
     def get_nat_value(self, route):
-        return nat_modes[self.ast[0].ast_version.branch][route]
+        return nat_modes[route]
 
     def update_config(self, general_nat, peer_nat):
         global_nat = self.get_nat_value(general_nat)
@@ -131,15 +118,11 @@
                 # order of variables is least significant first!
                 qm = QM(["port_matches_via", "rport_specified", "peer_nat", "general_nat"])
                 logger.debug("Failures: %s" % (self.failures,))
-                try:
-                    if self.failures == expected_failures[self.ast[0].ast_version.branch]:
-                        self.passed = True
-                        logger.info(qm.get_function(qm.solve(self.failures, [])[1]))
-                    else:
-                        logger.warn(qm.get_function(qm.solve(self.failures, [])[1]))
-                except KeyError:
-                    log.error("We don't know the expected failures for branch: %s\n" % (self.ast[0].ast_version.branch,))
+                if self.failures == expected_failures:
                     self.passed = True
+                    logger.info(qm.get_function(qm.solve(self.failures, [])[1]))
+                else:
+                    logger.warn(qm.get_function(qm.solve(self.failures, [])[1]))
             return result
 
         self.__test_counter = 0
diff --git a/tests/channels/SIP/sip_attended_transfer/attended_transfer.py b/tests/channels/SIP/sip_attended_transfer/attended_transfer.py
index 1915f8e..f5fc840 100644
--- a/tests/channels/SIP/sip_attended_transfer/attended_transfer.py
+++ b/tests/channels/SIP/sip_attended_transfer/attended_transfer.py
@@ -10,7 +10,6 @@
 import pjsua as pj
 import sys
 
-from version import AsteriskVersion
 from twisted.internet import reactor
 
 LOGGER = logging.getLogger(__name__)
@@ -141,83 +140,6 @@
         return self.bridge2.bridged
 
 
-class BridgeStateEleven(object):
-    '''Tracker of bridge state for Asterisk 11-
-
-    Since in Asterisk versions prior to 12, there are no bridge objects, the
-    only way we can track the state of bridges in Asterisk is via Bridge events
-    and our own channel count. We count unique bridges by using the "channel2"
-    header in Bridge events from Asterisk.
-    '''
-    def __init__(self, test_object, controller, ami):
-        self.test_object = test_object
-        self.controller = controller
-        self.ami = ami
-        self.bridge_channels = []
-        self.final_bridge_participants = 0
-
-        self.ami.registerEvent('Bridge', self.bridge)
-        self.ami.registerEvent('VarSet', self.bridge_peer)
-
-    def bridge(self, _, event):
-        '''AMI Bridge event callback.
-
-        The Bridge callback in Asterisk 11- can fire at seemingly random
-        times, but it always has two channels indicated in it. This function
-        will log each unique 'channel2' channel that it sees, and assume that
-        a newly-discovered 'channel2' indicates that a new bridge has been
-        formed.
-        '''
-
-        if event['channel2'] in self.bridge_channels:
-            LOGGER.debug('channel {0} already seen in previous Bridge event. '
-                         'Ignoring'.format(event['channel2']))
-            return
-
-        LOGGER.debug('New bridge between {0} and {1} detected'.format(
-            event['channel1'], event['channel2']))
-        self.bridge_channels.append(event['channel2'])
-        numchans = len(self.bridge_channels)
-        if numchans == 1:
-            LOGGER.debug('Bridge between Alice and Bob established')
-            self.controller.call_carol()
-        elif numchans == 2:
-            LOGGER.debug('Bridge between Alice and Carol established')
-            self.controller.transfer_call()
-
-    def bridge_peer(self, _, event):
-        '''AMI VarSet event callback.
-
-        We are interested in BRIDGEPEER settings. When we get a BRIDGEPEER
-        that indicates that Bob and Carol have been bridged, then we consider
-        the transfer to have succeeded
-        '''
-
-        if event['variable'] != "BRIDGEPEER" or len(self.bridge_channels) < 2:
-            return
-
-        LOGGER.debug("After transfer, {0} is bridged to {1}".format(
-            event['channel'], event['value']))
-
-        # We should get an event indicating that the Bob channel's
-        # BRIDGEPEER variable is set to Carol's channel, and vice versa
-        if self.bridge_channels[:2] == [event['channel'], event['value']] or\
-            self.bridge_channels[:2] == [event['value'], event['channel']]:
-            self.final_bridge_participants += 1
-            if self.final_bridge_participants == 2:
-                LOGGER.debug("Bob and Carol bridged. Scenario complete.")
-                # success!
-                self.controller.hangup_calls()
-
-    def bridge1_bridged(self):
-        '''Indicates that Alice and Bob have been bridged'''
-        return len(self.bridge_channels) == 1
-
-    def bridge2_bridged(self):
-        '''Indicates that Alice and Carol have been bridged'''
-        return len(self.bridge_channels) == 2
-
-
 class Transfer(object):
     '''Controller for attended transfer test
 
@@ -230,10 +152,7 @@
         super(Transfer, self).__init__()
         self.ami = test_object.ami[0]
 
-        if AsteriskVersion() < AsteriskVersion('12'):
-            self.bridge_state = BridgeStateEleven(test_object, self, self.ami)
-        else:
-            self.bridge_state = BridgeStateTwelve(test_object, self, self.ami)
+        self.bridge_state = BridgeStateTwelve(test_object, self, self.ami)
 
         self.bob_call_answered = False
         self.carol_call_answered = False
diff --git a/tests/channels/SIP/sip_blind_transfer/callee_refer_only/run-test b/tests/channels/SIP/sip_blind_transfer/callee_refer_only/run-test
index cb76fe0..b5e56d2 100755
--- a/tests/channels/SIP/sip_blind_transfer/callee_refer_only/run-test
+++ b/tests/channels/SIP/sip_blind_transfer/callee_refer_only/run-test
@@ -20,7 +20,6 @@
 sys.path.append("lib/python")
 from asterisk.asterisk import Asterisk
 from asterisk.test_case import TestCase
-from asterisk.version import AsteriskVersion
 
 logger = logging.getLogger(__name__)
 
@@ -60,12 +59,8 @@
     def ami_connect(self, ami):
         TestCase.ami_connect(self, ami)
 
-        if AsteriskVersion() >= AsteriskVersion("12"):
-            ami.registerEvent('BridgeEnter', self.bridge_enter_event_handler)
-            ami.registerEvent('BlindTransfer', self.blind_transfer_event_handler)
-        else:
-            ami.registerEvent('Bridge', self.bridge_event_handler)
-            ami.registerEvent('Transfer', self.transfer_event_handler)
+        ami.registerEvent('BridgeEnter', self.bridge_enter_event_handler)
+        ami.registerEvent('BlindTransfer', self.blind_transfer_event_handler)
         ami.registerEvent('Hangup', self.hangup_event_handler)
 
         self.a_call_b()
@@ -90,41 +85,11 @@
         else:
             logger.warning("Unexpected bridge (%s and %s) received!" % (self.channel1, channel2))
 
-    def bridge_event_handler(self, ami, event):
-        bridgetype = event['bridgetype'].lower()
-        bridgestate = event['bridgestate'].lower()
-        channel1 = event['channel1']
-        channel2 = event['channel2']
-        logger.debug("Received bridge type %s (%s) for channel %s and %s" % (bridgetype, bridgestate, channel1, channel2))
-        if (bridgetype == 'core' and bridgestate == 'link'):
-            if (channel1 == BlindTransfer.phone_a_channel and channel2 == BlindTransfer.phone_b_channel):
-                logger.debug("Starting transfer of Phone B to Phone C")
-                self.b_transfer_a_to_c()
-            elif (channel1 == BlindTransfer.phone_a_channel and channel2 == BlindTransfer.phone_c_channel):
-                self.ami_check_bridge()
-            else:
-                logger.warning("Unexpected bridge (%s and %s) received!" % (channel1, channel2))
-        elif bridgetype != 'core' or bridgestate != 'unlink':
-            logger.warning("Unexpected bridgetype %s or bridgestate %s received!" % (bridgetype, bridgestate))
-
     def blind_transfer_event_handler(self, ami, event):
         if event['isexternal'].lower() != 'yes':
             logger.warn("Unexpected transfer type: Internal")
         else:
             logger.debug("Received blind external transfer initiated by %(transfererchannel)s to %(extension)s@%(context)s" % event)
-            self.transfer_event_received = True
-
-    def transfer_event_handler(self, ami, event):
-        transfertype = event['transfertype'].lower()
-        transfermethod = event['transfermethod'].lower()
-        channel = event['channel']
-        targetchannel = event['targetchannel']
-        logger.debug("Received %s %s transfer initiated by %s on %s" % (transfermethod, transfertype, channel, targetchannel))
-        if transfertype != 'blind':
-            logger.warn("Unexpected transfer type: %s" % transfertype)
-        elif transfermethod != 'sip':
-            logger.warn("Unexpected transfer method: %s" % transfermethod)
-        else:
             self.transfer_event_received = True
 
     def hangup_event_handler(self, ami, event):
@@ -140,32 +105,8 @@
             self.read_result()
             return
 
-        if AsteriskVersion() >= AsteriskVersion('12'):
-            # the following has already been verified using bridgeenter messages so exit early
-            self.passed = True
-            self.hangup_channel_c()
-            return
-
-        logger.debug('Results %s' % str(results))
-        """
-        Multiple results may be returned.  For example, at times, you may get a message
-        back that states "channel state will follow".  Iterate through each and only fail
-        if we don't get a match
-        """
-        i = 0
-        for result in results:
-            if "bridgedchannel" not in result:
-                logger.debug("'bridgedchannel' not found in result %d" % i)
-            elif result['bridgedchannel'] == BlindTransfer.phone_c_channel:
-                self.passed = True
-            i += 1
-
-        if self.passed == True:
-            logger.debug("Found Bridge!!!")
-            self.hangup_channel_c()
-        else:
-            logger.warn("Detecting Bridge failed")
-            self.read_result()
+        self.passed = True
+        self.hangup_channel_c()
 
     def check_bridge_error(self, reason):
         logger.error(reason.getTraceback())
diff --git a/tests/channels/SIP/sip_blind_transfer/callee_with_reinvite/run-test b/tests/channels/SIP/sip_blind_transfer/callee_with_reinvite/run-test
index e6f6ae1..daf7474 100755
--- a/tests/channels/SIP/sip_blind_transfer/callee_with_reinvite/run-test
+++ b/tests/channels/SIP/sip_blind_transfer/callee_with_reinvite/run-test
@@ -20,7 +20,6 @@
 sys.path.append("lib/python")
 from asterisk.asterisk import Asterisk
 from asterisk.test_case import TestCase
-from asterisk.version import AsteriskVersion
 
 logger = logging.getLogger(__name__)
 
@@ -60,12 +59,8 @@
     def ami_connect(self, ami):
         TestCase.ami_connect(self, ami)
 
-        if AsteriskVersion() >= AsteriskVersion("12"):
-            ami.registerEvent('BridgeEnter', self.bridge_enter_event_handler)
-            ami.registerEvent('BlindTransfer', self.blind_transfer_event_handler)
-        else:
-            ami.registerEvent('Bridge', self.bridge_event_handler)
-            ami.registerEvent('Transfer', self.transfer_event_handler)
+        ami.registerEvent('BridgeEnter', self.bridge_enter_event_handler)
+        ami.registerEvent('BlindTransfer', self.blind_transfer_event_handler)
         ami.registerEvent('Hangup', self.hangup_event_handler)
 
         self.a_call_b()
@@ -90,41 +85,11 @@
         else:
             logger.warning("Unexpected bridge (%s and %s) received!" % (self.channel1, channel2))
 
-    def bridge_event_handler(self, ami, event):
-        bridgetype = event['bridgetype'].lower()
-        bridgestate = event['bridgestate'].lower()
-        channel1 = event['channel1']
-        channel2 = event['channel2']
-        logger.debug("Received bridge type %s (%s) for channel %s and %s" % (bridgetype, bridgestate, channel1, channel2))
-        if (bridgetype == 'core' and bridgestate == 'link'):
-            if (channel1 == BlindTransfer.phone_a_channel and channel2 == BlindTransfer.phone_b_channel):
-                logger.debug("Starting transfer of Phone B to Phone C")
-                self.b_transfer_a_to_c()
-            elif (channel1 == BlindTransfer.phone_a_channel and channel2 == BlindTransfer.phone_c_channel):
-                self.ami_check_bridge()
-            else:
-                logger.warning("Unexpected bridge (%s and %s) received!" % (channel1, channel2))
-        elif bridgetype != 'core' or bridgestate != 'unlink':
-            logger.warning("Unexpected bridgetype %s or bridgestate %s received!" % (bridgetype, bridgestate))
-
     def blind_transfer_event_handler(self, ami, event):
         if event['isexternal'].lower() != 'yes':
             logger.warn("Unexpected transfer type: Internal")
         else:
             logger.debug("Received blind external transfer initiated by %(transfererchannel)s to %(extension)s@%(context)s" % event)
-            self.transfer_event_received = True
-
-    def transfer_event_handler(self, ami, event):
-        transfertype = event['transfertype'].lower()
-        transfermethod = event['transfermethod'].lower()
-        channel = event['channel']
-        targetchannel = event['targetchannel']
-        logger.debug("Received %s %s transfer initiated by %s on %s" % (transfermethod, transfertype, channel, targetchannel))
-        if transfertype != 'blind':
-            logger.warn("Unexpected transfer type: %s" % transfertype)
-        elif transfermethod != 'sip':
-            logger.warn("Unexpected transfer method: %s" % transfermethod)
-        else:
             self.transfer_event_received = True
 
     def hangup_event_handler(self, ami, event):
@@ -140,32 +105,8 @@
             self.read_result()
             return
 
-        if AsteriskVersion() >= AsteriskVersion('12'):
-            # the following has already been verified using bridgeenter messages so exit early
-            self.passed = True
-            self.hangup_channel_c()
-            return
-
-        logger.debug('Results %s' % str(results))
-        """
-        Multiple results may be returned.  For example, at times, you may get a message
-        back that states "channel state will follow".  Iterate through each and only fail
-        if we don't get a match
-        """
-        i = 0
-        for result in results:
-            if "bridgedchannel" not in result:
-                logger.debug("'bridgedchannel' not found in result %d" % i)
-            elif result['bridgedchannel'] == BlindTransfer.phone_c_channel:
-                self.passed = True
-            i += 1
-
-        if self.passed == True:
-            logger.debug("Found Bridge!!!")
-            self.hangup_channel_c()
-        else:
-            logger.warn("Detecting Bridge failed")
-            self.read_result()
+        self.passed = True
+        self.hangup_channel_c()
 
     def check_bridge_error(self, reason):
         logger.error(reason.getTraceback())
diff --git a/tests/channels/SIP/sip_blind_transfer/caller_refer_only/run-test b/tests/channels/SIP/sip_blind_transfer/caller_refer_only/run-test
index 2287adc..19dbfd7 100755
--- a/tests/channels/SIP/sip_blind_transfer/caller_refer_only/run-test
+++ b/tests/channels/SIP/sip_blind_transfer/caller_refer_only/run-test
@@ -20,7 +20,6 @@
 sys.path.append("lib/python")
 from asterisk.asterisk import Asterisk
 from asterisk.test_case import TestCase
-from asterisk.version import AsteriskVersion
 
 logger = logging.getLogger(__name__)
 
@@ -60,12 +59,8 @@
     def ami_connect(self, ami):
         TestCase.ami_connect(self, ami)
 
-        if AsteriskVersion() >= AsteriskVersion("12"):
-            ami.registerEvent('BridgeEnter', self.bridge_enter_event_handler)
-            ami.registerEvent('BlindTransfer', self.blind_transfer_event_handler)
-        else:
-            ami.registerEvent('Bridge', self.bridge_event_handler)
-            ami.registerEvent('Transfer', self.transfer_event_handler)
+        ami.registerEvent('BridgeEnter', self.bridge_enter_event_handler)
+        ami.registerEvent('BlindTransfer', self.blind_transfer_event_handler)
         ami.registerEvent('Hangup', self.hangup_event_handler)
 
         self.a_call_b()
@@ -90,41 +85,11 @@
         else:
             logger.warning("Unexpected bridge (%s and %s) received!" % (self.channel1, channel2))
 
-    def bridge_event_handler(self, ami, event):
-        bridgetype = event['bridgetype'].lower()
-        bridgestate = event['bridgestate'].lower()
-        channel1 = event['channel1']
-        channel2 = event['channel2']
-        logger.debug("Received bridge type %s (%s) for channel %s and %s" % (bridgetype, bridgestate, channel1, channel2))
-        if (bridgetype == 'core' and bridgestate == 'link'):
-            if (channel1 == BlindTransfer.phone_a_channel and channel2 == BlindTransfer.phone_b_channel):
-                logger.debug("Starting transfer of Phone B to Phone C")
-                self.a_transfer_b_to_c()
-            elif (channel1 == BlindTransfer.phone_b_channel and channel2 == BlindTransfer.phone_c_channel):
-                self.ami_check_bridge()
-            else:
-                logger.warning("Unexpected bridge (%s and %s) received!" % (channel1, channel2))
-        elif bridgetype != 'core' or bridgestate != 'unlink':
-            logger.warning("Unexpected bridgetype %s or bridgestate %s received!" % (bridgetype, bridgestate))
-
     def blind_transfer_event_handler(self, ami, event):
         if event['isexternal'].lower() != 'yes':
             logger.warn("Unexpected transfer type: Internal")
         else:
             logger.debug("Received blind external transfer initiated by %(transfererchannel)s to %(extension)s@%(context)s" % event)
-            self.transfer_event_received = True
-
-    def transfer_event_handler(self, ami, event):
-        transfertype = event['transfertype'].lower()
-        transfermethod = event['transfermethod'].lower()
-        channel = event['channel']
-        targetchannel = event['targetchannel']
-        logger.debug("Received %s %s transfer initiated by %s on %s" % (transfermethod, transfertype, channel, targetchannel))
-        if transfertype != 'blind':
-            logger.warn("Unexpected transfer type: %s" % transfertype)
-        elif transfermethod != 'sip':
-            logger.warn("Unexpected transfer method: %s" % transfermethod)
-        else:
             self.transfer_event_received = True
 
     def hangup_event_handler(self, ami, event):
@@ -140,32 +105,9 @@
             self.read_result()
             return
 
-        if AsteriskVersion() >= AsteriskVersion('12'):
-            # the following has already been verified using bridgeenter messages so exit early
-            self.passed = True
-            self.hangup_channel_c()
-            return
-
-        logger.debug('Results %s' % str(results))
-        """
-        Multiple results may be returned.  For example, at times, you may get a message
-        back that states "channel state will follow".  Iterate through each and only fail
-        if we don't get a match
-        """
-        i = 0
-        for result in results:
-            if "bridgedchannel" not in result:
-                logger.debug("'bridgedchannel' not found in result %d" % i)
-            elif result['bridgedchannel'] == BlindTransfer.phone_c_channel:
-                self.passed = True
-            i += 1
-
-        if self.passed == True:
-            logger.debug("Found Bridge!!!")
-            self.hangup_channel_c()
-        else:
-            logger.warn("Detecting Bridge failed")
-            self.read_result()
+        self.passed = True
+        self.hangup_channel_c()
+        return
 
     def check_bridge_error(self, reason):
         logger.error(reason.getTraceback())
diff --git a/tests/channels/SIP/sip_blind_transfer/caller_with_reinvite/run-test b/tests/channels/SIP/sip_blind_transfer/caller_with_reinvite/run-test
index 9d03a94..880ab88 100755
--- a/tests/channels/SIP/sip_blind_transfer/caller_with_reinvite/run-test
+++ b/tests/channels/SIP/sip_blind_transfer/caller_with_reinvite/run-test
@@ -20,7 +20,6 @@
 sys.path.append("lib/python")
 from asterisk.asterisk import Asterisk
 from asterisk.test_case import TestCase
-from asterisk.version import AsteriskVersion
 
 logger = logging.getLogger(__name__)
 
@@ -60,12 +59,8 @@
     def ami_connect(self, ami):
         TestCase.ami_connect(self, ami)
 
-        if AsteriskVersion() >= AsteriskVersion("12"):
-            ami.registerEvent('BridgeEnter', self.bridge_enter_event_handler)
-            ami.registerEvent('BlindTransfer', self.blind_transfer_event_handler)
-        else:
-            ami.registerEvent('Bridge', self.bridge_event_handler)
-            ami.registerEvent('Transfer', self.transfer_event_handler)
+        ami.registerEvent('BridgeEnter', self.bridge_enter_event_handler)
+        ami.registerEvent('BlindTransfer', self.blind_transfer_event_handler)
         ami.registerEvent('Hangup', self.hangup_event_handler)
 
         self.a_call_b()
@@ -90,41 +85,11 @@
         else:
             logger.warning("Unexpected bridge (%s and %s) received!" % (self.channel1, channel2))
 
-    def bridge_event_handler(self, ami, event):
-        bridgetype = event['bridgetype'].lower()
-        bridgestate = event['bridgestate'].lower()
-        channel1 = event['channel1']
-        channel2 = event['channel2']
-        logger.debug("Received bridge type %s (%s) for channel %s and %s" % (bridgetype, bridgestate, channel1, channel2))
-        if (bridgetype == 'core' and bridgestate == 'link'):
-            if (channel1 == BlindTransfer.phone_a_channel and channel2 == BlindTransfer.phone_b_channel):
-                logger.debug("Starting transfer of Phone B to Phone C")
-                self.a_transfer_b_to_c()
-            elif (channel1 == BlindTransfer.phone_b_channel and channel2 == BlindTransfer.phone_c_channel):
-                self.ami_check_bridge()
-            else:
-                logger.warning("Unexpected bridge (%s and %s) received!" % (channel1, channel2))
-        elif bridgetype != 'core' or bridgestate != 'unlink':
-            logger.warning("Unexpected bridgetype %s or bridgestate %s received!" % (bridgetype, bridgestate))
-
     def blind_transfer_event_handler(self, ami, event):
         if event['isexternal'].lower() != 'yes':
             logger.warn("Unexpected transfer type: Internal")
         else:
             logger.debug("Received blind external transfer initiated by %(transfererchannel)s to %(extension)s@%(context)s" % event)
-            self.transfer_event_received = True
-
-    def transfer_event_handler(self, ami, event):
-        transfertype = event['transfertype'].lower()
-        transfermethod = event['transfermethod'].lower()
-        channel = event['channel']
-        targetchannel = event['targetchannel']
-        logger.debug("Received %s %s transfer initiated by %s on %s" % (transfermethod, transfertype, channel, targetchannel))
-        if transfertype != 'blind':
-            logger.warn("Unexpected transfer type: %s" % transfertype)
-        elif transfermethod != 'sip':
-            logger.warn("Unexpected transfer method: %s" % transfermethod)
-        else:
             self.transfer_event_received = True
 
     def hangup_event_handler(self, ami, event):
@@ -140,32 +105,10 @@
             self.read_result()
             return
 
-        if AsteriskVersion() >= AsteriskVersion('12'):
-            # the following has already been verified using bridgeenter messages so exit early
-            self.passed = True
-            self.hangup_channel_c()
-            return
-
-        logger.debug('Results %s' % str(results))
-        """
-        Multiple results may be returned.  For example, at times, you may get a message
-        back that states "channel state will follow".  Iterate through each and only fail
-        if we don't get a match
-        """
-        i = 0
-        for result in results:
-            if "bridgedchannel" not in result:
-                logger.debug("'bridgedchannel' not found in result %d" % i)
-            elif result['bridgedchannel'] == BlindTransfer.phone_c_channel:
-                self.passed = True
-            i += 1
-
-        if self.passed == True:
-            logger.debug("Found Bridge!!!")
-            self.hangup_channel_c()
-        else:
-            logger.warn("Detecting Bridge failed")
-            self.read_result()
+        # the following has already been verified using bridgeenter messages so exit early
+        self.passed = True
+        self.hangup_channel_c()
+        return
 
     def check_bridge_error(self, reason):
         logger.error(reason.getTraceback())
diff --git a/tests/channels/SIP/sip_hold/run-test b/tests/channels/SIP/sip_hold/run-test
index 818375a..d164f88 100755
--- a/tests/channels/SIP/sip_hold/run-test
+++ b/tests/channels/SIP/sip_hold/run-test
@@ -17,7 +17,6 @@
 from asterisk.test_case import TestCase
 from asterisk.sipp import SIPpScenario
 from twisted.internet import reactor
-from asterisk.version import AsteriskVersion
 
 logger = logging.getLogger(__name__)
 INJECT_FILE_BYPASS = "inject_bypass.csv"
@@ -27,14 +26,6 @@
     def __init__(self):
         TestCase.__init__(self)
         self.create_asterisk()
-
-        running_version = AsteriskVersion()
-
-        if (running_version < AsteriskVersion("12.0.0")):
-            #Pre-12
-            self.asterisk12Events = False
-        else:
-            self.asterisk12Events = True
 
         self.sipp_phone_a_scenarios = [{'scenario':'phone_A.xml','-i':'127.0.0.2','-p':'5060','-inf':INJECT_FILE_BYPASS},
             {'scenario':'phone_A.xml','-i':'127.0.0.2','-p':'5060','-inf':INJECT_FILE_BYPASS},
@@ -63,11 +54,8 @@
         TestCase.ami_connect(self, ami)
         ami.registerEvent('UserEvent', self.user_event_handler)
 
-        if self.asterisk12Events:
-            ami.registerEvent('MusicOnHoldStart', self.moh_start_event_handler)
-            ami.registerEvent('MusicOnHoldStop', self.moh_stop_event_handler)
-        else:
-            ami.registerEvent('MusicOnHold', self.moh_event_handler)
+        ami.registerEvent('MusicOnHoldStart', self.moh_start_event_handler)
+        ami.registerEvent('MusicOnHoldStop', self.moh_stop_event_handler)
 
         logger.info("Starting SIP scenario")
         self.execute_scenarios()
@@ -119,14 +107,6 @@
     def moh_stop_event_handler(self, ami, event):
         logger.debug("Received MOH stop event")
         self.moh_stop_events += 1
-
-    def moh_event_handler(self, ami, event):
-        if event['state'] == "Start":
-            logger.debug("Received MOH start event")
-            self.moh_start_events += 1
-        elif event['state'] == "Stop":
-            logger.debug("Received MOH stop event")
-            self.moh_stop_events += 1
 
     def run(self):
         TestCase.run(self)
diff --git a/tests/channels/SIP/sip_hold_direct_media/run-test b/tests/channels/SIP/sip_hold_direct_media/run-test
index c9bc535..6eb47d5 100755
--- a/tests/channels/SIP/sip_hold_direct_media/run-test
+++ b/tests/channels/SIP/sip_hold_direct_media/run-test
@@ -17,7 +17,6 @@
 from asterisk.test_case import TestCase
 from asterisk.sipp import SIPpScenario
 from twisted.internet import reactor
-from asterisk.version import AsteriskVersion
 
 LOGGER = logging.getLogger(__name__)
 INJECT_FILE_BRIDGE = "inject_bridge.csv"
@@ -26,14 +25,6 @@
     def __init__(self):
         TestCase.__init__(self)
         self.create_asterisk()
-
-        running_version = AsteriskVersion()
-
-        if (running_version < AsteriskVersion("12.0.0")):
-            #Pre-12
-            self.asterisk12Events = False
-        else:
-            self.asterisk12Events = True
 
         self.sipp_phone_a_scenarios = [
             {'scenario':'phone_A.xml','-i':'127.0.0.2','-p':'5060','-inf':INJECT_FILE_BRIDGE},
@@ -56,11 +47,8 @@
         TestCase.ami_connect(self, ami)
         ami.registerEvent('UserEvent', self.user_event_handler)
 
-        if self.asterisk12Events:
-            ami.registerEvent('MusicOnHoldStart', self.moh_start_event_handler)
-            ami.registerEvent('MusicOnHoldStop', self.moh_stop_event_handler)
-        else:
-            ami.registerEvent('MusicOnHold', self.moh_event_handler)
+        ami.registerEvent('MusicOnHoldStart', self.moh_start_event_handler)
+        ami.registerEvent('MusicOnHoldStop', self.moh_stop_event_handler)
 
         LOGGER.info("Starting SIP scenario")
         self.execute_scenarios()
@@ -112,14 +100,6 @@
     def moh_stop_event_handler(self, ami, event):
         LOGGER.debug("Received MOH stop event")
         self.moh_stop_events += 1
-
-    def moh_event_handler(self, ami, event):
-        if event['state'] == "Start":
-            LOGGER.debug("Received MOH start event")
-            self.moh_start_events += 1
-        elif event['state'] == "Stop":
-            LOGGER.debug("Received MOH stop event")
-            self.moh_stop_events += 1
 
     def run(self):
         TestCase.run(self)
diff --git a/tests/channels/SIP/sip_hold_ice/run-test b/tests/channels/SIP/sip_hold_ice/run-test
index bae0af8..4cdf174 100755
--- a/tests/channels/SIP/sip_hold_ice/run-test
+++ b/tests/channels/SIP/sip_hold_ice/run-test
@@ -15,7 +15,6 @@
 from asterisk.test_case import TestCase
 from asterisk.sipp import SIPpScenario
 from twisted.internet import reactor
-from asterisk.version import AsteriskVersion
 
 LOGGER = logging.getLogger(__name__)
 INJECT_FILE_BRIDGE = "inject_bridge.csv"
@@ -28,14 +27,6 @@
         """ Constructor """
         TestCase.__init__(self)
         self.create_asterisk()
-
-        running_version = AsteriskVersion()
-
-        if (running_version < AsteriskVersion("12.0.0")):
-            #Pre-12
-            self.asterisk12Events = False
-        else:
-            self.asterisk12Events = True
 
         self.sipp_phone_a_scenario = {'scenario': 'phone_A.xml',
                                       '-i': '127.0.0.2',
@@ -59,11 +50,8 @@
 
         ami.registerEvent('TestEvent', self.test_event_handler)
 
-        if self.asterisk12Events:
-            ami.registerEvent('MusicOnHoldStart', self.moh_start_event_handler)
-            ami.registerEvent('MusicOnHoldStop', self.moh_stop_event_handler)
-        else:
-            ami.registerEvent('MusicOnHold', self.moh_event_handler)
+        ami.registerEvent('MusicOnHoldStart', self.moh_start_event_handler)
+        ami.registerEvent('MusicOnHoldStop', self.moh_stop_event_handler)
 
         LOGGER.info("Starting SIP scenario")
         self.execute_scenario()
@@ -125,22 +113,6 @@
         if self.check_list_success_events == 2:
             self.evaluate_success()
             self.stop_reactor()
-
-    def moh_event_handler(self, ami, event):
-        """ Reacts to MusicOnHold events (legacy events from Asterisk <= 11)
-
-        :param ami: AMI connection the event was received from
-        :param event: Event that was received
-        """
-        if event.get('state') == "Start":
-            LOGGER.debug("Received MOH start event")
-            self.moh_start_event = True
-        elif event.get('state') == "Stop":
-            LOGGER.debug("Received MOH stop event")
-            self.moh_stop_event = True
-            if self.check_list_success_events == 2:
-                self.evaluate_success()
-                self.stop_reactor()
 
     def run(self):
         """ Run the test and create an AMI connection """
diff --git a/tests/channels/SIP/sip_one_legged_transfer/run-test b/tests/channels/SIP/sip_one_legged_transfer/run-test
index 3a62192..fd3597c 100755
--- a/tests/channels/SIP/sip_one_legged_transfer/run-test
+++ b/tests/channels/SIP/sip_one_legged_transfer/run-test
@@ -16,7 +16,6 @@
 
 sys.path.append("lib/python")
 from asterisk.test_case import TestCase
-from asterisk.version import AsteriskVersion
 
 LOGGER = logging.getLogger(__name__)
 
@@ -45,10 +44,9 @@
     def ami_connect(self, ami):
         TestCase.ami_connect(self, ami)
 
-        # register for BridgeEnter and BridgeLeave events for later versions
-        if AsteriskVersion() >= AsteriskVersion('12'):
-            ami.registerEvent('BridgeEnter', self.handle_bridge_enter)
-            ami.registerEvent('BridgeLeave', self.handle_bridge_leave)
+        # register for BridgeEnter and BridgeLeave events
+        ami.registerEvent('BridgeEnter', self.handle_bridge_enter)
+        ami.registerEvent('BridgeLeave', self.handle_bridge_leave)
 
         # start up the processes
         self.startProcesses()
@@ -76,43 +74,17 @@
         channel = event['channel']
         self.bridges[bridge].remove(channel)
 
-    def checkBridgeResult(self, results):
-        LOGGER.debug('Result %s' % str(results))
-        for result in results:
-            if "bridgedchannel" not in result:
-                LOGGER.debug("bridgedchannel was not a valid key; checking for link")
-                if "link" not in result:
-                    LOGGER.warn("'link' and 'bridgedchannel' not found")
-                elif result['link'] == OneLeggedTransfer.a_channel: # check link for older versions of asterisk
-                    self.passed = True
-            elif result['bridgedchannel'] == OneLeggedTransfer.a_channel:
+    def amiCheckBridge(self):
+        '''Check whether A and C are bridged.'''
+        LOGGER.debug("Get AMI results")
+        for channels in self.bridges.values():
+            if OneLeggedTransfer.a_channel in channels and OneLeggedTransfer.c_channel in channels:
                 self.passed = True
 
         if self.passed == True:
             LOGGER.debug("Found Bridge!!!")
         else:
             LOGGER.warn("Detecting Bridge failed")
-
-
-    def checkBridgeError(self, reason):
-        LOGGER.error(reason.getTraceback())
-        LOGGER.error("Checking Bridge failed.  Channel did not exist.")
-        reactor.callLater(1, self.readResult)
-
-    def amiCheckBridge(self):
-        '''Check whether A and C are bridged.'''
-        LOGGER.debug("Get AMI results")
-        if AsteriskVersion() >= AsteriskVersion('12'):
-            for channels in self.bridges.values():
-                if OneLeggedTransfer.a_channel in channels and OneLeggedTransfer.c_channel in channels:
-                    self.passed = True
-
-            if self.passed == True:
-                LOGGER.debug("Found Bridge!!!")
-            else:
-                LOGGER.warn("Detecting Bridge failed")
-        else:
-            self.ami[0].status(OneLeggedTransfer.c_channel).addCallbacks(self.checkBridgeResult, self.checkBridgeError)
         self.reset_timeout()
 
     def cCallB(self):
diff --git a/tests/channels/SIP/sip_tls_call/run-test b/tests/channels/SIP/sip_tls_call/run-test
index 4ae522c..92173a3 100755
--- a/tests/channels/SIP/sip_tls_call/run-test
+++ b/tests/channels/SIP/sip_tls_call/run-test
@@ -18,7 +18,6 @@
 
 sys.path.append("lib/python")
 from asterisk.asterisk import Asterisk
-from asterisk.version import AsteriskVersion
 from asterisk.test_case import TestCase
 from asterisk.cdr import AsteriskCSVCDR, AsteriskCSVCDRLine
 from starpy import manager
@@ -70,10 +69,7 @@
         self.tone2 = False
 
     def ami_connect(self, ami):
-        if (AsteriskVersion() >= AsteriskVersion('12')):
-            ami.registerEvent('DTMFEnd', self.ami_test)
-        else:
-            ami.registerEvent('DTMF', self.ami_test)
+        ami.registerEvent('DTMFEnd', self.ami_test)
 
         # We only want to originate the call on the ast[0]'s manager.
         if ami.id == 0:
diff --git a/tests/channels/pjsip/sdp_offer_answer/attribute_passthrough/speex_h263_h264/run-test b/tests/channels/pjsip/sdp_offer_answer/attribute_passthrough/speex_h263_h264/run-test
index 451f355..677e9a0 100755
--- a/tests/channels/pjsip/sdp_offer_answer/attribute_passthrough/speex_h263_h264/run-test
+++ b/tests/channels/pjsip/sdp_offer_answer/attribute_passthrough/speex_h263_h264/run-test
@@ -15,7 +15,6 @@
 sys.path.append("lib/python")
 
 from asterisk.asterisk import Asterisk
-from asterisk.version import AsteriskVersion
 from asterisk.test_case import TestCase
 from asterisk.sipp import SIPpScenario
 from twisted.internet import reactor
diff --git a/tests/fax/pjsip/t38_fast_reject/run-test b/tests/fax/pjsip/t38_fast_reject/run-test
index a93ef43..9d86e01 100755
--- a/tests/fax/pjsip/t38_fast_reject/run-test
+++ b/tests/fax/pjsip/t38_fast_reject/run-test
@@ -60,8 +60,6 @@
 
 def main():
     test = SIPpTest(WORKING_DIR, TEST_DIR, SIPP_SCENARIOS)
-    logger.info ("Running against asterisk version %s" %test.ast_version)
-		   
     test.reactor_timeout = 100;
 
     dump_A = WORKING_DIR + "/carrier_rtp.log"
diff --git a/tests/feature_call_pickup/run-test b/tests/feature_call_pickup/run-test
index ba53fe0..82a46ba 100755
--- a/tests/feature_call_pickup/run-test
+++ b/tests/feature_call_pickup/run-test
@@ -16,7 +16,6 @@
 
 sys.path.append("lib/python")
 from asterisk.asterisk import Asterisk
-from asterisk.version import AsteriskVersion
 from asterisk.test_case import TestCase
 
 LOGGER = logging.getLogger(__name__)
@@ -31,7 +30,6 @@
         self.targetChannel = "SIP/faker-"
 
         self.bridge = None
-        self.bridgingModel12 = False
 
         self.bridgeComplete = False
         self.pickupComplete = False
@@ -76,23 +74,6 @@
             else:
                 self.bridgeComplete = True
 
-    def check_bridge(self, ami, event):
-        if event.get("bridgestate") != "Link":
-            return
-
-        channel1 = event.get("channel1")
-        channel2 = event.get("channel2")
-
-        pattern1 = re.compile(self.pickeeChannel)
-        pattern2 = re.compile(self.pickerChannel)
-
-        if pattern1.match(channel1) and pattern2.match(channel2):
-            if self.pickupComplete:
-                self.set_passed(True)
-                self.ami[0].hangup(channel2).addCallback(self.hangup)
-            else:
-                self.bridgeComplete = True
-
     def check_pickup(self, ami, event):
         picker = event.get("channel")
         target = event.get("targetchannel")
@@ -114,10 +95,7 @@
 
         self.ami[0].registerEvent('Pickup', self.check_pickup)
 
-        if self.bridgingModel12:
-            self.ami[0].registerEvent('BridgeEnter', self.check_bridge_enter)
-        else:
-            self.ami[0].registerEvent('Bridge', self.check_bridge)
+        self.ami[0].registerEvent('BridgeEnter', self.check_bridge_enter)
 
         LOGGER.info("Originating Pickup attempt")
 
@@ -134,14 +112,7 @@
         if self.connectionsEstablished != 2:
             return
 
-        running_version = AsteriskVersion()
-        post_version = AsteriskVersion("12.0.0")
-        if running_version < post_version:
-            #Pre-Asterisk 12
-            self.ami[0].registerEvent("Dial", self.check_dial)
-        else:
-            self.bridgingModel12 = True
-            self.ami[0].registerEvent("DialBegin", self.check_dial)
+        self.ami[0].registerEvent("DialBegin", self.check_dial)
 
         LOGGER.info("Originating channel to be picked up")
         self.ami[0].originate(
diff --git a/tests/http_server/servername/run-test b/tests/http_server/servername/run-test
index 759eee5..ef08392 100755
--- a/tests/http_server/servername/run-test
+++ b/tests/http_server/servername/run-test
@@ -11,17 +11,17 @@
 import logging
 import requests
 import sys
+import re
 
 sys.path.append("lib/python")
 
 from twisted.internet import reactor
 from asterisk.asterisk import Asterisk
-from asterisk.version import AsteriskVersion
 from asterisk.test_case import TestCase
 
 LOGGER = logging.getLogger(__name__)
 
-EXPECTED_NAMES = ["Peabody", "Asterisk/<version>", None]
+EXPECTED_NAMES = ["^Peabody$", "^Asterisk/", None]
 
 BASE_URL = "http://127.0.0.%d:8088/httpstatus"
 
@@ -43,9 +43,6 @@
 
         for i in range(0, 3):
             name = EXPECTED_NAMES[i]
-            if name is not None:
-                name = name.replace("<version>",
-                                str(AsteriskVersion()).rstrip('\n'))
 
             url = BASE_URL % (i+1)
 
@@ -76,7 +73,7 @@
         server = resp.headers.get('Server')
         LOGGER.debug("[server]: [%s]", server)
 
-        if server != expected_name:
+        if (not expected_name and server) or (expected_name is not None and re.match(expected_name, server) is None):
             LOGGER.debug("[%s] != [%s]", server, expected_name)
             self.set_passed(False)
             return
diff --git a/tests/masquerade/run-test b/tests/masquerade/run-test
index 74c0f79..096202d 100755
--- a/tests/masquerade/run-test
+++ b/tests/masquerade/run-test
@@ -13,7 +13,6 @@
 
 sys.path.append("lib/python")
 from asterisk.test_case import TestCase
-from asterisk.version import AsteriskVersion
 
 LOGGER = logging.getLogger(__name__)
 
@@ -25,9 +24,7 @@
         self.ami_count = 0
         self.test_complete = False
 
-        self.parking_space_hdr = "exten"
-        if AsteriskVersion() >= AsteriskVersion('12'):
-            self.parking_space_hdr = "parkingspace"
+        self.parking_space_hdr = "parkingspace"
 
         # Set longer timeout than default.
         #
@@ -90,13 +87,6 @@
             "Initiating test call for a chain length of "
             + str(self.chain_length))
         exten = self.base_exten + self.chain_length
-        if AsteriskVersion() < AsteriskVersion('12'):
-            self.ami[0].originate(
-                channel="Local/" + str(exten) + "@outgoing",
-                context="parked", exten="parkme", priority=1,
-                timeout=900, async=True
-                ).addErrback(TestCase.handle_originate_failure)
-            return
         self.ami[0].originate(
             channel="Local/start at outgoing",
             context="parked", exten="parkme12", priority=1,
diff --git a/tests/rest_api/danger/safe/safe.py b/tests/rest_api/danger/safe/safe.py
index ef21d89..07aa827 100644
--- a/tests/rest_api/danger/safe/safe.py
+++ b/tests/rest_api/danger/safe/safe.py
@@ -11,8 +11,6 @@
 
 LOGGER = logging.getLogger(__name__)
 
-from version import AsteriskVersion
-
 
 def eq(expected, actual):
     if expected != actual:
@@ -25,15 +23,10 @@
     actual = resp.json()["value"]
     eq('works', actual)
 
-    if AsteriskVersion() >= AsteriskVersion('13'):
-        ari.set_allow_errors(True)
+    ari.set_allow_errors(True)
     resp = ari.get('channels', channel_id, 'variable', variable='SHELL(echo -n fail)')
-    if AsteriskVersion() >= AsteriskVersion('13'):
-        ari.set_allow_errors(False)
-        eq(500, resp.status_code)
-    else:
-        eq(200, resp.status_code)
-        eq(resp.json().get('value'), '')
+    ari.set_allow_errors(False)
+    eq(500, resp.status_code)
 
 
 def on_start(ari, event, test_object):
diff --git a/usage.py b/usage.py
index 03a9f35..16dea94 100755
--- a/usage.py
+++ b/usage.py
@@ -24,12 +24,6 @@
 
         properties = self.test_config.get('properties', {})
         self.tags = properties.get('tags', ['none'])
-        self.minversion = properties.get('minversion', 'none')
-        if not isinstance(self.minversion, list):
-            self.minversion = [self.minversion]
-        self.maxversion = properties.get('maxversion', 'none')
-        if not isinstance(self.maxversion, list):
-            self.maxversion = [self.maxversion]
         self.dependencies = [repr(d)
                              for d in properties.get('dependencies', [])]
 
@@ -39,10 +33,6 @@
             test_objects = [test_objects]
         self.test_objects = [obj.get('typename', 'test-run')
                              for obj in test_objects]
-        self.test_maxversion = [obj.get('maxversion', 'none')
-                                for obj in test_objects]
-        self.test_minversion = [obj.get('minversion', 'none')
-                                for obj in test_objects]
         modules = test_modules.get('modules', {})
         self.test_modules = [module.get('typename', '-error-')
                              for module in modules]
@@ -50,9 +40,9 @@
 
 class TestSuite:
     def __init__(self):
-        self.tests = self._parse_test_yaml("tests", '')
+        self.tests = self._parse_test_yaml("tests")
 
-    def _parse_test_yaml(self, test_dir, ast_version):
+    def _parse_test_yaml(self, test_dir):
         tests = []
 
         config = load_yaml_config("%s/%s" % (test_dir, TESTS_CONFIG))
@@ -65,7 +55,7 @@
                 if val == "test":
                     tests.append(Test(path))
                 elif val == "dir":
-                    tests += self._parse_test_yaml(path, ast_version)
+                    tests += self._parse_test_yaml(path)
 
         return tests
 
@@ -127,8 +117,6 @@
     test_suite.results_for('test_objects')
     test_suite.results_for('test_modules')
     test_suite.results_for('dependencies')
-    test_suite.results_for('maxversion')
-    test_suite.results_for('minversion')
 
 if __name__ == "__main__":
     sys.exit(main() or 0)

-- 
To view, visit https://gerrit.asterisk.org/8706
To unsubscribe, visit https://gerrit.asterisk.org/settings

Gerrit-Project: testsuite
Gerrit-Branch: master
Gerrit-MessageType: newchange
Gerrit-Change-Id: I1ef916e1e52b9712b3c25bf63ee750b4b456f09e
Gerrit-Change-Number: 8706
Gerrit-PatchSet: 1
Gerrit-Owner: Corey Farrell <git at cfware.com>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.digium.com/pipermail/asterisk-code-review/attachments/20180330/17e38947/attachment-0001.html>


More information about the asterisk-code-review mailing list