예제 #1
0
 def test_register_unregister(self):
     """Test register and unregister."""
     xknx = XKNX()
     self.assertEqual(len(xknx.state_updater._workers), 0)
     # register when state address and sync_state is set
     remote_value_1 = RemoteValue(xknx,
                                  sync_state=True,
                                  group_address_state=GroupAddress("1/1/1"))
     self.assertEqual(len(xknx.state_updater._workers), 1)
     # don't register when sync_state is False
     remote_value_2 = RemoteValue(xknx,
                                  sync_state=False,
                                  group_address_state=GroupAddress("1/1/1"))
     self.assertEqual(len(xknx.state_updater._workers), 1)
     # manual registration
     xknx.state_updater.register_remote_value(remote_value_2)
     self.assertEqual(len(xknx.state_updater._workers), 2)
     # manual unregister
     xknx.state_updater.unregister_remote_value(remote_value_1)
     # only remote_value_2 remaining
     self.assertEqual(len(xknx.state_updater._workers), 1)
     self.assertEqual(
         list(xknx.state_updater._workers.keys())[0], id(remote_value_2))
     # unregister on RemoteValue.__del__()
     remote_value_2.__del__()
     self.assertEqual(len(xknx.state_updater._workers), 0)
예제 #2
0
    def test_tracker_parser(self):
        """Test parsing tracker options."""
        xknx = XKNX()

        def _get_only_tracker() -> _StateTracker:
            # _workers is unordered so it just works with 1 item
            self.assertEqual(len(xknx.state_updater._workers), 1)
            _tracker = next(iter(xknx.state_updater._workers.values()))
            return _tracker

        # INIT
        remote_value_init = RemoteValue(
            xknx, sync_state="init", group_address_state=GroupAddress("1/1/1"))
        self.assertEqual(_get_only_tracker().tracker_type,
                         StateTrackerType.INIT)
        remote_value_init.__del__()
        # EXPIRE with default time
        remote_value_expire = RemoteValue(
            xknx,
            sync_state="expire",
            group_address_state=GroupAddress("1/1/1"))
        self.assertEqual(_get_only_tracker().tracker_type,
                         StateTrackerType.EXPIRE)
        self.assertEqual(_get_only_tracker().update_interval, 60 * 60)
        remote_value_expire.__del__()
        # EXPIRE with 30 minutes
        remote_value_expire = RemoteValue(
            xknx,
            sync_state="expire 30",
            group_address_state=GroupAddress("1/1/1"))
        self.assertEqual(_get_only_tracker().tracker_type,
                         StateTrackerType.EXPIRE)
        self.assertEqual(_get_only_tracker().update_interval, 30 * 60)
        remote_value_expire.__del__()
        # PERIODICALLY with default time
        remote_value_every = RemoteValue(
            xknx,
            sync_state="every",
            group_address_state=GroupAddress("1/1/1"))
        self.assertEqual(_get_only_tracker().tracker_type,
                         StateTrackerType.PERIODICALLY)
        self.assertEqual(_get_only_tracker().update_interval, 60 * 60)
        remote_value_every.__del__()
        # PERIODICALLY 10 * 60 seconds
        remote_value_every = RemoteValue(
            xknx,
            sync_state="every 10",
            group_address_state=GroupAddress("1/1/1"))
        self.assertEqual(_get_only_tracker().tracker_type,
                         StateTrackerType.PERIODICALLY)
        self.assertEqual(_get_only_tracker().update_interval, 10 * 60)
        remote_value_every.__del__()
예제 #3
0
    def test_tracker_parser_invalid_options(self, logging_warning_mock):
        """Test parsing invalid tracker options."""
        xknx = XKNX()

        def _get_only_tracker() -> _StateTracker:
            # _workers is unordered so it just works with 1 item
            self.assertEqual(len(xknx.state_updater._workers), 1)
            _tracker = next(iter(xknx.state_updater._workers.values()))
            return _tracker

        # INVALID string
        remote_value_invalid = RemoteValue(
            xknx,
            sync_state="invalid",
            group_address_state=GroupAddress("1/1/1"))
        logging_warning_mock.assert_called_once_with(
            'Could not parse StateUpdater tracker_options "%s" for %s. Using default %s %s minutes.',
            "invalid",
            remote_value_invalid,
            StateTrackerType.EXPIRE,
            60,
        )
        self.assertEqual(_get_only_tracker().tracker_type,
                         StateTrackerType.EXPIRE)
        self.assertEqual(_get_only_tracker().update_interval, 60 * 60)
        remote_value_invalid.__del__()
        logging_warning_mock.reset_mock()
        # intervall too long
        remote_value_long = RemoteValue(
            xknx, sync_state=1441, group_address_state=GroupAddress("1/1/1"))
        logging_warning_mock.assert_called_once_with(
            "StateUpdater interval of %s to long for %s. Using maximum of %s minutes (1 day)",
            1441,
            remote_value_long,
            1440,
        )
        remote_value_long.__del__()
예제 #4
0
    def test_tracker_parser_invalid_options(self, logging_warning_mock):
        """Test parsing invalid tracker options."""
        xknx = XKNX(loop=self.loop)

        def _get_only_tracker() -> _StateTracker:
            # _workers is unordered so it just works with 1 item
            self.assertEqual(len(xknx.state_updater._workers), 1)
            _tracker = next(iter(xknx.state_updater._workers.values()))
            return _tracker

        # INVALID string
        remote_value_invalid = RemoteValue(
            xknx,
            sync_state="invalid",
            group_address_state=GroupAddress("1/1/1"))
        logging_warning_mock.assert_called_once_with(
            'Could not parse StateUpdater tracker_options "invalid" for %s. '
            "Using default StateTrackerType.EXPIRE 60 minutes." %
            remote_value_invalid)
        self.assertEqual(_get_only_tracker().tracker_type,
                         StateTrackerType.EXPIRE)
        self.assertEqual(_get_only_tracker().update_interval, 60 * 60)
        remote_value_invalid.__del__()
        logging_warning_mock.reset_mock()
        # INVALID type
        remote_value_float = RemoteValue(
            xknx, sync_state=5.6, group_address_state=GroupAddress("1/1/1"))
        logging_warning_mock.assert_called_once_with(
            "Could not parse StateUpdater tracker_options type <class 'float'> \"5.6\" for %s. "
            "Using default StateTrackerType.EXPIRE 60 minutes." %
            remote_value_float)
        self.assertEqual(_get_only_tracker().tracker_type,
                         StateTrackerType.EXPIRE)
        self.assertEqual(_get_only_tracker().update_interval, 60 * 60)
        remote_value_float.__del__()
        # intervall too long
        with (self.assertRaises(ConversionError)):
            remote_value_long = RemoteValue(
                xknx,
                sync_state=1441,
                group_address_state=GroupAddress("1/1/1"))

            remote_value_long.__del__()
예제 #5
0
    def test_tracker_parser(self):
        """Test parsing tracker options."""
        xknx = XKNX()

        def _get_only_tracker() -> _StateTracker:
            # _workers is unordered so it just works with 1 item
            assert len(xknx.state_updater._workers) == 1
            _tracker = next(iter(xknx.state_updater._workers.values()))
            return _tracker

        # INIT
        remote_value_init = RemoteValue(
            xknx, sync_state="init", group_address_state=GroupAddress("1/1/1"))
        assert _get_only_tracker().tracker_type == StateTrackerType.INIT
        remote_value_init.__del__()
        # DEFAULT with int
        remote_value_expire = RemoteValue(
            xknx, sync_state=2, group_address_state=GroupAddress("1/1/1"))
        assert _get_only_tracker().tracker_type == StateTrackerType.EXPIRE
        assert _get_only_tracker().update_interval == 2 * 60
        remote_value_expire.__del__()
        # DEFAULT with float
        remote_value_expire = RemoteValue(
            xknx, sync_state=6.9, group_address_state=GroupAddress("1/1/1"))
        assert _get_only_tracker().tracker_type == StateTrackerType.EXPIRE
        assert _get_only_tracker().update_interval == 6.9 * 60
        remote_value_expire.__del__()
        # EXPIRE with default time
        remote_value_expire = RemoteValue(
            xknx,
            sync_state="expire",
            group_address_state=GroupAddress("1/1/1"))
        assert _get_only_tracker().tracker_type == StateTrackerType.EXPIRE
        assert _get_only_tracker().update_interval == 60 * 60
        remote_value_expire.__del__()
        # EXPIRE with 30 minutes
        remote_value_expire = RemoteValue(
            xknx,
            sync_state="expire 30",
            group_address_state=GroupAddress("1/1/1"))
        assert _get_only_tracker().tracker_type == StateTrackerType.EXPIRE
        assert _get_only_tracker().update_interval == 30 * 60
        remote_value_expire.__del__()
        # PERIODICALLY with default time
        remote_value_every = RemoteValue(
            xknx,
            sync_state="every",
            group_address_state=GroupAddress("1/1/1"))
        assert _get_only_tracker(
        ).tracker_type == StateTrackerType.PERIODICALLY
        assert _get_only_tracker().update_interval == 60 * 60
        remote_value_every.__del__()
        # PERIODICALLY 10 * 60 seconds
        remote_value_every = RemoteValue(
            xknx,
            sync_state="every 10",
            group_address_state=GroupAddress("1/1/1"))
        assert _get_only_tracker(
        ).tracker_type == StateTrackerType.PERIODICALLY
        assert _get_only_tracker().update_interval == 10 * 60
        remote_value_every.__del__()