net-ldap 0.15.0 → 0.19.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. checksums.yaml +5 -5
  2. data/History.rdoc +76 -0
  3. data/README.rdoc +18 -8
  4. data/lib/net/ber/ber_parser.rb +3 -3
  5. data/lib/net/ber/core_ext.rb +6 -6
  6. data/lib/net/ber.rb +5 -6
  7. data/lib/net/ldap/auth_adapter/gss_spnego.rb +2 -2
  8. data/lib/net/ldap/auth_adapter/sasl.rb +4 -2
  9. data/lib/net/ldap/auth_adapter/simple.rb +1 -1
  10. data/lib/net/ldap/connection.rb +57 -46
  11. data/lib/net/ldap/dataset.rb +1 -3
  12. data/lib/net/ldap/dn.rb +21 -30
  13. data/lib/net/ldap/entry.rb +15 -7
  14. data/lib/net/ldap/error.rb +2 -26
  15. data/lib/net/ldap/filter.rb +10 -3
  16. data/lib/net/ldap/instrumentation.rb +2 -2
  17. data/lib/net/ldap/password.rb +7 -5
  18. data/lib/net/ldap/pdu.rb +1 -1
  19. data/lib/net/ldap/version.rb +1 -1
  20. data/lib/net/ldap.rb +93 -58
  21. data/lib/net/snmp.rb +1 -1
  22. data/lib/net-ldap.rb +1 -1
  23. metadata +16 -101
  24. data/.gitignore +0 -9
  25. data/.rubocop.yml +0 -17
  26. data/.rubocop_todo.yml +0 -599
  27. data/.travis.yml +0 -33
  28. data/CONTRIBUTING.md +0 -54
  29. data/Gemfile +0 -2
  30. data/Rakefile +0 -23
  31. data/net-ldap.gemspec +0 -37
  32. data/script/changelog +0 -47
  33. data/script/install-openldap +0 -115
  34. data/script/package +0 -7
  35. data/script/release +0 -16
  36. data/test/ber/core_ext/test_array.rb +0 -22
  37. data/test/ber/core_ext/test_string.rb +0 -25
  38. data/test/ber/test_ber.rb +0 -153
  39. data/test/fixtures/cacert.pem +0 -20
  40. data/test/fixtures/openldap/memberof.ldif +0 -33
  41. data/test/fixtures/openldap/retcode.ldif +0 -76
  42. data/test/fixtures/openldap/slapd.conf.ldif +0 -67
  43. data/test/fixtures/seed.ldif +0 -374
  44. data/test/integration/test_add.rb +0 -28
  45. data/test/integration/test_ber.rb +0 -30
  46. data/test/integration/test_bind.rb +0 -42
  47. data/test/integration/test_delete.rb +0 -31
  48. data/test/integration/test_open.rb +0 -88
  49. data/test/integration/test_password_modify.rb +0 -80
  50. data/test/integration/test_return_codes.rb +0 -38
  51. data/test/integration/test_search.rb +0 -77
  52. data/test/support/vm/openldap/.gitignore +0 -1
  53. data/test/support/vm/openldap/README.md +0 -32
  54. data/test/support/vm/openldap/Vagrantfile +0 -33
  55. data/test/test_auth_adapter.rb +0 -15
  56. data/test/test_dn.rb +0 -44
  57. data/test/test_entry.rb +0 -65
  58. data/test/test_filter.rb +0 -223
  59. data/test/test_filter_parser.rb +0 -24
  60. data/test/test_helper.rb +0 -66
  61. data/test/test_ldap.rb +0 -114
  62. data/test/test_ldap_connection.rb +0 -493
  63. data/test/test_ldif.rb +0 -104
  64. data/test/test_password.rb +0 -10
  65. data/test/test_rename.rb +0 -77
  66. data/test/test_search.rb +0 -39
  67. data/test/test_snmp.rb +0 -119
  68. data/test/test_ssl_ber.rb +0 -40
  69. data/test/testdata.ldif +0 -101
  70. data/testserver/ldapserver.rb +0 -209
  71. data/testserver/testdata.ldif +0 -101
@@ -1,38 +0,0 @@
1
- require_relative '../test_helper'
2
-
3
- # NOTE: These tests depend on the OpenLDAP retcode overlay.
4
- # See: section 12.12 http://www.openldap.org/doc/admin24/overlays.html
5
-
6
- class TestReturnCodeIntegration < LDAPIntegrationTestCase
7
- def test_operations_error
8
- refute @ldap.search(filter: "cn=operationsError", base: "ou=Retcodes,dc=rubyldap,dc=com")
9
- assert result = @ldap.get_operation_result
10
-
11
- assert_equal Net::LDAP::ResultCodeOperationsError, result.code
12
- assert_equal Net::LDAP::ResultStrings[Net::LDAP::ResultCodeOperationsError], result.message
13
- end
14
-
15
- def test_protocol_error
16
- refute @ldap.search(filter: "cn=protocolError", base: "ou=Retcodes,dc=rubyldap,dc=com")
17
- assert result = @ldap.get_operation_result
18
-
19
- assert_equal Net::LDAP::ResultCodeProtocolError, result.code
20
- assert_equal Net::LDAP::ResultStrings[Net::LDAP::ResultCodeProtocolError], result.message
21
- end
22
-
23
- def test_time_limit_exceeded
24
- assert @ldap.search(filter: "cn=timeLimitExceeded", base: "ou=Retcodes,dc=rubyldap,dc=com")
25
- assert result = @ldap.get_operation_result
26
-
27
- assert_equal Net::LDAP::ResultCodeTimeLimitExceeded, result.code
28
- assert_equal Net::LDAP::ResultStrings[Net::LDAP::ResultCodeTimeLimitExceeded], result.message
29
- end
30
-
31
- def test_size_limit_exceeded
32
- assert @ldap.search(filter: "cn=sizeLimitExceeded", base: "ou=Retcodes,dc=rubyldap,dc=com")
33
- assert result = @ldap.get_operation_result
34
-
35
- assert_equal Net::LDAP::ResultCodeSizeLimitExceeded, result.code
36
- assert_equal Net::LDAP::ResultStrings[Net::LDAP::ResultCodeSizeLimitExceeded], result.message
37
- end
38
- end
@@ -1,77 +0,0 @@
1
- require_relative '../test_helper'
2
-
3
- class TestSearchIntegration < LDAPIntegrationTestCase
4
- def test_search
5
- entries = []
6
-
7
- result = @ldap.search(base: "dc=rubyldap,dc=com") do |entry|
8
- assert_kind_of Net::LDAP::Entry, entry
9
- entries << entry
10
- end
11
-
12
- refute entries.empty?
13
- assert_equal entries, result
14
- end
15
-
16
- def test_search_without_result
17
- entries = []
18
-
19
- result = @ldap.search(base: "dc=rubyldap,dc=com", return_result: false) do |entry|
20
- assert_kind_of Net::LDAP::Entry, entry
21
- entries << entry
22
- end
23
-
24
- assert result
25
- refute_equal entries, result
26
- end
27
-
28
- def test_search_filter_string
29
- entries = @ldap.search(base: "dc=rubyldap,dc=com", filter: "(uid=user1)")
30
- assert_equal 1, entries.size
31
- end
32
-
33
- def test_search_filter_object
34
- filter = Net::LDAP::Filter.eq("uid", "user1") | Net::LDAP::Filter.eq("uid", "user2")
35
- entries = @ldap.search(base: "dc=rubyldap,dc=com", filter: filter)
36
- assert_equal 2, entries.size
37
- end
38
-
39
- def test_search_constrained_attributes
40
- entry = @ldap.search(base: "uid=user1,ou=People,dc=rubyldap,dc=com", attributes: ["cn", "sn"]).first
41
- assert_equal [:cn, :dn, :sn], entry.attribute_names.sort # :dn is always included
42
- assert_empty entry[:mail]
43
- end
44
-
45
- def test_search_attributes_only
46
- entry = @ldap.search(base: "uid=user1,ou=People,dc=rubyldap,dc=com", attributes_only: true).first
47
-
48
- assert_empty entry[:cn], "unexpected attribute value: #{entry[:cn]}"
49
- end
50
-
51
- def test_search_timeout
52
- entries = []
53
- events = @service.subscribe "search.net_ldap_connection"
54
-
55
- result = @ldap.search(base: "dc=rubyldap,dc=com", time: 5) do |entry|
56
- assert_kind_of Net::LDAP::Entry, entry
57
- entries << entry
58
- end
59
-
60
- payload, = events.pop
61
- assert_equal 5, payload[:time]
62
- assert_equal entries, result
63
- end
64
-
65
- # http://tools.ietf.org/html/rfc4511#section-4.5.1.4
66
- def test_search_with_size
67
- entries = []
68
-
69
- result = @ldap.search(base: "dc=rubyldap,dc=com", size: 1) do |entry|
70
- assert_kind_of Net::LDAP::Entry, entry
71
- entries << entry
72
- end
73
-
74
- assert_equal 1, result.size
75
- assert_equal entries, result
76
- end
77
- end
@@ -1 +0,0 @@
1
- /.vagrant
@@ -1,32 +0,0 @@
1
- # Local OpenLDAP Integration Testing
2
-
3
- Set up a [Vagrant](http://www.vagrantup.com/) VM to run integration tests against OpenLDAP locally.
4
-
5
- To run integration tests locally:
6
-
7
- ``` bash
8
- # start VM (from the correct directory)
9
- $ cd test/support/vm/openldap/
10
- $ vagrant up
11
-
12
- # get the IP address of the VM
13
- $ ip=$(vagrant ssh -- "ifconfig eth1 | grep -o -E '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' | head -n1")
14
-
15
- # change back to root project directory
16
- $ cd ../../../..
17
-
18
- # run all tests, including integration tests
19
- $ time INTEGRATION=openldap INTEGRATION_HOST=$ip bundle exec rake
20
-
21
- # run a specific integration test file
22
- $ time INTEGRATION=openldap INTEGRATION_HOST=$ip bundle exec ruby test/integration/test_search.rb
23
-
24
- # run integration tests by default
25
- $ export INTEGRATION=openldap
26
- $ export INTEGRATION_HOST=$ip
27
-
28
- # now run tests without having to set ENV variables
29
- $ time bundle exec rake
30
- ```
31
-
32
- You may need to `gem install vagrant` first in order to provision the VM.
@@ -1,33 +0,0 @@
1
- # -*- mode: ruby -*-
2
- # vi: set ft=ruby :
3
-
4
- # Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
5
- VAGRANTFILE_API_VERSION = "2"
6
-
7
- Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
8
- config.vm.hostname = "rubyldap.com"
9
-
10
- config.vm.box = "hashicorp/precise64"
11
-
12
- config.vm.network "private_network", type: :dhcp
13
-
14
- config.ssh.forward_agent = true
15
-
16
- config.vm.provision "shell", inline: "apt-get update; exec env /vagrant_data/script/install-openldap"
17
-
18
- config.vm.synced_folder "../../../..", "/vagrant_data"
19
-
20
- config.vm.provider "vmware_fusion" do |vb, override|
21
- override.vm.box = "hashicorp/precise64"
22
- vb.memory = 4596
23
- vb.vmx["displayname"] = "integration tests vm"
24
- vb.vmx["numvcpus"] = "2"
25
- end
26
-
27
- config.vm.provider "virtualbox" do |vb, override|
28
- vb.memory = 4096
29
- vb.customize ["modifyvm", :id, "--nicpromisc2", "allow-all"]
30
- vb.customize ["modifyvm", :id, "--chipset", "ich9"]
31
- vb.customize ["modifyvm", :id, "--vram", "16"]
32
- end
33
- end
@@ -1,15 +0,0 @@
1
- require 'test_helper'
2
-
3
- class TestAuthAdapter < Test::Unit::TestCase
4
- class FakeSocket
5
- def initialize(*args)
6
- end
7
- end
8
-
9
- def test_undefined_auth_adapter
10
- conn = Net::LDAP::Connection.new(host: 'ldap.example.com', port: 379, :socket_class => FakeSocket)
11
- assert_raise Net::LDAP::AuthMethodUnsupportedError, "Unsupported auth method (foo)" do
12
- conn.bind(method: :foo)
13
- end
14
- end
15
- end
data/test/test_dn.rb DELETED
@@ -1,44 +0,0 @@
1
- require_relative 'test_helper'
2
- require 'net/ldap/dn'
3
-
4
- class TestDN < Test::Unit::TestCase
5
- def test_escape
6
- assert_equal '\\,\\+\\"\\\\\\<\\>\\;', Net::LDAP::DN.escape(',+"\\<>;')
7
- end
8
-
9
- def test_escape_on_initialize
10
- dn = Net::LDAP::DN.new('cn', ',+"\\<>;', 'ou=company')
11
- assert_equal 'cn=\\,\\+\\"\\\\\\<\\>\\;,ou=company', dn.to_s
12
- end
13
-
14
- def test_to_a
15
- dn = Net::LDAP::DN.new('cn=James, ou=Company\\,\\20LLC')
16
- assert_equal ['cn', 'James', 'ou', 'Company, LLC'], dn.to_a
17
- end
18
-
19
- def test_to_a_parenthesis
20
- dn = Net::LDAP::DN.new('cn = \ James , ou = "Comp\28ny" ')
21
- assert_equal ['cn', ' James', 'ou', 'Comp(ny'], dn.to_a
22
- end
23
-
24
- def test_to_a_hash_symbol
25
- dn = Net::LDAP::DN.new('1.23.4= #A3B4D5 ,ou=Company')
26
- assert_equal ['1.23.4', '#A3B4D5', 'ou', 'Company'], dn.to_a
27
- end
28
-
29
- # TODO: raise a more specific exception than RuntimeError
30
- def test_bad_input_raises_error
31
- [
32
- 'cn=James,',
33
- 'cn=#aa aa',
34
- 'cn="James',
35
- 'cn=J\ames',
36
- 'cn=\\',
37
- '1.2.d=Value',
38
- 'd1.2=Value',
39
- ].each do |input|
40
- dn = Net::LDAP::DN.new(input)
41
- assert_raises(RuntimeError) { dn.to_a }
42
- end
43
- end
44
- end
data/test/test_entry.rb DELETED
@@ -1,65 +0,0 @@
1
- require_relative 'test_helper'
2
-
3
- class TestEntry < Test::Unit::TestCase
4
- def setup
5
- @entry = Net::LDAP::Entry.new 'cn=Barbara,o=corp'
6
- end
7
-
8
- def test_dn
9
- assert_equal 'cn=Barbara,o=corp', @entry.dn
10
- end
11
-
12
- def test_empty_array_when_accessing_nonexistent_attribute
13
- assert_equal [], @entry['sn']
14
- end
15
-
16
- def test_attribute_assignment
17
- @entry['sn'] = 'Jensen'
18
- assert_equal ['Jensen'], @entry['sn']
19
- assert_equal ['Jensen'], @entry.sn
20
- assert_equal ['Jensen'], @entry[:sn]
21
-
22
- @entry[:sn] = 'Jensen'
23
- assert_equal ['Jensen'], @entry['sn']
24
- assert_equal ['Jensen'], @entry.sn
25
- assert_equal ['Jensen'], @entry[:sn]
26
-
27
- @entry.sn = 'Jensen'
28
- assert_equal ['Jensen'], @entry['sn']
29
- assert_equal ['Jensen'], @entry.sn
30
- assert_equal ['Jensen'], @entry[:sn]
31
- end
32
-
33
- def test_case_insensitive_attribute_names
34
- @entry['sn'] = 'Jensen'
35
- assert_equal ['Jensen'], @entry.sn
36
- assert_equal ['Jensen'], @entry.Sn
37
- assert_equal ['Jensen'], @entry.SN
38
- assert_equal ['Jensen'], @entry['sn']
39
- assert_equal ['Jensen'], @entry['Sn']
40
- assert_equal ['Jensen'], @entry['SN']
41
- end
42
- end
43
-
44
- class TestEntryLDIF < Test::Unit::TestCase
45
- def setup
46
- @entry = Net::LDAP::Entry.from_single_ldif_string(
47
- %Q{dn: something
48
- foo: foo
49
- barAttribute: bar
50
- })
51
- end
52
-
53
- def test_attribute
54
- assert_equal ['foo'], @entry.foo
55
- assert_equal ['foo'], @entry.Foo
56
- end
57
-
58
- def test_modify_attribute
59
- @entry.foo = 'bar'
60
- assert_equal ['bar'], @entry.foo
61
-
62
- @entry.fOo= 'baz'
63
- assert_equal ['baz'], @entry.foo
64
- end
65
- end
data/test/test_filter.rb DELETED
@@ -1,223 +0,0 @@
1
- require_relative 'test_helper'
2
-
3
- class TestFilter < Test::Unit::TestCase
4
- Filter = Net::LDAP::Filter
5
-
6
- def test_bug_7534_rfc2254
7
- assert_equal("(cn=Tim Wizard)",
8
- Filter.from_rfc2254("(cn=Tim Wizard)").to_rfc2254)
9
- end
10
-
11
- def test_invalid_filter_string
12
- assert_raises(Net::LDAP::FilterSyntaxInvalidError) { Filter.from_rfc2254("") }
13
- end
14
-
15
- def test_invalid_filter
16
- assert_raises(Net::LDAP::OperatorError) do
17
- # This test exists to prove that our constructor blocks unknown filter
18
- # types. All filters must be constructed using helpers.
19
- Filter.__send__(:new, :xx, nil, nil)
20
- end
21
- end
22
-
23
- def test_to_s
24
- assert_equal("(uid=george *)", Filter.eq("uid", "george *").to_s)
25
- end
26
-
27
- def test_convenience_filters
28
- assert_equal("(uid=\\2A)", Filter.equals("uid", "*").to_s)
29
- assert_equal("(uid=\\28*)", Filter.begins("uid", "(").to_s)
30
- assert_equal("(uid=*\\29)", Filter.ends("uid", ")").to_s)
31
- assert_equal("(uid=*\\5C*)", Filter.contains("uid", "\\").to_s)
32
- end
33
-
34
- def test_c2
35
- assert_equal("(uid=george *)",
36
- Filter.from_rfc2254("uid=george *").to_rfc2254)
37
- assert_equal("(uid:=george *)",
38
- Filter.from_rfc2254("uid:=george *").to_rfc2254)
39
- assert_equal("(uid=george*)",
40
- Filter.from_rfc2254(" ( uid = george* ) ").to_rfc2254)
41
- assert_equal("(!(uid=george*))",
42
- Filter.from_rfc2254("uid!=george*").to_rfc2254)
43
- assert_equal("(uid<=george*)",
44
- Filter.from_rfc2254("uid <= george*").to_rfc2254)
45
- assert_equal("(uid>=george*)",
46
- Filter.from_rfc2254("uid>=george*").to_rfc2254)
47
- assert_equal("(&(uid=george*)(mail=*))",
48
- Filter.from_rfc2254("(& (uid=george* ) (mail=*))").to_rfc2254)
49
- assert_equal("(|(uid=george*)(mail=*))",
50
- Filter.from_rfc2254("(| (uid=george* ) (mail=*))").to_rfc2254)
51
- assert_equal("(!(mail=*))",
52
- Filter.from_rfc2254("(! (mail=*))").to_rfc2254)
53
- end
54
-
55
- def test_filter_with_single_clause
56
- assert_equal("(cn=name)", Net::LDAP::Filter.construct("(&(cn=name))").to_s)
57
- end
58
-
59
- def test_filters_from_ber
60
- [
61
- Net::LDAP::Filter.eq("objectclass", "*"),
62
- Net::LDAP::Filter.pres("objectclass"),
63
- Net::LDAP::Filter.eq("objectclass", "ou"),
64
- Net::LDAP::Filter.ge("uid", "500"),
65
- Net::LDAP::Filter.le("uid", "500"),
66
- (~ Net::LDAP::Filter.pres("objectclass")),
67
- (Net::LDAP::Filter.pres("objectclass") & Net::LDAP::Filter.pres("ou")),
68
- (Net::LDAP::Filter.pres("objectclass") & Net::LDAP::Filter.pres("ou") & Net::LDAP::Filter.pres("sn")),
69
- (Net::LDAP::Filter.pres("objectclass") | Net::LDAP::Filter.pres("ou") | Net::LDAP::Filter.pres("sn")),
70
-
71
- Net::LDAP::Filter.eq("objectclass", "*aaa"),
72
- Net::LDAP::Filter.eq("objectclass", "*aaa*bbb"),
73
- Net::LDAP::Filter.eq("objectclass", "*aaa*bbb*ccc"),
74
- Net::LDAP::Filter.eq("objectclass", "aaa*bbb"),
75
- Net::LDAP::Filter.eq("objectclass", "aaa*bbb*ccc"),
76
- Net::LDAP::Filter.eq("objectclass", "abc*def*1111*22*g"),
77
- Net::LDAP::Filter.eq("objectclass", "*aaa*"),
78
- Net::LDAP::Filter.eq("objectclass", "*aaa*bbb*"),
79
- Net::LDAP::Filter.eq("objectclass", "*aaa*bbb*ccc*"),
80
- Net::LDAP::Filter.eq("objectclass", "aaa*"),
81
- Net::LDAP::Filter.eq("objectclass", "aaa*bbb*"),
82
- Net::LDAP::Filter.eq("objectclass", "aaa*bbb*ccc*"),
83
- ].each do |ber|
84
- f = Net::LDAP::Filter.parse_ber(ber.to_ber.read_ber(Net::LDAP::AsnSyntax))
85
- assert(f == ber)
86
- assert_equal(f.to_ber, ber.to_ber)
87
- end
88
- end
89
-
90
- def test_ber_from_rfc2254_filter
91
- [
92
- Net::LDAP::Filter.construct("objectclass=*"),
93
- Net::LDAP::Filter.construct("objectclass=ou"),
94
- Net::LDAP::Filter.construct("uid >= 500"),
95
- Net::LDAP::Filter.construct("uid <= 500"),
96
- Net::LDAP::Filter.construct("(!(uid=*))"),
97
- Net::LDAP::Filter.construct("(&(uid=*)(objectclass=*))"),
98
- Net::LDAP::Filter.construct("(&(uid=*)(objectclass=*)(sn=*))"),
99
- Net::LDAP::Filter.construct("(|(uid=*)(objectclass=*))"),
100
- Net::LDAP::Filter.construct("(|(uid=*)(objectclass=*)(sn=*))"),
101
-
102
- Net::LDAP::Filter.construct("objectclass=*aaa"),
103
- Net::LDAP::Filter.construct("objectclass=*aaa*bbb"),
104
- Net::LDAP::Filter.construct("objectclass=*aaa bbb"),
105
- Net::LDAP::Filter.construct("objectclass=*aaa bbb"),
106
- Net::LDAP::Filter.construct("objectclass=*aaa*bbb*ccc"),
107
- Net::LDAP::Filter.construct("objectclass=aaa*bbb"),
108
- Net::LDAP::Filter.construct("objectclass=aaa*bbb*ccc"),
109
- Net::LDAP::Filter.construct("objectclass=abc*def*1111*22*g"),
110
- Net::LDAP::Filter.construct("objectclass=*aaa*"),
111
- Net::LDAP::Filter.construct("objectclass=*aaa*bbb*"),
112
- Net::LDAP::Filter.construct("objectclass=*aaa*bbb*ccc*"),
113
- Net::LDAP::Filter.construct("objectclass=aaa*"),
114
- Net::LDAP::Filter.construct("objectclass=aaa*bbb*"),
115
- Net::LDAP::Filter.construct("objectclass=aaa*bbb*ccc*"),
116
- ].each do |ber|
117
- f = Net::LDAP::Filter.parse_ber(ber.to_ber.read_ber(Net::LDAP::AsnSyntax))
118
- assert(f == ber)
119
- assert_equal(f.to_ber, ber.to_ber)
120
- end
121
- end
122
- end
123
-
124
- # tests ported over from rspec. Not sure if these overlap with the above
125
- # https://github.com/ruby-ldap/ruby-net-ldap/pull/121
126
- class TestFilterRSpec < Test::Unit::TestCase
127
- def test_ex_convert
128
- assert_equal '(foo:=bar)', Net::LDAP::Filter.ex('foo', 'bar').to_s
129
- end
130
-
131
- def test_ex_rfc2254_roundtrip
132
- filter = Net::LDAP::Filter.ex('foo', 'bar')
133
- assert_equal filter, Net::LDAP::Filter.from_rfc2254(filter.to_s)
134
- end
135
-
136
- def test_ber_conversion
137
- filter = Net::LDAP::Filter.ex('foo', 'bar')
138
- ber = filter.to_ber
139
- assert_equal filter, Net::LDAP::Filter.parse_ber(ber.read_ber(Net::LDAP::AsnSyntax))
140
- end
141
-
142
- [
143
- '(o:dn:=Ace Industry)',
144
- '(:dn:2.4.8.10:=Dino)',
145
- '(cn:dn:1.2.3.4.5:=John Smith)',
146
- '(sn:dn:2.4.6.8.10:=Barbara Jones)',
147
- '(&(sn:dn:2.4.6.8.10:=Barbara Jones))',
148
- ].each_with_index do |filter_str, index|
149
- define_method "test_decode_filter_#{index}" do
150
- filter = Net::LDAP::Filter.from_rfc2254(filter_str)
151
- assert_kind_of Net::LDAP::Filter, filter
152
- end
153
-
154
- define_method "test_ber_conversion_#{index}" do
155
- filter = Net::LDAP::Filter.from_rfc2254(filter_str)
156
- ber = Net::LDAP::Filter.from_rfc2254(filter_str).to_ber
157
- assert_equal filter, Net::LDAP::Filter.parse_ber(ber.read_ber(Net::LDAP::AsnSyntax))
158
- end
159
- end
160
-
161
- def test_apostrophes
162
- assert_equal "(uid=O'Keefe)", Net::LDAP::Filter.construct("uid=O'Keefe").to_rfc2254
163
- end
164
-
165
- def test_equals
166
- assert_equal Net::LDAP::Filter.eq('dn', 'f\2Aoo'), Net::LDAP::Filter.equals('dn', 'f*oo')
167
- end
168
-
169
- def test_begins
170
- assert_equal Net::LDAP::Filter.eq('dn', 'f\2Aoo*'), Net::LDAP::Filter.begins('dn', 'f*oo')
171
- end
172
-
173
- def test_ends
174
- assert_equal Net::LDAP::Filter.eq('dn', '*f\2Aoo'), Net::LDAP::Filter.ends('dn', 'f*oo')
175
- end
176
-
177
- def test_contains
178
- assert_equal Net::LDAP::Filter.eq('dn', '*f\2Aoo*'), Net::LDAP::Filter.contains('dn', 'f*oo')
179
- end
180
-
181
- def test_escape
182
- # escapes nul, *, (, ) and \\
183
- assert_equal "\\00\\2A\\28\\29\\5C", Net::LDAP::Filter.escape("\0*()\\")
184
- end
185
-
186
- def test_well_known_ber_string
187
- ber = "\xa4\x2d" \
188
- "\x04\x0b" "objectclass" \
189
- "\x30\x1e" \
190
- "\x80\x08" "foo" "*\\" "bar" \
191
- "\x81\x08" "foo" "*\\" "bar" \
192
- "\x82\x08" "foo" "*\\" "bar".b
193
-
194
- [
195
- "foo" "\\2A\\5C" "bar",
196
- "foo" "\\2a\\5c" "bar",
197
- "foo" "\\2A\\5c" "bar",
198
- "foo" "\\2a\\5C" "bar",
199
- ].each do |escaped|
200
- # unescapes escaped characters
201
- filter = Net::LDAP::Filter.eq("objectclass", "#{escaped}*#{escaped}*#{escaped}")
202
- assert_equal ber, filter.to_ber
203
- end
204
- end
205
-
206
- def test_parse_ber_escapes_characters
207
- ber = "\xa4\x2d" \
208
- "\x04\x0b" "objectclass" \
209
- "\x30\x1e" \
210
- "\x80\x08" "foo" "*\\" "bar" \
211
- "\x81\x08" "foo" "*\\" "bar" \
212
- "\x82\x08" "foo" "*\\" "bar".b
213
-
214
- escaped = Net::LDAP::Filter.escape("foo" "*\\" "bar")
215
- filter = Net::LDAP::Filter.parse_ber(ber.read_ber(Net::LDAP::AsnSyntax))
216
- assert_equal "(objectclass=#{escaped}*#{escaped}*#{escaped})", filter.to_s
217
- end
218
-
219
- def test_unescape_fixnums
220
- filter = Net::LDAP::Filter.eq("objectclass", 3)
221
- assert_equal "\xA3\x10\x04\vobjectclass\x04\x013".b, filter.to_ber
222
- end
223
- end
@@ -1,24 +0,0 @@
1
- # encoding: utf-8
2
- require_relative 'test_helper'
3
-
4
- class TestFilterParser < Test::Unit::TestCase
5
- def test_ascii
6
- assert_kind_of Net::LDAP::Filter, Net::LDAP::Filter::FilterParser.parse("(cn=name)")
7
- end
8
-
9
- def test_multibyte_characters
10
- assert_kind_of Net::LDAP::Filter, Net::LDAP::Filter::FilterParser.parse("(cn=名前)")
11
- end
12
-
13
- def test_brackets
14
- assert_kind_of Net::LDAP::Filter, Net::LDAP::Filter::FilterParser.parse("(cn=[{something}])")
15
- end
16
-
17
- def test_slash
18
- assert_kind_of Net::LDAP::Filter, Net::LDAP::Filter::FilterParser.parse("(departmentNumber=FOO//BAR/FOO)")
19
- end
20
-
21
- def test_colons
22
- assert_kind_of Net::LDAP::Filter, Net::LDAP::Filter::FilterParser.parse("(ismemberof=cn=edu:berkeley:app:calmessages:deans,ou=campus groups,dc=berkeley,dc=edu)")
23
- end
24
- end
data/test/test_helper.rb DELETED
@@ -1,66 +0,0 @@
1
- # Add 'lib' to load path.
2
- require 'test/unit'
3
- require 'net/ldap'
4
- require 'flexmock/test_unit'
5
-
6
- # Whether integration tests should be run.
7
- INTEGRATION = ENV.fetch("INTEGRATION", "skip") != "skip"
8
-
9
- # The CA file to verify certs against for tests.
10
- # Override with CA_FILE env variable; otherwise checks for the VM-specific path
11
- # and falls back to the test/fixtures/cacert.pem for local testing.
12
- CA_FILE =
13
- ENV.fetch("CA_FILE") do
14
- if File.exist?("/etc/ssl/certs/cacert.pem")
15
- "/etc/ssl/certs/cacert.pem"
16
- else
17
- File.expand_path("fixtures/cacert.pem", File.dirname(__FILE__))
18
- end
19
- end
20
-
21
- if RUBY_VERSION < "2.0"
22
- class String
23
- def b
24
- self
25
- end
26
- end
27
- end
28
-
29
- class MockInstrumentationService
30
- def initialize
31
- @events = {}
32
- end
33
-
34
- def instrument(event, payload)
35
- result = yield(payload)
36
- @events[event] ||= []
37
- @events[event] << [payload, result]
38
- result
39
- end
40
-
41
- def subscribe(event)
42
- @events[event] ||= []
43
- @events[event]
44
- end
45
- end
46
-
47
- class LDAPIntegrationTestCase < Test::Unit::TestCase
48
- # If integration tests aren't enabled, noop these tests.
49
- if !INTEGRATION
50
- def run(*)
51
- self
52
- end
53
- end
54
-
55
- def setup
56
- @service = MockInstrumentationService.new
57
- @ldap = Net::LDAP.new \
58
- host: ENV.fetch('INTEGRATION_HOST', 'localhost'),
59
- port: ENV.fetch('INTEGRATION_PORT', 389),
60
- admin_user: 'uid=admin,dc=rubyldap,dc=com',
61
- admin_password: 'passworD1',
62
- search_domains: %w(dc=rubyldap,dc=com),
63
- uid: 'uid',
64
- instrumentation_service: @service
65
- end
66
- end