activeldap 4.0.5 → 6.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (57) hide show
  1. checksums.yaml +5 -5
  2. data/.yardopts +3 -1
  3. data/doc/text/development.md +26 -0
  4. data/doc/text/{news.textile → news.md} +451 -241
  5. data/doc/text/{rails.textile → rails.md} +44 -33
  6. data/doc/text/{tutorial.textile → tutorial.md} +177 -185
  7. data/lib/active_ldap/adapter/base.rb +40 -17
  8. data/lib/active_ldap/adapter/jndi.rb +21 -9
  9. data/lib/active_ldap/adapter/jndi_connection.rb +83 -20
  10. data/lib/active_ldap/adapter/ldap.rb +50 -28
  11. data/lib/active_ldap/adapter/ldap_ext.rb +32 -13
  12. data/lib/active_ldap/adapter/net_ldap.rb +26 -24
  13. data/lib/active_ldap/associations.rb +5 -5
  14. data/lib/active_ldap/attribute_methods/before_type_cast.rb +1 -1
  15. data/lib/active_ldap/attribute_methods/dirty.rb +4 -7
  16. data/lib/active_ldap/attribute_methods/query.rb +1 -1
  17. data/lib/active_ldap/attribute_methods/read.rb +5 -1
  18. data/lib/active_ldap/attribute_methods/write.rb +1 -1
  19. data/lib/active_ldap/attribute_methods.rb +1 -2
  20. data/lib/active_ldap/base.rb +61 -14
  21. data/lib/active_ldap/callbacks.rb +7 -8
  22. data/lib/active_ldap/configuration.rb +27 -3
  23. data/lib/active_ldap/connection.rb +4 -22
  24. data/lib/active_ldap/distinguished_name.rb +1 -1
  25. data/lib/active_ldap/human_readable.rb +5 -4
  26. data/lib/active_ldap/operations.rb +24 -4
  27. data/lib/active_ldap/persistence.rb +3 -2
  28. data/lib/active_ldap/populate.rb +5 -3
  29. data/lib/active_ldap/railties/controller_runtime.rb +1 -2
  30. data/lib/active_ldap/schema/syntaxes.rb +8 -4
  31. data/lib/active_ldap/validations.rb +12 -4
  32. data/lib/active_ldap/version.rb +1 -1
  33. data/lib/active_ldap.rb +0 -7
  34. data/po/en/active-ldap.po +2 -2
  35. data/po/ja/active-ldap.po +3 -3
  36. data/test/add-phonetic-attribute-options-to-slapd.ldif +3 -3
  37. data/test/al-test-utils.rb +125 -38
  38. data/test/command.rb +13 -16
  39. data/test/enable-dynamic-groups.ldif +22 -0
  40. data/test/enable-start-tls.ldif +27 -0
  41. data/test/run-test.rb +0 -4
  42. data/test/test_base.rb +223 -22
  43. data/test/test_base_per_instance.rb +33 -1
  44. data/test/test_callback.rb +10 -8
  45. data/test/test_connection.rb +4 -0
  46. data/test/test_connection_per_class.rb +34 -0
  47. data/test/test_dn.rb +7 -0
  48. data/test/test_entry.rb +1 -0
  49. data/test/test_find.rb +14 -3
  50. data/test/test_supported_control.rb +1 -1
  51. data/test/test_syntax.rb +5 -0
  52. data/test/test_validation.rb +28 -15
  53. metadata +23 -24
  54. data/README.textile +0 -141
  55. data/doc/text/development.textile +0 -54
  56. data/lib/active_ldap/timeout.rb +0 -75
  57. data/lib/active_ldap/timeout_stub.rb +0 -17
data/test/test_base.rb CHANGED
@@ -5,7 +5,52 @@ require 'al-test-utils'
5
5
  class TestBase < Test::Unit::TestCase
6
6
  include AlTestUtils
7
7
 
8
+ sub_test_case("follow_referrals") do
9
+ def test_default
10
+ make_temporary_user do |user1,|
11
+ make_temporary_user do |user2,|
12
+ member_url = ["ldap:///#{user1.base.to_s}??one?(objectClass=person)"]
13
+ make_temporary_group_of_urls(member_url: member_url) do |group_of_urls|
14
+ assert_equal([user1.dn, user2.dn],
15
+ group_of_urls.attributes["member"])
16
+ end
17
+ end
18
+ end
19
+ end
20
+
21
+ def test_connection_false
22
+ omit_unless_jruby
23
+ @group_of_urls_class.setup_connection(
24
+ current_configuration.merge(follow_referrals: false)
25
+ )
26
+ make_temporary_user do |user1,|
27
+ make_temporary_user do |user2,|
28
+ member_url = ["ldap:///#{user1.base.to_s}??one?(objectClass=person)"]
29
+ make_temporary_group_of_urls(member_url: member_url) do |group_of_urls|
30
+ assert_nil(group_of_urls.attributes["member"])
31
+ end
32
+ end
33
+ end
34
+ end
35
+
36
+ def test_connect_false
37
+ omit_unless_jruby
38
+ connection = @group_of_urls_class.connection
39
+ connection.disconnect!
40
+ connection.connect(follow_referrals: false)
41
+ make_temporary_user do |user1,|
42
+ make_temporary_user do |user2,|
43
+ member_url = ["ldap:///#{user1.base.to_s}??one?(objectClass=person)"]
44
+ make_temporary_group_of_urls(member_url: member_url) do |group_of_urls|
45
+ assert_nil(group_of_urls.attributes["member"])
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
51
+
8
52
  priority :must
53
+ priority :normal
9
54
  def test_search_colon_value
10
55
  make_temporary_group(:cn => "temp:group") do |group|
11
56
  assert_equal("temp:group", group.cn)
@@ -13,7 +58,6 @@ class TestBase < Test::Unit::TestCase
13
58
  end
14
59
  end
15
60
 
16
- priority :normal
17
61
  def test_lower_case_object_class
18
62
  fixture_file = fixture("lower_case_object_class_schema.rb")
19
63
  schema_entries = eval(File.read(fixture_file))
@@ -122,9 +166,9 @@ class TestBase < Test::Unit::TestCase
122
166
 
123
167
  def test_operational_attributes
124
168
  make_temporary_group do |group|
125
- dn, attributes = @group_class.search(:attributes => ["*"])[0]
169
+ _dn, attributes = @group_class.search(:attributes => ["*"])[0]
126
170
  normal_attributes = attributes.keys
127
- dn, attributes = @group_class.search(:attributes => ["*", "+"])[0]
171
+ _dn, attributes = @group_class.search(:attributes => ["*", "+"])[0]
128
172
  operational_attributes = attributes.keys - normal_attributes
129
173
  operational_attribute = operational_attributes[0]
130
174
 
@@ -150,13 +194,13 @@ class TestBase < Test::Unit::TestCase
150
194
  _ou_class.create("root2")
151
195
  assert_equal(["base",
152
196
  "root1", "child1", "child2", "domain", "child3",
153
- "root2"],
154
- _entry_class.find(:all).collect(&:id))
197
+ "root2"].sort,
198
+ _entry_class.find(:all).collect(&:id).sort)
155
199
  assert_raise(ActiveLdap::DeleteError) do
156
200
  root1.destroy_all
157
201
  end
158
- assert_equal(["base", "root1", "domain", "root2"],
159
- _entry_class.find(:all).collect(&:id))
202
+ assert_equal(["base", "root1", "domain", "root2"].sort,
203
+ _entry_class.find(:all).collect(&:id).sort)
160
204
  end
161
205
 
162
206
  def test_delete_mixed_tree_by_instance
@@ -173,13 +217,13 @@ class TestBase < Test::Unit::TestCase
173
217
  _ou_class.create("root2")
174
218
  assert_equal(["base",
175
219
  "root1", "child1", "child2", "domain", "child3",
176
- "root2"],
177
- _entry_class.find(:all).collect(&:id))
220
+ "root2"].sort,
221
+ _entry_class.find(:all).collect(&:id).sort)
178
222
  assert_raise(ActiveLdap::DeleteError) do
179
223
  root1.delete_all
180
224
  end
181
- assert_equal(["base", "root1", "domain", "root2"],
182
- _entry_class.find(:all).collect(&:id))
225
+ assert_equal(["base", "root1", "domain", "root2"].sort,
226
+ _entry_class.find(:all).collect(&:id).sort)
183
227
  end
184
228
 
185
229
  def test_delete_tree
@@ -189,8 +233,8 @@ class TestBase < Test::Unit::TestCase
189
233
  _ou_class.create(:ou => "child1", :parent => root1)
190
234
  _ou_class.create(:ou => "child2", :parent => root1)
191
235
  _ou_class.create("root2")
192
- assert_equal(["base", "root1", "child1", "child2", "root2"],
193
- _ou_class.find(:all).collect(&:ou))
236
+ assert_equal(["base", "root1", "child1", "child2", "root2"].sort,
237
+ _ou_class.find(:all).collect(&:ou).sort)
194
238
  _ou_class.delete_all(:base => root1.dn)
195
239
  assert_equal(["base", "root2"],
196
240
  _ou_class.find(:all).collect(&:ou))
@@ -217,11 +261,11 @@ class TestBase < Test::Unit::TestCase
217
261
  :classes => ["top"]
218
262
  entry_class.dn_attribute = nil
219
263
  assert_equal(["base", "root1", "child1", "domain1", "grandchild1",
220
- "child2", "domain2", "root2"],
221
- entry_class.find(:all).collect(&:id))
264
+ "child2", "domain2", "root2"].sort,
265
+ entry_class.find(:all).collect(&:id).sort)
222
266
  entry_class.delete_all(nil, :base => child2.dn)
223
- assert_equal(["base", "root1", "child1", "domain1", "grandchild1", "root2"],
224
- entry_class.find(:all).collect(&:id))
267
+ assert_equal(["base", "root1", "child1", "domain1", "grandchild1", "root2"].sort,
268
+ entry_class.find(:all).collect(&:id).sort)
225
269
  end
226
270
 
227
271
  def test_first
@@ -252,6 +296,94 @@ class TestBase < Test::Unit::TestCase
252
296
  end
253
297
  end
254
298
 
299
+ def test_set_single_valued_attribute_uses_replace
300
+ make_temporary_user(:simple => true) do |user,|
301
+ assert_not_nil(user.homeDirectory)
302
+ assert_not_equal("/home/foo", user.homeDirectory)
303
+
304
+ user.homeDirectory = "/home/foo"
305
+ assert_equal({
306
+ :modified => true,
307
+ :entries => [
308
+ [
309
+ :replace,
310
+ "homeDirectory",
311
+ {"homeDirectory" => ["/home/foo"]},
312
+ ]
313
+ ]
314
+ },
315
+ detect_modify(user) {user.save})
316
+ assert_equal("/home/foo", user.homeDirectory)
317
+ end
318
+ end
319
+
320
+ def test_set_attribute_uses_add_for_completely_new_value
321
+ make_temporary_user(:simple => true) do |user,|
322
+ assert_nil(user.description)
323
+
324
+ user.description = "x"
325
+ assert_equal({
326
+ :modified => true,
327
+ :entries => [
328
+ [:add, "description", {"description" => ["x"]}],
329
+ ],
330
+ },
331
+ detect_modify(user) {user.save})
332
+ assert_equal("x", user.description)
333
+ end
334
+ end
335
+
336
+ def test_set_attribute_uses_add_for_added_value
337
+ make_temporary_user(:simple => true) do |user,|
338
+ user.description = ["a", "b"]
339
+ assert(user.save)
340
+
341
+ user.description = ["a", "b", "c"]
342
+ assert_equal({
343
+ :modified => true,
344
+ :entries => [
345
+ [:add, "description", {"description" => ["c"]}],
346
+ ],
347
+ },
348
+ capture = detect_modify(user) {user.save})
349
+ assert_equal(["a", "b", "c"], user.description)
350
+ end
351
+ end
352
+
353
+ def test_set_attribute_uses_delete_for_deleted_value
354
+ make_temporary_user(:simple => true) do |user,|
355
+ user.description = ["a", "b", "c"]
356
+ assert(user.save)
357
+
358
+ user.description = ["a", "c"]
359
+ assert_equal({
360
+ :modified => true,
361
+ :entries => [
362
+ [:delete, "description", {"description" => ["b"]}],
363
+ ],
364
+ },
365
+ detect_modify(user) {user.save})
366
+ assert_equal(["a", "c"], user.description)
367
+ end
368
+ end
369
+
370
+ def test_set_attribute_uses_delete_for_unset_value
371
+ make_temporary_user(:simple => true) do |user,|
372
+ user.description = "x"
373
+ assert(user.save)
374
+
375
+ user.description = nil
376
+ assert_equal({
377
+ :modified => true,
378
+ :entries => [
379
+ [:delete, "description", {"description" => ["x"]}],
380
+ ],
381
+ },
382
+ detect_modify(user) {user.save})
383
+ assert_nil(user.description)
384
+ end
385
+ end
386
+
255
387
  def test_set_attributes_with_a_blank_value_in_values
256
388
  make_temporary_user(:simple => true) do |user,|
257
389
  user.attributes = {"description" => ["a", "b", ""]}
@@ -295,6 +427,19 @@ class TestBase < Test::Unit::TestCase
295
427
  end
296
428
  end
297
429
 
430
+ def test_set_dn_with_unnormalized_dn_attribute_with_forward_slash
431
+ make_temporary_user do |user,|
432
+ new_dn = "uid=temp/user1,#{user.class.base}"
433
+ assert_not_equal(user.dn.to_s, new_dn)
434
+
435
+ user.uid = 'temp/user1'
436
+ assert_equal(user.dn.to_s, new_dn)
437
+
438
+ assert_true(user.save!)
439
+ assert_true(user.class.find(user.uid).update_attributes!(gidNumber: 100069))
440
+ end
441
+ end
442
+
298
443
  def test_destroy_with_empty_base_and_prefix_of_class
299
444
  make_temporary_user do |user,|
300
445
  base = user.class.base
@@ -354,14 +499,25 @@ class TestBase < Test::Unit::TestCase
354
499
 
355
500
  def test_save_with_changes
356
501
  make_temporary_user do |user, password|
502
+ cn = user.cn
357
503
  user.cn += "!!!"
358
- assert_true(detect_modify(user) {user.save})
504
+ assert_equal({
505
+ :modified => true,
506
+ :entries => [
507
+ [:replace, "cn", {"cn" => ["#{cn}!!!"]}],
508
+ ],
509
+ },
510
+ detect_modify(user) {user.save})
359
511
  end
360
512
  end
361
513
 
362
514
  def test_save_without_changes
363
515
  make_temporary_user do |user, password|
364
- assert_false(detect_modify(user) {user.save})
516
+ assert_equal({
517
+ :modified => false,
518
+ :entries => [],
519
+ },
520
+ detect_modify(user) {user.save})
365
521
  end
366
522
  end
367
523
 
@@ -663,6 +819,43 @@ class TestBase < Test::Unit::TestCase
663
819
  end
664
820
  end
665
821
 
822
+ class TestInstantiate < self
823
+ class Person < ActiveLdap::Base
824
+ ldap_mapping dn_attribute: "cn",
825
+ prefix: "ou=People",
826
+ scope: :one,
827
+ classes: ["top", "person"]
828
+ end
829
+
830
+ class OrganizationalPerson < Person
831
+ ldap_mapping dn_attribute: "cn",
832
+ prefix: "",
833
+ classes: ["top", "person", "organizationalPerson"]
834
+ end
835
+
836
+ class ResidentialPerson < Person
837
+ ldap_mapping dn_attribute: "cn",
838
+ prefix: "",
839
+ classes: ["top", "person", "residentialPerson"]
840
+ end
841
+
842
+ def test_sub_class
843
+ make_ou("People")
844
+ residential_person = ResidentialPerson.new(cn: "John Doe",
845
+ sn: "Doe",
846
+ street: "123 Main Street",
847
+ l: "Anytown")
848
+ residential_person.save!
849
+ organizational_person = OrganizationalPerson.new(cn: "Jane Smith",
850
+ sn: "Smith",
851
+ title: "General Manager")
852
+ organizational_person.save!
853
+ people = Person.all
854
+ assert_equal([ResidentialPerson, OrganizationalPerson],
855
+ people.collect(&:class))
856
+ end
857
+ end
858
+
666
859
  def test_reload_of_not_exists_entry
667
860
  make_temporary_user do |user,|
668
861
  assert_nothing_raised do
@@ -809,7 +1002,8 @@ class TestBase < Test::Unit::TestCase
809
1002
  ou_class.ldap_mapping(:dn_attribute => :ou,
810
1003
  :prefix => "",
811
1004
  :classes => ["top", "organizationalUnit"])
812
- assert_equal(["ou=Groups,#{current_configuration['base']}",
1005
+ assert_equal(["ou=GroupOfURLsSet,#{current_configuration['base']}",
1006
+ "ou=Groups,#{current_configuration['base']}",
813
1007
  "ou=Users,#{current_configuration['base']}"],
814
1008
  ou_class.find(:all).collect(&:dn).collect(&:to_s).sort)
815
1009
  end
@@ -1151,23 +1345,30 @@ EOX
1151
1345
 
1152
1346
  private
1153
1347
  def detect_modify(object)
1154
- modify_called = false
1348
+ modify_called = nil
1349
+ entries = nil
1155
1350
  singleton_class = class << object; self; end
1156
1351
  singleton_class.send(:define_method, :modify_entry) do |*args|
1157
1352
  dn, attributes, options = args
1158
1353
  options ||= {}
1159
1354
  modify_detector = Object.new
1160
1355
  modify_detector.instance_variable_set("@called", false)
1356
+ modify_detector.instance_variable_set("@entries", [])
1161
1357
  def modify_detector.modify(dn, entries, options)
1162
1358
  @called = true
1359
+ @entries = entries
1163
1360
  end
1164
1361
  options[:connection] = modify_detector
1165
1362
  result = super(dn, attributes, options)
1166
1363
  modify_called = modify_detector.instance_variable_get("@called")
1364
+ entries = modify_detector.instance_variable_get("@entries")
1167
1365
  result
1168
1366
  end
1169
1367
  yield
1170
- modify_called
1368
+ {
1369
+ :modified => modify_called,
1370
+ :entries => entries,
1371
+ }
1171
1372
  end
1172
1373
 
1173
1374
  def assert_to_ldif(entry)
@@ -9,13 +9,45 @@ class TestBasePerInstance < Test::Unit::TestCase
9
9
  end
10
10
 
11
11
  priority :must
12
+ def test_dn_with_sub_base_first
13
+ sub_user = @user_class.new(dn: "uid=user1,ou=Sub,#{@user_class.base}",
14
+ uid: "user1")
15
+ # Order is important. #base should be called before #dn.
16
+ base = sub_user.base.to_s
17
+ dn = sub_user.dn.to_s
18
+ assert_equal([
19
+ "ou=Sub,#{@user_class.base}",
20
+ "uid=user1,ou=Sub,#{@user_class.base}",
21
+ ],
22
+ [
23
+ base,
24
+ dn,
25
+ ])
26
+ end
27
+
28
+ def test_dn_with_sub_base_last
29
+ sub_user = @user_class.new(uid: "user1",
30
+ dn: "uid=user1,ou=Sub,#{@user_class.base}")
31
+ # Order is important. #base should be called before #dn.
32
+ base = sub_user.base.to_s
33
+ dn = sub_user.dn.to_s
34
+ assert_equal([
35
+ "ou=Sub,#{@user_class.base}",
36
+ "uid=user1,ou=Sub,#{@user_class.base}",
37
+ ],
38
+ [
39
+ base,
40
+ dn,
41
+ ])
42
+ end
43
+
44
+ priority :normal
12
45
  def test_set_base
13
46
  guest = @user_class.new("guest")
14
47
  guest.base = "ou=Sub"
15
48
  assert_equal("uid=guest,ou=Sub,#{@user_class.base}", guest.dn)
16
49
  end
17
50
 
18
- priority :normal
19
51
  def test_dn_is_base
20
52
  entry_class = Class.new(ActiveLdap::Base)
21
53
  entry_class.ldap_mapping :prefix => "",
@@ -6,10 +6,10 @@ class TestCallback < Test::Unit::TestCase
6
6
  priority :must
7
7
  def test_new
8
8
  initialized_entries = []
9
- @group_class.instance_variable_set("@initialized_entries",
10
- initialized_entries)
11
9
  @group_class.module_eval do
12
- after_initialize "self.class.instance_variable_get('@initialized_entries') << self"
10
+ after_initialize do
11
+ initialized_entries << self
12
+ end
13
13
  end
14
14
  assert_equal([], initialized_entries)
15
15
  new_group = @group_class.new(:cn => "new-cn")
@@ -22,12 +22,14 @@ class TestCallback < Test::Unit::TestCase
22
22
  make_temporary_group do |group|
23
23
  found_entries = []
24
24
  initialized_entries = []
25
- @group_class.instance_variable_set("@found_entries", found_entries)
26
- @group_class.instance_variable_set("@initialized_entries",
27
- initialized_entries)
28
25
  @group_class.module_eval do
29
- after_find "self.class.instance_variable_get('@found_entries') << self"
30
- after_initialize "self.class.instance_variable_get('@initialized_entries') << self"
26
+ prepend ActiveLdap::Callbacks::CallbackedInstantiatable
27
+ after_find do
28
+ found_entries << self
29
+ end
30
+ after_initialize do
31
+ initialized_entries << self
32
+ end
31
33
  end
32
34
 
33
35
  assert_equal([], found_entries)
@@ -3,6 +3,7 @@ require 'al-test-utils'
3
3
  class TestConnection < Test::Unit::TestCase
4
4
  include AlTestUtils::Config
5
5
  include AlTestUtils::MockLogger
6
+ include AlTestUtils::Omittable
6
7
 
7
8
  def setup
8
9
  super
@@ -23,6 +24,9 @@ class TestConnection < Test::Unit::TestCase
23
24
  end
24
25
 
25
26
  def test_retry_limit_0_with_nonexistent_host_with_timeout
27
+ omit_if_ldap("this test will take a long time...")
28
+ omit_if_jruby("JNI adapter returns connection error immediately. " +
29
+ "So timeout isn't invoked.")
26
30
  config = current_configuration.merge("host" => "192.168.29.29",
27
31
  "retry_limit" => 0,
28
32
  "timeout" => 1)
@@ -57,6 +57,40 @@ class TestConnectionPerClass < Test::Unit::TestCase
57
57
  assert_equal([sub2_base], sub2_class.find(:all).collect(&:dn))
58
58
  end
59
59
 
60
+ def test_multi_same_setup_connections
61
+ make_ou("Sub")
62
+ sub_class1 = ou_class("ou=Sub")
63
+ sub_class2 = ou_class("ou=Sub")
64
+
65
+ configuration = current_configuration.symbolize_keys
66
+ configuration[:scope] = :base
67
+ current_base = configuration[:base]
68
+ sub_configuration = configuration.dup
69
+ sub_base = "ou=Sub,#{current_base}"
70
+ sub_configuration[:base] = sub_base
71
+
72
+ sub_class1.setup_connection(sub_configuration)
73
+ sub_class2.setup_connection(sub_configuration)
74
+
75
+ sub_configuration1 = sub_class1.configuration
76
+ sub_configuration2 = sub_class2.configuration
77
+
78
+ assert_not_nil(sub_configuration1)
79
+ assert_not_nil(sub_configuration2)
80
+
81
+ sub_class1.setup_connection(sub_configuration.dup)
82
+ sub_class1.prefix = nil
83
+
84
+ assert_equal([
85
+ sub_configuration1,
86
+ sub_configuration2,
87
+ ],
88
+ [
89
+ sub_class1.configuration,
90
+ sub_class2.configuration,
91
+ ])
92
+ end
93
+
60
94
  def test_bind
61
95
  non_anon_class = ou_class("ou=NonAnonymous")
62
96
  anon_class = ou_class("ou=Anonymous")
data/test/test_dn.rb CHANGED
@@ -72,6 +72,13 @@ class TestDN < Test::Unit::TestCase
72
72
  "dc = \" l o c a l \" , dc = \"+n,\\\"e\\\";t\"")
73
73
  end
74
74
 
75
+ def test_parse_dn_with_spaces_in_attribute_value
76
+ assert_dn([["o", "xxx "], ["dc", "local"]], "o=xxx\\ ,dc=local")
77
+ assert_dn([["o", " xxx"], ["dc", "local"]], "o=\\ xxx,dc=local")
78
+ assert_dn([["o", "xxx yyy"], ["dc", "local"]], "o=xxx\\ yyy,dc=local")
79
+ assert_dn([["o", " xxx "], ["dc", "local"]], "o=\\ xxx\\ ,dc=local")
80
+ end
81
+
75
82
  def test_parse_dn_in_rfc2253
76
83
  assert_dn([
77
84
  {"cn" => "Steve Kille"},
data/test/test_entry.rb CHANGED
@@ -11,6 +11,7 @@ class TestEntry < Test::Unit::TestCase
11
11
  all_entries = [ActiveLdap::Base.base]
12
12
  all_entries += [user.dn, user.base]
13
13
  all_entries += [group.dn, group.base]
14
+ all_entries += [@group_of_urls_class.base]
14
15
  assert_equal(all_entries.sort,
15
16
  ActiveLdap::Entry.all.collect(&:dn).sort)
16
17
  end
data/test/test_find.rb CHANGED
@@ -3,7 +3,18 @@ require 'al-test-utils'
3
3
  class TestFind < Test::Unit::TestCase
4
4
  include AlTestUtils
5
5
 
6
- priority :must
6
+ def test_find_paged
7
+ page_size = 126
8
+ n_users = page_size + 1
9
+ uids = n_users.times.collect do
10
+ user, _password = make_temporary_user
11
+ user.uid
12
+ end
13
+ users = @user_class.find(:all, page_size: page_size)
14
+ assert_equal(uids.sort,
15
+ users.collect(&:uid).sort)
16
+ end
17
+
7
18
  def test_find_with_dn
8
19
  make_temporary_user do |user,|
9
20
  assert_equal(user.dn, @user_class.find(user.dn).dn)
@@ -11,7 +22,6 @@ class TestFind < Test::Unit::TestCase
11
22
  end
12
23
  end
13
24
 
14
- priority :normal
15
25
  def test_find_with_special_value_prefix
16
26
  # \2C == ','
17
27
  make_ou("a\\2Cb,ou=Users")
@@ -63,7 +73,8 @@ class TestFind < Test::Unit::TestCase
63
73
 
64
74
  def test_find_operational_attributes
65
75
  make_temporary_user do |user, password|
66
- found_user = @user_class.find(user.uid, :attributes => ["*", "+"])
76
+ found_user = @user_class.find(user.uid,
77
+ :include_operational_attributes => true)
67
78
  assert_equal(Time.now.utc.iso8601,
68
79
  found_user.modify_timestamp.utc.iso8601)
69
80
  end
@@ -17,7 +17,7 @@ class TestSupportedControl < Test::Unit::TestCase
17
17
  end
18
18
 
19
19
  def test_false
20
- assert_true(paged_results?(ActiveLdap::LdapControls::PAGED_RESULTS))
20
+ assert_false(paged_results?(ActiveLdap::LdapControls::ASSERTION))
21
21
  end
22
22
  end
23
23
  end
data/test/test_syntax.rb CHANGED
@@ -117,6 +117,11 @@ class TestSyntax < Test::Unit::TestCase
117
117
  "19941216103212.345+0900")
118
118
  end
119
119
 
120
+ def test_timezone_difference_with_minutes
121
+ assert_type_cast(Time.parse("2019-02-13 15:54:23 +0530"),
122
+ "20190213155423+0530")
123
+ end
124
+
120
125
  def test_year_month_day_hour_minute
121
126
  assert_type_cast(Time.parse("2008/01/07 03:46:00"),
122
127
  "200801070346")