1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170
|
# -*- coding: utf-8 -*-
import os
import pytest
import asyncio
from panoramisk import testing
from panoramisk import message
test_dir = os.path.join(os.path.dirname(__file__), 'fixtures')
@pytest.fixture
def manager(request, event_loop):
def manager(stream=None, **config):
config['loop'] = event_loop
if stream:
config['stream'] = os.path.join(test_dir, stream)
return testing.Manager(**config)
return manager
def test_connection(manager):
assert isinstance(manager().connect(), asyncio.Task)
def test_ping(manager):
manager = manager(stream='ping.yaml')
future = manager.send_action({'Action': 'Ping'})
assert 'ping' in future.result()
@pytest.mark.asyncio
async def test_login_ok(manager):
manager = manager(username='xx', secret='xx', stream='login_ok.yaml')
authenticated = await manager.authenticated_future
assert authenticated.success is True
assert manager.login(manager.authenticated_future) is True
@pytest.mark.asyncio
async def test_login_failed(manager):
manager = manager(username='xx', secret='xx', stream='login_failed.yaml')
authenticated = await manager.authenticated_future
assert authenticated.success is False
assert manager.login(manager.authenticated_future) is False
def test_logoff(manager):
manager = manager(stream='logoff.yaml')
future = manager.send_action({'Action': 'logoff'})
assert future.result().success is True
def test_queue_status(manager):
manager = manager(stream='queue_status.yaml')
future = manager.send_action({'Action': 'QueueStatus',
'Queue': 'xxxxxxxxxxxxxxxx-tous'})
responses = future.result()
assert len(responses) == 9
def test_pjsip_show_endpoint(manager):
manager = manager(stream='pjsip_show_endpoint.yaml')
future = manager.send_action({'Action': 'PJSIPShowEndpoint',
'Endpoint': 'XXXXX'})
responses = future.result()
assert len(responses) == 7
def test_command_core_show_version(manager):
manager = manager(stream='command_core_show_version.yaml')
future = manager.send_command('core show version')
responses = future.result()
assert len(responses) == 4
# @todo: in responses['content'],
# you retrieve only '--END COMMAND--' instead of the result of the command
def test_asyncagi_get_variable(manager):
manager = manager(stream='asyncagi_get_var.yaml')
future = manager.send_agi_command(
'SIP/000000-00000a53', 'GET VARIABLE endpoint')
response = future.result()[-1]
assert response.result == '200 result=1 (SIP/000000)'
pretty_result = response.parsed_result()
assert pretty_result['status_code'] == 200
assert pretty_result['result'][0] == '1'
assert pretty_result['result'][1] == 'SIP/000000'
def test_asyncagi_get_variable_on_dead_channel(manager):
manager = manager(stream='asyncagi_channel_does_not_exist.yaml')
future = manager.send_agi_command(
'SIP/eeeeee-00000014', 'GET VARIABLE DIALSTATUS')
response = future.result()
assert response.response == 'Error'
assert response.message == 'Channel SIP/eeeeee-00000014 does not exist.'
def test_originate_sync(manager):
manager = manager(stream='originate_sync.yaml')
future = manager.send_action({'Action': 'Originate', 'Async': 'false'})
response = future.result()
assert response.success
assert response.message == 'Originate successfully queued'
def test_close(manager):
manager().close()
def test_events(manager):
future = asyncio.Future()
manager = manager()
@manager.register_event('Peer*')
def callback(manager, event):
future.set_result(event)
event = message.Message.from_line('Event: PeerStatus')
assert event.success is True
assert event['Event'] == 'PeerStatus'
assert 'Event' in event
matches = manager.dispatch(event)
assert matches == ['Peer*']
assert event is future.result()
event = message.Message.from_line('Event: NoPeerStatus')
matches = manager.dispatch(event)
assert matches == []
def test_coroutine_events_handler(manager):
async def callback(manager, event):
# to create quickly a coroutine generator, don't do that on
# production code
return
manager = manager()
manager.register_event('Peer*', callback)
event = message.Message.from_line('Event: PeerStatus')
assert event.success is True
assert event['Event'] == 'PeerStatus'
assert 'Event' in event
matches = manager.dispatch(event)
assert matches == ['Peer*']
def test_from_config(event_loop, tmpdir):
f = tmpdir.mkdir("config").join("config.ini")
f.write('''
[asterisk]
host = 127.0.0.1
user= username
secret = mysecret
''')
manager = testing.Manager.from_config(str(f), loop=event_loop)
assert manager.config['secret'] == 'mysecret'
with open(str(f)) as fd:
manager = testing.Manager.from_config(fd, loop=event_loop)
assert manager.config['secret'] == 'mysecret'
def test_pinger(manager):
manager = manager()
assert isinstance(manager.pinger, asyncio.TimerHandle)
manager.close()
assert manager.pinger is None
|