1require 'test/unit'
2require 'uri/ldap'
3
4module URI
5
6
7class TestLDAP < Test::Unit::TestCase
8  def setup
9  end
10
11  def teardown
12  end
13
14  def uri_to_ary(uri)
15    uri.class.component.collect {|c| uri.send(c)}
16  end
17
18  def test_parse
19    url = 'ldap://ldap.jaist.ac.jp/o=JAIST,c=JP?sn?base?(sn=ttate*)'
20    u = URI.parse(url)
21    assert_kind_of(URI::LDAP, u)
22    assert_equal(url, u.to_s)
23    assert_equal('o=JAIST,c=JP', u.dn)
24    assert_equal('sn', u.attributes)
25    assert_equal('base', u.scope)
26    assert_equal('(sn=ttate*)', u.filter)
27    assert_equal(nil, u.extensions)
28
29    u.scope = URI::LDAP::SCOPE_SUB
30    u.attributes = 'sn,cn,mail'
31    assert_equal('ldap://ldap.jaist.ac.jp/o=JAIST,c=JP?sn,cn,mail?sub?(sn=ttate*)', u.to_s)
32    assert_equal('o=JAIST,c=JP', u.dn)
33    assert_equal('sn,cn,mail', u.attributes)
34    assert_equal('sub', u.scope)
35    assert_equal('(sn=ttate*)', u.filter)
36    assert_equal(nil, u.extensions)
37
38    # from RFC2255, section 6.
39    {
40      'ldap:///o=University%20of%20Michigan,c=US' =>
41      ['ldap', nil, URI::LDAP::DEFAULT_PORT,
42	'o=University%20of%20Michigan,c=US',
43	nil, nil, nil, nil],
44
45      'ldap://ldap.itd.umich.edu/o=University%20of%20Michigan,c=US' =>
46      ['ldap', 'ldap.itd.umich.edu', URI::LDAP::DEFAULT_PORT,
47	'o=University%20of%20Michigan,c=US',
48	nil, nil, nil, nil],
49
50      'ldap://ldap.itd.umich.edu/o=University%20of%20Michigan,c=US?postalAddress' =>
51      ['ldap', 'ldap.itd.umich.edu', URI::LDAP::DEFAULT_PORT,
52	'o=University%20of%20Michigan,c=US',
53	'postalAddress', nil, nil, nil],
54
55      'ldap://host.com:6666/o=University%20of%20Michigan,c=US??sub?(cn=Babs%20Jensen)' =>
56      ['ldap', 'host.com', 6666,
57	'o=University%20of%20Michigan,c=US',
58	nil, 'sub', '(cn=Babs%20Jensen)', nil],
59
60      'ldap://ldap.itd.umich.edu/c=GB?objectClass?one' =>
61      ['ldap', 'ldap.itd.umich.edu', URI::LDAP::DEFAULT_PORT,
62	'c=GB',
63	'objectClass', 'one', nil, nil],
64
65      'ldap://ldap.question.com/o=Question%3f,c=US?mail' =>
66      ['ldap', 'ldap.question.com', URI::LDAP::DEFAULT_PORT,
67	'o=Question%3f,c=US',
68	'mail', nil, nil, nil],
69
70      'ldap://ldap.netscape.com/o=Babsco,c=US??(int=%5c00%5c00%5c00%5c04)' =>
71      ['ldap', 'ldap.netscape.com', URI::LDAP::DEFAULT_PORT,
72	'o=Babsco,c=US',
73	nil, '(int=%5c00%5c00%5c00%5c04)', nil, nil],
74
75      'ldap:///??sub??bindname=cn=Manager%2co=Foo' =>
76      ['ldap', nil, URI::LDAP::DEFAULT_PORT,
77	'',
78	nil, 'sub', nil, 'bindname=cn=Manager%2co=Foo'],
79
80      'ldap:///??sub??!bindname=cn=Manager%2co=Foo' =>
81      ['ldap', nil, URI::LDAP::DEFAULT_PORT,
82	'',
83	nil, 'sub', nil, '!bindname=cn=Manager%2co=Foo'],
84    }.each do |url2, ary|
85      u = URI.parse(url2)
86      assert_equal(ary, uri_to_ary(u))
87    end
88  end
89
90  def test_select
91    u = URI.parse('ldap:///??sub??!bindname=cn=Manager%2co=Foo')
92    assert_equal(uri_to_ary(u), u.select(*u.component))
93    assert_raise(ArgumentError) do
94      u.select(:scheme, :host, :not_exist, :port)
95    end
96  end
97end
98
99
100end
101