Exemple #1
0
    def test_basic(self):
        tree = katcp.AggregateSensorTree()
        s0, s1, s2, s3 = sensors = self.make_sensors(4,
                                                     katcp.Sensor.INTEGER,
                                                     params=[-100, 100])
        tree.add(s0, self._add_rule, (s1, ))
        tree.add(s1, self._add_rule, (s2, s3))
        self.assertSensorValues(sensors, (0, 0, 0, 0))

        s2.set_value(1)
        self.assertSensorValues(sensors, (1, 1, 1, 0))
        s3.set_value(2)
        self.assertSensorValues(sensors, (3, 3, 1, 2))

        tree.remove(s1)
        self.assertSensorValues(sensors, (3, 3, 1, 2))

        s1.set_value(5)
        self.assertSensorValues(sensors, (5, 5, 1, 2))

        tree.remove(s0)
        self.assertSensorValues(sensors, (5, 5, 1, 2))

        # check s0 is no longer updated
        s1.set_value(7)
        self.assertSensorValues(sensors, (5, 7, 1, 2))
Exemple #2
0
    def test_delayed(self):
        tree = katcp.AggregateSensorTree()
        s0, s1, s2, s3 = sensors = self.make_sensors(4,
                                                     katcp.Sensor.INTEGER,
                                                     params=[-100, 100])
        tree.add_delayed(s0, self._add_rule, (s1.name, ))
        tree.add_delayed(s1, self._add_rule, (s2.name, s3.name))
        self.assertSensorValues(sensors, (0, 0, 0, 0))

        s2.set_value(1)
        s3.set_value(2)
        self.assertSensorValues(sensors, (0, 0, 1, 2))

        tree.register_sensor(s2)
        tree.register_sensor(s3)
        self.assertSensorValues(sensors, (0, 3, 1, 2))

        tree.register_sensor(s1)
        self.assertSensorValues(sensors, (3, 3, 1, 2))
Exemple #3
0
 def test_removing_and_adding_registered_sensors(self):
     """Test removing the links of some or all child sensors of an aggregate
     sensor, and adding them to the aggregate sensor again.  The sensors are
     registered after add_delayed."""
     tree = katcp.AggregateSensorTree()
     s0, s1, s2 = sensors = self.make_sensors(3,
                                              katcp.Sensor.INTEGER,
                                              params=[-100, 100])
     tree.add_delayed(s0, self._add_rule, (s1.name, s2.name))
     self.assertSensorValues(sensors, (0, 0, 0))
     tree.register_sensor(s1)
     tree.register_sensor(s2)
     s1.set_value(9)
     s2.set_value(9)
     self.assertSensorValues(sensors, (18, 9, 9))
     # remove s1
     tree.deregister_sensor(s1)
     self.assertSensorValues(sensors, (9, 9, 9))
     s1.set_value(100)
     self.assertSensorValues(sensors, (9, 100, 9))
     s2.set_value(22)
     self.assertSensorValues(sensors, (9, 100, 22))
     # add s1
     tree.register_sensor(s1)
     s1.set_value(10)
     self.assertSensorValues(sensors, (32, 10, 22))
     # remove s1 and s2
     tree.deregister_sensor(s1)
     tree.deregister_sensor(s2)
     s1.set_value(100)
     s2.set_value(100)
     self.assertSensorValues(sensors, (22, 100, 100))
     # add s1 and s2
     tree.register_sensor(s1)
     tree.register_sensor(s2)
     s1.set_value(1)
     s2.set_value(1)
     self.assertSensorValues(sensors, (2, 1, 1))
Exemple #4
0
    def test_adding_and_removing_sensors(self):
        tree = katcp.AggregateSensorTree()
        s0, s1 = sensors = self.make_sensors(2,
                                             katcp.Sensor.INTEGER,
                                             params=[-100, 100])
        # add s0 aggregate sensor and s1 child sensor pair with rule
        tree.add(s0, self._add_rule, (s1, ))
        self.assertSensorValues(sensors, (0, 0))

        # check s0 aggregate sensor is updated
        s1.set_value(1)
        self.assertSensorValues(sensors, (1, 1))

        # remove s1 child sensor
        tree.remove_links(s0, [s1])

        # add s1 child sensor again
        tree.add_links(s0, [s1])
        self.assertSensorValues(sensors, (1, 1))

        # check s0 aggregate sensor is updated
        s1.set_value(2)
        self.assertSensorValues(sensors, (2, 2))
Exemple #5
0
 def test_double_remove(self):
     tree = katcp.AggregateSensorTree()
     s0, s1 = self.make_sensors(2, katcp.Sensor.INTEGER, params=[-100, 100])
     tree.add(s0, self._add_rule, (s1, ))
     tree.remove(s0)
     self.assertRaises(ValueError, tree.remove, s0)