@@ -161,6 +161,30 @@ def test_bytesmode_search_results_have_bytes(self):
161
161
for value in values :
162
162
self .assertEqual (type (value ), bytes )
163
163
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
+
164
188
@unittest .skipUnless (PY2 , "no bytes_mode under Py3" )
165
189
def test_unset_bytesmode_search_warns_bytes (self ):
166
190
l = self ._get_bytes_ldapobject (explicit = False )
@@ -263,18 +287,70 @@ def test003_search_oneattr(self):
263
287
[('cn=Foo4,ou=Container,' + self .server .suffix , {'cn' : [b'Foo4' ]})]
264
288
)
265
289
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
+
266
318
def test_search_subschema (self ):
267
319
l = self ._ldap_conn
268
320
dn = l .search_subschemasubentry_s ()
269
321
self .assertIsInstance (dn , text_type )
270
322
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
+ )
271
335
272
336
@unittest .skipUnless (PY2 , "no bytes_mode under Py3" )
273
337
def test_search_subschema_have_bytes (self ):
274
338
l = self ._get_bytes_ldapobject (explicit = False )
275
339
dn = l .search_subschemasubentry_s ()
276
340
self .assertIsInstance (dn , bytes )
277
341
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
+ )
278
354
279
355
def test004_errno107 (self ):
280
356
l = self .ldap_object_class ('ldap://127.0.0.1:42' )
@@ -433,6 +509,34 @@ def test_multiple_starttls(self):
433
509
l .simple_bind_s (self .server .root_dn , self .server .root_pw )
434
510
self .assertEqual (l .whoami_s (), 'dn:' + self .server .root_dn )
435
511
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
+
436
540
437
541
class Test01_ReconnectLDAPObject (Test00_SimpleLDAPObject ):
438
542
"""
0 commit comments