split models and db from init

Move models into their own file
Move db functions into their own file
Update tests
This commit is contained in:
Brian Martin 2019-06-19 09:29:45 -04:00
parent 76528d1500
commit 58b3567887
11 changed files with 1064 additions and 981 deletions

View file

@ -7,6 +7,7 @@ import json
import tinydb
import pytest_aiohttp
import pytest_asyncio
import datetime, time
from aiohttp import web
@ -42,6 +43,19 @@ async def test_confserver_no_ssl():
conf_server.confserver_app()
asyncio.create_task(conf_server.start_server())
def test_get_milli_time():
cserv = create_confserver()
assert (
cserv.get_milli_time(
datetime.datetime(
2018, 1, 1, 1, 0, 0, 0, tzinfo=datetime.timezone.utc
).timestamp()
)
== 1514768400000
)
# Comment out test_base until api changes are complete
""" async def test_base(aiohttp_client):
remove_existing_db()

145
tests/test_db.py Normal file
View file

@ -0,0 +1,145 @@
#!/usr/bin/env python3
import bumper
from bumper.models import VacBotClient, VacBotDevice, BumperUser, EcoVacsHomeProducts
from tinydb import TinyDB, Query
from tinydb.storages import MemoryStorage
from datetime import datetime, timedelta
import os
import json
import logging
def test_db_path():
bumper.db = None
assert bumper.db_file() == os.path.join(bumper.data_dir, "bumper.db")
def test_user_db():
bumper.db = "tests/tmp.db" # Set db location for testing
bumper.user_add("testuser") # Add testuser
assert (
bumper.user_get("testuser")["userid"] == "testuser"
) # Test that testuser was created and returned
bumper.user_add_device("testuser", "dev_1234") # Add device to testuser
assert (
bumper.user_by_deviceid("dev_1234")["userid"] == "testuser"
) # Test that testuser was found by deviceid
bumper.user_remove_device("testuser", "dev_1234") # Remove device from testuser
assert "dev_1234" not in bumper.user_get("testuser")["devices"]
# Test that dev_1234 was not found in testuser devices
bumper.user_add_bot("testuser", "bot_1234") # Add bot did to testuser
assert "bot_1234" in bumper.user_get("testuser")["bots"]
# Test that bot was found in testuser's bot list
bumper.user_remove_bot("testuser", "bot_1234") # Remove bot did from testuser
assert "bot_1234" not in bumper.user_get("testuser")["bots"]
# Test that bot was not found in testuser's bot list
bumper.user_add_token("testuser", "token_1234") # Add token to testuser
assert bumper.check_token("testuser", "token_1234")
# Test that token was found for testuser
assert bumper.user_get_token("testuser", "token_1234")
# Test that token was returned for testuser
bumper.user_add_authcode(
"testuser", "token_1234", "auth_1234"
) # Add authcode to token_1234 for testuser
assert bumper.check_authcode("testuser", "auth_1234")
# Test that authcode was found for testuser
bumper.user_revoke_authcode(
"testuser", "token_1234", "auth_1234"
) # Remove authcode from testuser
assert bumper.check_authcode("testuser", "auth_1234") == False
# Test that authcode was not found for testuser
bumper.user_revoke_token("testuser", "token_1234") # Remove token from testuser
assert (
bumper.check_token("testuser", "token_1234") == False
) # Test that token was not found for testuser
bumper.user_add_token("testuser", "token_1234") # Add token_1234
bumper.user_add_token("testuser", "token_4321") # Add token_4321
assert len(bumper.user_get_tokens("testuser")) == 2 # Test 2 tokens are available
bumper.user_revoke_all_tokens("testuser") # Revoke all tokens
assert len(bumper.user_get_tokens("testuser")) == 0 # Test 0 tokens are available
db = TinyDB("tests/tmp.db")
tokens = db.table("tokens")
tokens.insert(
{
"userid": "testuser",
"token": "token_1234",
"expiration": "{}".format(datetime.now() + timedelta(seconds=-10)),
}
) # Add expired token
db.close()
assert len(bumper.user_get_tokens("testuser")) == 1 # Test 1 tokens are available
bumper.user_revoke_expired_tokens("testuser") # Revoke expired tokens
assert len(bumper.user_get_tokens("testuser")) == 0 # Test 0 tokens are available
db = TinyDB("tests/tmp.db")
tokens = db.table("tokens")
tokens.insert(
{
"userid": "testuser",
"token": "token_1234",
"expiration": "{}".format(datetime.now() + timedelta(seconds=-10)),
}
) # Add expired token
db.close()
assert len(bumper.user_get_tokens("testuser")) == 1 # Test 1 tokens are available
bumper.revoke_expired_tokens() # Revoke expired tokens
assert len(bumper.user_get_tokens("testuser")) == 0 # Test 0 tokens are available
def test_bot_db():
bumper.db = "tests/tmp.db" # Set db location for testing
bumper.bot_add("sn_123", "did_123", "dev_123", "res_123", "co_123")
assert bumper.bot_get("did_123") # Test that bot was added to db
bumper.bot_set_nick("did_123", "nick_123")
assert (
bumper.bot_get("did_123")["nick"] == "nick_123"
) # Test that nick was added to bot
bumper.bot_set_mqtt("did_123", True)
assert bumper.bot_get("did_123")[
"mqtt_connection"
] # Test that mqtt was set True for bot
bumper.bot_set_xmpp("did_123", True)
assert bumper.bot_get("did_123")[
"xmpp_connection"
] # Test that xmpp was set True for bot
bumper.bot_remove("did_123")
assert bumper.bot_get("did_123") == None # Test that bot is no longer in db
def test_client_db():
bumper.db = "tests/tmp.db" # Set db location for testing
bumper.client_add("user_123", "realm_123", "resource_123")
assert bumper.client_get("resource_123") # Test client was added
bumper.client_set_mqtt("resource_123", True)
assert bumper.client_get("resource_123")[
"mqtt_connection"
] # Test that mqtt was set True for client
bumper.client_set_xmpp("resource_123", False)
assert (
bumper.client_get("resource_123")["xmpp_connection"] == False
) # Test that xmpp was set False for client
assert (
len(bumper.get_disconnected_xmpp_clients()) == 1
) # Test len of connected xmpp clients is 1

View file

@ -5,29 +5,18 @@ from tinydb.storages import MemoryStorage
from tinydb import TinyDB, Query
import bumper
import os
import datetime, time
import platform
import json
import asyncio
from testfixtures import LogCapture
def test_get_milli_time():
assert (
bumper.get_milli_time(
datetime.datetime(
2018, 1, 1, 1, 0, 0, 0, tzinfo=datetime.timezone.utc
).timestamp()
)
== 1514768400000
)
def test_strtobool():
assert bumper.strtobool("t") == True
assert bumper.strtobool("f") == False
assert bumper.strtobool(0) == False
async def test_start_stop():
with LogCapture() as l:
if os.path.exists("tests/tmp.db"):
@ -36,12 +25,12 @@ async def test_start_stop():
b = bumper
b.db = "tests/tmp.db" # Set db location for testing
b.conf1_listen_address = "127.0.0.1"
b.conf1_listen_port = 444
b.conf1_listen_port = 444
asyncio.create_task(b.start())
await asyncio.sleep(0.1)
l.check_present(("bumper", "INFO", "Starting Bumper"))
l.clear()
asyncio.create_task(b.shutdown())
await asyncio.sleep(0.1)
l.check_present(
@ -71,142 +60,3 @@ async def test_start_stop_debug():
)
assert b.shutting_down == True
def test_db_path():
bumper.db = None
assert bumper.db_file() == os.path.join(bumper.data_dir, "bumper.db")
def test_user_db():
bumper.db = "tests/tmp.db" # Set db location for testing
bumper.user_add("testuser") # Add testuser
assert (
bumper.user_get("testuser")["userid"] == "testuser"
) # Test that testuser was created and returned
bumper.user_add_device("testuser", "dev_1234") # Add device to testuser
assert (
bumper.user_by_deviceid("dev_1234")["userid"] == "testuser"
) # Test that testuser was found by deviceid
bumper.user_remove_device("testuser", "dev_1234") # Remove device from testuser
assert "dev_1234" not in bumper.user_get("testuser")["devices"]
# Test that dev_1234 was not found in testuser devices
bumper.user_add_bot("testuser", "bot_1234") # Add bot did to testuser
assert "bot_1234" in bumper.user_get("testuser")["bots"]
# Test that bot was found in testuser's bot list
bumper.user_remove_bot("testuser", "bot_1234") # Remove bot did from testuser
assert "bot_1234" not in bumper.user_get("testuser")["bots"]
# Test that bot was not found in testuser's bot list
bumper.user_add_token("testuser", "token_1234") # Add token to testuser
assert bumper.check_token("testuser", "token_1234")
# Test that token was found for testuser
assert bumper.user_get_token("testuser", "token_1234")
# Test that token was returned for testuser
bumper.user_add_authcode(
"testuser", "token_1234", "auth_1234"
) # Add authcode to token_1234 for testuser
assert bumper.check_authcode("testuser", "auth_1234")
# Test that authcode was found for testuser
bumper.user_revoke_authcode(
"testuser", "token_1234", "auth_1234"
) # Remove authcode from testuser
assert bumper.check_authcode("testuser", "auth_1234") == False
# Test that authcode was not found for testuser
bumper.user_revoke_token("testuser", "token_1234") # Remove token from testuser
assert (
bumper.check_token("testuser", "token_1234") == False
) # Test that token was not found for testuser
bumper.user_add_token("testuser", "token_1234") # Add token_1234
bumper.user_add_token("testuser", "token_4321") # Add token_4321
assert len(bumper.user_get_tokens("testuser")) == 2 # Test 2 tokens are available
bumper.user_revoke_all_tokens("testuser") # Revoke all tokens
assert len(bumper.user_get_tokens("testuser")) == 0 # Test 0 tokens are available
db = TinyDB("tests/tmp.db")
tokens = db.table("tokens")
tokens.insert(
{
"userid": "testuser",
"token": "token_1234",
"expiration": "{}".format(
datetime.datetime.now() + datetime.timedelta(seconds=-10)
),
}
) # Add expired token
db.close()
assert len(bumper.user_get_tokens("testuser")) == 1 # Test 1 tokens are available
bumper.user_revoke_expired_tokens("testuser") # Revoke expired tokens
assert len(bumper.user_get_tokens("testuser")) == 0 # Test 0 tokens are available
db = TinyDB("tests/tmp.db")
tokens = db.table("tokens")
tokens.insert(
{
"userid": "testuser",
"token": "token_1234",
"expiration": "{}".format(
datetime.datetime.now() + datetime.timedelta(seconds=-10)
),
}
) # Add expired token
db.close()
assert len(bumper.user_get_tokens("testuser")) == 1 # Test 1 tokens are available
bumper.revoke_expired_tokens() # Revoke expired tokens
assert len(bumper.user_get_tokens("testuser")) == 0 # Test 0 tokens are available
def test_bot_db():
bumper.db = "tests/tmp.db" # Set db location for testing
bumper.bot_add("sn_123", "did_123", "dev_123", "res_123", "co_123")
assert bumper.bot_get("did_123") # Test that bot was added to db
bumper.bot_set_nick("did_123", "nick_123")
assert (
bumper.bot_get("did_123")["nick"] == "nick_123"
) # Test that nick was added to bot
bumper.bot_set_mqtt("did_123", True)
assert bumper.bot_get("did_123")[
"mqtt_connection"
] # Test that mqtt was set True for bot
bumper.bot_set_xmpp("did_123", True)
assert bumper.bot_get("did_123")[
"xmpp_connection"
] # Test that xmpp was set True for bot
bumper.bot_remove("did_123")
assert bumper.bot_get("did_123") == None # Test that bot is no longer in db
def test_client_db():
bumper.db = "tests/tmp.db" # Set db location for testing
bumper.client_add("user_123", "realm_123", "resource_123")
assert bumper.client_get("resource_123") # Test client was added
bumper.client_set_mqtt("resource_123", True)
assert bumper.client_get("resource_123")[
"mqtt_connection"
] # Test that mqtt was set True for client
bumper.client_set_xmpp("resource_123", False)
assert (
bumper.client_get("resource_123")["xmpp_connection"] == False
) # Test that xmpp was set False for client
assert (
len(bumper.get_disconnected_xmpp_clients()) == 1
) # Test len of connected xmpp clients is 1

View file

@ -14,10 +14,11 @@ import time
async def test_helperbot_message():
with LogCapture("helperbot") as l:
mqtt_address = ("127.0.0.1", 8883)
mqtt_server = bumper.MQTTServer(mqtt_address)
await mqtt_server.broker_coro()
mqtt_address = ("127.0.0.1", 8883)
mqtt_server = bumper.MQTTServer(mqtt_address)
await mqtt_server.broker_coro()
with LogCapture() as l:
# Test broadcast message
mqtt_helperbot = bumper.MQTTHelperBot(mqtt_address)
@ -125,20 +126,42 @@ async def test_helperbot_message():
) # Check received message was logged
l.clear()
mqtt_helperbot.Client.disconnect()
await mqtt_server.broker.shutdown()
# Received error message
mqtt_helperbot = bumper.MQTTHelperBot(mqtt_address)
await mqtt_helperbot.start_helper_bot()
assert (
mqtt_helperbot.Client._connected_state._value == True
) # Check helperbot is connected
msg_payload = "<ctl ts='1560904925396' td='errors' old='' new='110'/>"
msg_topic_name = "iot/atr/errors/bot_serial/ls1ok3/wC3g/x"
await mqtt_helperbot.Client.publish(
msg_topic_name, msg_payload.encode(), hbmqtt.client.QOS_0
)
try:
await asyncio.wait_for(mqtt_helperbot.Client.deliver_message(), timeout=0.1)
except asyncio.TimeoutError:
pass
l.check_present(
(
"boterror",
"ERROR",
"Received Error - Topic: iot/atr/errors/bot_serial/ls1ok3/wC3g/x - Message: <ctl ts='1560904925396' td='errors' old='' new='110'/>",
)
) # Check received message was logged
l.clear()
mqtt_helperbot.Client.disconnect()
await mqtt_server.broker.shutdown()
async def test_helperbot_expire_message():
mqtt_address = ("127.0.0.1", 8883)
mqtt_server = bumper.MQTTServer(mqtt_address)
await mqtt_server.broker_coro()
with LogCapture("helperbot") as l:
mqtt_address = ("127.0.0.1", 8883)
mqtt_server = bumper.MQTTServer(mqtt_address)
await mqtt_server.broker_coro()
# mqtt_address = ("127.0.0.1", 8883)
# mqtt_server = bumper.MQTTServer(mqtt_address)
# broker = hbmqtt.broker.Broker(
# mqtt_server.default_config, plugin_namespace="hbmqtt.test.plugins"
# )
# await broker.start()
# Test broadcast message
mqtt_helperbot = bumper.MQTTHelperBot(mqtt_address)
@ -195,19 +218,14 @@ async def test_helperbot_expire_message():
)
) # Check received message was logged
mqtt_helperbot.Client.disconnect()
await mqtt_server.broker.shutdown()
await mqtt_server.broker.shutdown()
async def test_helperbot_sendcommand():
mqtt_address = ("127.0.0.1", 8883)
mqtt_server = bumper.MQTTServer(mqtt_address)
await mqtt_server.broker_coro()
# mqtt_address = ("127.0.0.1", 8883)
# mqtt_server = bumper.MQTTServer(mqtt_address)
# broker = hbmqtt.broker.Broker(
# mqtt_server.default_config, plugin_namespace="hbmqtt.test.plugins"
# )
# await broker.start()
mqtt_helperbot = bumper.MQTTHelperBot(mqtt_address)
await mqtt_helperbot.start_helper_bot()

View file

@ -21,10 +21,11 @@ def mock_transport_extra_info(*args, **kwargs):
async def test_xmpp_server():
xmpp_address = ("127.0.0.1", 5223)
xmpp_server = bumper.XMPPServer(xmpp_address)
await xmpp_server.start_async_server()
with LogCapture("xmppserver") as l:
xmpp_address = ("127.0.0.1", 5223)
xmpp_server = bumper.XMPPServer(xmpp_address)
await xmpp_server.start_async_server()
reader, writer = await asyncio.open_connection("127.0.0.1", 5223)
@ -52,10 +53,8 @@ async def test_xmpp_server():
await writer.drain()
await asyncio.sleep(0.1)
xmpp_server.disconnect()
await asyncio.sleep(0.1)
assert len(xmpp_server.clients) == 0 # Client count decreased
print(l)
xmpp_server.disconnect()
async def test_client_connect_no_starttls(*args, **kwargs):
@ -209,6 +208,11 @@ async def test_client_connect_starttls_called(*args, **kwargs):
async def test_xmpp_server_client_tls():
xmpp_address = ("127.0.0.1", 5223)
xmpp_server = bumper.XMPPServer(xmpp_address)
await xmpp_server.start_async_server()
with LogCapture("xmppserver") as l:
async def do_stuff_after_start_tls(
@ -227,10 +231,6 @@ async def test_xmpp_server_client_tls():
await writer.drain()
xmpp_address = ("127.0.0.1", 5223)
xmpp_server = bumper.XMPPServer(xmpp_address)
await xmpp_server.start_async_server()
reader, writer = await asyncio.open_connection("127.0.0.1", 5223)
writer.write(
@ -616,3 +616,30 @@ async def test_client_send_iq(*args, **kwargs):
# Reset mock calls
mock_send.reset_mock()
# Bot error report
test_data = "<iq to='fuid_tmpuser@ecouser.net/IOSF53D07BA' type='set' id='631'><query xmlns='com:ctl'><ctl td='error' errs='102'/></query></iq>".encode(
"utf-8"
)
xmppclient2._parse_data(test_data)
assert (
mock_send.mock_calls[0].args[0]
== '<iq from="E0000000000000001234@159.ecorobot.net/atom" id="631" to="fuid_tmpuser@ecouser.net/IOSF53D07BA" type="set"><query xmlns="com:ctl"><ctl errs="102" td="error" /></query></iq>'
) # result sent to ecouser.net
# Reset mock calls
mock_send.reset_mock()
# Bot "DorpError" to all
test_data = "<iq to='rl.ecorobot.net' type='set' id='1234'><query xmlns='com:sf'><sf td='pub' t='log' ts='1559893796000' tp='p' k='DeviceAlert' v='DorpError' f='E0000000000000001234@159.ecorobot.net' g='fuid_tmpuser@ecouser.net'/></query></iq>".encode(
"utf-8"
)
xmppclient2._parse_data(test_data)
assert (
mock_send.mock_calls[0].args[0]
== '<iq xmlns="com:sf" from="E0000000000000001234@159.ecorobot.net/atom" id="1234" to="rl.ecorobot.net" type="set"><query xmlns="com:ctl"><sf f="E0000000000000001234@159.ecorobot.net" g="fuid_tmpuser@ecouser.net" k="DeviceAlert" t="log" td="pub" tp="p" ts="1559893796000" v="DorpError" /></query></iq>'
) # result sent to ecouser.net
# Reset mock calls
mock_send.reset_mock()

View file

@ -100,4 +100,3 @@ def test_main(mock_firstrun):
bumper.main()
assert mock_firstrun.called == True
bumper.ca_cert = "tests/test_certs/ca.crt"