Skip to content

Commit d466f39

Browse files
spaceonedroideck
authored andcommitted
test(ldap.dn): Add test cases for ldap.dn.dn2str() with different format flags
1 parent e4bc42c commit d466f39

File tree

1 file changed

+199
-4
lines changed

1 file changed

+199
-4
lines changed

Tests/t_ldap_dn.py

Lines changed: 199 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ def test_str2dn(self):
5757
test function str2dn()
5858
"""
5959
self.assertEqual(ldap.dn.str2dn(''), [])
60+
self.assertEqual(ldap.dn.str2dn(None), [])
6061
self.assertEqual(
6162
ldap.dn.str2dn('uid=test42,ou=Testing,dc=example,dc=com'),
6263
[
@@ -105,15 +106,24 @@ def test_str2dn(self):
105106
self.assertEqual(
106107
ldap.dn.str2dn('cn=äöüÄÖÜß,dc=example,dc=com', flags=0),
107108
[
108-
[('cn', 'äöüÄÖÜß', 4)],
109+
[('cn', 'äöüÄÖÜß', ldap.AVA_NONPRINTABLE)],
109110
[('dc', 'example', 1)],
110111
[('dc', 'com', 1)]
111112
]
112113
)
113114
self.assertEqual(
114115
ldap.dn.str2dn('cn=\\c3\\a4\\c3\\b6\\c3\\bc\\c3\\84\\c3\\96\\c3\\9c\\c3\\9f,dc=example,dc=com', flags=0),
115116
[
116-
[('cn', 'äöüÄÖÜß', 4)],
117+
[('cn', 'äöüÄÖÜß', ldap.AVA_NONPRINTABLE)],
118+
[('dc', 'example', 1)],
119+
[('dc', 'com', 1)]
120+
]
121+
)
122+
self.assertEqual(
123+
ldap.dn.str2dn('/dc=com/dc=example/ou=Testing/uid=test42', flags=ldap.DN_FORMAT_DCE),
124+
[
125+
[('uid', 'test42', 1)],
126+
[('ou', 'Testing', 1)],
117127
[('dc', 'example', 1)],
118128
[('dc', 'com', 1)]
119129
]
@@ -123,7 +133,7 @@ def test_dn2str(self):
123133
"""
124134
test function dn2str()
125135
"""
126-
self.assertEqual(ldap.dn.str2dn(''), [])
136+
self.assertEqual(ldap.dn.dn2str([]), '')
127137
self.assertEqual(
128138
ldap.dn.dn2str([
129139
[('uid', 'test42', 1)],
@@ -162,12 +172,197 @@ def test_dn2str(self):
162172
)
163173
self.assertEqual(
164174
ldap.dn.dn2str([
165-
[('cn', 'äöüÄÖÜß', 4)],
175+
[('uid', 'test, 42', 1)],
176+
[('ou', 'Testing', 1)],
177+
[('dc', 'example', 1)],
178+
[('dc', 'com', 1)]
179+
], ldap.DN_FORMAT_LDAPV3),
180+
r'uid=test\2C 42,ou=Testing,dc=example,dc=com'
181+
)
182+
self.assertEqual(
183+
ldap.dn.dn2str([
184+
[('cn', 'äöüÄÖÜß', ldap.AVA_NONPRINTABLE)],
166185
[('dc', 'example', 1)],
167186
[('dc', 'com', 1)]
168187
]),
169188
'cn=äöüÄÖÜß,dc=example,dc=com'
170189
)
190+
self.assertEqual(
191+
ldap.dn.dn2str([
192+
[('cn', 'äöüÄÖÜß', ldap.AVA_NONPRINTABLE)],
193+
[('dc', 'example', 1)],
194+
[('dc', 'com', 1)]
195+
], ldap.DN_FORMAT_LDAPV3),
196+
r'cn=\C3\A4\C3\B6\C3\BC\C3\84\C3\96\C3\9C\C3\9F,dc=example,dc=com'
197+
)
198+
self.assertEqual(
199+
ldap.dn.dn2str([
200+
[('uid', 'test42', 1), ('cn', 'test42', 1)],
201+
[('ou', 'Testing', 1)],
202+
[('dc', 'example', 1)],
203+
[('dc', 'com', 1)]
204+
], ldap.DN_FORMAT_AD_CANONICAL),
205+
'example.com/Testing/test42,test42'
206+
)
207+
self.assertEqual(
208+
ldap.dn.dn2str([
209+
[('uid', 'test42', 1), ('cn', 'test42', 1)],
210+
[('ou', 'Testing', 1)],
211+
[('dc', 'example', 1)],
212+
[('dc', 'com', 1)]
213+
], ldap.DN_FORMAT_UFN),
214+
'test42 + test42, Testing, example.com'
215+
)
216+
self.assertEqual(
217+
ldap.dn.dn2str([
218+
[('uid', 'test42', 1), ('cn', 'test42', 1)],
219+
[('ou', 'Testing', 1)],
220+
[('dc', 'example', 1)],
221+
[('dc', 'com', 1)]
222+
], ldap.DN_FORMAT_DCE),
223+
'/dc=com/dc=example/ou=Testing/uid=test42,cn=test42'
224+
)
225+
226+
self.assertEqual(
227+
ldap.dn.dn2str([
228+
[('cn', 'äöüÄÖÜß', ldap.AVA_BINARY)],
229+
[('dc', 'example', 1)],
230+
[('dc', 'com', 1)]
231+
], ldap.DN_FORMAT_LDAPV3),
232+
'cn=#C3A4C3B6C3BCC384C396C39CC39F,dc=example,dc=com'
233+
)
234+
self.assertEqual(
235+
ldap.dn.dn2str([
236+
[('cn', 'äöüÄÖÜß', ldap.AVA_NULL)],
237+
[('dc', 'example', 1)],
238+
[('dc', 'com', 1)]
239+
], ldap.DN_FORMAT_LDAPV3),
240+
r'cn=\C3\A4\C3\B6\C3\BC\C3\84\C3\96\C3\9C\C3\9F,dc=example,dc=com'
241+
)
242+
self.assertEqual(
243+
ldap.dn.dn2str([
244+
[('cn', 'äöüÄÖÜß', ldap.AVA_STRING)],
245+
[('dc', 'example', 1)],
246+
[('dc', 'com', 1)]
247+
], ldap.DN_FORMAT_LDAPV3),
248+
r'cn=\C3\A4\C3\B6\C3\BC\C3\84\C3\96\C3\9C\C3\9F,dc=example,dc=com'
249+
)
250+
self.assertEqual(
251+
ldap.dn.dn2str([
252+
[('cn', 'äöüÄÖÜß', ldap.AVA_NONPRINTABLE)],
253+
[('dc', 'example', 1)],
254+
[('dc', 'com', 1)]
255+
], ldap.DN_FORMAT_LDAPV3),
256+
r'cn=\C3\A4\C3\B6\C3\BC\C3\84\C3\96\C3\9C\C3\9F,dc=example,dc=com'
257+
)
258+
259+
def test_dn_various_lengths(self):
260+
base = [
261+
[('dc', 'example', 1)],
262+
[('dc', 'com', 1)]
263+
]
264+
265+
test_lengths = [1, 10, 100, 500]
266+
for n in test_lengths:
267+
rdn_prefix = [
268+
[('ou', f'unit{i}', 1)] for i in range(n)
269+
]
270+
full_dn = rdn_prefix + base
271+
full_dn.insert(0, [('uid', f'user{n}', 1)])
272+
273+
result = ldap.dn.dn2str(full_dn, ldap.DN_FORMAT_LDAPV3)
274+
275+
self.assertTrue(result.startswith(f'uid=user{n},'))
276+
self.assertTrue(result.endswith(',dc=example,dc=com'))
277+
self.assertEqual(result.count(','), n + 2)
278+
279+
def test_dn2str_errors(self):
280+
"""
281+
test error handling of function dn2str()
282+
"""
283+
with self.assertRaises(RuntimeError):
284+
ldap.dn.dn2str([[('uid', 'test42', 1)]], 142)
285+
286+
DN_FORMAT_LBER = 0xf0
287+
with self.assertRaises(RuntimeError):
288+
ldap.dn.dn2str([
289+
[('dc', 'com', 1)]
290+
], DN_FORMAT_LBER)
291+
292+
ldap_format = ldap.DN_FORMAT_LDAPV3
293+
294+
with self.assertRaises(TypeError):
295+
ldap.dn.dn2str(None)
296+
297+
with self.assertRaises(TypeError):
298+
ldap.dn.dn2str(None, ldap_format)
299+
300+
with self.assertRaises(TypeError):
301+
ldap.dn.dn2str([1], ldap_format)
302+
303+
with self.assertRaises(TypeError):
304+
ldap.dn.dn2str([[1]], ldap_format)
305+
306+
with self.assertRaises(TypeError):
307+
ldap.dn.dn2str([[('uid', 'test42', '1')]], ldap_format)
308+
309+
with self.assertRaises(TypeError):
310+
ldap.dn.dn2str([[('uid', 'test42', 1.0)]], ldap_format)
311+
312+
with self.assertRaises(TypeError):
313+
ldap.dn.dn2str([[['uid', 'test42', 1]]], ldap_format)
314+
315+
with self.assertRaises(TypeError):
316+
ldap.dn.dn2str([
317+
[('uid', 'test42', 1), ('cn', 'test42', 1)],
318+
[('ou', 'Testing', 1)],
319+
[('dc', 'example', '1')],
320+
[('dc', 'com', 1)]
321+
], ldap_format),
322+
323+
with self.assertRaises(TypeError):
324+
ldap.dn.dn2str([
325+
[('ou', 'Testing', 1)],
326+
[('dc', 'example', 1)],
327+
[('uid', 'test42', 1), ('cn', 'test42', '1')],
328+
[('dc', 'com', 1)]
329+
], ldap_format),
330+
331+
with self.assertRaises(TypeError):
332+
ldap.dn.dn2str([
333+
[('dc', 'example', 1)],
334+
[('dc', 'com', None)],
335+
], ldap_format),
336+
337+
with self.assertRaises(TypeError):
338+
ldap.dn.dn2str([
339+
[('dc', 'example', 1)],
340+
[('dc', None, 1)],
341+
], ldap_format),
342+
343+
with self.assertRaises(TypeError):
344+
ldap.dn.dn2str([
345+
[('dc', 'example', 1)],
346+
[(None, 'com', 1)],
347+
], ldap_format),
348+
349+
with self.assertRaises(TypeError):
350+
ldap.dn.dn2str([
351+
[('dc', 'example', 1)],
352+
[None],
353+
], ldap_format),
354+
355+
with self.assertRaises(TypeError):
356+
ldap.dn.dn2str([
357+
[('dc', 'example', 1)],
358+
None,
359+
], ldap_format),
360+
361+
with self.assertRaises(TypeError):
362+
ldap.dn.dn2str([
363+
[('dc', 'example', 1)],
364+
[('dc', 'com', 1), None],
365+
], ldap_format),
171366

172367
def test_explode_dn(self):
173368
"""

0 commit comments

Comments
 (0)