summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/test_bluetooth.py104
-rw-r--r--tests/test_gps.py71
-rw-r--r--tests/test_weather.py0
3 files changed, 175 insertions, 0 deletions
diff --git a/tests/test_bluetooth.py b/tests/test_bluetooth.py
new file mode 100644
index 0000000..d6b899e
--- /dev/null
+++ b/tests/test_bluetooth.py
@@ -0,0 +1,104 @@
+import asyncio
+import os
+import pytest
+from bluetooth import BluetoothService as BTS
+import logging
+from aglbaseservice import AFBResponse, AFBT
+
+logger = logging.getLogger(f'pytest-{BTS.service}')
+logger.setLevel(logging.DEBUG)
+pytestmark = pytest.mark.asyncio
+
+
+@pytest.fixture(scope='module')
+def event_loop():
+ loop = asyncio.get_event_loop()
+ yield loop
+ loop.close()
+
+
+@pytest.fixture(scope='module')
+async def service():
+ address = os.environ.get('AGL_TGT_IP', 'localhost')
+ port = os.environ.get('AGL_TGT_PORT', None)
+
+ bts = await BTS(ip=address, port=port)
+ yield bts
+ await bts.websocket.close()
+
+
+@pytest.mark.xfail
+@pytest.fixture(scope='module')
+def btaddr():
+ bthtestaddr = os.environ.get('AGL_TEST_BT_ADDR', None)
+ if not bthtestaddr:
+ pytest.xfail('No test bluetooth test address set in environment variables')
+
+ return bthtestaddr
+
+
+@pytest.mark.dependency
+async def test_default_adapter(event_loop, service: BTS):
+ id = await service.default_adapter()
+ resp = AFBResponse(await service.response())
+ assert resp.status == 'success', resp
+ assert 'adapter' in resp.data.keys()
+ assert resp.data['adapter'] == 'hci0'
+
+
+@pytest.mark.dependency(depends=['test_default_adapter'])
+async def test_managed_objects(event_loop, service: BTS):
+ id = await service.managed_objects()
+ resp = AFBResponse(await service.response())
+ assert resp.status == 'success', str(resp)
+
+
+@pytest.mark.dependency(depends=['test_default_adapter'])
+async def test_has_single_adapter(event_loop, service: BTS):
+ id = await service.managed_objects()
+ resp = AFBResponse(await service.response())
+ assert len(resp.data['adapters']) == 1, \
+ f'Detected {len(resp.data["adapters"])} adapters. Multiple adapters may also break testing'
+
+
+@pytest.mark.dependency(depends=['test_default_adapter'])
+async def test_adapter_state(event_loop, service: BTS):
+ id = await service.adapter_state('hci0')
+ resp = AFBResponse(await service.response())
+ assert resp.status == 'success', 'adapter state verb failed'
+
+
+async def test_pairing_verb(event_loop, service: BTS, btaddr):
+ id = await service.pair(btaddr)
+ resp = await service.afbresponse()
+ assert id == resp.msgid
+ assert resp.status == 'success', f'pair verb failed - {resp.info}'
+
+
+async def test_connect_verb(event_loop, service: BTS, btaddr):
+ id = await service.connect(btaddr)
+ resp = await service.afbresponse()
+ assert id == resp.msgid
+ assert resp.status == 'success', f'connect verb failed - {resp.info}'
+
+
+async def test_disconnect_verb(event_loop, service: BTS, btaddr):
+ id = await service.disconnect(btaddr)
+ resp = await service.afbresponse()
+ assert id == resp.msgid
+ assert resp.status == 'success', f'disconnect verb failed - {resp.info}'
+
+
+async def test_remove_pairing_verb(event_loop, service: BTS, btaddr):
+ id = await service.remove_device(btaddr)
+ resp = await service.afbresponse()
+ assert id == resp.msgid
+ assert resp.status == 'success'
+
+
+@pytest.mark.xfail(reason='This is expected to fail because there has to be an ongoing pairing attempt')
+async def test_confirm_pairing_verb(event_loop, service: BTS, btaddr):
+ id = await service.confirm_pairing(pincode='123456')
+ resp = await service.afbresponse()
+ assert id == resp.msgid
+ assert resp.status == 'success', f'confirm_pairing verb failed - {resp.info}'
diff --git a/tests/test_gps.py b/tests/test_gps.py
new file mode 100644
index 0000000..2e62405
--- /dev/null
+++ b/tests/test_gps.py
@@ -0,0 +1,71 @@
+import asyncio
+import os
+import pytest
+from gps import GPSService as GPS
+import logging
+from aglbaseservice import AFBResponse, AFBT
+from concurrent.futures import TimeoutError
+
+logger = logging.getLogger('pytest-gps')
+logger.setLevel(logging.DEBUG)
+pytestmark = pytest.mark.asyncio
+
+@pytest.fixture(scope='module')
+def event_loop():
+ loop = asyncio.get_event_loop()
+ yield loop
+ loop.close()
+
+@pytest.fixture(scope='module')
+async def service():
+ address = os.environ.get('AGL_TGT_IP', 'localhost')
+ port = os.environ.get('AGL_TGT_PORT', None)
+ gpss = await GPS(ip=address, port=port)
+ yield gpss
+ await gpss.websocket.close()
+
+# @pytest.fixture(scope='module')
+# async def response(event_loop, service):
+# async for _response in service.listener():
+# yield _response
+
+async def test_location_verb(event_loop, service: GPS):
+ id = await service.location()
+ resp = AFBResponse(await service.response())
+ assert resp.msgid == id
+
+@pytest.mark.xfail # expecting this to fail because of "No 3D GNSS fix" and GPS is unavailable
+async def test_location_result(event_loop, service: GPS):
+ id = await service.location()
+ resp = AFBResponse(await service.response())
+ assert resp.status == 'success'
+
+
+
+async def test_subscribe_location(event_loop, service: GPS):
+ id = await service.subscribe('location')
+ resp = AFBResponse(await service.response())
+ assert resp.msgid == id
+ assert resp.status == 'success'
+
+async def test_unsubscribe(event_loop, service: GPS):
+ id = await service.unsubscribe('location')
+ resp = AFBResponse(await service.response())
+ assert resp.msgid == id
+ assert resp.status == 'success'
+
+@pytest.mark.xfail # expecting this to fail because of "No 3D GNSS fix" and GPS is unavailable
+async def test_location_events(event_loop, service: GPS):
+ id = await service.subscribe('location')
+ resp = AFBResponse(await service.response())
+ assert resp.msgid == id
+ assert resp.status == 'success' # successful subscription
+ try:
+ resp = await asyncio.wait_for(service.response(), 10)
+ resp = AFBResponse(resp)
+ assert resp.type == AFBT.EVENT, f'Expected EVENT response, got {resp.type.name} instead'
+ # TODO one more assert for the actual received event, haven't received a location event yet
+ except TimeoutError:
+ pytest.xfail("Did not receive location event")
+
+
diff --git a/tests/test_weather.py b/tests/test_weather.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/tests/test_weather.py