コード例 #1
0
async def test_no_clients():
    """Test that no clients also work."""
    mock_requests = MagicMock(return_value=Future())
    mock_requests.return_value.set_result("")
    clients = Clients([], mock_requests)
    await clients.update()

    mock_requests.assert_called_once
    assert len(clients.values()) == 0
コード例 #2
0
async def test_no_clients(mock_aioresponse, unifi_controller):
    """Test that no clients also work."""
    mock_aioresponse.get(
        "https://host:8443/api/s/default/stat/sta",
        payload={},
    )

    clients = Clients([], unifi_controller.request)
    await clients.update()

    assert verify_call(mock_aioresponse, "get",
                       "https://host:8443/api/s/default/stat/sta")
    assert len(clients.values()) == 0
コード例 #3
0
ファイル: test_clients.py プロジェクト: ryaowe/aiounifi
async def test_clients(mock_aioresponse, unifi_controller):
    """Test clients class."""

    clients = Clients([WIRELESS_CLIENT], unifi_controller.request)

    assert len(clients.values()) == 1

    client = clients[WIRELESS_CLIENT["mac"]]
    assert client.blocked is False
    assert client.essid == "SSID"
    assert client.hostname == "client"
    assert client.ip == "10.0.0.1"
    assert client.is_guest is False
    assert client.is_wired is False
    assert client.last_seen == 1587765360
    assert client.mac == WIRELESS_CLIENT["mac"]
    assert client.name == "Client 1"
    assert client.oui == "Apple"
    assert client.site_id == "5a32aa4ee4b0412345678910"
    assert client.sw_depth == -1
    assert client.sw_mac == "fc:ec:da:11:22:33"
    assert client.sw_port == 1
    assert client.rx_bytes == 12867114
    assert client.tx_bytes == 52852089
    assert client.uptime == 11904
    assert client.wired_rx_bytes == 0
    assert client.wired_tx_bytes == 0
    assert (
        client.__repr__() == f"<Client Client 1: 00:00:00:00:00:01 {WIRELESS_CLIENT}>"
    )

    mock_aioresponse.post(
        "https://host:8443/api/s/default/cmd/stamgr", payload={}, repeat=True
    )
    await clients.async_block(WIRELESS_CLIENT["mac"])
    assert verify_call(
        mock_aioresponse,
        "post",
        "https://host:8443/api/s/default/cmd/stamgr",
        json={"mac": WIRELESS_CLIENT["mac"], "cmd": "block-sta"},
    )

    await clients.async_unblock(WIRELESS_CLIENT["mac"])
    assert verify_call(
        mock_aioresponse,
        "post",
        "https://host:8443/api/s/default/cmd/stamgr",
        json={"mac": WIRELESS_CLIENT["mac"], "cmd": "unblock-sta"},
    )
コード例 #4
0
async def test_clients():
    """Test clients class."""
    mock_requests = MagicMock(return_value=Future())
    mock_requests.return_value.set_result("")
    clients = Clients([WIRELESS_CLIENT], mock_requests)

    assert len(clients.values()) == 1

    client = clients[WIRELESS_CLIENT["mac"]]
    assert client.blocked is False
    assert client.essid == "SSID"
    assert client.hostname == "client"
    assert client.ip == "10.0.0.1"
    assert client.is_guest is False
    assert client.is_wired is False
    assert client.last_seen == 1587765360
    assert client.mac == WIRELESS_CLIENT["mac"]
    assert client.name == "Client 1"
    assert client.oui == "Apple"
    assert client.site_id == "5a32aa4ee4b0412345678910"
    assert client.sw_depth == -1
    assert client.sw_mac == "fc:ec:da:11:22:33"
    assert client.sw_port == 1
    assert client.rx_bytes == 12867114
    assert client.tx_bytes == 52852089
    assert client.uptime == 11904
    assert client.wired_rx_bytes == 0
    assert client.wired_tx_bytes == 0
    assert (client.__repr__() ==
            f"<Client Client 1: 00:00:00:00:00:01 {WIRELESS_CLIENT}>")

    await clients.async_block(WIRELESS_CLIENT["mac"])
    mock_requests.assert_called_with("post",
                                     "/cmd/stamgr",
                                     json={
                                         "mac": WIRELESS_CLIENT["mac"],
                                         "cmd": "block-sta"
                                     })

    await clients.async_unblock(WIRELESS_CLIENT["mac"])
    mock_requests.assert_called_with(
        "post",
        "/cmd/stamgr",
        json={
            "mac": WIRELESS_CLIENT["mac"],
            "cmd": "unblock-sta"
        },
    )
コード例 #5
0
def mock_controller(hass):
    """Mock a UniFi Controller."""
    hass.data[UNIFI_CONFIG] = {}
    controller = unifi.UniFiController(hass, None)

    controller._site_role = "admin"

    controller.api = Mock()
    controller.mock_requests = []

    controller.mock_client_responses = deque()
    controller.mock_device_responses = deque()
    controller.mock_client_all_responses = deque()

    async def mock_request(method, path, **kwargs):
        kwargs["method"] = method
        kwargs["path"] = path
        controller.mock_requests.append(kwargs)
        if path == "s/{site}/stat/sta":
            return controller.mock_client_responses.popleft()
        if path == "s/{site}/stat/device":
            return controller.mock_device_responses.popleft()
        if path == "s/{site}/rest/user":
            return controller.mock_client_all_responses.popleft()
        return None

    controller.api.clients = Clients({}, mock_request)
    controller.api.devices = Devices({}, mock_request)
    controller.api.clients_all = ClientsAll({}, mock_request)

    return controller
コード例 #6
0
def mock_controller(hass):
    """Mock a UniFi Controller."""
    controller = Mock(
        available=True,
        api=Mock(),
        spec=unifi.UniFiController
    )
    controller.mac = '10:00:00:00:00:01'
    controller.mock_requests = []

    controller.mock_client_responses = deque()
    controller.mock_device_responses = deque()

    async def mock_request(method, path, **kwargs):
        kwargs['method'] = method
        kwargs['path'] = path
        controller.mock_requests.append(kwargs)
        if path == 's/{site}/stat/sta':
            return controller.mock_client_responses.popleft()
        if path == 's/{site}/stat/device':
            return controller.mock_device_responses.popleft()
        return None

    controller.api.clients = Clients({}, mock_request)
    controller.api.devices = Devices({}, mock_request)

    return controller
コード例 #7
0
async def test_get_device_name():
    """Test the getting of device names."""
    ctrl = mock.MagicMock()
    fake_clients = [
        {
            'mac': '123',
            'hostname': 'foobar',
            'essid': 'barnet',
            'last_seen': dt_util.as_timestamp(dt_util.utcnow())
        },
        {
            'mac': '234',
            'name': 'Nice Name',
            'essid': 'barnet',
            'last_seen': dt_util.as_timestamp(dt_util.utcnow())
        },
        {
            'mac': '456',
            'essid': 'barnet',
            'last_seen': '1504786810'
        },
    ]
    ctrl.clients = Clients([], CoroutineMock(return_value=fake_clients))
    scnr = unifi.UnifiScanner(ctrl, DEFAULT_DETECTION_TIME, None, None)
    await scnr.async_update()
    assert scnr.get_device_name('123') == 'foobar'
    assert scnr.get_device_name('234') == 'Nice Name'
    assert scnr.get_device_name('456') is None
    assert scnr.get_device_name('unknown') is None
コード例 #8
0
async def test_scan_devices_filtered():
    """Test the scanning for devices based on SSID."""
    ctrl = mock.MagicMock()
    fake_clients = [
        {
            'mac': '123',
            'essid': 'foonet',
            'last_seen': dt_util.as_timestamp(dt_util.utcnow())
        },
        {
            'mac': '234',
            'essid': 'foonet',
            'last_seen': dt_util.as_timestamp(dt_util.utcnow())
        },
        {
            'mac': '567',
            'essid': 'notnet',
            'last_seen': dt_util.as_timestamp(dt_util.utcnow())
        },
        {
            'mac': '890',
            'essid': 'barnet',
            'last_seen': dt_util.as_timestamp(dt_util.utcnow())
        },
    ]

    ssid_filter = ['foonet', 'barnet']
    ctrl.clients = Clients([], CoroutineMock(return_value=fake_clients))
    scnr = unifi.UnifiScanner(ctrl, DEFAULT_DETECTION_TIME, ssid_filter, None)
    await scnr.async_update()
    assert set(await scnr.async_scan_devices()) == set(['123', '234', '890'])
コード例 #9
0
async def test_scanner_update():
    """Test the scanner update."""
    ctrl = mock.MagicMock()
    fake_clients = [
        {
            'mac': '123',
            'essid': 'barnet',
            'last_seen': dt_util.as_timestamp(dt_util.utcnow())
        },
        {
            'mac': '234',
            'essid': 'barnet',
            'last_seen': dt_util.as_timestamp(dt_util.utcnow())
        },
    ]
    ctrl.clients = Clients([], CoroutineMock(return_value=fake_clients))
    scnr = unifi.UnifiScanner(ctrl, DEFAULT_DETECTION_TIME, None, None)
    await scnr.async_update()
    assert len(scnr._clients) == 2
コード例 #10
0
async def test_monitored_conditions():
    """Test the filtering of attributes."""
    ctrl = mock.MagicMock()
    fake_clients = [
        {
            'mac': '123',
            'hostname': 'foobar',
            'essid': 'barnet',
            'signal': -60,
            'last_seen': dt_util.as_timestamp(dt_util.utcnow()),
            'latest_assoc_time': 946684800.0
        },
        {
            'mac': '234',
            'name': 'Nice Name',
            'essid': 'barnet',
            'signal': -42,
            'last_seen': dt_util.as_timestamp(dt_util.utcnow())
        },
        {
            'mac': '456',
            'hostname': 'wired',
            'essid': 'barnet',
            'last_seen': dt_util.as_timestamp(dt_util.utcnow())
        },
    ]
    ctrl.clients = Clients([], CoroutineMock(return_value=fake_clients))
    scnr = unifi.UnifiScanner(ctrl, DEFAULT_DETECTION_TIME, None,
                              ['essid', 'signal', 'latest_assoc_time'])
    await scnr.async_update()
    assert scnr.get_extra_attributes('123') == {
        'essid': 'barnet',
        'signal': -60,
        'latest_assoc_time': datetime(2000, 1, 1, 0, 0, tzinfo=dt_util.UTC)
    }
    assert scnr.get_extra_attributes('234') == {
        'essid': 'barnet',
        'signal': -42
    }
    assert scnr.get_extra_attributes('456') == {'essid': 'barnet'}