Example #1
0
    def test_sampling(self):
        """Test getting and setting the sampling."""
        s = self.sensor

        sampling.SampleNone(None, s)
        sampling.SampleAuto(None, s)
        sampling.SamplePeriod(None, s, 10)
        sampling.SampleEvent(None, s)
        sampling.SampleDifferential(None, s, 2)
        self.assertRaises(ValueError, sampling.SampleNone, None, s, "foo")
        self.assertRaises(ValueError, sampling.SampleAuto, None, s, "bar")
        self.assertRaises(ValueError, sampling.SamplePeriod, None, s)
        self.assertRaises(ValueError, sampling.SamplePeriod, None, s, "1.5")
        self.assertRaises(ValueError, sampling.SamplePeriod, None, s, "-1")
        self.assertRaises(ValueError, sampling.SampleEvent, None, s, "foo")
        self.assertRaises(ValueError, sampling.SampleDifferential, None, s)
        self.assertRaises(ValueError, sampling.SampleDifferential, None, s,
                          "-1")
        self.assertRaises(ValueError, sampling.SampleDifferential, None, s,
                          "1.5")

        sampling.SampleStrategy.get_strategy("none", None, s)
        sampling.SampleStrategy.get_strategy("auto", None, s)
        sampling.SampleStrategy.get_strategy("period", None, s, "15")
        sampling.SampleStrategy.get_strategy("event", None, s)
        sampling.SampleStrategy.get_strategy("differential", None, s, "2")
        self.assertRaises(ValueError, sampling.SampleStrategy.get_strategy,
                          "random", None, s)
        self.assertRaises(ValueError, sampling.SampleStrategy.get_strategy,
                          "period", None, s, "foo")
        self.assertRaises(ValueError, sampling.SampleStrategy.get_strategy,
                          "differential", None, s, "bar")
Example #2
0
    def test_periodic(self):
        """Test reactor with periodic sampling."""
        period = sampling.SamplePeriod(self.inform, self.sensor, 10)
        start = time.time()
        self.reactor.add_strategy(period)
        time.sleep(0.1)
        self.reactor.remove_strategy(period)
        end = time.time()

        expected = int(round((end - start) / 0.01))
        emax, emin = expected + 1, expected - 1

        self.assertTrue(
            emin <= len(self.calls) <= emax,
            "Expect %d to %d informs, got:\n  %s" %
            (emin, emax, "\n  ".join(str(x) for x in self.calls)))
Example #3
0
    def test_periodic(self):
        """Test SamplePeriod strategy."""
        # period = 10s
        period = sampling.SamplePeriod(self.inform, self.sensor, 10000)
        self.assertEqual(self.calls, [])

        period.attach()
        self.assertEqual(self.calls, [])

        period.periodic(1)
        self.assertEqual(len(self.calls), 1)

        period.periodic(11)
        self.assertEqual(len(self.calls), 2)

        period.periodic(12)
        self.assertEqual(len(self.calls), 3)
Example #4
0
    def test_periodic(self):
        """Test reactor with periodic sampling."""
        period = 10.
        no_periods = 5
        period_strat = sampling.SamplePeriod(self.inform, self.sensor, period)
        self._add_strategy(period_strat)

        for i in range(no_periods):
            self.timewarp(period, event_to_await=self.inform_called)

        self.reactor.remove_strategy(period_strat)

        call_times = [t for t, vals in self.calls]
        self.assertEqual(len(self.calls), no_periods + 1)
        self.assertEqual(call_times,
                         [self.start_time + i*period
                          for i in range(no_periods + 1)])
Example #5
0
    def test_periodic(self):
        t0 = self.ioloop_time
        sample_p = 10  # sample DUT in seconds
        DUT = sampling.SamplePeriod(self.inform, self.sensor, sample_p)
        self.assertEqual(DUT.get_sampling_formatted(), (b'period', [b'10']))
        self.assertEqual(self.calls, [])
        t, status, value = self.sensor.read()
        DUT.start()
        yield self.wake_ioloop()
        self.assertEqual(self.calls, [(self.sensor, (t, status, value))])
        self.calls = []
        # Warp the ioloop clock forward a bit more than one DUT. Check that
        #   1) a sample is sent,
        #   2) the next sample is scheduled at t0+DUT, not t0+DUT+extra delay
        yield self.set_ioloop_time(t0 + sample_p * 1.15)
        self.assertEqual(self.calls, [(self.sensor, (t, status, value))])
        self.calls = []
        # Don't expect an update, since we are at just before the next sample DUT
        yield self.set_ioloop_time(t0 + sample_p * 1.99)
        self.assertEqual(self.calls, [])
        # Now we are at exactly the next sample time, expect update
        yield self.set_ioloop_time(t0 + sample_p * 2)
        self.assertEqual(self.calls, [(self.sensor, (t, status, value))])
        self.calls = []
        # Bit past previous sample time, expect no update
        yield self.set_ioloop_time(t0 + sample_p * 2.16)
        self.assertEqual(self.calls, [])

        # Check that no update is sent if the sensor is updated, but that the next
        # periodic update is correct
        t, status, value = (t0 + sample_p * 2.5, Sensor.WARN, -1)
        self.sensor.set(t, status, value)
        yield self.set_ioloop_time(t0 + sample_p * 2.6)
        self.assertEqual(self.calls, [])
        yield self.set_ioloop_time(t0 + sample_p * 3)
        self.assertEqual(self.calls, [(self.sensor, (t, status, value))])
        self.calls = []

        # Cancel strategy and check that its timeout call is cancelled.
        DUT.cancel()
        yield self.wake_ioloop()
        yield self.set_ioloop_time(t0 + sample_p * 4.1)
        self.assertEqual(self.calls, [])
Example #6
0
    def test_periodic(self):
        """Test SamplePeriod strategy."""
        sample_p = 10                            # sample period in seconds
        period = sampling.SamplePeriod(self.inform, self.sensor, sample_p)
        self.assertEqual(self.calls, [])

        period.attach()
        self.assertEqual(self.calls, [])

        next_p = period.periodic(1)
        self.assertEqual(next_p, 1 + sample_p)
        self.assertEqual(len(self.calls), 1)

        next_p = period.periodic(11)
        self.assertEqual(len(self.calls), 2)
        self.assertEqual(next_p, 11 + sample_p)

        next_p = period.periodic(12)
        self.assertEqual(next_p, 12 + sample_p)
        self.assertEqual(len(self.calls), 3)