[asterisk-commits] mjordan: testsuite/asterisk/trunk r4833 - in /asterisk/trunk: lib/python/aste...
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Tue Mar 11 11:06:59 CDT 2014
Author: mjordan
Date: Tue Mar 11 11:06:53 2014
New Revision: 4833
URL: http://svnview.digium.com/svn/testsuite?view=rev&rev=4833
Log:
agents/agent_request/nominal: Add a basic AgentRequest test
This test logs an agent in, and then tests the following:
- Agent state changes to NOT_INUSE.
- Agent receives an AgentRequest.
- Agent state changes to INUSE.
- Requesting channel hangs up while in bridge with agent.
- Agent is moved back to pool.
- Agent state changes back to NOT_INUSE.
Review: https://reviewboard.asterisk.org/r/3311/
ASTERISK-23230 #close #resolve #comment patches rb311.patch uploaded by bford (license 6580)
(closes issue ASTERISK-23230)
Reported by: Matt Jordan
patches:
rb3311.patch uploaded by bford (License 6580)
Added:
asterisk/trunk/tests/apps/agents/agent_request/
asterisk/trunk/tests/apps/agents/agent_request/nominal/
asterisk/trunk/tests/apps/agents/agent_request/nominal/configs/
asterisk/trunk/tests/apps/agents/agent_request/nominal/configs/ast1/
asterisk/trunk/tests/apps/agents/agent_request/nominal/configs/ast1/agents.conf (with props)
asterisk/trunk/tests/apps/agents/agent_request/nominal/configs/ast1/extensions.conf (with props)
asterisk/trunk/tests/apps/agents/agent_request/nominal/test-config.yaml (with props)
asterisk/trunk/tests/apps/agents/agent_request/tests.yaml (with props)
Modified:
asterisk/trunk/lib/python/asterisk/apptest.py
asterisk/trunk/tests/apps/agents/tests.yaml
Modified: asterisk/trunk/lib/python/asterisk/apptest.py
URL: http://svnview.digium.com/svn/testsuite/asterisk/trunk/lib/python/asterisk/apptest.py?view=diff&rev=4833&r1=4832&r2=4833
==============================================================================
--- asterisk/trunk/lib/python/asterisk/apptest.py (original)
+++ asterisk/trunk/lib/python/asterisk/apptest.py Tue Mar 11 11:06:53 2014
@@ -58,7 +58,13 @@
self._event_instances = [] # The ApplicationEventInstance objects
self.raw_test_config = test_config
- self._application = self.raw_test_config['app']
+ if 'app' in self.raw_test_config:
+ self._applications = [ self.raw_test_config['app'] ]
+ elif 'apps' in self.raw_test_config:
+ self._applications = self.raw_test_config['apps']
+ else:
+ raise Exception("No 'app' or 'apps' defined in test-config")
+
self._scenarios = self.raw_test_config['scenarios']
self.register_ami_observer(self._ami_connect_handler)
@@ -102,7 +108,7 @@
self._event_instances.append(ae_instance)
obj = ChannelObject(ami=self.ami[0],
- application=self._application,
+ applications=self._applications,
channel_def=channel_config)
self._channel_objects[channel_id] = obj
LOGGER.debug("Created channel object for %s" % channel_id)
@@ -202,20 +208,20 @@
default_audio_exten = 'sendAudio'
def __init__(self, ami,
- application,
+ applications,
channel_def):
''' Create a new ChannelObject
Keywords:
ami The AMI instance to spawn the channel in
- application The application name to test
+ applications The application names to test
channel_def A dictionary of parameters to extract that will configure
the channel object
'''
self._channel_id = channel_def['channel-id']
self._channel_name = channel_def['channel-name']
- self._application = application
+ self._applications = applications
self._controller_context = channel_def.get('context') or \
ChannelObject.default_context
self._controller_initial_exten = channel_def.get('exten') or \
@@ -524,7 +530,7 @@
if 'channel' not in event or 'application' not in event:
return
- if event['application'] != self._application:
+ if event['application'] not in self._applications:
return
if event['channel'] not in self._candidate_channels:
# Whatever channel just entered isn't one of our channels. This
Added: asterisk/trunk/tests/apps/agents/agent_request/nominal/configs/ast1/agents.conf
URL: http://svnview.digium.com/svn/testsuite/asterisk/trunk/tests/apps/agents/agent_request/nominal/configs/ast1/agents.conf?view=auto&rev=4833
==============================================================================
--- asterisk/trunk/tests/apps/agents/agent_request/nominal/configs/ast1/agents.conf (added)
+++ asterisk/trunk/tests/apps/agents/agent_request/nominal/configs/ast1/agents.conf Tue Mar 11 11:06:53 2014
@@ -1,0 +1,3 @@
+[1000]
+
+fullname=James Bond
Propchange: asterisk/trunk/tests/apps/agents/agent_request/nominal/configs/ast1/agents.conf
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: asterisk/trunk/tests/apps/agents/agent_request/nominal/configs/ast1/agents.conf
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Propchange: asterisk/trunk/tests/apps/agents/agent_request/nominal/configs/ast1/agents.conf
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: asterisk/trunk/tests/apps/agents/agent_request/nominal/configs/ast1/extensions.conf
URL: http://svnview.digium.com/svn/testsuite/asterisk/trunk/tests/apps/agents/agent_request/nominal/configs/ast1/extensions.conf?view=auto&rev=4833
==============================================================================
--- asterisk/trunk/tests/apps/agents/agent_request/nominal/configs/ast1/extensions.conf (added)
+++ asterisk/trunk/tests/apps/agents/agent_request/nominal/configs/ast1/extensions.conf Tue Mar 11 11:06:53 2014
@@ -1,0 +1,70 @@
+; Tests basic AgentRequest functionality and agent state.
+[default]
+
+; ----------------------------------------------------------------------
+; ***Required***
+; ----------------------------------------------------------------------
+
+exten => sendDTMF,1,NoOp()
+ same => n,Verbose(1, Sending DTMF Signal ${DTMF_TO_SEND})
+ same => n,SendDTMF(${DTMF_TO_SEND})
+ same => n,Goto(caller,wait,1)
+
+exten => sendAudio,1,NoOp()
+ same => n,Verbose(1, Sending audio file ${TALK_AUDIO})
+ same => n,Playback(${TALK_AUDIO})
+ same => n,Goto(caller,wait,1)
+
+exten => sendAudioWithDTMF,1,NoOp()
+ same => n,Verbose(1, Sending audio file ${TALK_AUDIO})
+ same => n,Playback(${TALK_AUDIO})
+ same => n,Verbose(1, Sending DTMF Signal ${DTMF_TO_SEND})
+ same => n,SendDTMF(${DTMF_TO_SEND})
+ same => n,Goto(caller,wait,1)
+
+exten => hangup,1,NoOp()
+ same => n,Verbose(1, Hanging up)
+ same => n,Hangup()
+
+exten => wait,1,NoOp()
+ same => n,Wait(10000)
+
+; ----------------------------------------------------------------------
+; Logs the agent in.
+; ----------------------------------------------------------------------
+exten => login,hint,Agent:1000
+exten => login,1,NoOp()
+ same => n,Answer()
+ same => n,AgentLogin(1000)
+
+; ----------------------------------------------------------------------
+; Sends an agent request to the agent.
+; ----------------------------------------------------------------------
+exten => request,1,NoOp()
+ same => n,Answer()
+ same => n,AgentRequest(1000)
+
+; ----------------------------------------------------------------------
+; Tests to see if the current state of the agent is NOT_INUSE.
+; ----------------------------------------------------------------------
+exten => status-avail,1,NoOp()
+ same => n,Answer()
+ same => n,ExecIf($[${DEVICE_STATE(Agent:1000)}=NOT_INUSE]?UserEvent(AvailableAgent,result:pass))
+ same => n,Hangup()
+
+; ----------------------------------------------------------------------
+; Tests to see if the current state of the agent after returning to the
+; pool is NOT_INUSE.
+; ----------------------------------------------------------------------
+exten => status-avail2,1,NoOp()
+ same => n,Answer()
+ same => n,ExecIf($[${DEVICE_STATE(Agent:1000)}=NOT_INUSE]?UserEvent(AvailableAgent2,result:pass))
+ same => n,Hangup()
+
+; ----------------------------------------------------------------------
+; Tests to see if the current state of the agent is INUSE.
+; ----------------------------------------------------------------------
+exten => status-inuse,1,NoOp()
+ same => n,Answer()
+ same => n,ExecIf($[${DEVICE_STATE(Agent:1000)}=INUSE]?UserEvent(InuseAgent,result:pass))
+ same => n,Hangup()
Propchange: asterisk/trunk/tests/apps/agents/agent_request/nominal/configs/ast1/extensions.conf
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: asterisk/trunk/tests/apps/agents/agent_request/nominal/configs/ast1/extensions.conf
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Propchange: asterisk/trunk/tests/apps/agents/agent_request/nominal/configs/ast1/extensions.conf
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: asterisk/trunk/tests/apps/agents/agent_request/nominal/test-config.yaml
URL: http://svnview.digium.com/svn/testsuite/asterisk/trunk/tests/apps/agents/agent_request/nominal/test-config.yaml?view=auto&rev=4833
==============================================================================
--- asterisk/trunk/tests/apps/agents/agent_request/nominal/test-config.yaml (added)
+++ asterisk/trunk/tests/apps/agents/agent_request/nominal/test-config.yaml Tue Mar 11 11:06:53 2014
@@ -1,0 +1,194 @@
+testinfo:
+ summary: 'Tests AgentRequest and agent state.'
+ description:
+ This test verifies that once an agent logs in, that agent is placed in a
+ pool with status NOT_INUSE. When a channel requests the agent, they are placed
+ into a basic bridge and the agent's status changes to INUSE. Once the requesting
+ channel hangs up, the agent is then returned to the pool, and that agent's
+ status changes to NOT_INUSE again.
+
+test-modules:
+ test-object:
+ config-section: test-object-config
+ typename: 'apptest.AppTest'
+
+test-object-config:
+ apps:
+ - 'AgentRequest'
+ - 'AgentLogin'
+ scenarios:
+ -
+ # Scenario
+ # An agent logs in. This spawns a second channel that requests the agent.
+ # The two should then be bridged together, and the agent's status should change
+ # to INUSE. Afterwards, the requesting channel hangs up, and the agent's
+ # status should change back to available.
+ channels:
+ -
+ channel-id: 'Agent-login'
+ channel-name: 'Local/login at default'
+ context: 'default'
+ exten: 'wait'
+ start-on-create: True
+ events:
+ -
+ type: 'headermatch'
+ conditions:
+ match:
+ Event: 'AgentLogin'
+ Agent: '1000'
+ actions:
+ -
+ action-type: 'set-expected-result'
+ expected-result: 'Agent 1000 logged in.'
+ -
+ type: 'headermatch'
+ conditions:
+ match:
+ Event: 'BridgeEnter'
+ Channel: 'Local/login at default-.*'
+ BridgeType: 'agent_hold'
+ actions:
+ -
+ action-type: 'set-expected-result'
+ expected-result: 'Agent 1000 entered pool.'
+ -
+ type: 'headermatch'
+ conditions:
+ match:
+ Event: 'BridgeEnter'
+ Channel: 'Local/login at default-.*'
+ BridgeType: 'basic'
+ actions:
+ -
+ action-type: 'set-expected-result'
+ expected-result: 'Agent channel connected to bridge.'
+ -
+ type: 'headermatch'
+ conditions:
+ match:
+ Event: 'MusicOnHoldStart'
+ Channel: 'Local/login at default-.*'
+ actions:
+ -
+ action-type: 'set-expected-result'
+ expected-result: 'Agent 1000 received MusicOnHoldStart event.'
+ -
+ # Delay to work around ASTERISK-23259
+ action-type: 'start-call'
+ delay: 8
+ channel-id: 'Status-AVAILABLE'
+ -
+ channel-id: 'Agent-request'
+ channel-name: 'Local/request at default'
+ context: 'default'
+ exten: 'wait'
+ events:
+ -
+ type: 'headermatch'
+ conditions:
+ match:
+ Event: 'Newexten'
+ Channel: 'Local/request at default-.*'
+ Application: 'AgentRequest'
+ AppData: '1000'
+ actions:
+ -
+ action-type: 'set-expected-result'
+ expected-result: 'Agent 1000 received an agent request.'
+ -
+ type: 'headermatch'
+ conditions:
+ match:
+ Event: 'BridgeEnter'
+ Channel: 'Local/request at default-.*'
+ BridgeType: 'basic'
+ actions:
+ -
+ action-type: 'set-expected-result'
+ expected-result: 'The requesting channel entered the bridge.'
+ -
+ action-type: 'start-call'
+ delay: 2
+ channel-id: 'Status-INUSE'
+
+ -
+ channel-id: 'Status-AVAILABLE'
+ channel-name: 'Local/status-avail at default'
+ context: 'default'
+ exten: 'wait'
+ events:
+ -
+ type: 'headermatch'
+ conditions:
+ match:
+ Event: 'UserEvent'
+ UserEvent: 'AvailableAgent'
+ requirements:
+ match:
+ Result: 'pass'
+ actions:
+ -
+ action-type: 'set-expected-result'
+ expected-result: 'Agent is available.'
+ -
+ action-type: 'start-call'
+ channel-id: 'Agent-request'
+ -
+ channel-id: 'Status-end'
+ channel-name: 'Local/status-avail2 at default'
+ context: 'default'
+ exten: 'wait'
+ events:
+ -
+ type: 'headermatch'
+ conditions:
+ match:
+ Event: 'UserEvent'
+ UserEvent: 'AvailableAgent2'
+ requirements:
+ match:
+ Result: 'pass'
+ actions:
+ -
+ action-type: 'set-expected-result'
+ expected-result: 'Agent is available.'
+ -
+ action-type: 'hangup'
+ channel-id: 'Agent-login'
+ -
+ action-type: 'end-scenario'
+ -
+ channel-id: 'Status-INUSE'
+ channel-name: 'Local/status-inuse at default'
+ context: 'default'
+ exten: 'wait'
+ events:
+ -
+ type: 'headermatch'
+ conditions:
+ match:
+ Event: 'UserEvent'
+ UserEvent: 'InuseAgent'
+ requirements:
+ match:
+ Result: 'pass'
+ actions:
+ -
+ action-type: 'set-expected-result'
+ expected-result: 'Agent is in use.'
+ -
+ action-type: 'hangup'
+ channel-id: 'Agent-request'
+ -
+ action-type: 'start-call'
+ channel-id: 'Status-end'
+
+properties:
+ minversion: '12.0.0'
+ dependencies:
+ - python : 'starpy'
+ - python : 'twisted'
+ tags:
+ - agents
+ - apps
Propchange: asterisk/trunk/tests/apps/agents/agent_request/nominal/test-config.yaml
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: asterisk/trunk/tests/apps/agents/agent_request/nominal/test-config.yaml
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Propchange: asterisk/trunk/tests/apps/agents/agent_request/nominal/test-config.yaml
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: asterisk/trunk/tests/apps/agents/agent_request/tests.yaml
URL: http://svnview.digium.com/svn/testsuite/asterisk/trunk/tests/apps/agents/agent_request/tests.yaml?view=auto&rev=4833
==============================================================================
--- asterisk/trunk/tests/apps/agents/agent_request/tests.yaml (added)
+++ asterisk/trunk/tests/apps/agents/agent_request/tests.yaml Tue Mar 11 11:06:53 2014
@@ -1,0 +1,3 @@
+# Enter tests here in the order they should be considered for execution:
+tests:
+ - test: 'nominal'
Propchange: asterisk/trunk/tests/apps/agents/agent_request/tests.yaml
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: asterisk/trunk/tests/apps/agents/agent_request/tests.yaml
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Propchange: asterisk/trunk/tests/apps/agents/agent_request/tests.yaml
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: asterisk/trunk/tests/apps/agents/tests.yaml
URL: http://svnview.digium.com/svn/testsuite/asterisk/trunk/tests/apps/agents/tests.yaml?view=diff&rev=4833&r1=4832&r2=4833
==============================================================================
--- asterisk/trunk/tests/apps/agents/tests.yaml (original)
+++ asterisk/trunk/tests/apps/agents/tests.yaml Tue Mar 11 11:06:53 2014
@@ -1,3 +1,5 @@
# Enter tests here in the order they should be considered for execution:
tests:
- dir: 'agent_login'
+ - dir: 'agent_request'
+
More information about the asterisk-commits
mailing list