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())
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())
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)
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)