[asterisk-commits] mjordan: testsuite/asterisk/trunk r2900 - in /asterisk/trunk/tests: ./ dialpl...

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Wed Dec 14 17:03:50 CST 2011


Author: mjordan
Date: Wed Dec 14 17:03:46 2011
New Revision: 2900

URL: http://svnview.digium.com/svn/testsuite?view=rev&rev=2900
Log:
Add basic dialplan tests to the testsuite

This patch adds a dialplan test to the testsuite.  The dialplan itself
contains a number of tests that exercise basic dialplna functions and
applications.

This test is meant as a starting point for additional work - not all
dialplan functions/apps are currently tested, but markers for future
additions have been added to the supplied extensions.conf.

(closes issue ASTERISK-18036)
Reported by: Leif Madsen
patch: dialplan-pattern-match-tests.patch.txt (License #4999)

Review: https://reviewboard.asterisk.org/r/1621/


Added:
    asterisk/trunk/tests/dialplan/
    asterisk/trunk/tests/dialplan/configs/
    asterisk/trunk/tests/dialplan/configs/ast1/
    asterisk/trunk/tests/dialplan/configs/ast1/extensions.conf   (with props)
    asterisk/trunk/tests/dialplan/run-test   (with props)
    asterisk/trunk/tests/dialplan/test-config.yaml   (with props)
Modified:
    asterisk/trunk/tests/tests.yaml

Added: asterisk/trunk/tests/dialplan/configs/ast1/extensions.conf
URL: http://svnview.digium.com/svn/testsuite/asterisk/trunk/tests/dialplan/configs/ast1/extensions.conf?view=auto&rev=2900
==============================================================================
--- asterisk/trunk/tests/dialplan/configs/ast1/extensions.conf (added)
+++ asterisk/trunk/tests/dialplan/configs/ast1/extensions.conf Wed Dec 14 17:03:46 2011
@@ -1,0 +1,208 @@
+; The run-test script will call into the [test] context and iteratively
+; execute a test within this dialplan.  Each test, when finished, should
+; execute a Goto statement to return to test,start,top.
+;
+; Tests are organized by dialplan function and can be added below.
+
+; ------------------------------------------------------------------
+; Context used to connect the local channel with the tests
+; ------------------------------------------------------------------
+[DialContext]
+
+exten => s,1,NoOp()
+    same => n,Answer()
+    same => n,Echo()
+
+; ------------------------------------------------------------------
+; The main test context
+; ------------------------------------------------------------------
+[test]
+exten => s,1,NoOp()
+	same => n,Goto(start,1)
+
+; Start of a test.  Each test should begin by starting at the top
+; label in this extension.
+exten => start,1,NoOp()
+	same => n,Set(TestCounter=0)
+	same => n,Set(Result=OK)
+	same => n(top),NoOp()
+	same => n,GotoIf($[${Result} != OK]?result_fail,1)
+	same => n,Set(TestCounter=${INC(TestCounter)})
+	same => n,UserEvent(TestStatus, message: Starting test ${TestCounter})
+	same => n,Verbose(Starting test ${TestCounter})
+
+	; test numerical extensions
+	same => n,ExecIf($[${TestCounter} = 1]?Goto(patterns,100,1))
+	same => n,ExecIf($[${TestCounter} = 2]?Goto(patterns,101,1))
+	same => n,ExecIf($[${TestCounter} = 3]?Goto(patterns,106,1))
+	same => n,ExecIf($[${TestCounter} = 10]?Goto(patterns,155,1))
+	same => n,ExecIf($[${TestCounter} = 11]?Goto(patterns,255,1))
+
+	; test alpha extensions
+	same => n,ExecIf($[${TestCounter} = 4]?Goto(patterns,abc,1))
+	same => n,ExecIf($[${TestCounter} = 5]?Goto(patterns,abc0,1))
+	same => n,ExecIf($[${TestCounter} = 6]?Goto(patterns,abc2,1))
+	same => n,ExecIf($[${TestCounter} = 7]?Goto(patterns,cba,1))
+	same => n,ExecIf($[${TestCounter} = 8]?Goto(patterns,cbaz,1))
+	same => n,ExecIf($[${TestCounter} = 9]?Goto(patterns,cbazy,1))
+
+	; end of pattern match testing
+
+	; test dialplan functions
+	same => n,ExecIf($[${TestCounter} = 12]?Goto(base64,start,1))
+	same => n,ExecIf($[${TestCounter} = 13]?Goto(aes,start,1))
+
+	; ---------------------------------------------------------------
+	; NOTE: Add additional dialplan tests before the
+	;       Goto(result_pass,1) statement
+	; ---------------------------------------------------------------
+
+	same => n,Goto(result_pass,1)
+
+exten => result_pass,1,NoOp()
+	same => n,Set(TestResult=True)
+	same => n,Hangup()
+
+exten => result_fail,1,NoOp()
+	same => n,Set(TestResult=False)
+	same => n,UserEvent(TestStatus, message: ${TestCounter} failed!)
+	same => n,Hangup()
+
+exten => h,1,UserEvent(TestResult, result: ${TestResult})
+
+; ---------------------------------------------------------------
+; Pattern matching tests
+; ---------------------------------------------------------------
+[patterns]
+; *** Patterns to match
+exten => 100,1,NoOp()
+	same => n,Set(2,Extension '${EXTEN}' matched on '100')
+	same => n,Set(Result=${IF($[${TestCounter} = 1]?OK:Fail)})
+	same => n,Goto(test,start,top)
+
+exten => _1X[0-5],1,NoOp()
+	same => n,Set(2,Extension '${EXTEN}' matched on '_1X[0-5]')
+	same => n,Set(Result=${IF($[${TestCounter} = 2]?OK:Fail)})
+	same => n,Goto(test,start,top)
+
+exten => _1XX,1,NoOp()
+	same => n,Set(2,Extension '${EXTEN}' matched on '_1XX')
+	same => n,Set(Result=${IF($[${TestCounter} = 3]?OK:Fail)})
+	same => n,Goto(test,start,top)
+
+exten => abc,1,NoOp()
+	same => n,Set(2,Extension '${EXTEN}' matched on 'abc')
+	same => n,Set(Result=${IF($[${TestCounter} = 4]?OK:Fail)})
+	same => n,Goto(test,start,top)
+
+exten => _[a][b][c]X,1,NoOp()
+	same => n,Set(2,Extension '${EXTEN}' matched on '_[a][b][c]X')
+	same => n,Set(Result=${IF($[${TestCounter} = 5]?OK:Fail)})
+	same => n,Goto(test,start,top)
+
+exten => _[a][b][c]N,1,NoOp()
+	same => n,Set(2,Extension '${EXTEN}' matched on '_[a][b][c]N')
+	same => n,Set(Result=${IF($[${TestCounter} = 6]?OK:Fail)})
+	same => n,Goto(test,start,top)
+
+exten => cba,1,NoOp()
+	same => n,Set(2,Extension '${EXTEN}' matched on 'cba')
+	same => n,Set(Result=${IF($[${TestCounter} = 7]?OK:Fail)})
+	same => n,Goto(test,start,top)
+
+exten => _[c][b][a]!,1,NoOp()
+	same => n,Set(2,Extension '${EXTEN}' matched on '_[c][b][a]!')
+	same => n,Set(Result=${IF($[${TestCounter} = 8]?OK:Fail)})
+	same => n,Goto(test,start,top)
+
+exten => _[c][b][a][z].,1,NoOp()
+	same => n,Set(2,Extension '${EXTEN}' matched on '_[c][b][a][z].')
+	same => n,Set(Result=${IF($[${TestCounter} = 9]?OK:Fail)})
+	same => n,Goto(test,start,top)
+
+exten => _1[5][0-5],1,NoOp()
+	same => n,Set(2,Extension '${EXTEN}' matched on '_1[5][0-5]')
+	same => n,Set(Result=${IF($[${TestCounter} = 10]?OK:Fail)})
+	same => n,Goto(test,start,top)
+
+exten => _[1-2][5][0-5],1,NoOp()
+	same => n,Set(2,Extension '${EXTEN}' matched on '_[1-2][5][0-5]')
+	same => n,Set(Result=${IF($[${TestCounter} = 11]?OK:Fail)})
+	same => n,Goto(test,start,top)
+
+; ---------------------------------------------------------------
+; Encryption
+; ---------------------------------------------------------------
+[base64]
+exten => start,1,NoOp()
+	same => n,Set(Encoded=YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWjAxMjM0NTY3ODk=)
+	same => n,Set(Decoded=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789)
+	same => n,Set(EncodingResult=${BASE64_ENCODE(${Decoded})})
+	same => n,Set(TestResult=${IF($["${EncodingResult}" = "${Encoded}"]?OK:Fail)})
+	same => n,GotoIf($[${TestResult} = Fail]?test,result_fail,1)
+	same => n,Set(DecodingResult=${BASE64_DECODE(${Encoded})})
+	same => n,Set(TestResult=${IF($["${DecodingResult}" = "${Decoded}"]?OK:Fail)})
+	same => n,GotoIf($[${TestResult} = Fail]?test,result_fail,1)
+	same => n,Goto(test,start,top)
+
+[aes]
+exten => start,1,NoOp()
+	same => n,Set(Key=1qaz2wsx3edc4rfv)
+	same => n,Set(Encoded=KfAgilzmckUn1bH3NNLFHKfHA36w2EAHJvJvWqEQSSwdLroipj/Cp+dVt2FtjxBXT30cQcQiM0Plgb20pTqPAw==)
+	same => n,Set(Decoded=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789)
+	same => n,Set(EncodingResult=${AES_ENCRYPT(${Key},${Decoded})})
+	same => n,Set(TestResult=${IF($["${EncodingResult}" = "${Encoded}"]?OK:Fail)})
+	same => n,GotoIf($[${TestResult} = Fail]?test,result_fail,1)
+	same => n,Set(DecodingResult=${AES_DECRYPT(${Key},${Encoded})})
+	same => n,Set(TestResult=${IF($["${DecodingResult}" = "${Decoded}"]?OK:Fail)})
+	same => n,GotoIf($[${TestResult} = Fail]?test,result_fail,1)
+	same => n,Goto(test,start,top)
+
+; ------------------------------------------------------------------
+; STRING (LEN, CUT, ISNULL, EXISTS)
+; ------------------------------------------------------------------
+
+; ------------------------------------------------------------------
+; REPLACE()
+; ------------------------------------------------------------------
+
+; ------------------------------------------------------------------
+; IF
+; ------------------------------------------------------------------
+
+; ------------------------------------------------------------------
+; DIGESTS (MD5, SHA1)
+; ------------------------------------------------------------------
+
+; ------------------------------------------------------------------
+; DEC / INC
+; ------------------------------------------------------------------
+
+; ------------------------------------------------------------------
+; SHELL
+; ------------------------------------------------------------------
+
+; ------------------------------------------------------------------
+; FIELDNUM / FIELDQTY
+; ------------------------------------------------------------------
+
+; ------------------------------------------------------------------
+; AstDB functions
+; ------------------------------------------------------------------
+
+; ------------------------------------------------------------------
+; POP, PUSH, SHIFT, UNSHIFT
+; ------------------------------------------------------------------
+
+; ------------------------------------------------------------------
+; URIENCODE, URIDECODE
+; ------------------------------------------------------------------
+
+; ------------------------------------------------------------------
+; VALID_EXTEN
+; ------------------------------------------------------------------
+
+; ------------------------------------------------------------------
+; While / ExitWhile
+; ------------------------------------------------------------------
+

Propchange: asterisk/trunk/tests/dialplan/configs/ast1/extensions.conf
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: asterisk/trunk/tests/dialplan/configs/ast1/extensions.conf
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Propchange: asterisk/trunk/tests/dialplan/configs/ast1/extensions.conf
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: asterisk/trunk/tests/dialplan/run-test
URL: http://svnview.digium.com/svn/testsuite/asterisk/trunk/tests/dialplan/run-test?view=auto&rev=2900
==============================================================================
--- asterisk/trunk/tests/dialplan/run-test (added)
+++ asterisk/trunk/tests/dialplan/run-test Wed Dec 14 17:03:46 2011
@@ -1,0 +1,74 @@
+#!/usr/bin/env python
+'''
+Copyright (C) 2011, Digium, Inc.
+Paul Belanger <pabelanger at digium.com>
+
+This program is free software, distributed under the terms of
+the GNU General Public License Version 2.
+'''
+
+import sys
+import logging
+
+from twisted.internet import reactor
+
+sys.path.append("lib/python")
+from asterisk.TestCase import TestCase
+
+logger = logging.getLogger(__name__)
+
+class DialPlanTest(TestCase):
+
+    def __init__(self):
+        super(DialPlanTest, self).__init__()
+        self.create_asterisk()
+
+    def run(self):
+        super(DialPlanTest, self).run()
+        self.create_ami_factory()
+
+    def ami_connect(self, ami):
+        super(DialPlanTest, self).ami_connect(ami)
+
+        ami.registerEvent("UserEvent", self.ami_UserEvent)
+        ami.originate(
+                channel = "Local/s at DialContext",
+                exten = "s",
+                priority = "1",
+                context = "test"
+        )
+
+    def ami_UserEvent(self, ami, event):
+        event_type = event.get("userevent")
+        if event_type != "TestResult" and event_type != "TestStatus":
+            return
+
+        if event_type == "TestResult":
+            result = event.get("result")
+            if result  == "True":
+                self.passed = True
+                logger.info('Test passed!')
+            else:
+                self.passed = False
+                logger.warn('Test failed!')
+            self.stop_reactor()
+        elif event_type == "TestStatus":
+            message = event.get("message")
+            logger.debug(message)
+        else:
+            logger.warn("Unknown event type %s received" % event_type)
+
+def main(argv=None):
+    test = DialPlanTest()
+    test.start_asterisk()
+    reactor.run()
+    test.stop_asterisk()
+    if test.passed:
+        return 0
+    return 1
+
+if __name__ == "__main__":
+    sys.exit(main() or 0)
+
+
+# vim:sw=4:ts=4:expandtab:textwidth=79

Propchange: asterisk/trunk/tests/dialplan/run-test
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: asterisk/trunk/tests/dialplan/run-test
------------------------------------------------------------------------------
    svn:executable = *

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

Propchange: asterisk/trunk/tests/dialplan/run-test
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: asterisk/trunk/tests/dialplan/test-config.yaml
URL: http://svnview.digium.com/svn/testsuite/asterisk/trunk/tests/dialplan/test-config.yaml?view=auto&rev=2900
==============================================================================
--- asterisk/trunk/tests/dialplan/test-config.yaml (added)
+++ asterisk/trunk/tests/dialplan/test-config.yaml Wed Dec 14 17:03:46 2011
@@ -1,0 +1,12 @@
+testinfo:
+    summary: 'Test a variety of dialplan functions and features'
+    description: |
+        This test verifies a number of dialplan specific functions and features.  This includes,
+        but is not limited to, pattern matching, Goto, GotoIf, math functions, string functions,
+        looping, etc.
+
+properties:
+    minversion: '1.6.2'
+    dependencies:
+        - python : 'twisted'
+        - python : 'starpy'

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

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

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

Modified: asterisk/trunk/tests/tests.yaml
URL: http://svnview.digium.com/svn/testsuite/asterisk/trunk/tests/tests.yaml?view=diff&rev=2900&r1=2899&r2=2900
==============================================================================
--- asterisk/trunk/tests/tests.yaml (original)
+++ asterisk/trunk/tests/tests.yaml Wed Dec 14 17:03:46 2011
@@ -7,6 +7,7 @@
     - dir: 'iax2'
     - dir: 'cdr'
     - test: 'directed_pickup'
+    - test: 'dialplan'
     - test: 'func_srv'
     - dir: 'channels'
     - test: 'udptl'




More information about the asterisk-commits mailing list