def test_apply_control_messages_command(looper, mock_sensor_set): sensors = Sensors(mock_sensor_set) message = CommandMessage('sensor1', 1, 'new', None) result = list(sensors.apply_control_message(looper, message)) assert result == [CommandMessage('sensor1', 1, 'ack', roughly(datetime.utcnow()))] assert_no_update_config_called(mock_sensor_set)
def test_apply_command_message_ok(looper, mock_sensor_set): sensors = Sensors(mock_sensor_set) message = CommandMessage('sensor1', 1, 'new', None) results = list(sensors.apply_command_message(looper, message)) # allow the future to run looper.loop.run_until_complete(sleep_short()) assert results == [CommandMessage('sensor1', 1, 'ack', roughly(datetime.utcnow()))] assert_run_command_called_once(mock_sensor_set, 'sensor1', looper)
def test_run_update_config(looper, mock_sensor_set): sensors = Sensors(mock_sensor_set) answers = [] async def control(): await looper.config_queue.put( ConfigMessage('sensor1', {'foo': 'bar'}) ) await looper.config_queue.put( CommandMessage('sensor1', 1, 'new', None) ) answers.append(await looper.send_queue.get()) looper.stop() looper.loop.run_until_complete( asyncio.gather( control(), sensors.run_update_config(looper), loop=looper.loop ) ) assert looper.send_queue.queue.async_q.qsize() == 0 assert answers == [CommandMessage('sensor1', 1, 'ack', roughly(datetime.utcnow()))] assert_update_config_called_once( mock_sensor_set, 'sensor1', {'foo': 'bar'} ) assert_run_command_called_once( mock_sensor_set, 'sensor1', looper )
def test_apply_command_message_no_device(looper, mock_sensor_set): sensors = Sensors(mock_sensor_set) message = CommandMessage('invalid', 1, 'new', None) result = list(sensors.apply_command_message(looper, message)) assert result == [LogMessage.error('Unknown device in command invalid')]
def test_apply_command_message_should_not_run(looper, mock_sensor_set): sensors = Sensors(mock_sensor_set) message = CommandMessage('sensor1', 1, 'ack', datetime.utcnow()) results = list(sensors.apply_command_message(looper, message)) assert results == [] assert_no_run_command_called(mock_sensor_set)
async def control(): await looper.config_queue.put( ConfigMessage('sensor1', {'foo': 'bar'}) ) await looper.config_queue.put( CommandMessage('sensor1', 1, 'new', None) ) answers.append(await looper.send_queue.get()) looper.stop()
def test_apply_command_message_no_run_command(looper, mock_sensor_set): del mock_sensor_set['sensor1'].run_command sensors = Sensors(mock_sensor_set) message = CommandMessage('sensor1', 1, 'new', None) results = list(sensors.apply_command_message(looper, message)) assert results == [LogMessage.error('Device sensor1 has no run_command')] assert_no_run_command_called(mock_sensor_set)
def test_command_message_ack(): command = CommandMessage('mydevice', 1, 'new', None) assert command.ack() == CommandMessage('mydevice', 1, 'ack', roughly(datetime.utcnow()))
def test_command_message_from_dict(command_dict, expected_command): command = CommandMessage.from_dict('mydevice', command_dict) assert command == expected_command
from datetime import datetime, timedelta import pytest from conftest import roughly from bobnet_sensors.models import (ConfigMessage, CommandMessage, CommandResponseMessage, DataMessage, LogMessage) @pytest.mark.parametrize('message,expected_type', [ (ConfigMessage('d', {'f': 1}), 'config'), (CommandMessage('d', 1, 'new', None), 'command'), (DataMessage('d', {}), 'data'), (CommandResponseMessage('d', 1, 'new'), 'command_response'), (LogMessage.error('hi'), 'log'), ]) def test_message_type(message, expected_type): assert message.type == expected_type @pytest.mark.parametrize('message,expected_json', [(DataMessage('mydevice', {'foo': 'bar'}), { 'type': 'data', 'device': 'mydevice', 'data': { 'foo': 'bar' } }), (CommandResponseMessage('mydevice', 1, 'new'), {
'payload,expected_messages', [({ 'devices': { 'mydevice': { 'foo': 'bar' } } }, [ConfigMessage('mydevice', {'foo': 'bar'}), None]), ({ 'commands': { 'mydevice': { 'id': 1, 'state': 'new' } } }, [CommandMessage('mydevice', 1, 'new', None), None]), ({ 'devices': { 'mydevice': { 'foo': 'bar' } }, 'commands': { 'mydevice': { 'id': 1, 'state': 'new' } } }, [ ConfigMessage('mydevice', {'foo': 'bar'}), CommandMessage('mydevice', 1, 'new', None),