示例#1
0
class TestAPRSTelemetryStore(unittest.TestCase):
    """
    This is a test of APRSStation's implementation of ITelemetryObject.
    """
    def setUp(self):
        self.clock = Clock()
        self.clock.advance(_dummy_receive_time)
        self.store = TelemetryStore(time_source=self.clock)

    def __receive(self, msg):
        expand_aprs_message(msg, self.store)

    def test_new_station(self):
        self.assertEqual([], self.store.state().keys())
        self.__receive(
            parse_tnc2(
                'N6WKZ-3>APU25N,WB6TMS-3*,N6ZX-3*,WIDE2*:=3746.42N112226.00W# {UIV32N}',
                _dummy_receive_time))
        self.assertEqual(['N6WKZ-3'], self.store.state().keys())

    # TODO: this test makes less sense now that expand_aprs_message is separate
    def test_object_item_report(self):
        self.__receive(
            parse_tnc2(
                'KE6AFE-2>APU25N,WR6ABD*,NCA1:;TFCSCRUZ *160323z3655.94N\12200.92W?70 In 10 Minutes',
                _dummy_receive_time))
        self.assertEqual({'KE6AFE-2', 'TFCSCRUZ '},
                         set(self.store.state().keys()))
        # TODO test value of object

    def test_object_kill(self):
        self.__receive(
            parse_tnc2(
                'KE6AFE-2>APU25N,WR6ABD*,NCA1:;TFCSCRUZ *160323z3655.94N\12200.92W?70 In 10 Minutes',
                _dummy_receive_time))
        self.assertEqual({'KE6AFE-2', 'TFCSCRUZ '},
                         set(self.store.state().keys()))
        self.__receive(
            parse_tnc2('FOO>BAR:;TFCSCRUZ _160323z3655.94N\12200.92W?',
                       _dummy_receive_time))
        self.clock.advance(0)
        self.assertEqual({'FOO', 'KE6AFE-2'}, set(self.store.state().keys()))

    def test_drop_old(self):
        self.__receive(parse_tnc2('FOO>RX:>', _dummy_receive_time))
        self.assertEqual(['FOO'], self.store.state().keys())
        self.clock.advance(1799.5)
        self.__receive(parse_tnc2('BAR>RX:>', _dummy_receive_time + 1799.5))
        self.assertEqual({'BAR', 'FOO'}, set(self.store.state().keys()))
        self.clock.advance(0.5)
        self.__receive(parse_tnc2('BAR>RX:>', _dummy_receive_time + 1800))
        self.assertEqual(['BAR'], self.store.state().keys())
示例#2
0
class TestAPRSTelemetryStore(unittest.TestCase):
    """
    This is a test of APRSStation's implementation of ITelemetryObject.
    """
    
    def setUp(self):
        self.clock = Clock()
        self.clock.advance(_dummy_receive_time)
        self.store = TelemetryStore(time_source=self.clock)
    
    def __receive(self, msg):
        expand_aprs_message(msg, self.store)
    
    def test_new_station(self):
        self.assertEqual([], self.store.state().keys())
        self.__receive(parse_tnc2(
            'N6WKZ-3>APU25N,WB6TMS-3*,N6ZX-3*,WIDE2*:=3746.42N112226.00W# {UIV32N}',
            _dummy_receive_time))
        self.assertEqual(['N6WKZ-3'], self.store.state().keys())

    # TODO: this test makes less sense now that expand_aprs_message is separate
    def test_object_item_report(self):
        self.__receive(parse_tnc2(
            'KE6AFE-2>APU25N,WR6ABD*,NCA1:;TFCSCRUZ *160323z3655.94N\12200.92W?70 In 10 Minutes',
            _dummy_receive_time))
        self.assertEqual({'KE6AFE-2', 'TFCSCRUZ '}, set(self.store.state().keys()))
        # TODO test value of object

    def test_object_kill(self):
        self.__receive(parse_tnc2(
            'KE6AFE-2>APU25N,WR6ABD*,NCA1:;TFCSCRUZ *160323z3655.94N\12200.92W?70 In 10 Minutes',
            _dummy_receive_time))
        self.assertEqual({'KE6AFE-2', 'TFCSCRUZ '}, set(self.store.state().keys()))
        self.__receive(parse_tnc2(
            'FOO>BAR:;TFCSCRUZ _160323z3655.94N\12200.92W?',
            _dummy_receive_time))
        self.clock.advance(0)
        self.assertEqual({'FOO', 'KE6AFE-2'}, set(self.store.state().keys()))

    def test_drop_old(self):
        self.__receive(parse_tnc2('FOO>RX:>', _dummy_receive_time))
        self.assertEqual(['FOO'], self.store.state().keys())
        self.clock.advance(1799.5)
        self.__receive(parse_tnc2('BAR>RX:>', _dummy_receive_time + 1799.5))
        self.assertEqual({'BAR', 'FOO'}, set(self.store.state().keys()))
        self.clock.advance(0.5)
        self.__receive(parse_tnc2('BAR>RX:>', _dummy_receive_time + 1800))
        self.assertEqual(['BAR'], self.store.state().keys())
示例#3
0
class TestTelemetryStore(unittest.TestCase):
    def setUp(self):
        self.clock = Clock()
        self.clock.advance(1000)
        self.store = TelemetryStore(time_source=self.clock)

    def test_new_object(self):
        self.assertEqual([], self.store.state().keys())
        self.store.receive(Msg("foo", 1000))
        self.assertEqual(["foo"], self.store.state().keys())
        obj = self.store.state()["foo"].get()
        self.assertIsInstance(obj, Obj)

    def test_receive_called(self):
        self.store.receive(Msg("foo", 1000, 1))
        obj = self.store.state()["foo"].get()
        self.assertEquals(obj.last_msg, 1)
        self.store.receive(Msg("foo", 1000, 2))
        self.assertEquals(obj.last_msg, 2)

    def test_drop_old(self):
        self.store.receive(Msg("foo", 1000))
        self.assertEqual(["foo"], self.store.state().keys())
        self.clock.advance(1799.5)
        self.store.receive(Msg("bar", 2799.5))
        self.assertEqual({"bar", "foo"}, set(self.store.state().keys()))
        self.clock.advance(0.5)
        self.store.receive(Msg("bar", 2800))
        self.assertEqual(["bar"], self.store.state().keys())

    def test_become_interesting(self):
        self.store.receive(Msg("foo", 1000, "boring"))
        self.assertEqual([], self.store.state().keys())
        self.store.receive(Msg("foo", 1001, "interesting"))
        self.assertEqual(["foo"], self.store.state().keys())
        # 'become boring' is not implemented, so also not tested yet

    def test_drop_old_boring(self):
        """
        Make sure that dropping a boring object doesn't fail.
        """
        self.store.receive(Msg("foo", 1000, "boring"))
        self.assertEqual([], self.store.state().keys())
        self.clock.advance(1800)
        self.store.receive(Msg("bar", 2800, "boring"))
        self.assertEqual([], self.store.state().keys())
示例#4
0
class TestTelemetryStore(unittest.TestCase):
    def setUp(self):
        self.clock = SlightlyBetterClock()
        self.clock.advance(1000)
        self.store = TelemetryStore(time_source=self.clock)
    
    def test_new_object(self):
        self.assertEqual(set(), set(self.store.state().keys()))
        self.store.receive(Msg('foo', 1000))
        self.assertEqual({'foo'}, set(self.store.state().keys()))
        obj = self.store.state()['foo'].get()
        self.assertIsInstance(obj, Obj)
    
    def test_receive_called(self):
        self.store.receive(Msg('foo', 1000, 1))
        obj = self.store.state()['foo'].get()
        self.assertEqual(obj.last_msg, 1)
        self.store.receive(Msg('foo', 1000, 2))
        self.assertEqual(obj.last_msg, 2)
    
    def test_drop_old(self):
        self.store.receive(Msg('foo', 1000))
        self.assertEqual({'foo'}, set(self.store.state().keys()))

        self.clock.advance(1799.5)
        self.store.receive(Msg('bar', 2799.5))
        self.assertEqual({'bar', 'foo'}, set(self.store.state().keys()))

        self.clock.advance(0.5)
        self.assertEqual({'bar'}, set(self.store.state().keys()))

        self.clock.advance(10000)
        self.assertEqual(set(), set(self.store.state().keys()))

        # Expect complete cleanup -- that is, even if a TelemetryStore is created, filled, and thrown away, it will eventually be garbage collected when the objects expire.
        self.assertEqual(set(), set(self.clock.getDelayedCalls()))
    
    def test_become_interesting(self):
        self.store.receive(Msg('foo', 1000, 'boring'))
        self.assertEqual(set(), set(self.store.state().keys()))
        self.store.receive(Msg('foo', 1001, 'interesting'))
        self.assertEqual({'foo'}, set(self.store.state().keys()))
        # 'become boring' is not implemented, so also not tested yet
    
    def test_drop_old_boring(self):
        """
        Make sure that dropping a boring object doesn't fail.
        """
        self.store.receive(Msg('foo', 1000, 'boring'))
        self.assertEqual(set(), set(self.store.state().keys()))
        self.clock.advance(1800)
        self.store.receive(Msg('bar', 2800, 'boring'))
        self.assertEqual(set(), set(self.store.state().keys()))

    def test_expire_in_the_past(self):
        """
        An ITelemetryObject expiring in the past is not an error.
        """
        self.clock.advance(10000)
        self.store.receive(Msg('foo', 0, 'long ago'))
        self.clock.advance(2000)
示例#5
0
class TestTelemetryStore(unittest.TestCase):
    def setUp(self):
        self.clock = Clock()
        self.clock.advance(1000)
        self.store = TelemetryStore(time_source=self.clock)

    def test_new_object(self):
        self.assertEqual([], self.store.state().keys())
        self.store.receive(Msg('foo', 1000))
        self.assertEqual(['foo'], self.store.state().keys())
        obj = self.store.state()['foo'].get()
        self.assertIsInstance(obj, Obj)

    def test_receive_called(self):
        self.store.receive(Msg('foo', 1000, 1))
        obj = self.store.state()['foo'].get()
        self.assertEquals(obj.last_msg, 1)
        self.store.receive(Msg('foo', 1000, 2))
        self.assertEquals(obj.last_msg, 2)

    def test_drop_old(self):
        self.store.receive(Msg('foo', 1000))
        self.assertEqual(['foo'], self.store.state().keys())
        self.clock.advance(1799.5)
        self.store.receive(Msg('bar', 2799.5))
        self.assertEqual({'bar', 'foo'}, set(self.store.state().keys()))
        self.clock.advance(0.5)
        self.store.receive(Msg('bar', 2800))
        self.assertEqual(['bar'], self.store.state().keys())

    def test_become_interesting(self):
        self.store.receive(Msg('foo', 1000, 'boring'))
        self.assertEqual([], self.store.state().keys())
        self.store.receive(Msg('foo', 1001, 'interesting'))
        self.assertEqual(['foo'], self.store.state().keys())
        # 'become boring' is not implemented, so also not tested yet

    def test_drop_old_boring(self):
        """
        Make sure that dropping a boring object doesn't fail.
        """
        self.store.receive(Msg('foo', 1000, 'boring'))
        self.assertEqual([], self.store.state().keys())
        self.clock.advance(1800)
        self.store.receive(Msg('bar', 2800, 'boring'))
        self.assertEqual([], self.store.state().keys())
示例#6
0
class TestTelemetryStore(unittest.TestCase):
    def setUp(self):
        self.clock = SlightlyBetterClock()
        self.clock.advance(1000)
        self.store = TelemetryStore(time_source=self.clock)

    def test_new_object(self):
        self.assertEqual([], self.store.state().keys())
        self.store.receive(Msg('foo', 1000))
        self.assertEqual(['foo'], self.store.state().keys())
        obj = self.store.state()['foo'].get()
        self.assertIsInstance(obj, Obj)

    def test_receive_called(self):
        self.store.receive(Msg('foo', 1000, 1))
        obj = self.store.state()['foo'].get()
        self.assertEquals(obj.last_msg, 1)
        self.store.receive(Msg('foo', 1000, 2))
        self.assertEquals(obj.last_msg, 2)

    def test_drop_old(self):
        self.store.receive(Msg('foo', 1000))
        self.assertEqual(['foo'], self.store.state().keys())

        self.clock.advance(1799.5)
        self.store.receive(Msg('bar', 2799.5))
        self.assertEqual({'bar', 'foo'}, set(self.store.state().keys()))

        self.clock.advance(0.5)
        self.assertEqual({'bar'}, set(self.store.state().keys()))

        self.clock.advance(10000)
        self.assertEqual([], self.store.state().keys())

        # Expect complete cleanup -- that is, even if a TelemetryStore is created, filled, and thrown away, it will eventually be garbage collected when the objects expire.
        self.assertEqual([], self.clock.getDelayedCalls())

    def test_become_interesting(self):
        self.store.receive(Msg('foo', 1000, 'boring'))
        self.assertEqual([], self.store.state().keys())
        self.store.receive(Msg('foo', 1001, 'interesting'))
        self.assertEqual(['foo'], self.store.state().keys())
        # 'become boring' is not implemented, so also not tested yet

    def test_drop_old_boring(self):
        """
        Make sure that dropping a boring object doesn't fail.
        """
        self.store.receive(Msg('foo', 1000, 'boring'))
        self.assertEqual([], self.store.state().keys())
        self.clock.advance(1800)
        self.store.receive(Msg('bar', 2800, 'boring'))
        self.assertEqual([], self.store.state().keys())

    def test_expire_in_the_past(self):
        """
        An ITelemetryObject expiring in the past is not an error.
        """
        self.clock.advance(10000)
        self.store.receive(Msg('foo', 0, 'long ago'))
        self.clock.advance(2000)