Skip to content

Commit 2f2f64c

Browse files
tiranencukou
authored andcommitted
Add more tests for bytes mode affected functions
Tests marked with expected failure are currently affected by bug #147. See: #147 Signed-off-by: Christian Heimes <cheimes@redhat.com>
1 parent 98999bd commit 2f2f64c

File tree

1 file changed

+104
-0
lines changed

1 file changed

+104
-0
lines changed

Tests/t_ldapobject.py

Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,30 @@ def test_bytesmode_search_results_have_bytes(self):
161161
for value in values:
162162
self.assertEqual(type(value), bytes)
163163

164+
@unittest.skipUnless(PY2, "no bytes_mode under Py3")
165+
@unittest.expectedFailure
166+
def test_bytesmode_search_defaults(self):
167+
l = self._get_bytes_ldapobject()
168+
base = 'cn=Foo1,' + self.server.suffix
169+
kwargs = dict(
170+
base=base.encode('utf-8'),
171+
scope=ldap.SCOPE_SUBTREE,
172+
# filterstr=b'(objectClass=*)'
173+
)
174+
expected = [
175+
(
176+
base,
177+
{'cn': [b'Foo1'], 'objectClass': [b'organizationalRole']}
178+
),
179+
]
180+
181+
result = l.search_s(**kwargs)
182+
self.assertEqual(result, expected)
183+
result = l.search_st(**kwargs)
184+
self.assertEqual(result, expected)
185+
result = l.search_ext_s(**kwargs)
186+
self.assertEqual(result, expected)
187+
164188
@unittest.skipUnless(PY2, "no bytes_mode under Py3")
165189
def test_unset_bytesmode_search_warns_bytes(self):
166190
l = self._get_bytes_ldapobject(explicit=False)
@@ -263,18 +287,70 @@ def test003_search_oneattr(self):
263287
[('cn=Foo4,ou=Container,'+self.server.suffix, {'cn': [b'Foo4']})]
264288
)
265289

290+
def test_find_unique_entry(self):
291+
result = self._ldap_conn.find_unique_entry(
292+
self.server.suffix,
293+
ldap.SCOPE_SUBTREE,
294+
'(cn=Foo4)',
295+
['cn'],
296+
)
297+
self.assertEqual(
298+
result,
299+
('cn=Foo4,ou=Container,'+self.server.suffix, {'cn': [b'Foo4']})
300+
)
301+
with self.assertRaises(ldap.SIZELIMIT_EXCEEDED):
302+
# > 2 entries returned
303+
self._ldap_conn.find_unique_entry(
304+
self.server.suffix,
305+
ldap.SCOPE_ONELEVEL,
306+
'(cn=Foo*)',
307+
['*'],
308+
)
309+
with self.assertRaises(ldap.NO_UNIQUE_ENTRY):
310+
# 0 entries returned
311+
self._ldap_conn.find_unique_entry(
312+
self.server.suffix,
313+
ldap.SCOPE_ONELEVEL,
314+
'(cn=Bar*)',
315+
['*'],
316+
)
317+
266318
def test_search_subschema(self):
267319
l = self._ldap_conn
268320
dn = l.search_subschemasubentry_s()
269321
self.assertIsInstance(dn, text_type)
270322
self.assertEqual(dn, "cn=Subschema")
323+
subschema = l.read_subschemasubentry_s(dn)
324+
self.assertIsInstance(subschema, dict)
325+
self.assertEqual(
326+
sorted(subschema),
327+
[
328+
u'attributeTypes',
329+
u'ldapSyntaxes',
330+
u'matchingRuleUse',
331+
u'matchingRules',
332+
u'objectClasses'
333+
]
334+
)
271335

272336
@unittest.skipUnless(PY2, "no bytes_mode under Py3")
273337
def test_search_subschema_have_bytes(self):
274338
l = self._get_bytes_ldapobject(explicit=False)
275339
dn = l.search_subschemasubentry_s()
276340
self.assertIsInstance(dn, bytes)
277341
self.assertEqual(dn, b"cn=Subschema")
342+
subschema = l.read_subschemasubentry_s(dn)
343+
self.assertIsInstance(subschema, dict)
344+
self.assertEqual(
345+
sorted(subschema),
346+
[
347+
b'attributeTypes',
348+
b'ldapSyntaxes',
349+
b'matchingRuleUse',
350+
b'matchingRules',
351+
b'objectClasses'
352+
]
353+
)
278354

279355
def test004_errno107(self):
280356
l = self.ldap_object_class('ldap://127.0.0.1:42')
@@ -433,6 +509,34 @@ def test_multiple_starttls(self):
433509
l.simple_bind_s(self.server.root_dn, self.server.root_pw)
434510
self.assertEqual(l.whoami_s(), 'dn:' + self.server.root_dn)
435511

512+
def test_dse(self):
513+
dse = self._ldap_conn.read_rootdse_s()
514+
self.assertIsInstance(dse, dict)
515+
self.assertEqual(dse[u'supportedLDAPVersion'], [b'3'])
516+
self.assertEqual(
517+
sorted(dse),
518+
[u'configContext', u'entryDN', u'namingContexts', u'objectClass',
519+
u'structuralObjectClass', u'subschemaSubentry',
520+
u'supportedControl', u'supportedExtension', u'supportedFeatures',
521+
u'supportedLDAPVersion', u'supportedSASLMechanisms']
522+
)
523+
self.assertEqual(
524+
self._ldap_conn.get_naming_contexts(),
525+
[self.server.suffix.encode('utf-8')]
526+
)
527+
528+
@unittest.skipUnless(PY2, "no bytes_mode under Py3")
529+
@unittest.expectedFailure
530+
def test_dse_bytes(self):
531+
l = self._get_bytes_ldapobject()
532+
dse = l.read_rootdse_s()
533+
self.assertIsInstance(dse, dict)
534+
self.assertEqual(dse[u'supportedLDAPVersion'], [b'3'])
535+
self.assertEqual(
536+
l.get_naming_contexts(),
537+
[self.server.suffix.encode('utf-8')]
538+
)
539+
436540

437541
class Test01_ReconnectLDAPObject(Test00_SimpleLDAPObject):
438542
"""

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy