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
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
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"}, )
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" }, )
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
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
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
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'])
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
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'}