def test_get_set_unset(self): kv = Storage(':memory:') kv.hook_scope('test') kv.set('hello', 'saucy') kv.set('hello', 'world') self.assertEqual(kv.get('hello'), 'world') kv.flush() kv.unset('hello') self.assertEqual(kv.get('hello'), None) kv.flush(False) self.assertEqual(kv.get('hello'), 'world')
def test_init_kv_multiple(self): with tempfile.NamedTemporaryFile() as fh: kv = Storage(fh.name) with kv.hook_scope('xyz'): kv.set('x', 1) kv.close() kv = Storage(fh.name) with kv.hook_scope('abc'): self.assertEqual(kv.get('x'), 1) kv.close()
def test_record(self): kv = Storage(':memory:') kv.set('config', {'x': 1, 'b': False}) config = kv.get('config', record=True) self.assertEqual(config.b, False) self.assertEqual(config.x, 1) self.assertEqual(kv.set('config.x', 1), 1) try: config.z except AttributeError: pass else: self.fail('attribute error should fire on nonexistant')
def test_unset(self): kv = Storage(':memory:') with kv.hook_scope('install'): kv.set('a', True) with kv.hook_scope('start'): kv.set('a', False) with kv.hook_scope('config-changed'): kv.unset('a') history = [h[:-1] for h in kv.gethistory('a')] self.assertEqual(history, [(1, 'a', 'true', 'install'), (2, 'a', 'false', 'start'), (3, 'a', '"DELETED"', "config-changed")])
def test_hook_scope(self): kv = Storage(':memory:') try: with kv.hook_scope('install') as rev: self.assertEqual(rev, 1) kv.set('a', 1) raise RuntimeError('x') except RuntimeError: self.assertEqual(kv.get('a'), None) with kv.hook_scope('config-changed') as rev: self.assertEqual(rev, 1) kv.set('a', 1) self.assertEqual(kv.get('a'), 1) kv.revision = None with kv.hook_scope('start') as rev: self.assertEqual(rev, 2) kv.set('a', False) kv.set('a', True) self.assertEqual(kv.get('a'), True) # History doesn't decode values by default history = [h[:-1] for h in kv.gethistory('a')] self.assertEqual( history, [(1, 'a', '1', 'config-changed'), (2, 'a', 'true', 'start')]) history = [h[:-1] for h in kv.gethistory('a', deserialize=True)] self.assertEqual( history, [(1, 'a', 1, 'config-changed'), (2, 'a', True, 'start')])
def test_keyrange(self): kv = Storage(':memory:') kv.set('docker.net_mtu', 1) kv.set('docker.net_nack', True) kv.set('docker.net_type', 'vxlan') self.assertEqual( kv.getrange('docker'), {'docker.net_mtu': 1, 'docker.net_type': 'vxlan', 'docker.net_nack': True}) self.assertEqual( kv.getrange('docker.', True), {'net_mtu': 1, 'net_type': 'vxlan', 'net_nack': True})
def test_multi_value_set_skips(self): # pure coverage test kv = Storage(':memory:') kv.set('x', 1) self.assertEqual(kv.set('x', 1), 1)