def test_address_combined(self): """Test AddressFilter with complex filters.""" af1 = AddressFilter("2-/2,3,5-/*") self.assertTrue(af1.match("2/3/8")) self.assertTrue(af1.match("4/7/10")) self.assertTrue(af1.match("2/7/10")) self.assertFalse(af1.match("1/7/10")) self.assertFalse(af1.match("2/4/10")) self.assertFalse(af1.match("2/1/10"))
def test_address_filter_level3_1(self): """Test AddressFilter 1st part of level3 addresses.""" af1 = AddressFilter("4/2/3") self.assertTrue(af1.match("4/2/3")) self.assertFalse(af1.match("2/2/3")) self.assertFalse(af1.match("10/2/3")) af2 = AddressFilter("2-/4/3") self.assertFalse(af2.match("1/4/3")) self.assertTrue(af2.match("2/4/3")) self.assertTrue(af2.match("10/4/3")) af3 = AddressFilter("*/5/5") self.assertTrue(af3.match("2/5/5")) self.assertTrue(af3.match("8/5/5"))
def test_address_filter_level3_3(self): """Test AddressFilter 3rd part of level3 addresses.""" af1 = AddressFilter("1/2/3") self.assertTrue(af1.match("1/2/3")) self.assertFalse(af1.match("1/2/4")) self.assertFalse(af1.match("1/2/1")) af2 = AddressFilter("1/2/2-3,5-") self.assertFalse(af2.match("1/2/1")) self.assertTrue(af2.match("1/2/3")) self.assertFalse(af2.match("1/2/4")) self.assertTrue(af2.match("1/2/6")) af3 = AddressFilter("1/2/*") self.assertTrue(af3.match("1/2/3")) self.assertTrue(af3.match("1/2/5"))
def test_address_filter_level2_2(self): """Test AddressFilter 2nd part of level2 addresses.""" af1 = AddressFilter("2/3") self.assertTrue(af1.match("2/3")) self.assertFalse(af1.match("2/4")) self.assertFalse(af1.match("2/1")) af2 = AddressFilter("2/3-4,7-") self.assertFalse(af2.match("2/2")) self.assertTrue(af2.match("2/3")) self.assertFalse(af2.match("2/6")) self.assertTrue(af2.match("2/8")) af3 = AddressFilter("2/*") self.assertTrue(af3.match("2/3")) self.assertTrue(af3.match("2/5"))
def __init__(self, config): self._config = config self._address_filters = list() self._subscription_filters = list() for sensor in self._config['sensors']: if not ('expose' in sensor and sensor['expose']): self._address_filters.append(AddressFilter(sensor['address'])) if ('expose' in sensor and sensor['expose']) or ('subscribe' in sensor and sensor['subscribe']): self._subscription_filters.append(sensor['address']) for switch in self._config['switches']: if not ('expose' in switch and switch['expose']): self._address_filters.append(AddressFilter(switch['address'])) if ('expose' in switch and switch['expose']) or ('subscribe' in switch and switch['subscribe']): self._subscription_filters.append(switch['address'])
def test_range_test(self): """Test matching within AddressFilter.Range.""" rf = AddressFilter.Range("2-16") self.assertTrue(rf.match(10)) self.assertTrue(rf.match(2)) self.assertTrue(rf.match(16)) self.assertFalse(rf.match(1)) self.assertFalse(rf.match(17))
def test_range_initialization(self): """Test Initialization of AddresFilter.Range.""" self.assertEqual(AddressFilter.Range("*").get_range(), (0, 65535)) self.assertEqual(AddressFilter.Range("5").get_range(), (5, 5)) self.assertEqual(AddressFilter.Range("0").get_range(), (0, 0)) self.assertEqual(AddressFilter.Range("3-5").get_range(), (3, 5)) self.assertEqual(AddressFilter.Range("5-3").get_range(), (3, 5)) self.assertEqual(AddressFilter.Range("-5").get_range(), (0, 5)) self.assertEqual(AddressFilter.Range("5-").get_range(), (5, 65535)) self.assertEqual(AddressFilter.Range("70-100").get_range(), (70, 100))
def test_level_filter_test(self): """Test matching within AddressFilter.LevelFilter.""" lf = AddressFilter.LevelFilter("2,4,8-10,13") self.assertFalse(lf.match(1)) self.assertTrue(lf.match(2)) self.assertFalse(lf.match(3)) self.assertTrue(lf.match(4)) self.assertFalse(lf.match(5)) self.assertTrue(lf.match(9))
def test_address_filter_level3_2(self): """Test AddressFilter 2nd part of level3 addresses.""" af1 = AddressFilter("1/2/3") self.assertTrue(af1.match("1/2/3")) self.assertFalse(af1.match("1/3/3")) self.assertFalse(af1.match("1/1/3")) af2 = AddressFilter("1/2-/3") self.assertFalse(af2.match("1/1/3")) self.assertTrue(af2.match("1/2/3")) self.assertTrue(af2.match("1/5/3")) af3 = AddressFilter("1/*/3") self.assertTrue(af3.match("1/4/3")) self.assertTrue(af3.match("1/7/3"))
def test_negative_filters(self): """Test telegram_received_callback after state of switch was changed.""" # pylint: disable=no-self-use xknx = XKNX(loop=self.loop) telegram_received_callback = Mock() async def async_telegram_received_cb(device): """Async callback.""" telegram_received_callback(device) xknx.telegram_queue.register_telegram_received_cb( async_telegram_received_cb, [AddressFilter("2/4-8/*"), AddressFilter("1/2/8-")]) telegram = Telegram( direction=TelegramDirection.INCOMING, payload=DPTBinary(1), group_address=GroupAddress("1/2/3")) self.loop.run_until_complete(asyncio.Task( xknx.telegram_queue.process_telegram(telegram))) telegram_received_callback.assert_not_called()
def test_address_combined(self): """Test AddressFilter with complex filters.""" af1 = AddressFilter("2-/2,3,5-/*") self.assertTrue(af1.match("2/3/8")) self.assertTrue(af1.match("4/7/10")) self.assertTrue(af1.match("2/7/10")) self.assertFalse(af1.match("1/7/10")) self.assertFalse(af1.match("2/4/10")) self.assertFalse(af1.match("2/1/10"))
def test_address_filter_free(self): """Test AddressFilter free format addresses.""" af1 = AddressFilter("4") self.assertTrue(af1.match("4")) self.assertFalse(af1.match("1")) self.assertFalse(af1.match("10")) af2 = AddressFilter("1,4,7-") self.assertTrue(af2.match("1")) self.assertFalse(af2.match("2")) self.assertTrue(af2.match("4")) self.assertFalse(af2.match("6")) self.assertTrue(af2.match("60")) af3 = AddressFilter("*") self.assertTrue(af3.match("2")) self.assertTrue(af3.match("8"))
def test_address_filter_level2_2(self): """Test AddressFilter 2nd part of level2 addresses.""" af1 = AddressFilter("2/3") self.assertTrue(af1.match("2/3")) self.assertFalse(af1.match("2/4")) self.assertFalse(af1.match("2/1")) af2 = AddressFilter("2/3-4,7-") self.assertFalse(af2.match("2/2")) self.assertTrue(af2.match("2/3")) self.assertFalse(af2.match("2/6")) self.assertTrue(af2.match("2/8")) af3 = AddressFilter("2/*") self.assertTrue(af3.match("2/3")) self.assertTrue(af3.match("2/5"))
def test_address_filter_level3_2(self): """Test AddressFilter 2nd part of level3 addresses.""" af1 = AddressFilter("1/2/3") self.assertTrue(af1.match("1/2/3")) self.assertFalse(af1.match("1/3/3")) self.assertFalse(af1.match("1/1/3")) af2 = AddressFilter("1/2-/3") self.assertFalse(af2.match("1/1/3")) self.assertTrue(af2.match("1/2/3")) self.assertTrue(af2.match("1/5/3")) af3 = AddressFilter("1/*/3") self.assertTrue(af3.match("1/4/3")) self.assertTrue(af3.match("1/7/3"))
def test_address_filter_level3_3(self): """Test AddressFilter 3rd part of level3 addresses.""" af1 = AddressFilter("1/2/3") self.assertTrue(af1.match("1/2/3")) self.assertFalse(af1.match("1/2/4")) self.assertFalse(af1.match("1/2/1")) af2 = AddressFilter("1/2/2-3,5-") self.assertFalse(af2.match("1/2/1")) self.assertTrue(af2.match("1/2/3")) self.assertFalse(af2.match("1/2/4")) self.assertTrue(af2.match("1/2/6")) af3 = AddressFilter("1/2/*") self.assertTrue(af3.match("1/2/3")) self.assertTrue(af3.match("1/2/5"))
def test_address_filter_free(self): """Test AddressFilter free format addresses.""" af1 = AddressFilter("4") self.assertTrue(af1.match("4")) self.assertFalse(af1.match("1")) self.assertFalse(af1.match("10")) af2 = AddressFilter("1,4,7-") self.assertTrue(af2.match("1")) self.assertFalse(af2.match("2")) self.assertTrue(af2.match("4")) self.assertFalse(af2.match("6")) self.assertTrue(af2.match("60")) af3 = AddressFilter("*") self.assertTrue(af3.match("2")) self.assertTrue(af3.match("8"))
def test_address_filter_level2_1(self): """Test AddressFilter 1st part of level2 addresses.""" af1 = AddressFilter("4/2") self.assertTrue(af1.match("4/2")) self.assertFalse(af1.match("2/2")) self.assertFalse(af1.match("10/2")) af2 = AddressFilter("2-3,8-/4") self.assertFalse(af2.match("1/4")) self.assertTrue(af2.match("2/4")) self.assertFalse(af2.match("7/4")) self.assertTrue(af2.match("10/4")) af3 = AddressFilter("*/5") self.assertTrue(af3.match("2/5")) self.assertTrue(af3.match("8/5"))
def test_initialize_wrong_format(self): """Test if wrong address format raises exception.""" with self.assertRaises(ConversionError): AddressFilter("2-/2,3/4/5/1,5-/*")