[svn-commits] jrose: testsuite/asterisk/trunk r3473 - in /asterisk/trunk: lib/python/asteri...

SVN commits to the Digium repositories svn-commits at lists.digium.com
Fri Sep 21 10:43:42 CDT 2012


Author: jrose
Date: Fri Sep 21 10:43:37 2012
New Revision: 3473

URL: http://svnview.digium.com/svn/testsuite?view=rev&rev=3473
Log:
Add a test for 'queue reload members'

(issue AST-956)
Reported by: John Bigelow

Added:
    asterisk/trunk/tests/apps/queues/reload_queue_members/
    asterisk/trunk/tests/apps/queues/reload_queue_members/configs/
    asterisk/trunk/tests/apps/queues/reload_queue_members/configs/ast1/
    asterisk/trunk/tests/apps/queues/reload_queue_members/configs/ast1/queues.conf   (with props)
    asterisk/trunk/tests/apps/queues/reload_queue_members/queues.conf.replacement   (with props)
    asterisk/trunk/tests/apps/queues/reload_queue_members/run-test   (with props)
    asterisk/trunk/tests/apps/queues/reload_queue_members/test-config.yaml   (with props)
Modified:
    asterisk/trunk/lib/python/asterisk/asterisk.py
    asterisk/trunk/tests/apps/queues/tests.yaml

Modified: asterisk/trunk/lib/python/asterisk/asterisk.py
URL: http://svnview.digium.com/svn/testsuite/asterisk/trunk/lib/python/asterisk/asterisk.py?view=diff&rev=3473&r1=3472&r2=3473
==============================================================================
--- asterisk/trunk/lib/python/asterisk/asterisk.py (original)
+++ asterisk/trunk/lib/python/asterisk/asterisk.py Fri Sep 21 10:43:37 2012
@@ -445,7 +445,7 @@
             if os.path.isfile(target):
                 self.install_config(target)
 
-    def install_config(self, cfg_path):
+    def install_config(self, cfg_path, target_filename = None):
         """Install a custom configuration file for this instance of Asterisk.
 
         By default, the configuration used will be whatever is found in the
@@ -470,9 +470,14 @@
         Keyword Arguments:
         cfg_path -- This argument must be the path to the configuration file
         to be installed into the directory tree for this instance of Asterisk.
+        target_filename -- If this argument is specified, the config file
+        provided will be installed with this filename in the Asterisk etc
+        directory. Use this if the file for cfg_path doesn't match the name of
+        the configuration needed by Asterisk.
 
         Example Usage:
         asterisk.install_config("tests/my-cool-test/configs/manager.conf")
+        asterisk.install_config("tests/my-cool-test/replacement_manager_config.conf", target_filename = "manager.conf")
         """
 
         self.__make_directory_structure()
@@ -484,7 +489,12 @@
         tmp = "%s/%s/%s" % (os.path.dirname(cfg_path), self.ast_version.branch, os.path.basename(cfg_path))
         if os.path.exists(tmp):
             cfg_path = tmp
-        target_path = os.path.join(self.astetcdir, os.path.basename(cfg_path))
+
+        if (target_filename):
+            target_path = os.path.join(self.astetcdir, target_filename)
+        else:
+            target_path = os.path.join(self.astetcdir, os.path.basename(cfg_path))
+
         if os.path.exists(target_path):
             os.remove(target_path)
         try:

Added: asterisk/trunk/tests/apps/queues/reload_queue_members/configs/ast1/queues.conf
URL: http://svnview.digium.com/svn/testsuite/asterisk/trunk/tests/apps/queues/reload_queue_members/configs/ast1/queues.conf?view=auto&rev=3473
==============================================================================
--- asterisk/trunk/tests/apps/queues/reload_queue_members/configs/ast1/queues.conf (added)
+++ asterisk/trunk/tests/apps/queues/reload_queue_members/configs/ast1/queues.conf Fri Sep 21 10:43:37 2012
@@ -1,0 +1,7 @@
+[queue1] ; One stays the same, two fall off, two new ones are added
+member=>local/1 at default
+member=>local/2 at default
+member=>local/3 at default
+
+[queue2] ; Empty Queue receiving new members
+

Propchange: asterisk/trunk/tests/apps/queues/reload_queue_members/configs/ast1/queues.conf
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: asterisk/trunk/tests/apps/queues/reload_queue_members/configs/ast1/queues.conf
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Propchange: asterisk/trunk/tests/apps/queues/reload_queue_members/configs/ast1/queues.conf
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: asterisk/trunk/tests/apps/queues/reload_queue_members/queues.conf.replacement
URL: http://svnview.digium.com/svn/testsuite/asterisk/trunk/tests/apps/queues/reload_queue_members/queues.conf.replacement?view=auto&rev=3473
==============================================================================
--- asterisk/trunk/tests/apps/queues/reload_queue_members/queues.conf.replacement (added)
+++ asterisk/trunk/tests/apps/queues/reload_queue_members/queues.conf.replacement Fri Sep 21 10:43:37 2012
@@ -1,0 +1,9 @@
+[queue1]
+member=>local/1 at default
+member=>local/4 at default
+member=>local/5 at default
+member=>local/6 at default
+
+[queue2]
+member=>local/7 at default
+member=>local/8 at default

Propchange: asterisk/trunk/tests/apps/queues/reload_queue_members/queues.conf.replacement
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: asterisk/trunk/tests/apps/queues/reload_queue_members/queues.conf.replacement
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Propchange: asterisk/trunk/tests/apps/queues/reload_queue_members/queues.conf.replacement
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: asterisk/trunk/tests/apps/queues/reload_queue_members/run-test
URL: http://svnview.digium.com/svn/testsuite/asterisk/trunk/tests/apps/queues/reload_queue_members/run-test?view=auto&rev=3473
==============================================================================
--- asterisk/trunk/tests/apps/queues/reload_queue_members/run-test (added)
+++ asterisk/trunk/tests/apps/queues/reload_queue_members/run-test Fri Sep 21 10:43:37 2012
@@ -1,0 +1,109 @@
+#!/usr/bin/env python
+# vim: sw=3 et:
+'''
+Copyright (C) 2012, Digium, Inc.
+Jonathan Rose <jrose at digium.com>
+
+This program is free software, distributed under the terms of
+the GNU General Public License Version 2.
+'''
+
+import sys
+import os
+import logging
+
+from twisted.internet import reactor
+sys.path.append("lib/python")
+from asterisk.TestCase import TestCase
+LOGGER = logging.getLogger(__name__)
+
+class QueueReloadMembersTest(TestCase):
+    """
+    Creates an Asterisk instance with a couple premade queues. It then replaces
+    the queues.conf file with a new one and performs a reload. After the
+    reload, The AMI is issued a QueueStatus command and the test checks if all
+    of the expected members of the queues are named by the status.
+    """
+    def __init__(self):
+        super(QueueReloadMembersTest, self).__init__()
+
+        self.members_expected = [("queue1", "local/1 at default"), ("queue1", "local/4 at default"), ("queue1", "local/5 at default"), ("queue1", "local/6 at default"),\
+                                 ("queue2", "local/7 at default"), ("queue2", "local/8 at default")]
+
+        self.create_asterisk()
+
+    def run(self):
+        super(QueueReloadMembersTest, self).run()
+        self.create_ami_factory()
+
+    def ami_connect(self, ami):
+        src = "%s/tests/%s/queues.conf.replacement" % (os.getcwd(), self.base)
+        message = {'action': 'queuereload', 'members': 'yes'}
+
+        LOGGER.info( "Installing replacement configuration %s" % src)
+        self.ast[0].install_config(src, target_filename = "queues.conf")
+
+        ami.sendMessage(message, responseCallback = self.reload_finished)
+
+    def reload_finished(self, received):
+        message = {'action': 'QueueStatus'}
+
+        if (received['response'] != "Success"):
+            LOGGER.error("Failed to reload queue members. Test Failed.")
+            self.passed = False
+            self.stop_reactor()
+            return
+
+        LOGGER.info("Completed Reload, moving onto checking the results.")
+
+        self.ami[0].registerEvent("QueueMember", self.queue_member_event)
+        self.ami[0].registerEvent("QueueStatusComplete", self.queue_status_complete_event)
+        self.ami[0].sendMessage(message)
+
+        return 0
+
+    def queue_member_event(self, ami, event):
+        member = event.get("name")
+        queue = event.get("queue")
+        if member is None:
+            LOGGER.error("Received a QueueMember event with no name field.")
+            self.passed = False
+            self.stop_reactor()
+            return
+
+        if queue is None:
+            LOGGER.error("Received a QueueMember event with no queue field.")
+            self.passed = False
+            self.stop_reactor()
+            return
+
+        if (queue, member) not in self.members_expected:
+            LOGGER.error("Test Failed: Received Unexepcted member: %s" % member)
+            self.passed = False
+            self.stop_reactor()
+            return
+
+        LOGGER.info("Received Expected member: %s in %s" % (member, queue))
+        self.members_expected.remove((queue, member))
+
+        if len(self.members_expected) == 0:
+            LOGGER.info("All members that were expected are accounted for. Test will pass if no errors occur between now and when the QueueStatusComplete event is received.")
+            self.passed = True
+
+    def queue_status_complete_event(self, ami, event):
+        if len(self.members_expected) > 0:
+            LOGGER.error("Received QueueStatusComplete without receiving all expected new members of queues.")
+            self.passed = False
+        self.stop_reactor()
+
+def main():
+    test = QueueReloadMembersTest()
+    reactor.run()
+
+    if test.passed:
+        return 0
+    else:
+        return 1
+
+if __name__ == "__main__":
+   sys.exit(main() or 0)

Propchange: asterisk/trunk/tests/apps/queues/reload_queue_members/run-test
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: asterisk/trunk/tests/apps/queues/reload_queue_members/run-test
------------------------------------------------------------------------------
    svn:executable = *

Propchange: asterisk/trunk/tests/apps/queues/reload_queue_members/run-test
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Propchange: asterisk/trunk/tests/apps/queues/reload_queue_members/run-test
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: asterisk/trunk/tests/apps/queues/reload_queue_members/test-config.yaml
URL: http://svnview.digium.com/svn/testsuite/asterisk/trunk/tests/apps/queues/reload_queue_members/test-config.yaml?view=auto&rev=3473
==============================================================================
--- asterisk/trunk/tests/apps/queues/reload_queue_members/test-config.yaml (added)
+++ asterisk/trunk/tests/apps/queues/reload_queue_members/test-config.yaml Fri Sep 21 10:43:37 2012
@@ -1,0 +1,14 @@
+testinfo:
+    summary:     'Test Queue Reload Members functionality'
+    description: |
+        'This replaces the configuration for queues with a new one which should contain different members
+         and then performs a QueueReload command from AMI. After reloading the queue, it then checks the
+         members in the queue to be sure they changed as expected.'
+
+properties:
+    minversion: '1.8.0.0'
+    dependencies:
+        - python : 'twisted'
+        - python : 'starpy'
+    tags:
+        - queues

Propchange: asterisk/trunk/tests/apps/queues/reload_queue_members/test-config.yaml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: asterisk/trunk/tests/apps/queues/reload_queue_members/test-config.yaml
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Propchange: asterisk/trunk/tests/apps/queues/reload_queue_members/test-config.yaml
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: asterisk/trunk/tests/apps/queues/tests.yaml
URL: http://svnview.digium.com/svn/testsuite/asterisk/trunk/tests/apps/queues/tests.yaml?view=diff&rev=3473&r1=3472&r2=3473
==============================================================================
--- asterisk/trunk/tests/apps/queues/tests.yaml (original)
+++ asterisk/trunk/tests/apps/queues/tests.yaml Fri Sep 21 10:43:37 2012
@@ -4,6 +4,7 @@
     - test: 'queue_transfer_callee'
     - test: 'position_priority_maxlen'
     - test: 'set_penalty'
+    - test: 'reload_queue_members'
     # Temporarily disabled while failures are debugged
     #- test: 'macro_gosub_test'
     # Temporarily disabled while failures are debugged




More information about the svn-commits mailing list