net-ldap 0.16.0 → 0.17.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.
- checksums.yaml +5 -5
- data/History.rdoc +47 -0
- data/README.rdoc +18 -6
- data/lib/net/ber/core_ext.rb +6 -6
- data/lib/net/ber.rb +2 -2
- data/lib/net/ldap/auth_adapter/gss_spnego.rb +2 -2
- data/lib/net/ldap/auth_adapter/sasl.rb +1 -1
- data/lib/net/ldap/auth_adapter/simple.rb +1 -1
- data/lib/net/ldap/connection.rb +14 -10
- data/lib/net/ldap/dataset.rb +3 -3
- data/lib/net/ldap/dn.rb +10 -10
- data/lib/net/ldap/entry.rb +13 -2
- data/lib/net/ldap/error.rb +2 -26
- data/lib/net/ldap/filter.rb +10 -3
- data/lib/net/ldap/instrumentation.rb +2 -2
- data/lib/net/ldap/password.rb +7 -5
- data/lib/net/ldap/pdu.rb +1 -1
- data/lib/net/ldap/version.rb +1 -1
- data/lib/net/ldap.rb +39 -16
- data/lib/net/snmp.rb +1 -1
- data/lib/net-ldap.rb +1 -1
- metadata +19 -109
- data/.gitignore +0 -9
- data/.rubocop.yml +0 -20
- data/.rubocop_todo.yml +0 -753
- data/.travis.yml +0 -33
- data/CONTRIBUTING.md +0 -54
- data/Gemfile +0 -2
- data/Rakefile +0 -23
- data/net-ldap.gemspec +0 -37
- data/script/changelog +0 -47
- data/script/generate-fixture-ca +0 -48
- data/script/install-openldap +0 -134
- data/script/package +0 -7
- data/script/release +0 -16
- data/test/ber/core_ext/test_array.rb +0 -22
- data/test/ber/core_ext/test_string.rb +0 -25
- data/test/ber/test_ber.rb +0 -153
- data/test/fixtures/ca/ca.info +0 -4
- data/test/fixtures/ca/cacert.pem +0 -24
- data/test/fixtures/ca/cakey.pem +0 -190
- data/test/fixtures/openldap/memberof.ldif +0 -33
- data/test/fixtures/openldap/retcode.ldif +0 -76
- data/test/fixtures/openldap/slapd.conf.ldif +0 -67
- data/test/fixtures/seed.ldif +0 -374
- data/test/integration/test_add.rb +0 -28
- data/test/integration/test_ber.rb +0 -30
- data/test/integration/test_bind.rb +0 -244
- data/test/integration/test_delete.rb +0 -31
- data/test/integration/test_open.rb +0 -88
- data/test/integration/test_password_modify.rb +0 -80
- data/test/integration/test_return_codes.rb +0 -38
- data/test/integration/test_search.rb +0 -77
- data/test/support/vm/openldap/.gitignore +0 -1
- data/test/support/vm/openldap/README.md +0 -64
- data/test/support/vm/openldap/Vagrantfile +0 -34
- data/test/test_auth_adapter.rb +0 -15
- data/test/test_dn.rb +0 -44
- data/test/test_entry.rb +0 -65
- data/test/test_filter.rb +0 -223
- data/test/test_filter_parser.rb +0 -24
- data/test/test_helper.rb +0 -74
- data/test/test_ldap.rb +0 -114
- data/test/test_ldap_connection.rb +0 -491
- data/test/test_ldif.rb +0 -104
- data/test/test_password.rb +0 -10
- data/test/test_rename.rb +0 -77
- data/test/test_search.rb +0 -39
- data/test/test_snmp.rb +0 -119
- data/test/test_ssl_ber.rb +0 -40
- data/test/testdata.ldif +0 -101
- data/testserver/ldapserver.rb +0 -209
- data/testserver/testdata.ldif +0 -101
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
|
data/test/test_filter_parser.rb
DELETED
@@ -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,74 +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/ca/cacert.pem", File.dirname(__FILE__))
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
BIND_CREDS = {
|
22
|
-
method: :simple,
|
23
|
-
username: "uid=user1,ou=People,dc=rubyldap,dc=com",
|
24
|
-
password: "passworD1",
|
25
|
-
}.freeze
|
26
|
-
|
27
|
-
TLS_OPTS = OpenSSL::SSL::SSLContext::DEFAULT_PARAMS.merge({}).freeze
|
28
|
-
|
29
|
-
if RUBY_VERSION < "2.0"
|
30
|
-
class String
|
31
|
-
def b
|
32
|
-
self
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
class MockInstrumentationService
|
38
|
-
def initialize
|
39
|
-
@events = {}
|
40
|
-
end
|
41
|
-
|
42
|
-
def instrument(event, payload)
|
43
|
-
result = yield(payload)
|
44
|
-
@events[event] ||= []
|
45
|
-
@events[event] << [payload, result]
|
46
|
-
result
|
47
|
-
end
|
48
|
-
|
49
|
-
def subscribe(event)
|
50
|
-
@events[event] ||= []
|
51
|
-
@events[event]
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
class LDAPIntegrationTestCase < Test::Unit::TestCase
|
56
|
-
# If integration tests aren't enabled, noop these tests.
|
57
|
-
if !INTEGRATION
|
58
|
-
def run(*)
|
59
|
-
self
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
def setup
|
64
|
-
@service = MockInstrumentationService.new
|
65
|
-
@ldap = Net::LDAP.new \
|
66
|
-
host: ENV.fetch('INTEGRATION_HOST', 'localhost'),
|
67
|
-
port: ENV.fetch('INTEGRATION_PORT', 389),
|
68
|
-
admin_user: 'uid=admin,dc=rubyldap,dc=com',
|
69
|
-
admin_password: 'passworD1',
|
70
|
-
search_domains: %w(dc=rubyldap,dc=com),
|
71
|
-
uid: 'uid',
|
72
|
-
instrumentation_service: @service
|
73
|
-
end
|
74
|
-
end
|
data/test/test_ldap.rb
DELETED
@@ -1,114 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
class TestLDAPInstrumentation < Test::Unit::TestCase
|
4
|
-
# Fake Net::LDAP::Connection for testing
|
5
|
-
class FakeConnection
|
6
|
-
# It's difficult to instantiate Net::LDAP::PDU objects. Faking out what we
|
7
|
-
# need here until that object is brought under test and has it's constructor
|
8
|
-
# cleaned up.
|
9
|
-
class Result < Struct.new(:success?, :result_code); end
|
10
|
-
|
11
|
-
def initialize
|
12
|
-
@bind_success = Result.new(true, Net::LDAP::ResultCodeSuccess)
|
13
|
-
@search_success = Result.new(true, Net::LDAP::ResultCodeSizeLimitExceeded)
|
14
|
-
end
|
15
|
-
|
16
|
-
def bind(args = {})
|
17
|
-
@bind_success
|
18
|
-
end
|
19
|
-
|
20
|
-
def search(*args)
|
21
|
-
yield @search_success if block_given?
|
22
|
-
@search_success
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
def setup
|
27
|
-
@connection = flexmock(:connection, :close => true)
|
28
|
-
flexmock(Net::LDAP::Connection).should_receive(:new).and_return(@connection)
|
29
|
-
|
30
|
-
@service = MockInstrumentationService.new
|
31
|
-
@subject = Net::LDAP.new \
|
32
|
-
:host => "test.mocked.com", :port => 636,
|
33
|
-
:force_no_page => true, # so server capabilities are not queried
|
34
|
-
:instrumentation_service => @service
|
35
|
-
end
|
36
|
-
|
37
|
-
def test_instrument_bind
|
38
|
-
events = @service.subscribe "bind.net_ldap"
|
39
|
-
|
40
|
-
fake_connection = FakeConnection.new
|
41
|
-
@subject.connection = fake_connection
|
42
|
-
bind_result = fake_connection.bind
|
43
|
-
|
44
|
-
assert @subject.bind
|
45
|
-
|
46
|
-
payload, result = events.pop
|
47
|
-
assert result
|
48
|
-
assert_equal bind_result, payload[:bind]
|
49
|
-
end
|
50
|
-
|
51
|
-
def test_instrument_search
|
52
|
-
events = @service.subscribe "search.net_ldap"
|
53
|
-
|
54
|
-
fake_connection = FakeConnection.new
|
55
|
-
@subject.connection = fake_connection
|
56
|
-
entry = fake_connection.search
|
57
|
-
|
58
|
-
refute_nil @subject.search(:filter => "(uid=user1)")
|
59
|
-
|
60
|
-
payload, result = events.pop
|
61
|
-
assert_equal [entry], result
|
62
|
-
assert_equal [entry], payload[:result]
|
63
|
-
assert_equal "(uid=user1)", payload[:filter]
|
64
|
-
end
|
65
|
-
|
66
|
-
def test_instrument_search_with_size
|
67
|
-
events = @service.subscribe "search.net_ldap"
|
68
|
-
|
69
|
-
fake_connection = FakeConnection.new
|
70
|
-
@subject.connection = fake_connection
|
71
|
-
entry = fake_connection.search
|
72
|
-
|
73
|
-
refute_nil @subject.search(:filter => "(uid=user1)", :size => 1)
|
74
|
-
|
75
|
-
payload, result = events.pop
|
76
|
-
assert_equal [entry], result
|
77
|
-
assert_equal [entry], payload[:result]
|
78
|
-
assert_equal "(uid=user1)", payload[:filter]
|
79
|
-
assert_equal result.size, payload[:size]
|
80
|
-
end
|
81
|
-
|
82
|
-
def test_obscure_auth
|
83
|
-
password = "opensesame"
|
84
|
-
assert_include(@subject.inspect, "anonymous")
|
85
|
-
@subject.auth "joe_user", password
|
86
|
-
assert_not_include(@subject.inspect, password)
|
87
|
-
end
|
88
|
-
|
89
|
-
def test_encryption
|
90
|
-
enc = @subject.encryption('start_tls')
|
91
|
-
|
92
|
-
assert_equal enc[:method], :start_tls
|
93
|
-
end
|
94
|
-
|
95
|
-
def test_normalize_encryption_symbol
|
96
|
-
enc = @subject.send(:normalize_encryption, :start_tls)
|
97
|
-
assert_equal enc, {:method => :start_tls, :tls_options => {}}
|
98
|
-
end
|
99
|
-
|
100
|
-
def test_normalize_encryption_nil
|
101
|
-
enc = @subject.send(:normalize_encryption, nil)
|
102
|
-
assert_equal enc, nil
|
103
|
-
end
|
104
|
-
|
105
|
-
def test_normalize_encryption_string
|
106
|
-
enc = @subject.send(:normalize_encryption, 'start_tls')
|
107
|
-
assert_equal enc, {:method => :start_tls, :tls_options => {}}
|
108
|
-
end
|
109
|
-
|
110
|
-
def test_normalize_encryption_hash
|
111
|
-
enc = @subject.send(:normalize_encryption, {:method => :start_tls, :tls_options => {:foo => :bar}})
|
112
|
-
assert_equal enc, {:method => :start_tls, :tls_options => {:foo => :bar}}
|
113
|
-
end
|
114
|
-
end
|