[Asterisk-code-review] chanspy barge: rewrite to remove pjsua dependency (testsuite[13])

Kevin Harwell asteriskteam at digium.com
Fri Oct 26 17:41:17 CDT 2018


Kevin Harwell has uploaded this change for review. ( https://gerrit.asterisk.org/10551


Change subject: chanspy_barge: rewrite to remove pjsua dependency
......................................................................

chanspy_barge: rewrite to remove pjsua dependency

When Asterisk was upgraded to use pjproject 2.8 a patch that was made to pjsua
caused pjsua to default to a TCP transport. This caused any testsuite test that
spawned pjsua as an endpoint to start to fail as they were using UDP (e.g.
chanspy_barge). An easy solution here is to set those particular tests to pass
the '--no-tcp' option to pjsua.

However, at some point we want to remove the dependency to pjsua altogther from
the testsuite. That being the case the chanspy_barge test has been rewritten to
not longer use pjsua. Instead this test just now uses local channels to test the
"barge" functionality.

ASTERISK-28096 #close

Change-Id: Ia4ab4e37b867cc6b4cd7351e22adc3862d4b34eb
---
M tests/apps/chanspy/chanspy_barge/configs/ast1/extensions.conf
D tests/apps/chanspy/chanspy_barge/configs/ast1/rtp.conf
D tests/apps/chanspy/chanspy_barge/configs/ast1/sip.conf
D tests/apps/chanspy/chanspy_barge/run-test
D tests/apps/chanspy/chanspy_barge/sounds/talking.wav
M tests/apps/chanspy/chanspy_barge/test-config.yaml
6 files changed, 71 insertions(+), 214 deletions(-)



  git pull ssh://gerrit.asterisk.org:29418/testsuite refs/changes/51/10551/1

diff --git a/tests/apps/chanspy/chanspy_barge/configs/ast1/extensions.conf b/tests/apps/chanspy/chanspy_barge/configs/ast1/extensions.conf
index 89008da..02854d2 100644
--- a/tests/apps/chanspy/chanspy_barge/configs/ast1/extensions.conf
+++ b/tests/apps/chanspy/chanspy_barge/configs/ast1/extensions.conf
@@ -1,25 +1,23 @@
-[general]
+[default]
+exten => create_bridge,1,NoOp()
+	same => n,Dial(Local/detect_barge)
+	same => n,Hangup()
 
-[globals]
+exten => detect_barge,1,NoOp()
+	same => n,Answer()
+	; Transmit silence so the "other" side doesn't detect
+	; its audio from "this" side
+	same => n,BackgroundDetect(silence/10,1)
+	same => n,Log(ERROR, Channel ${CHANNEL} failed to detect barged audio)
+	same => n,Hangup()
 
-[test]
-exten => play_exten,1,Answer()
-exten => play_exten,n,MixMonitor(${TESTAUDIO1}.wav)
-exten => play_exten,n,Wait(3)
-exten => play_exten,n,StopMixMonitor()
-exten => play_exten,n,Hangup()
+exten => talk,1,NoOp()
+	; Once talking is detected wait for the other side. The test will hang
+	; things up once it both sides successfully enter the "talk" extension.
+	same => n,Verbose(Detected barged audio on channel ${CHANNEL})
+	same => n,Echo()
 
-exten => chanspytest,1,ChanSpy(SIP,qB)
-
-exten => detect_audio,1,Answer()
-exten => detect_audio,n,Set(TALK_DETECTED=0) ; initialize TALK_DETECT var
-exten => detect_audio,n,BackgroundDetect(${TALK_AUDIO},1,20,,20000)
-exten => detect_audio,n,GoToIf($[${TALK_DETECTED}=0]?talkdetectfail:talkdetectpass)
-exten => detect_audio,n(talkdetectfail),Hangup()
-
-;PASSED!
-exten => detect_audio,n(talkdetectpass),AGI(agi://127.0.0.1:4573)
-
-exten => play_recording,1,Answer()
-exten => play_recording,n,PlayBack(${TESTAUDIO1})
-exten => play_recording,n,Echo()
\ No newline at end of file
+exten => s,1,NoOp()
+	same => n,Answer()
+	same => n,Playback(hello-world)
+	same => n,Hangup()
diff --git a/tests/apps/chanspy/chanspy_barge/configs/ast1/rtp.conf b/tests/apps/chanspy/chanspy_barge/configs/ast1/rtp.conf
deleted file mode 100644
index fb420ba..0000000
--- a/tests/apps/chanspy/chanspy_barge/configs/ast1/rtp.conf
+++ /dev/null
@@ -1,3 +0,0 @@
-[general]
-; Turn off strictrtp so that DTMF does not get dropped
-strictrtp=no
diff --git a/tests/apps/chanspy/chanspy_barge/configs/ast1/sip.conf b/tests/apps/chanspy/chanspy_barge/configs/ast1/sip.conf
deleted file mode 100644
index c9bcb00..0000000
--- a/tests/apps/chanspy/chanspy_barge/configs/ast1/sip.conf
+++ /dev/null
@@ -1,29 +0,0 @@
-[general]
-directmedia=no
-
-[end_a]
-context=test
-type=friend
-host=127.0.0.1
-port=5065
-insecure=invite
-disallow=all
-allow=ulaw
-
-[end_b]
-context=test
-type=friend
-host=127.0.0.1
-port=5066
-insecure=invite
-disallow=all
-allow=ulaw
-
-[end_c]
-context=test
-type=friend
-host=127.0.0.1
-port=5067
-insecure=invite
-disallow=all
-allow=ulaw
diff --git a/tests/apps/chanspy/chanspy_barge/run-test b/tests/apps/chanspy/chanspy_barge/run-test
deleted file mode 100755
index e1b8bc6..0000000
--- a/tests/apps/chanspy/chanspy_barge/run-test
+++ /dev/null
@@ -1,146 +0,0 @@
-#!/usr/bin/env python
-'''
-Copyright (C) 2010-2014, Digium, Inc.
-David Vossel <dvossel 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 sys
-import os
-import signal
-import subprocess
-import logging
-
-from twisted.application import service, internet
-from twisted.internet import reactor, defer
-from starpy import manager
-from starpy import fastagi
-
-sys.path.append("lib/python")
-from asterisk.test_case import TestCase
-
-LOGGER = logging.getLogger(__name__)
-
-class ChanSpyBarge(TestCase):
-    def __init__(self):
-        super(ChanSpyBarge, self).__init__()
-        self.last_step = ""
-        self.passed = False
-        self.numSpyEvents = 0
-        self.expectedSpyEvents = 3
-        self.talkDetected = 0
-        self.test_to = 25
-
-        self.create_asterisk()
-        self.create_fastagi_factory()
-
-        ast_conf_options = {
-            "transmit_silence" : "yes",
-        }
-
-        self.talkingaudio = os.path.join(os.getcwd(), "%s/sounds/talking" % self.test_name)
-        self.audiofile1 = self.ast[0].get_path("astspooldir", "tmp", "testaudio1")
-
-    def fastagi_connect(self, agi):
-        LOGGER.info("GOT PASS RESULTS!!!")
-        sequence = fastagi.InSequence()
-        sequence.append(agi.execute, "HangUp")
-        sequence.append(agi.finish)
-        self.passed = True
-        reactor.callLater(1, self.readResult)
-        return sequence()
-
-    def readResult(self):
-        self.stop_reactor()
-        LOGGER.info("Reading results")
-        self.ast[0].cli_exec("core show locks")   # get lock output in case of deadlock before tearing down.
-        self.ast[0].cli_exec("core show channels")# if channels are still up for some reason, we want to know that as well
-
-        self.ast[0].cli_exec("core show globals") # The global variables here hold failure conditions
-
-        if self.passed == True:
-            LOGGER.info('SIP ChanSpy test PASSED!')
-        else:
-            LOGGER.error('SIP ChanSpy Test FAILED')
-
-    def chanspyEvent(self, ami, event):
-        LOGGER.info('Received ChanSpyStart event')
-        self.numSpyEvents += 1
-        if event['spyeechannel'].count('end_a') > 0:
-            reactor.callLater(3, self.aHangup)
-            reactor.callLater(4, self.bHangup)
-
-    def ami_connect(self, ami):
-        self.ami = ami
-        self.ami.registerEvent('ChanSpyStart', self.chanspyEvent)
-
-        self.ami.setVar(channel = "", variable = "TESTAUDIO1", value = self.audiofile1)
-        self.ami.setVar(channel = "", variable = "TALK_AUDIO", value = self.talkingaudio)
-
-        reactor.callLater(1, self.callChanSpy)
-        reactor.callLater(2, self.aCall)
-
-
-    def aCall(self):
-        LOGGER.info("A Calling into Wait")
-        self.pja.stdin.write("m\n")
-        self.pja.stdin.write("sip:play_exten at 127.0.0.1:5060\n")
-
-    def bCall(self):
-        LOGGER.info("B Calling into Playback")
-        self.pjb.stdin.write("m\n")
-        self.pjb.stdin.write("sip:play_exten at 127.0.0.1:5060\n")
-
-    def aHangup(self):
-        LOGGER.info("Hanging up A")
-        self.pja.stdin.write("h\n")
-
-    def bHangup(self): #calls into chanspy extension and plays audio to A using Barge
-        LOGGER.info("Hanging up B")
-        self.pjb.stdin.write("h\n")
-        reactor.callLater(2, self.verifyAudio)
-
-    def startProcesses(self):
-        LOGGER.info("Starting Processes")
-        playfilearg = "--play-file=%s.wav" % (self.talkingaudio)
-        self.pja = subprocess.Popen(['pjsua', '--local-port=5065', '--auto-answer=200', '--null-audio', '--auto-loop'], stdin=subprocess.PIPE, stdout=subprocess.PIPE)
-        self.pjb = subprocess.Popen(['pjsua', '--local-port=5066', '--auto-answer=200', playfilearg, '--null-audio', '--auto-play'], stdin=subprocess.PIPE, stdout=subprocess.PIPE)
-
-    def stopProcesses(self):
-        LOGGER.info("Stopping Processes")
-        os.kill(self.pja.pid, signal.SIGKILL)
-        os.kill(self.pjb.pid, signal.SIGKILL)
-
-    def callChanSpy(self):
-        LOGGER.info("Placing call to ChanSpy extension.")
-        self.ast[0].cli_originate("SIP/end_b extension chanspytest at test")
-
-    def verifyAudio(self):
-        LOGGER.info("Verifying Audio")
-        self.ast[0].cli_originate("Local/play_recording at test extension detect_audio at test")
-
-    def stop_asterisk(self):
-        if not self.passed:
-            self.readResult()
-
-    def run(self):
-        self.create_ami_factory()
-
-
-def main():
-    test = ChanSpyBarge()
-    test.startProcesses()
-    reactor.run()
-    test.stopProcesses()
-    if test.passed != True:
-        return 1
-    return 0
-
-if __name__ == "__main__":
-    sys.exit(main() or 0)
-
-
-# vim:sw=4:ts=4:expandtab:textwidth=79
diff --git a/tests/apps/chanspy/chanspy_barge/sounds/talking.wav b/tests/apps/chanspy/chanspy_barge/sounds/talking.wav
deleted file mode 100644
index 6304af0..0000000
--- a/tests/apps/chanspy/chanspy_barge/sounds/talking.wav
+++ /dev/null
Binary files differ
diff --git a/tests/apps/chanspy/chanspy_barge/test-config.yaml b/tests/apps/chanspy/chanspy_barge/test-config.yaml
index e3ec313..83ef805 100644
--- a/tests/apps/chanspy/chanspy_barge/test-config.yaml
+++ b/tests/apps/chanspy/chanspy_barge/test-config.yaml
@@ -1,28 +1,65 @@
 testinfo:
-    summary:     'Test Chanspy with the \"B\" option for barging in on both channels.'
+    summary: 'Test Chanspy with the \"B\" option for barging in on both channels.'
     description: |
-        'This test verifies basic functionality of using ChanSpy with the 
-         barge option set. MixMonitor is used to record the audio on the
-         spied on channel to verify the barging spy channel audio is received.  
-         Also, since the Wait() application is used during barge, this verifies 
-         that the behavior of transmitting silence during ast_safe_sleep works with
-         transmit_silence=yes configured in asterisk.conf. Without transmitting
-         silence during wait, the barge audio will not be mixed and this test will
-         fail.'
+        'This test verifies basic functionality of using ChanSpy with the
+         barge option set. Both sides of the call transmit silence using
+         BackgroundDetect. This ensures that any noise/audio heard only
+         comes from the barging channel.'
+
+test-modules:
+    test-object:
+        config-section: test-config
+        typename: 'test_case.SimpleTestCase'
+    modules:
+        -
+            config-section: event-action-config
+            typename: 'pluggable_modules.EventActionModule'
+
+test-config:
+    test-iterations:
+        -
+            channel: 'Local/detect_barge'
+            context: 'default'
+            exten: 'create_bridge'
+            priority: 1
+
+event-action-config:
+    -
+        ami-events:
+            conditions:
+                match:
+                    Event: 'Newexten'
+                    Application: 'BackgroundDetect'
+            count: '2'
+            trigger-on-count: True
+        ami-actions:
+            action:
+                Action: 'Originate'
+                Channel: 'Local/s'
+                Application: 'ChanSpy'
+                Data: 'Local/detect_barge,qBE'
+    -
+        ami-events:
+            conditions:
+                match:
+                    Event: 'Newexten'
+                    Application: 'Echo'
+            count: '2'
+            trigger-on-count: True
+        ami-actions:
+            action:
+                Action: 'UserEvent'
+                UserEvent: 'Done'
 
 properties:
     dependencies:
         - python : 'twisted'
         - python : 'starpy'
-        - app : 'pjsua'
         - asterisk : 'app_chanspy'
         - asterisk : 'app_echo'
-        - asterisk : 'app_mixmonitor'
         - asterisk : 'app_playback'
         - asterisk : 'app_talkdetect'
-        - asterisk : 'chan_sip'
         - asterisk : 'pbx_config'
-        - asterisk : 'res_agi'
     tags:
-        - SIP
         - chanspy
+

-- 
To view, visit https://gerrit.asterisk.org/10551
To unsubscribe, or for help writing mail filters, visit https://gerrit.asterisk.org/settings

Gerrit-Project: testsuite
Gerrit-Branch: 13
Gerrit-MessageType: newchange
Gerrit-Change-Id: Ia4ab4e37b867cc6b4cd7351e22adc3862d4b34eb
Gerrit-Change-Number: 10551
Gerrit-PatchSet: 1
Gerrit-Owner: Kevin Harwell <kharwell at digium.com>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.digium.com/pipermail/asterisk-code-review/attachments/20181026/1a8288c1/attachment-0001.html>


More information about the asterisk-code-review mailing list