mirror of
https://github.com/samba-team/samba.git
synced 2025-11-21 12:23:50 +03:00
Fix up behaviour of Ldb.__setitem__() function. It should overwrite the element data. Add wrapper for ldb_msg_sanity_check().
84 lines
1.5 KiB
Python
Executable File
84 lines
1.5 KiB
Python
Executable File
#!/usr/bin/python
|
|
#
|
|
# A torture test for the Python Ldb bindings. Also a short guide on
|
|
# how the API works.
|
|
#
|
|
|
|
from Ldb import *
|
|
|
|
# Helpers
|
|
|
|
def t(cond, msg):
|
|
"""Test a condition."""
|
|
if not cond:
|
|
raise RuntimeError('FAILED: %s' % msg)
|
|
|
|
#
|
|
# Torture LdbMessage
|
|
#
|
|
|
|
m = LdbMessage()
|
|
|
|
# Empty message
|
|
|
|
t(m.keys() == [], 'empty msg')
|
|
t(m.dn == None, 'empty dn')
|
|
|
|
t(m.sanity_check() == LDB_ERR_INVALID_DN_SYNTAX, 'sanity check')
|
|
|
|
# Test invalid dn
|
|
|
|
try:
|
|
m.dn = 'invalid dn'
|
|
except LdbError, arg:
|
|
if arg[0] != LDB_ERR_INVALID_DN_SYNTAX:
|
|
raise
|
|
else:
|
|
t(False, 'LdbError not raised')
|
|
|
|
# Test valid dn
|
|
|
|
m.dn = 'name=spotty'
|
|
t(m.dn == 'name=spotty', 'specified dn')
|
|
|
|
t(m.sanity_check() == LDB_SUCCESS, 'sanity check')
|
|
|
|
# Test some single-valued attributes
|
|
|
|
m['animal'] = 'dog'
|
|
m['name'] = 'spotty'
|
|
|
|
t(m.keys() == ['animal', 'name'], 'keys() test failed')
|
|
t(m.values() == [['dog'], ['spotty']], 'values() test failed')
|
|
t(m.items() == [('animal', ['dog']), ('name', ['spotty'])],
|
|
'items() test failed')
|
|
|
|
t(m.sanity_check() == LDB_SUCCESS, 'sanity check')
|
|
|
|
m['animal'] = 'canine'
|
|
t(m['animal'] == ['canine'], 'replace value failed')
|
|
|
|
# Test a multi-valued attribute
|
|
|
|
names = ['spotty', 'foot']
|
|
m['name'] = names
|
|
|
|
t(m['name'] == names, 'multi-valued attr failed')
|
|
|
|
t(m.sanity_check() == LDB_SUCCESS, 'sanity check')
|
|
|
|
# Test non-string attributes
|
|
|
|
try:
|
|
m['foo'] = 42
|
|
except TypeError:
|
|
pass
|
|
else:
|
|
t(False, 'TypeError not raised')
|
|
|
|
#
|
|
# Torture Ldb
|
|
#
|
|
|
|
l = Ldb('foo.ldb')
|