Example #1
0
    def setUp(self):

        self.ttl_secs = 5
        self.dict = EphimeralDict(ttl_secs=self.ttl_secs)
Example #2
0
class EphimeralDictTestCase(unittest.TestCase):

    def setUp(self):

        self.ttl_secs = 5
        self.dict = EphimeralDict(ttl_secs=self.ttl_secs)

    def tearDown(self):

        self.dict = None


    def test_set_and_get(self):
        """
        Tests if setting items into the EphimeralDict, and getting it works
        as intended.
        """
        self.dict['a'] = 'foo'
        self.dict['b'] = 'bar'
        self.dict['c'] = 'baz'

        self.assertEqual('foo', self.dict['a'])
        self.assertEqual('bar', self.dict['b'])
        self.assertEqual('baz', self.dict['c'])

    def test_singleton(self):

        first_dict = EphimeralDict(ttl_secs=self.ttl_secs)
        first_dict['a'] = 'foo'

        del first_dict
        second_dict = EphimeralDict(ttl_secs=self.ttl_secs)
        self.assertEqual('foo', second_dict['a'])


    def test_set_and_contains(self):
        """
        Tests if setting items into the EphimeralDict and calling the 'in'
        operator works as intended.
        """

        self.dict['a'] = 'foo'
        self.dict['b'] = 'bar'

        self.assertTrue('a' in self.dict)
        self.assertTrue('b' in self.dict)
        self.assertTrue('c' not in self.dict)

    def test_clear(self):
        """
        Tests EphimeralDict.clear.
        """

        self.dict['a'] = 'foo'
        self.dict['b'] = 'bar'
        self.dict['c'] = 'baz'

        self.assertEqual('foo', self.dict['a'])
        self.assertEqual('bar', self.dict['b'])
        self.assertEqual('baz', self.dict['c'])

        self.dict.clear()
        self.assertTrue('a' not in self.dict)
        self.assertTrue('b' not in self.dict)
        self.assertTrue('c' not in self.dict)

    def test_prune(self):
        """
        Tests EphimeralDict.prune.
        """
        dict = EphimeralDict(ttl_secs=self.ttl_secs)
        dict['a'] = 'foo'
        dict['b'] = 'bar'
        dict['c'] = 'baz'

        # test that prune is not called before items' ttl was expired
        time.sleep(2)
        self.assertTrue('a' in dict)
        self.assertTrue('b' in dict)
        self.assertTrue('c' in dict)

        # test that prune is called after items' ttl has expired
        time.sleep(4)
        self.assertTrue('a' not in dict)
        self.assertTrue('b' not in dict)
        self.assertTrue('c' not in dict)

    def test_initialization(self):
        """
        Tests that the EphimeralDict is only configured once.
        """
        a = EphimeralDict(ttl_secs=self.ttl_secs)
        b = EphimeralDict(ttl_secs=self.ttl_secs * 2)
        self.assertEqual(a, b)
        self.assertEqual(a.ttl_secs, 5)
        self.assertEqual(a.ttl_secs, b.ttl_secs)