1
0
mirror of https://github.com/samba-team/samba.git synced 2025-11-12 04:23:49 +03:00

r14854: Finish off swig wrapper and torture tests for tdb.

This commit is contained in:
Tim Potter
2006-04-02 01:56:22 +00:00
committed by Gerald (Jerry) Carter
parent 137ed99e35
commit 1c4042e23f
2 changed files with 149 additions and 11 deletions

View File

@@ -22,24 +22,86 @@
import tdb, os, UserDict
# Open flags
DEFAULT = tdb.TDB_DEFAULT
CLEAR_IF_FIRST = tdb.TDB_CLEAR_IF_FIRST
INTERNAL = tdb.TDB_INTERNAL
NOLOCK = tdb.TDB_NOLOCK
NOMMAP = tdb.TDB_NOMMAP
# Class representing a TDB file
class Tdb:
def __init__(self, name, hash_size = 0, tdb_flags = tdb.TDB_DEFAULT,
open_flags = os.O_RDWR | os.O_CREAT, mode = 0600):
# Create and destroy Tdb objects
self.tdb = tdb.open(name, hash_size, tdb_flags, open_flags, mode)
def __init__(self, name, hash_size = 0, flags = tdb.TDB_DEFAULT,
open_flags = os.O_RDWR | os.O_CREAT, mode = 0600):
self.tdb = tdb.open(name, hash_size, flags, open_flags, mode)
def __del__(self):
tdb.close(self.tdb)
if hasattr(self, 'tdb'):
tdb.close(self.tdb)
# Random access to keys, values
def __getitem__(self, key):
pass
result = tdb.fetch(self.tdb, key)
if result is None:
raise KeyError, key
return result
def __setitem__(self, key, item):
pass
tdb.store(self.tdb, key, item)
def __delitem__(self, key):
pass
if not tdb.exists(self.tdb, key):
raise KeyError, key
tdb.delete(self.tdb, key)
def has_key(self, key):
return tdb.exists(self.tdb, key)
# Tdb iterator
class TdbIterator:
def __init__(self, tdb):
self.tdb = tdb
self.key = None
def __iter__(self):
return self
def next(self):
if self.key is None:
self.key = tdb.firstkey(self.tdb)
if self.key is None:
raise StopIteration
return self.key
else:
self.key = tdb.nextkey(self.tdb, self.key)
if self.key is None:
raise StopIteration
return self.key
def __iter__(self):
return Tdb.TdbIterator(self.tdb)
# Implement other dict functions using TdbIterator
def keys(self):
pass
return [k for k in iter(self)]
def values(self):
return [self[k] for k in iter(self)]
def items(self):
return [(k, self[k]) for k in iter(self)]
def __len__(self):
return len(self.keys())
def clear(self):
for k in iter(self):
del(self[k])

View File

@@ -1,6 +1,82 @@
#!/usr/bin/python
import Tdb, os
import sys, os
import Tdb
t = Tdb.Tdb('foo.tdb')
os.unlink('foo.tdb')
def fail(msg):
print 'FAILED:', msg
sys.exit(1)
tdb_file = '/tmp/torture_tdb.tdb'
# Create temporary tdb file
t = Tdb.Tdb(tdb_file, flags = Tdb.CLEAR_IF_FIRST)
# Check non-existent key throws KeyError exception
try:
t['__none__']
except KeyError:
pass
else:
fail('non-existent key did not throw KeyError')
# Check storing key
t['bar'] = '1234'
if t['bar'] != '1234':
fail('store key failed')
# Check key exists
if not t.has_key('bar'):
fail('has_key() failed for existing key')
if t.has_key('__none__'):
fail('has_key() succeeded for non-existent key')
# Delete key
try:
del(t['__none__'])
except KeyError:
pass
else:
fail('delete of non-existent key did not throw KeyError')
del t['bar']
if t.has_key('bar'):
fail('delete of existing key did not delete key')
# Clear all keys
t.clear()
if len(t) != 0:
fail('clear failed to remove all keys')
# Other dict functions
t['a'] = '1'
t['ab'] = '12'
t['abc'] = '123'
if len(t) != 3:
fail('len method produced wrong value')
keys = t.keys()
values = t.values()
items = t.items()
if set(keys) != set(['a', 'ab', 'abc']):
fail('keys method produced wrong values')
if set(values) != set(['1', '12', '123']):
fail('values method produced wrong values')
if set(items) != set([('a', '1'), ('ab', '12'), ('abc', '123')]):
fail('values method produced wrong values')
# Clean up
os.unlink(tdb_file)