diff options
author | Wang Qi <wangq.fnst@cn.fujitsu.com> | 2021-09-13 10:46:45 +0800 |
---|---|---|
committer | Jan-Simon Möller <jsmoeller@linuxfoundation.org> | 2021-11-03 15:11:21 +0100 |
commit | 64e5d7e254968aee3e5f92f86663ae29920e64c7 (patch) | |
tree | b91f9758ad0165c88903341cd1ca4de6b015e6fc | |
parent | 87c500fad4cb16c20f4c9b94919965ca61b67446 (diff) |
Add testcase of agl-service-telephony
Bug-AGL: SPEC-4062
Signed-off-by: wangqi <wangq.fnst@cn.fujitsu.com>
Change-Id: I33202a87cc3f9f2a516c12145999ed7a3be06752
-rw-r--r-- | pyagl/pytest.ini | 1 | ||||
-rw-r--r-- | pyagl/services/telephony.py | 88 | ||||
-rw-r--r-- | pyagl/tests/test_telephony.py | 111 |
3 files changed, 200 insertions, 0 deletions
diff --git a/pyagl/pytest.ini b/pyagl/pytest.ini index 8865272..26685c8 100644 --- a/pyagl/pytest.ini +++ b/pyagl/pytest.ini @@ -6,6 +6,7 @@ markers = internet: verb tests requiring Internet access audiomixer: agl-service-audiomixer tests bluetooth: agl-service-bluetooth tests + telephony: agl-service-telephony tests bluetooth_map: agl-service-bluetooth-map tests bluetooth_pbap: agl-service-bluetooth-pbap tests can_low_level: agl-service-can-low-level tests diff --git a/pyagl/services/telephony.py b/pyagl/services/telephony.py new file mode 100644 index 0000000..e02842d --- /dev/null +++ b/pyagl/services/telephony.py @@ -0,0 +1,88 @@ +# Copyright (C) 2021 Fujitsu +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from pyagl.services.base import AGLBaseService, AFBResponse +import asyncio +import os + +class TelePhonyService(AGLBaseService): + service = 'agl-service-telephony' + parser = AGLBaseService.getparser() + + def __init__(self, ip, port=None): + super().__init__(api='telephony', ip=ip, port=port, service='agl-service-telephony') + + async def subscribe(self, event='callStateChanged'): + return await super().subscribe(event=event) + + async def unsubscribe(self, event='callStateChanged'): + return await super().subscribe(event=event) + + async def dial(self, value=None): + print(value) + return await self.request('dial', {'value': value}) + + async def last_dial(self): + return await self.request('last_dial') + + async def hangup_all(self): + return await self.request('hangup_all') + + async def send_tones(self, value: str): + return await self.request('send_tones', {'value': value}) + + async def hangup(self, id: str): + return await self.request('hangup', {'id': id}) + + async def answer(self): + return await self.request('answer') + + async def hold_and_answer(self): + return await self.request('hold_and_answer') + + async def release_and_answer(self): + return await self.request('release_and_answer') + + async def hangup_multiparty(self): + return await self.request('hangup_multiparty') + + async def create_multiparty(self): + return await self.request('create_multiparty') + + async def swap_calls(self): + return await self.request('swap_calls') + + async def get_calls(self): + return await self.request('get_calls') + + async def get_battery_level(self): + return await self.request('get_battery_level') + + async def get_network_registration(self): + return await self.request('get_network_registration') + +async def main(loop): + args = TelePhonyService.parser.parse_args() + tps = await TelePhonyService(ip=args.ipaddr, port=args.port) + + if args.subscribe: + for event in args.subscribe: + msgid = await tps.subscribe(event) + print(f'Subscribed for event {event} with messageid {msgid}') + print(await tps.afbresponse()) + + +if __name__ == '__main__': + loop = asyncio.get_event_loop() + loop.run_until_complete(main(loop)) diff --git a/pyagl/tests/test_telephony.py b/pyagl/tests/test_telephony.py new file mode 100644 index 0000000..4663f4f --- /dev/null +++ b/pyagl/tests/test_telephony.py @@ -0,0 +1,111 @@ +# Copyright (C) 2021 Fujitsu +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import asyncio +import os +import pytest +import logging +from pyagl.services.base import AFBResponse +from pyagl.services.telephony import TelePhonyService as tps +pytestmark = [pytest.mark.asyncio, pytest.mark.telephony] + + +@pytest.fixture(scope='module') +def event_loop(): + loop = asyncio.get_event_loop() + yield loop + + +@pytest.fixture(scope='module') +async def service(): + address = os.environ.get('AGL_TGT_IP', 'localhost') + port = os.environ.get('AGL_TGT_PORT', None) + svc = await tps(ip=address, port=port) + yield svc + await svc.websocket.close() + + +@pytest.fixture(scope='module') +def phonenumber(): + phonenumenv = os.environ.get('AGL_DAIL_PHONENUM') + if not phonenumenv: + pytest.xfail('Please export AGL_DAIL_PHONENUM with valid phone number') + + return phonenumenv + + +async def test_subscribe(event_loop, service: tps): + msgid = await service.subscribe('callStateChanged') + resp = await service.afbresponse() + assert resp.status == 'success' + + +async def test_unsubscribe(event_loop, service: tps): + msgid = await service.unsubscribe('callStateChanged') + resp = await service.afbresponse() + assert resp.status == 'success' + + +@pytest.mark.dependency() +@pytest.mark.hwrequired +async def test_dial(event_loop, service: tps, phonenumber): + msgid = await service.dial(phonenumber) + resp = await service.afbresponse() + assert resp.status == 'success' + + +@pytest.mark.dependency(depends=['test_dial']) +@pytest.mark.hwrequired +async def test_hangup(event_loop, service: tps): + await asyncio.sleep(0.5) + msgid = await service.hangup("voicecall01") + resp = await service.afbresponse() + assert resp.status == 'success' + + +@pytest.mark.dependency(depends=['test_dial']) +@pytest.mark.hwrequired +async def test_hangup_all(event_loop, service: tps): + msgid = await service.hangup_all() + resp = await service.afbresponse() + assert resp.status == 'success' + + +@pytest.mark.xfail(reason='When someone calls you, run this test to connect') +@pytest.mark.hwrequired +async def test_answer(event_loop, service: tps): + msgid = await service.answer() + resp = await service.afbresponse() + assert resp.status == 'success' + + +@pytest.mark.hwrequired +async def test_get_calls(event_loop, service: tps): + msgid = await service.get_calls() + resp = await service.afbresponse() + assert resp.status == 'success' + + +@pytest.mark.hwrequired +async def test_get_battery_level(event_loop, service: tps): + msgid = await service.get_battery_level() + resp = await service.afbresponse() + assert resp.status == 'success' + + +@pytest.mark.hwrequired +async def test_get_network_registration(event_loop, service: tps): + msgid = await service.get_network_registration() + resp = await service.afbresponse() + assert resp.status == 'success' |