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