def test_plugin_shutdown(mocker): # GIVEN config = copy.deepcopy(cc2650async._DEFAULT_CONFIG) config['bluetoothAddress']['value'] = config['bluetoothAddress']['default'] config['connectionTimeout']['value'] = config['connectionTimeout'][ 'default'] config['shutdownThreshold']['value'] = config['shutdownThreshold'][ 'default'] log_info = mocker.patch.object(cc2650async._LOGGER, "info") mocker.patch.object(SensorTagCC2650, "__init__", return_value=None) mocker.patch.object(SensorTagCC2650, "is_connected", True) mocker.patch.object(SensorTagCC2650, "get_char_handle", return_value=0x0000) mocker.patch.object(SensorTagCC2650, "get_notification_handles", return_value=[0x0000]) mocker.patch.object(SensorTagCC2650, "char_write_cmd", return_value=None) mocker.patch.object(SensorTagCC2650, "disconnect", return_value=None) returned_config = cc2650async.plugin_init(config) # WHEN cc2650async.plugin_shutdown(returned_config) # THEN calls = [ call('SensorTagCC2650 (async) {} Disconnected.'.format( config['bluetoothAddress']['value'])), call('CC2650 async plugin shut down.'), call('SensorTagCC2650 {} async fetching initialized'.format( config['bluetoothAddress']['value'])) ] log_info.assert_has_calls(calls, any_order=True)
def test_plugin_init(mocker): # GIVEN config = copy.deepcopy(cc2650async._DEFAULT_CONFIG) config['bluetoothAddress']['value'] = config['bluetoothAddress']['default'] config['connectionTimeout']['value'] = config['connectionTimeout'][ 'default'] config['shutdownThreshold']['value'] = config['shutdownThreshold'][ 'default'] mocker.patch.object(SensorTagCC2650, "__init__", return_value=None) mocker.patch.object(SensorTagCC2650, "is_connected", True) mocker.patch.object(SensorTagCC2650, "get_char_handle", return_value=0x0000) mocker.patch.object(SensorTagCC2650, "get_notification_handles", return_value=[0x0000]) log_info = mocker.patch.object(cc2650async._LOGGER, "info") # WHEN returned_config = cc2650async.plugin_init(config) # THEN assert "characteristics" in returned_config assert "tag" in returned_config log_info.assert_called_once_with( 'SensorTagCC2650 {} async fetching initialized'.format( config['bluetoothAddress']['value']))
def test_plugin_reconfigure(mocker): # GIVEN config = copy.deepcopy(cc2650async._DEFAULT_CONFIG) config['bluetoothAddress']['value'] = config['bluetoothAddress']['default'] config['connectionTimeout']['value'] = config['connectionTimeout'][ 'default'] config['shutdownThreshold']['value'] = config['shutdownThreshold'][ 'default'] log_info = mocker.patch.object(cc2650async._LOGGER, "info") mocker.patch.object(SensorTagCC2650, "__init__", return_value=None) mocker.patch.object(SensorTagCC2650, "is_connected", True) mocker.patch.object(SensorTagCC2650, "get_char_handle", return_value=0x0000) mocker.patch.object(SensorTagCC2650, "get_notification_handles", return_value=[0x0000]) mocker.patch.object(SensorTagCC2650, "disconnect", return_value=None) returned_old_config = cc2650async.plugin_init(config) # Only bluetoothAddress is changed config2 = copy.deepcopy(_NEW_CONFIG) config2['bluetoothAddress']['value'] = config2['bluetoothAddress'][ 'default'] config2['connectionTimeout']['value'] = config2['connectionTimeout'][ 'default'] config2['shutdownThreshold']['value'] = config2['shutdownThreshold'][ 'default'] pstop = mocker.patch.object(cc2650async, '_plugin_stop', return_value=True) # WHEN new_config = cc2650async.plugin_reconfigure(returned_old_config, config2) # THEN for key, value in new_config.items(): if key in ('characteristics', 'tag', 'restart', 'bluetoothAddress'): continue assert returned_old_config[key] == value # Confirm the new bluetoothAddress assert new_config['bluetoothAddress']['value'] == config2[ 'bluetoothAddress']['value'] assert new_config["restart"] == "yes" assert 1 == pstop.call_count log_info_call_args = log_info.call_args_list assert log_info_call_args[0] == call( 'SensorTagCC2650 B0:91:22:EA:79:04 async fetching initialized') args, kwargs = log_info_call_args[1] assert 'new config' in args[ 0] # Assert to check if 'new config' text exists when reconfigured assert log_info_call_args[2] == call( 'SensorTagCC2650 C0:92:23:EB:80:05 async fetching initialized') assert log_info_call_args[3] == call( 'Restarting CC2650ASYN plugin due to change in configuration keys [bluetoothAddress]' )
async def test_plugin_start(mocker, loop): # GIVEN config = copy.deepcopy(cc2650async._DEFAULT_CONFIG) config['bluetoothAddress']['value'] = config['bluetoothAddress']['default'] config['connectionTimeout']['value'] = config['connectionTimeout'][ 'default'] config['shutdownThreshold']['value'] = config['shutdownThreshold'][ 'default'] log_info = mocker.patch.object(cc2650async._LOGGER, "info") log_error = mocker.patch.object(cc2650async._LOGGER, "error") mocker.patch.object(SensorTagCC2650, "__init__", return_value=None) mocker.patch.object(SensorTagCC2650, "is_connected", True) mocker.patch.object(SensorTagCC2650, "get_char_handle", return_value="0x0000") mocker.patch.object(SensorTagCC2650, "get_notification_handles", return_value=[0x0000]) mocker.patch.object(SensorTagCC2650, "reading_iterations", 1) returned_config = cc2650async.plugin_init(config) con = mocker.patch.object(returned_config['tag'], "con", return_value=Mock(spec=pexpect)) con.expect = Mock(return_value=1) mocker.patch.object(returned_config['tag'], "char_read_hnd", return_value=None) mocker.patch.object(returned_config['tag'], "char_write_cmd", return_value=None) mocker.patch.object(returned_config['tag'], "hex_temp_to_celsius", return_value=(None, None)) mocker.patch.object(returned_config['tag'], "hex_lux_to_lux", return_value=None) mocker.patch.object(returned_config['tag'], "hex_humidity_to_rel_humidity", return_value=(None, None)) mocker.patch.object(returned_config['tag'], "hex_pressure_to_pressure", return_value=None) mocker.patch.object(returned_config['tag'], "hex_movement_to_movement", return_value=(None, None, None, None, None, None, None, None, None, None)) mocker.patch.object(returned_config['tag'], "get_battery_level", return_value=None) # WHEN loop.call_soon(cc2650async.plugin_start(returned_config)) # THEN assert "characteristics" in returned_config assert "tag" in returned_config log_info.assert_called_once_with( 'SensorTagCC2650 B0:91:22:EA:79:04 async fetching initialized')