Пример #1
0
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)
Пример #2
0
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']))
Пример #3
0
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]'
    )
Пример #4
0
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')