net-ldap 0.12.0 → 0.19.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (74) hide show
  1. checksums.yaml +5 -5
  2. data/Contributors.rdoc +1 -0
  3. data/History.rdoc +112 -0
  4. data/README.rdoc +19 -9
  5. data/lib/net/ber/ber_parser.rb +4 -4
  6. data/lib/net/ber/core_ext/array.rb +1 -1
  7. data/lib/net/ber/core_ext/integer.rb +1 -1
  8. data/lib/net/ber/core_ext/string.rb +1 -1
  9. data/lib/net/ber/core_ext.rb +6 -6
  10. data/lib/net/ber.rb +39 -9
  11. data/lib/net/ldap/auth_adapter/gss_spnego.rb +9 -8
  12. data/lib/net/ldap/auth_adapter/sasl.rb +6 -4
  13. data/lib/net/ldap/auth_adapter/simple.rb +1 -1
  14. data/lib/net/ldap/connection.rb +173 -52
  15. data/lib/net/ldap/dataset.rb +3 -5
  16. data/lib/net/ldap/dn.rb +21 -30
  17. data/lib/net/ldap/entry.rb +15 -7
  18. data/lib/net/ldap/error.rb +2 -25
  19. data/lib/net/ldap/filter.rb +15 -8
  20. data/lib/net/ldap/instrumentation.rb +2 -2
  21. data/lib/net/ldap/password.rb +7 -5
  22. data/lib/net/ldap/pdu.rb +27 -3
  23. data/lib/net/ldap/version.rb +1 -1
  24. data/lib/net/ldap.rb +212 -91
  25. data/lib/net/snmp.rb +19 -19
  26. data/lib/net-ldap.rb +1 -1
  27. metadata +27 -96
  28. data/.gitignore +0 -9
  29. data/.rubocop.yml +0 -5
  30. data/.rubocop_todo.yml +0 -462
  31. data/.travis.yml +0 -31
  32. data/CONTRIBUTING.md +0 -54
  33. data/Gemfile +0 -2
  34. data/Rakefile +0 -23
  35. data/net-ldap.gemspec +0 -36
  36. data/script/changelog +0 -47
  37. data/script/install-openldap +0 -112
  38. data/script/package +0 -7
  39. data/script/release +0 -16
  40. data/test/ber/core_ext/test_array.rb +0 -22
  41. data/test/ber/core_ext/test_string.rb +0 -25
  42. data/test/ber/test_ber.rb +0 -145
  43. data/test/fixtures/cacert.pem +0 -20
  44. data/test/fixtures/openldap/memberof.ldif +0 -33
  45. data/test/fixtures/openldap/retcode.ldif +0 -76
  46. data/test/fixtures/openldap/slapd.conf.ldif +0 -67
  47. data/test/fixtures/seed.ldif +0 -374
  48. data/test/integration/test_add.rb +0 -28
  49. data/test/integration/test_ber.rb +0 -30
  50. data/test/integration/test_bind.rb +0 -34
  51. data/test/integration/test_delete.rb +0 -31
  52. data/test/integration/test_open.rb +0 -88
  53. data/test/integration/test_return_codes.rb +0 -38
  54. data/test/integration/test_search.rb +0 -77
  55. data/test/support/vm/openldap/.gitignore +0 -1
  56. data/test/support/vm/openldap/README.md +0 -32
  57. data/test/support/vm/openldap/Vagrantfile +0 -33
  58. data/test/test_auth_adapter.rb +0 -11
  59. data/test/test_dn.rb +0 -44
  60. data/test/test_entry.rb +0 -65
  61. data/test/test_filter.rb +0 -223
  62. data/test/test_filter_parser.rb +0 -24
  63. data/test/test_helper.rb +0 -66
  64. data/test/test_ldap.rb +0 -67
  65. data/test/test_ldap_connection.rb +0 -460
  66. data/test/test_ldif.rb +0 -104
  67. data/test/test_password.rb +0 -10
  68. data/test/test_rename.rb +0 -77
  69. data/test/test_search.rb +0 -39
  70. data/test/test_snmp.rb +0 -119
  71. data/test/test_ssl_ber.rb +0 -40
  72. data/test/testdata.ldif +0 -101
  73. data/testserver/ldapserver.rb +0 -210
  74. data/testserver/testdata.ldif +0 -101
@@ -1,460 +0,0 @@
1
- require_relative 'test_helper'
2
-
3
- class TestLDAPConnection < Test::Unit::TestCase
4
- def capture_stderr
5
- stderr, $stderr = $stderr, StringIO.new
6
- yield
7
- $stderr.string
8
- ensure
9
- $stderr = stderr
10
- end
11
-
12
- def test_list_of_hosts_with_first_host_successful
13
- hosts = [
14
- ['test.mocked.com', 636],
15
- ['test2.mocked.com', 636],
16
- ['test3.mocked.com', 636],
17
- ]
18
- flexmock(TCPSocket).should_receive(:new).ordered.with(*hosts[0]).once.and_return(nil)
19
- flexmock(TCPSocket).should_receive(:new).ordered.never
20
- Net::LDAP::Connection.new(:hosts => hosts)
21
- end
22
-
23
- def test_list_of_hosts_with_first_host_failure
24
- hosts = [
25
- ['test.mocked.com', 636],
26
- ['test2.mocked.com', 636],
27
- ['test3.mocked.com', 636],
28
- ]
29
- flexmock(TCPSocket).should_receive(:new).ordered.with(*hosts[0]).once.and_raise(SocketError)
30
- flexmock(TCPSocket).should_receive(:new).ordered.with(*hosts[1]).once.and_return(nil)
31
- flexmock(TCPSocket).should_receive(:new).ordered.never
32
- Net::LDAP::Connection.new(:hosts => hosts)
33
- end
34
-
35
- def test_list_of_hosts_with_all_hosts_failure
36
- hosts = [
37
- ['test.mocked.com', 636],
38
- ['test2.mocked.com', 636],
39
- ['test3.mocked.com', 636],
40
- ]
41
- flexmock(TCPSocket).should_receive(:new).ordered.with(*hosts[0]).once.and_raise(SocketError)
42
- flexmock(TCPSocket).should_receive(:new).ordered.with(*hosts[1]).once.and_raise(SocketError)
43
- flexmock(TCPSocket).should_receive(:new).ordered.with(*hosts[2]).once.and_raise(SocketError)
44
- flexmock(TCPSocket).should_receive(:new).ordered.never
45
- assert_raise Net::LDAP::ConnectionError do
46
- Net::LDAP::Connection.new(:hosts => hosts)
47
- end
48
- end
49
-
50
- def test_unresponsive_host
51
- assert_raise Net::LDAP::Error do
52
- Net::LDAP::Connection.new(:host => 'test.mocked.com', :port => 636)
53
- end
54
- end
55
-
56
- def test_blocked_port
57
- flexmock(TCPSocket).should_receive(:new).and_raise(SocketError)
58
- assert_raise Net::LDAP::Error do
59
- Net::LDAP::Connection.new(:host => 'test.mocked.com', :port => 636)
60
- end
61
- end
62
-
63
- def test_connection_refused
64
- flexmock(TCPSocket).should_receive(:new).and_raise(Errno::ECONNREFUSED)
65
- stderr = capture_stderr do
66
- assert_raise Net::LDAP::ConnectionRefusedError do
67
- Net::LDAP::Connection.new(:host => 'test.mocked.com', :port => 636)
68
- end
69
- end
70
- assert_equal("Deprecation warning: Net::LDAP::ConnectionRefused will be deprecated. Use Errno::ECONNREFUSED instead.\n", stderr)
71
- end
72
-
73
- def test_raises_unknown_exceptions
74
- error = Class.new(StandardError)
75
- flexmock(TCPSocket).should_receive(:new).and_raise(error)
76
- assert_raise error do
77
- Net::LDAP::Connection.new(:host => 'test.mocked.com', :port => 636)
78
- end
79
- end
80
-
81
- def test_modify_ops_delete
82
- args = { :operations => [ [ :delete, "mail" ] ] }
83
- result = Net::LDAP::Connection.modify_ops(args[:operations])
84
- expected = [ "0\r\n\x01\x010\b\x04\x04mail1\x00" ]
85
- assert_equal(expected, result)
86
- end
87
-
88
- def test_modify_ops_add
89
- args = { :operations => [ [ :add, "mail", "testuser@example.com" ] ] }
90
- result = Net::LDAP::Connection.modify_ops(args[:operations])
91
- expected = [ "0#\n\x01\x000\x1E\x04\x04mail1\x16\x04\x14testuser@example.com" ]
92
- assert_equal(expected, result)
93
- end
94
-
95
- def test_modify_ops_replace
96
- args = { :operations =>[ [ :replace, "mail", "testuser@example.com" ] ] }
97
- result = Net::LDAP::Connection.modify_ops(args[:operations])
98
- expected = [ "0#\n\x01\x020\x1E\x04\x04mail1\x16\x04\x14testuser@example.com" ]
99
- assert_equal(expected, result)
100
- end
101
-
102
- def test_write
103
- mock = flexmock("socket")
104
- mock.should_receive(:write).with([1.to_ber, "request"].to_ber_sequence).and_return(true)
105
- conn = Net::LDAP::Connection.new(:socket => mock)
106
- conn.send(:write, "request")
107
- end
108
-
109
- def test_write_with_controls
110
- mock = flexmock("socket")
111
- mock.should_receive(:write).with([1.to_ber, "request", "controls"].to_ber_sequence).and_return(true)
112
- conn = Net::LDAP::Connection.new(:socket => mock)
113
- conn.send(:write, "request", "controls")
114
- end
115
-
116
- def test_write_increments_msgid
117
- mock = flexmock("socket")
118
- mock.should_receive(:write).with([1.to_ber, "request1"].to_ber_sequence).and_return(true)
119
- mock.should_receive(:write).with([2.to_ber, "request2"].to_ber_sequence).and_return(true)
120
- conn = Net::LDAP::Connection.new(:socket => mock)
121
- conn.send(:write, "request1")
122
- conn.send(:write, "request2")
123
- end
124
- end
125
-
126
- class TestLDAPConnectionSocketReads < Test::Unit::TestCase
127
- def make_message(message_id, options = {})
128
- options = {
129
- app_tag: Net::LDAP::PDU::SearchResult,
130
- code: Net::LDAP::ResultCodeSuccess,
131
- matched_dn: "",
132
- error_message: ""
133
- }.merge(options)
134
- result = Net::BER::BerIdentifiedArray.new([options[:code], options[:matched_dn], options[:error_message]])
135
- result.ber_identifier = options[:app_tag]
136
- [message_id, result]
137
- end
138
-
139
- def test_queued_read_drains_queue_before_read
140
- result1a = make_message(1, error_message: "one")
141
- result1b = make_message(1, error_message: "two")
142
-
143
- mock = flexmock("socket")
144
- mock.should_receive(:read_ber).and_return(result1b)
145
- conn = Net::LDAP::Connection.new(:socket => mock)
146
-
147
- conn.message_queue[1].push Net::LDAP::PDU.new(result1a)
148
-
149
- assert msg1 = conn.queued_read(1)
150
- assert msg2 = conn.queued_read(1)
151
-
152
- assert_equal 1, msg1.message_id
153
- assert_equal "one", msg1.error_message
154
- assert_equal 1, msg2.message_id
155
- assert_equal "two", msg2.error_message
156
- end
157
-
158
- def test_queued_read_reads_until_message_id_match
159
- result1 = make_message(1)
160
- result2 = make_message(2)
161
-
162
- mock = flexmock("socket")
163
- mock.should_receive(:read_ber).
164
- and_return(result1).
165
- and_return(result2)
166
- conn = Net::LDAP::Connection.new(:socket => mock)
167
-
168
- assert result = conn.queued_read(2)
169
- assert_equal 2, result.message_id
170
- assert_equal 1, conn.queued_read(1).message_id
171
- end
172
-
173
- def test_queued_read_modify
174
- result1 = make_message(1, app_tag: Net::LDAP::PDU::SearchResult)
175
- result2 = make_message(2, app_tag: Net::LDAP::PDU::ModifyResponse)
176
-
177
- mock = flexmock("socket")
178
- mock.should_receive(:read_ber).
179
- and_return(result1).
180
- and_return(result2)
181
- mock.should_receive(:write)
182
- conn = Net::LDAP::Connection.new(:socket => mock)
183
-
184
- conn.next_msgid # simulates ongoing query
185
-
186
- conn.instance_variable_get("@msgid")
187
-
188
- assert result = conn.modify(dn: "uid=modified-user1,ou=People,dc=rubyldap,dc=com",
189
- operations: [[:add, :mail, "modified-user1@example.com"]])
190
- assert result.success?
191
- assert_equal 2, result.message_id
192
- end
193
-
194
- def test_queued_read_add
195
- result1 = make_message(1, app_tag: Net::LDAP::PDU::SearchResult)
196
- result2 = make_message(2, app_tag: Net::LDAP::PDU::AddResponse)
197
-
198
- mock = flexmock("socket")
199
- mock.should_receive(:read_ber).
200
- and_return(result1).
201
- and_return(result2)
202
- mock.should_receive(:write)
203
- conn = Net::LDAP::Connection.new(:socket => mock)
204
-
205
- conn.next_msgid # simulates ongoing query
206
-
207
- assert result = conn.add(dn: "uid=added-user1,ou=People,dc=rubyldap,dc=com")
208
- assert result.success?
209
- assert_equal 2, result.message_id
210
- end
211
-
212
- def test_queued_read_rename
213
- result1 = make_message(1, app_tag: Net::LDAP::PDU::SearchResult)
214
- result2 = make_message(2, app_tag: Net::LDAP::PDU::ModifyRDNResponse)
215
-
216
- mock = flexmock("socket")
217
- mock.should_receive(:read_ber).
218
- and_return(result1).
219
- and_return(result2)
220
- mock.should_receive(:write)
221
- conn = Net::LDAP::Connection.new(:socket => mock)
222
-
223
- conn.next_msgid # simulates ongoing query
224
-
225
- assert result = conn.rename(
226
- olddn: "uid=renamable-user1,ou=People,dc=rubyldap,dc=com",
227
- newrdn: "uid=renamed-user1"
228
- )
229
- assert result.success?
230
- assert_equal 2, result.message_id
231
- end
232
-
233
- def test_queued_read_delete
234
- result1 = make_message(1, app_tag: Net::LDAP::PDU::SearchResult)
235
- result2 = make_message(2, app_tag: Net::LDAP::PDU::DeleteResponse)
236
-
237
- mock = flexmock("socket")
238
- mock.should_receive(:read_ber).
239
- and_return(result1).
240
- and_return(result2)
241
- mock.should_receive(:write)
242
- conn = Net::LDAP::Connection.new(:socket => mock)
243
-
244
- conn.next_msgid # simulates ongoing query
245
-
246
- assert result = conn.delete(dn: "uid=deletable-user1,ou=People,dc=rubyldap,dc=com")
247
- assert result.success?
248
- assert_equal 2, result.message_id
249
- end
250
-
251
- def test_queued_read_setup_encryption_with_start_tls
252
- result1 = make_message(1, app_tag: Net::LDAP::PDU::SearchResult)
253
- result2 = make_message(2, app_tag: Net::LDAP::PDU::ExtendedResponse)
254
-
255
- mock = flexmock("socket")
256
- mock.should_receive(:read_ber).
257
- and_return(result1).
258
- and_return(result2)
259
- mock.should_receive(:write)
260
- conn = Net::LDAP::Connection.new(:socket => mock)
261
- flexmock(Net::LDAP::Connection).should_receive(:wrap_with_ssl).with(mock, {}).
262
- and_return(mock)
263
-
264
- conn.next_msgid # simulates ongoing query
265
-
266
- assert result = conn.setup_encryption(method: :start_tls)
267
- assert_equal mock, result
268
- end
269
-
270
- def test_queued_read_bind_simple
271
- result1 = make_message(1, app_tag: Net::LDAP::PDU::SearchResult)
272
- result2 = make_message(2, app_tag: Net::LDAP::PDU::BindResult)
273
-
274
- mock = flexmock("socket")
275
- mock.should_receive(:read_ber).
276
- and_return(result1).
277
- and_return(result2)
278
- mock.should_receive(:write)
279
- conn = Net::LDAP::Connection.new(:socket => mock)
280
-
281
- conn.next_msgid # simulates ongoing query
282
-
283
- assert result = conn.bind(
284
- method: :simple,
285
- username: "uid=user1,ou=People,dc=rubyldap,dc=com",
286
- password: "passworD1")
287
- assert result.success?
288
- assert_equal 2, result.message_id
289
- end
290
-
291
- def test_queued_read_bind_sasl
292
- result1 = make_message(1, app_tag: Net::LDAP::PDU::SearchResult)
293
- result2 = make_message(2, app_tag: Net::LDAP::PDU::BindResult)
294
-
295
- mock = flexmock("socket")
296
- mock.should_receive(:read_ber).
297
- and_return(result1).
298
- and_return(result2)
299
- mock.should_receive(:write)
300
- conn = Net::LDAP::Connection.new(:socket => mock)
301
-
302
- conn.next_msgid # simulates ongoing query
303
-
304
- assert result = conn.bind(
305
- method: :sasl,
306
- mechanism: "fake",
307
- initial_credential: "passworD1",
308
- challenge_response: flexmock("challenge proc"))
309
- assert result.success?
310
- assert_equal 2, result.message_id
311
- end
312
- end
313
-
314
- class TestLDAPConnectionErrors < Test::Unit::TestCase
315
- def setup
316
- @tcp_socket = flexmock(:connection)
317
- @tcp_socket.should_receive(:write)
318
- flexmock(TCPSocket).should_receive(:new).and_return(@tcp_socket)
319
- @connection = Net::LDAP::Connection.new(:host => 'test.mocked.com', :port => 636)
320
- end
321
-
322
- def test_error_failed_operation
323
- ber = Net::BER::BerIdentifiedArray.new([Net::LDAP::ResultCodeUnwillingToPerform, "", "The provided password value was rejected by a password validator: The provided password did not contain enough characters from the character set 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'. The minimum number of characters from that set that must be present in user passwords is 1"])
324
- ber.ber_identifier = Net::LDAP::PDU::ModifyResponse
325
- @tcp_socket.should_receive(:read_ber).and_return([1, ber])
326
-
327
- result = @connection.modify(:dn => "1", :operations => [[:replace, "mail", "something@sothsdkf.com"]])
328
- assert result.failure?, "should be failure"
329
- assert_equal "The provided password value was rejected by a password validator: The provided password did not contain enough characters from the character set 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'. The minimum number of characters from that set that must be present in user passwords is 1", result.error_message
330
- end
331
-
332
- def test_no_error_on_success
333
- ber = Net::BER::BerIdentifiedArray.new([Net::LDAP::ResultCodeSuccess, "", ""])
334
- ber.ber_identifier = Net::LDAP::PDU::ModifyResponse
335
- @tcp_socket.should_receive(:read_ber).and_return([1, ber])
336
-
337
- result = @connection.modify(:dn => "1", :operations => [[:replace, "mail", "something@sothsdkf.com"]])
338
- assert result.success?, "should be success"
339
- assert_equal "", result.error_message
340
- end
341
- end
342
-
343
- class TestLDAPConnectionInstrumentation < Test::Unit::TestCase
344
- def setup
345
- @tcp_socket = flexmock(:connection)
346
- @tcp_socket.should_receive(:write)
347
- flexmock(TCPSocket).should_receive(:new).and_return(@tcp_socket)
348
-
349
- @service = MockInstrumentationService.new
350
- @connection = Net::LDAP::Connection.new \
351
- :host => 'test.mocked.com',
352
- :port => 636,
353
- :instrumentation_service => @service
354
- end
355
-
356
- def test_write_net_ldap_connection_event
357
- ber = Net::BER::BerIdentifiedArray.new([Net::LDAP::ResultCodeSuccess, "", ""])
358
- ber.ber_identifier = Net::LDAP::PDU::BindResult
359
- read_result = [1, ber]
360
- @tcp_socket.should_receive(:read_ber).and_return(read_result)
361
-
362
- events = @service.subscribe "write.net_ldap_connection"
363
-
364
- result = @connection.bind(method: :anon)
365
- assert result.success?, "should be success"
366
-
367
- # a write event
368
- payload, result = events.pop
369
- assert payload.has_key?(:result)
370
- assert payload.has_key?(:content_length)
371
- end
372
-
373
- def test_read_net_ldap_connection_event
374
- ber = Net::BER::BerIdentifiedArray.new([Net::LDAP::ResultCodeSuccess, "", ""])
375
- ber.ber_identifier = Net::LDAP::PDU::BindResult
376
- read_result = [1, ber]
377
- @tcp_socket.should_receive(:read_ber).and_return(read_result)
378
-
379
- events = @service.subscribe "read.net_ldap_connection"
380
-
381
- result = @connection.bind(method: :anon)
382
- assert result.success?, "should be success"
383
-
384
- # a read event
385
- payload, result = events.pop
386
- assert payload.has_key?(:result)
387
- assert_equal read_result, result
388
- end
389
-
390
- def test_parse_pdu_net_ldap_connection_event
391
- ber = Net::BER::BerIdentifiedArray.new([Net::LDAP::ResultCodeSuccess, "", ""])
392
- ber.ber_identifier = Net::LDAP::PDU::BindResult
393
- read_result = [1, ber]
394
- @tcp_socket.should_receive(:read_ber).and_return(read_result)
395
-
396
- events = @service.subscribe "parse_pdu.net_ldap_connection"
397
-
398
- result = @connection.bind(method: :anon)
399
- assert result.success?, "should be success"
400
-
401
- # a parse_pdu event
402
- payload, result = events.pop
403
- assert payload.has_key?(:pdu)
404
- assert payload.has_key?(:app_tag)
405
- assert payload.has_key?(:message_id)
406
- assert_equal Net::LDAP::PDU::BindResult, payload[:app_tag]
407
- assert_equal 1, payload[:message_id]
408
- pdu = payload[:pdu]
409
- assert_equal Net::LDAP::ResultCodeSuccess, pdu.result_code
410
- end
411
-
412
- def test_bind_net_ldap_connection_event
413
- ber = Net::BER::BerIdentifiedArray.new([Net::LDAP::ResultCodeSuccess, "", ""])
414
- ber.ber_identifier = Net::LDAP::PDU::BindResult
415
- bind_result = [1, ber]
416
- @tcp_socket.should_receive(:read_ber).and_return(bind_result)
417
-
418
- events = @service.subscribe "bind.net_ldap_connection"
419
-
420
- result = @connection.bind(method: :anon)
421
- assert result.success?, "should be success"
422
-
423
- # a read event
424
- payload, result = events.pop
425
- assert payload.has_key?(:result)
426
- assert result.success?, "should be success"
427
- end
428
-
429
- def test_search_net_ldap_connection_event
430
- # search data
431
- search_data_ber = Net::BER::BerIdentifiedArray.new([1, [
432
- "uid=user1,ou=People,dc=rubyldap,dc=com",
433
- [ ["uid", ["user1"]] ]
434
- ]])
435
- search_data_ber.ber_identifier = Net::LDAP::PDU::SearchReturnedData
436
- search_data = [1, search_data_ber]
437
- # search result (end of results)
438
- search_result_ber = Net::BER::BerIdentifiedArray.new([Net::LDAP::ResultCodeSuccess, "", ""])
439
- search_result_ber.ber_identifier = Net::LDAP::PDU::SearchResult
440
- search_result = [1, search_result_ber]
441
- @tcp_socket.should_receive(:read_ber).and_return(search_data).
442
- and_return(search_result)
443
-
444
- events = @service.subscribe "search.net_ldap_connection"
445
- unread = @service.subscribe "search_messages_unread.net_ldap_connection"
446
-
447
- result = @connection.search(filter: "(uid=user1)", base: "ou=People,dc=rubyldap,dc=com")
448
- assert result.success?, "should be success"
449
-
450
- # a search event
451
- payload, result = events.pop
452
- assert payload.has_key?(:result)
453
- assert payload.has_key?(:filter)
454
- assert_equal "(uid=user1)", payload[:filter].to_s
455
- assert result
456
-
457
- # ensure no unread
458
- assert unread.empty?, "should not have any leftover unread messages"
459
- end
460
- end
data/test/test_ldif.rb DELETED
@@ -1,104 +0,0 @@
1
- # $Id: testldif.rb 61 2006-04-18 20:55:55Z blackhedd $
2
-
3
- require_relative 'test_helper'
4
-
5
- require 'digest/sha1'
6
- require 'base64'
7
-
8
- class TestLdif < Test::Unit::TestCase
9
- TestLdifFilename = "#{File.dirname(__FILE__)}/testdata.ldif"
10
-
11
- def test_empty_ldif
12
- ds = Net::LDAP::Dataset.read_ldif(StringIO.new)
13
- assert_equal(true, ds.empty?)
14
- end
15
-
16
- def test_ldif_with_version
17
- io = StringIO.new("version: 1")
18
- ds = Net::LDAP::Dataset.read_ldif(io)
19
- assert_equal "1", ds.version
20
- end
21
-
22
- def test_ldif_with_comments
23
- str = ["# Hello from LDIF-land", "# This is an unterminated comment"]
24
- io = StringIO.new(str[0] + "\r\n" + str[1])
25
- ds = Net::LDAP::Dataset::read_ldif(io)
26
- assert_equal(str, ds.comments)
27
- end
28
-
29
- def test_ldif_with_password
30
- psw = "goldbricks"
31
- hashed_psw = "{SHA}" + Base64::encode64(Digest::SHA1.digest(psw)).chomp
32
-
33
- ldif_encoded = Base64::encode64(hashed_psw).chomp
34
- ds = Net::LDAP::Dataset::read_ldif(StringIO.new("dn: Goldbrick\r\nuserPassword:: #{ldif_encoded}\r\n\r\n"))
35
- recovered_psw = ds["Goldbrick"][:userpassword].shift
36
- assert_equal(hashed_psw, recovered_psw)
37
- end
38
-
39
- def test_ldif_with_continuation_lines
40
- ds = Net::LDAP::Dataset::read_ldif(StringIO.new("dn: abcdefg\r\n hijklmn\r\n\r\n"))
41
- assert_equal(true, ds.has_key?("abcdefghijklmn"))
42
- end
43
-
44
- def test_ldif_with_continuation_lines_and_extra_whitespace
45
- ds1 = Net::LDAP::Dataset::read_ldif(StringIO.new("dn: abcdefg\r\n hijklmn\r\n\r\n"))
46
- assert_equal(true, ds1.has_key?("abcdefg hijklmn"))
47
- ds2 = Net::LDAP::Dataset::read_ldif(StringIO.new("dn: abcdefg\r\n hij klmn\r\n\r\n"))
48
- assert_equal(true, ds2.has_key?("abcdefghij klmn"))
49
- end
50
-
51
- def test_ldif_tab_is_not_continuation
52
- ds = Net::LDAP::Dataset::read_ldif(StringIO.new("dn: key\r\n\tnotcontinued\r\n\r\n"))
53
- assert_equal(true, ds.has_key?("key"))
54
- end
55
-
56
- def test_ldif_with_base64_dn
57
- str = "dn:: Q049QmFzZTY0IGRuIHRlc3QsT1U9VGVzdCxPVT1Vbml0cyxEQz1leGFtcGxlLERDPWNvbQ==\r\n\r\n"
58
- ds = Net::LDAP::Dataset::read_ldif(StringIO.new(str))
59
- assert_equal(true, ds.has_key?("CN=Base64 dn test,OU=Test,OU=Units,DC=example,DC=com"))
60
- end
61
-
62
- def test_ldif_with_base64_dn_and_continuation_lines
63
- str = "dn:: Q049QmFzZTY0IGRuIHRlc3Qgd2l0aCBjb250aW51YXRpb24gbGluZSxPVT1UZXN0LE9VPVVua\r\n XRzLERDPWV4YW1wbGUsREM9Y29t\r\n\r\n"
64
- ds = Net::LDAP::Dataset::read_ldif(StringIO.new(str))
65
- assert_equal(true, ds.has_key?("CN=Base64 dn test with continuation line,OU=Test,OU=Units,DC=example,DC=com"))
66
- end
67
-
68
- # TODO, INADEQUATE. We need some more tests
69
- # to verify the content.
70
- def test_ldif
71
- File.open(TestLdifFilename, "r") {|f|
72
- ds = Net::LDAP::Dataset::read_ldif(f)
73
- assert_equal(13, ds.length)
74
- }
75
- end
76
-
77
- # Must test folded lines and base64-encoded lines as well as normal ones.
78
- def test_to_ldif
79
- data = File.open(TestLdifFilename, "rb") { |f| f.read }
80
- io = StringIO.new(data)
81
-
82
- # added .lines to turn to array because 1.9 doesn't have
83
- # .grep on basic strings
84
- entries = data.lines.grep(/^dn:\s*/) { $'.chomp }
85
- dn_entries = entries.dup
86
-
87
- ds = Net::LDAP::Dataset::read_ldif(io) { |type, value|
88
- case type
89
- when :dn
90
- assert_equal(dn_entries.first, value)
91
- dn_entries.shift
92
- end
93
- }
94
- assert_equal(entries.size, ds.size)
95
- assert_equal(entries.sort, ds.to_ldif.grep(/^dn:\s*/) { $'.chomp })
96
- end
97
-
98
- def test_to_ldif_with_version
99
- ds = Net::LDAP::Dataset.new
100
- ds.version = "1"
101
-
102
- assert_equal "version: 1", ds.to_ldif_string.chomp
103
- end
104
- end
@@ -1,10 +0,0 @@
1
- # $Id: testpsw.rb 72 2006-04-24 21:58:14Z blackhedd $
2
-
3
- require_relative 'test_helper'
4
-
5
- class TestPassword < Test::Unit::TestCase
6
- def test_psw
7
- assert_equal("{MD5}xq8jwrcfibi0sZdZYNkSng==", Net::LDAP::Password.generate( :md5, "cashflow" ))
8
- assert_equal("{SHA}YE4eGkN4BvwNN1f5R7CZz0kFn14=", Net::LDAP::Password.generate( :sha, "cashflow" ))
9
- end
10
- end
data/test/test_rename.rb DELETED
@@ -1,77 +0,0 @@
1
- require_relative 'test_helper'
2
-
3
- # Commented out since it assumes you have a live LDAP server somewhere. This
4
- # will be migrated to the integration specs, as soon as they are ready.
5
- =begin
6
- class TestRename < Test::Unit::TestCase
7
- HOST= '10.10.10.71'
8
- PORT = 389
9
- BASE = "o=test"
10
- AUTH = { :method => :simple, :username => "cn=testadmin,#{BASE}", :password => 'password' }
11
- BASIC_USER = "cn=jsmith,ou=sales,#{BASE}"
12
- RENAMED_USER = "cn=jbrown,ou=sales,#{BASE}"
13
- MOVED_USER = "cn=jsmith,ou=marketing,#{BASE}"
14
- RENAMED_MOVED_USER = "cn=jjones,ou=marketing,#{BASE}"
15
-
16
- def setup
17
- # create the entries we're going to manipulate
18
- Net::LDAP::open(:host => HOST, :port => PORT, :auth => AUTH) do |ldap|
19
- if ldap.add(:dn => "ou=sales,#{BASE}", :attributes => { :ou => "sales", :objectclass => "organizationalUnit" })
20
- puts "Add failed: #{ldap.get_operation_result.message} - code: #{ldap.get_operation_result.code}"
21
- end
22
- ldap.add(:dn => "ou=marketing,#{BASE}", :attributes => { :ou => "marketing", :objectclass => "organizationalUnit" })
23
- ldap.add(:dn => BASIC_USER, :attributes => { :cn => "jsmith", :objectclass => "inetOrgPerson", :sn => "Smith" })
24
- end
25
- end
26
-
27
- def test_rename_entry
28
- dn = nil
29
- Net::LDAP::open(:host => HOST, :port => PORT, :auth => AUTH) do |ldap|
30
- ldap.rename(:olddn => BASIC_USER, :newrdn => "cn=jbrown")
31
-
32
- ldap.search(:base => RENAMED_USER) do |entry|
33
- dn = entry.dn
34
- end
35
- end
36
- assert_equal(RENAMED_USER, dn)
37
- end
38
-
39
- def test_move_entry
40
- dn = nil
41
- Net::LDAP::open(:host => HOST, :port => PORT, :auth => AUTH) do |ldap|
42
- ldap.rename(:olddn => BASIC_USER, :newrdn => "cn=jsmith", :new_superior => "ou=marketing,#{BASE}")
43
-
44
- ldap.search(:base => MOVED_USER) do |entry|
45
- dn = entry.dn
46
- end
47
- end
48
- assert_equal(MOVED_USER, dn)
49
- end
50
-
51
- def test_move_and_rename_entry
52
- dn = nil
53
- Net::LDAP::open(:host => HOST, :port => PORT, :auth => AUTH) do |ldap|
54
- ldap.rename(:olddn => BASIC_USER, :newrdn => "cn=jjones", :new_superior => "ou=marketing,#{BASE}")
55
-
56
- ldap.search(:base => RENAMED_MOVED_USER) do |entry|
57
- dn = entry.dn
58
- end
59
- end
60
- assert_equal(RENAMED_MOVED_USER, dn)
61
- end
62
-
63
- def teardown
64
- # delete the entries
65
- # note: this doesn't always completely clear up on eDirectory as objects get locked while
66
- # the rename/move is being completed on the server and this prevents the delete from happening
67
- Net::LDAP::open(:host => HOST, :port => PORT, :auth => AUTH) do |ldap|
68
- ldap.delete(:dn => BASIC_USER)
69
- ldap.delete(:dn => RENAMED_USER)
70
- ldap.delete(:dn => MOVED_USER)
71
- ldap.delete(:dn => RENAMED_MOVED_USER)
72
- ldap.delete(:dn => "ou=sales,#{BASE}")
73
- ldap.delete(:dn => "ou=marketing,#{BASE}")
74
- end
75
- end
76
- end
77
- =end
data/test/test_search.rb DELETED
@@ -1,39 +0,0 @@
1
- # -*- ruby encoding: utf-8 -*-
2
- require_relative 'test_helper'
3
-
4
- class TestSearch < Test::Unit::TestCase
5
- class FakeConnection
6
- def search(args)
7
- OpenStruct.new(:result_code => Net::LDAP::ResultCodeOperationsError, :message => "error", :success? => false)
8
- end
9
- end
10
-
11
- def setup
12
- @service = MockInstrumentationService.new
13
- @connection = Net::LDAP.new :instrumentation_service => @service
14
- @connection.instance_variable_set(:@open_connection, FakeConnection.new)
15
- end
16
-
17
- def test_true_result
18
- assert_nil @connection.search(:return_result => true)
19
- end
20
-
21
- def test_false_result
22
- refute @connection.search(:return_result => false)
23
- end
24
-
25
- def test_no_result
26
- assert_nil @connection.search
27
- end
28
-
29
- def test_instrumentation_publishes_event
30
- events = @service.subscribe "search.net_ldap"
31
-
32
- @connection.search(:filter => "test")
33
-
34
- payload, result = events.pop
35
- assert payload.has_key?(:result)
36
- assert payload.has_key?(:filter)
37
- assert_equal "test", payload[:filter]
38
- end
39
- end