activeldap 0.9.0 → 0.10.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES +61 -0
- data/README +8 -1
- data/Rakefile +4 -1
- data/benchmark/bench-al.rb +12 -2
- data/examples/al-admin/app/controllers/account_controller.rb +4 -3
- data/examples/al-admin/app/controllers/application.rb +5 -2
- data/examples/al-admin/app/controllers/directory_controller.rb +3 -1
- data/examples/al-admin/app/controllers/users_controller.rb +19 -4
- data/examples/al-admin/app/controllers/welcome_controller.rb +4 -2
- data/examples/al-admin/app/helpers/application_helper.rb +7 -1
- data/examples/al-admin/app/helpers/url_helper.rb +4 -0
- data/examples/al-admin/app/models/ldap_user.rb +4 -0
- data/examples/al-admin/app/views/_entry/{_attributes_information.rhtml → _attributes_information.html.erb} +0 -0
- data/examples/al-admin/app/views/_entry/{_entry.rhtml → _entry.html.erb} +0 -0
- data/examples/al-admin/app/views/_schema/{_aliases.rhtml → _aliases.html.erb} +0 -0
- data/examples/al-admin/app/views/_switcher/{_after.rhtml → _after.html.erb} +0 -0
- data/examples/al-admin/app/views/_switcher/{_before.rhtml → _before.html.erb} +0 -0
- data/examples/al-admin/app/views/account/{login.rhtml → login.html.erb} +0 -0
- data/examples/al-admin/app/views/account/{sign_up.rhtml → sign_up.html.erb} +0 -0
- data/examples/al-admin/app/views/attributes/{_attributes.rhtml → _attributes.html.erb} +0 -0
- data/examples/al-admin/app/views/attributes/{_detail.rhtml → _detail.html.erb} +0 -0
- data/examples/al-admin/app/views/attributes/{index.rhtml → index.html.erb} +0 -0
- data/examples/al-admin/app/views/attributes/{show.rhtml → show.html.erb} +0 -0
- data/examples/al-admin/app/views/directory/{_tree.rhtml → _tree.html.erb} +0 -0
- data/examples/al-admin/app/views/directory/{_tree_view_js.rhtml → _tree_view_js.html.erb} +4 -5
- data/examples/al-admin/app/views/directory/{index.rhtml → index.html.erb} +0 -0
- data/examples/al-admin/app/views/directory/{populate.rhtml → populate.html.erb} +0 -0
- data/examples/al-admin/app/views/layouts/{_footer.rhtml → _footer.html.erb} +0 -0
- data/examples/al-admin/app/views/layouts/{_header_menu.rhtml → _header_menu.html.erb} +0 -0
- data/examples/al-admin/app/views/layouts/{_main_menu.rhtml → _main_menu.html.erb} +0 -0
- data/examples/al-admin/app/views/layouts/{application.rhtml → application.html.erb} +3 -2
- data/examples/al-admin/app/views/object_classes/{_attributes.rhtml → _attributes.html.erb} +0 -0
- data/examples/al-admin/app/views/object_classes/{_object_classes.rhtml → _object_classes.html.erb} +0 -0
- data/examples/al-admin/app/views/object_classes/{index.rhtml → index.html.erb} +0 -0
- data/examples/al-admin/app/views/object_classes/{show.rhtml → show.html.erb} +0 -0
- data/examples/al-admin/app/views/syntaxes/{_detail.rhtml → _detail.html.erb} +0 -0
- data/examples/al-admin/app/views/syntaxes/{_syntaxes.rhtml → _syntaxes.html.erb} +0 -0
- data/examples/al-admin/app/views/syntaxes/{index.rhtml → index.html.erb} +0 -0
- data/examples/al-admin/app/views/syntaxes/{show.rhtml → show.html.erb} +0 -0
- data/examples/al-admin/app/views/users/{_attributes_update_form.rhtml → _attributes_update_form.html.erb} +0 -0
- data/examples/al-admin/app/views/users/{_form.rhtml → _form.html.erb} +0 -0
- data/examples/al-admin/app/views/users/{_object_classes_update_form.rhtml → _object_classes_update_form.html.erb} +7 -1
- data/examples/al-admin/app/views/users/{_password_change_form.rhtml → _password_change_form.html.erb} +0 -0
- data/examples/al-admin/app/views/users/{edit.rhtml → edit.html.erb} +0 -0
- data/examples/al-admin/app/views/users/{index.rhtml → index.html.erb} +0 -0
- data/examples/al-admin/app/views/users/{show.rhtml → show.html.erb} +0 -0
- data/examples/al-admin/app/views/welcome/{index.rhtml → index.html.erb} +0 -0
- data/examples/al-admin/config/boot.rb +96 -32
- data/examples/al-admin/config/environment.rb +30 -36
- data/examples/al-admin/config/environments/development.rb +2 -5
- data/examples/al-admin/config/environments/production.rb +1 -0
- data/examples/al-admin/config/environments/test.rb +4 -1
- data/examples/al-admin/config/initializers/exception_notifier.rb +2 -0
- data/examples/al-admin/config/initializers/gettext.rb +1 -0
- data/examples/al-admin/config/initializers/inflections.rb +10 -0
- data/examples/al-admin/config/initializers/mime_types.rb +5 -0
- data/examples/al-admin/config/initializers/ralative_url_support.rb +1 -0
- data/examples/al-admin/config/routes.rb +24 -12
- data/examples/al-admin/lib/authenticated_system.rb +1 -1
- data/examples/al-admin/lib/tasks/gettext.rake +1 -1
- data/examples/al-admin/po/en/al-admin.po +102 -100
- data/examples/al-admin/po/ja/al-admin.po +112 -110
- data/examples/al-admin/po/nl/al-admin.po +117 -110
- data/examples/al-admin/public/javascripts/controls.js +484 -354
- data/examples/al-admin/public/javascripts/dragdrop.js +88 -58
- data/examples/al-admin/public/javascripts/effects.js +396 -364
- data/examples/al-admin/public/javascripts/prototype.js +2817 -1107
- data/examples/al-admin/public/stylesheets/base.css +5 -0
- data/examples/al-admin/script/performance/request +3 -0
- data/lib/active_ldap.rb +13 -10
- data/lib/active_ldap/adapter/base.rb +159 -43
- data/lib/active_ldap/adapter/jndi.rb +175 -0
- data/lib/active_ldap/adapter/jndi_connection.rb +180 -0
- data/lib/active_ldap/adapter/ldap.rb +91 -46
- data/lib/active_ldap/adapter/ldap_ext.rb +19 -5
- data/lib/active_ldap/adapter/net_ldap.rb +52 -44
- data/lib/active_ldap/association/has_many_wrap.rb +1 -1
- data/lib/active_ldap/attributes.rb +20 -95
- data/lib/active_ldap/base.rb +195 -186
- data/lib/active_ldap/callbacks.rb +33 -0
- data/lib/active_ldap/command.rb +3 -3
- data/lib/active_ldap/connection.rb +21 -3
- data/lib/active_ldap/distinguished_name.rb +18 -11
- data/lib/active_ldap/entry_attribute.rb +78 -0
- data/lib/active_ldap/human_readable.rb +20 -0
- data/lib/active_ldap/ldif.rb +860 -10
- data/lib/active_ldap/object_class.rb +6 -4
- data/lib/active_ldap/operations.rb +129 -22
- data/lib/active_ldap/schema.rb +118 -9
- data/lib/active_ldap/schema/syntaxes.rb +33 -16
- data/lib/active_ldap/validations.rb +74 -65
- data/po/en/active-ldap.po +378 -768
- data/po/ja/active-ldap.po +935 -868
- data/rails/plugin/active_ldap/init.rb +40 -2
- data/test/al-test-utils.rb +78 -58
- data/test/command.rb +51 -1
- data/test/test-unit-ext/priority.rb +29 -6
- data/test/test_adapter.rb +21 -2
- data/test/test_attributes.rb +13 -0
- data/test/test_base.rb +51 -1
- data/test/test_connection.rb +2 -1
- data/test/test_connection_per_class.rb +55 -1
- data/test/test_connection_per_dn.rb +29 -1
- data/test/test_find.rb +73 -0
- data/test/test_ldif.rb +1829 -15
- data/test/test_load.rb +126 -0
- data/test/test_object_class.rb +23 -5
- data/test/test_schema.rb +28 -0
- data/test/test_syntax.rb +22 -11
- data/test/test_user.rb +16 -25
- data/test/test_useradd-binary.rb +1 -1
- data/test/test_usermod-binary-add-time.rb +1 -1
- data/test/test_usermod-binary-add.rb +1 -1
- data/test/test_validation.rb +100 -22
- metadata +77 -71
- data/data/locale/en/LC_MESSAGES/active-ldap.mo +0 -0
- data/data/locale/ja/LC_MESSAGES/active-ldap.mo +0 -0
- data/examples/al-admin/app/views/layouts/_flash_box.rhtml +0 -4
- data/examples/al-admin/public/stylesheets/common.css +0 -2
- data/examples/al-admin/script/breakpointer +0 -3
@@ -1,7 +1,7 @@
|
|
1
1
|
require_library_or_gem 'active_ldap'
|
2
2
|
ActiveLdap::Base.logger ||= RAILS_DEFAULT_LOGGER
|
3
3
|
|
4
|
-
required_version = ["0", "
|
4
|
+
required_version = ["0", "9", "1"]
|
5
5
|
if (ActiveLdap::VERSION.split(".") <=> required_version) < 0
|
6
6
|
ActiveLdap::Base.class_eval do
|
7
7
|
format = _("You need ActiveLdap %s or later")
|
@@ -21,6 +21,44 @@ else
|
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
24
|
-
class ActionView::Base
|
24
|
+
class ::ActionView::Base
|
25
25
|
include ActiveLdap::Helper
|
26
26
|
end
|
27
|
+
|
28
|
+
module ::ActionController
|
29
|
+
module LdapBenchmarking
|
30
|
+
def self.included(base)
|
31
|
+
base.class_eval do
|
32
|
+
alias_method_chain :render, :active_ldap_benchmark
|
33
|
+
alias_method_chain :rendering_runtime, :active_ldap
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
protected
|
38
|
+
def render_with_active_ldap_benchmark(*args, &block)
|
39
|
+
if logger
|
40
|
+
@ldap_runtime_before_render = ActiveLdap::Base.reset_runtime
|
41
|
+
result = render_without_active_ldap_benchmark(*args, &block)
|
42
|
+
@ldap_runtime_after_render = ActiveLdap::Base.reset_runtime
|
43
|
+
@rendering_runtime -= @ldap_runtime_after_render
|
44
|
+
result
|
45
|
+
else
|
46
|
+
render_without_active_ldap_benchmark(*args, &block)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
private
|
51
|
+
def rendering_runtime_with_active_ldap(runtime)
|
52
|
+
result = rendering_runtime_without_active_ldap(runtime)
|
53
|
+
ldap_runtime = ActiveLdap::Base.reset_runtime
|
54
|
+
ldap_runtime += @ldap_runtime_before_render || 0
|
55
|
+
ldap_runtime += @ldap_runtime_after_render || 0
|
56
|
+
ldap_percentage = ldap_runtime * 100 / runtime
|
57
|
+
result + (" | LDAP: %.5f (%d%%)" % [ldap_runtime, ldap_percentage])
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
class Base
|
62
|
+
include LdapBenchmarking
|
63
|
+
end
|
64
|
+
end
|
data/test/al-test-utils.rb
CHANGED
@@ -17,6 +17,7 @@ module AlTestUtils
|
|
17
17
|
def self.included(base)
|
18
18
|
base.class_eval do
|
19
19
|
include ActiveLdap::GetTextSupport
|
20
|
+
include Assertions
|
20
21
|
include Config
|
21
22
|
include Connection
|
22
23
|
include Populate
|
@@ -26,6 +27,16 @@ module AlTestUtils
|
|
26
27
|
end
|
27
28
|
end
|
28
29
|
|
30
|
+
module Assertions
|
31
|
+
def assert_true(actual, *args)
|
32
|
+
assert_equal(true, actual, *args)
|
33
|
+
end
|
34
|
+
|
35
|
+
def assert_false(actual, *args)
|
36
|
+
assert_equal(false, actual, *args)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
29
40
|
module Config
|
30
41
|
def setup
|
31
42
|
super
|
@@ -49,12 +60,72 @@ module AlTestUtils
|
|
49
60
|
raise "config file for testing doesn't exist: #{@config_file}"
|
50
61
|
end
|
51
62
|
config = YAML.load(ERB.new(File.read(@config_file)).result)
|
63
|
+
_adapter = adapter
|
52
64
|
config.each do |key, value|
|
53
|
-
adapter =
|
54
|
-
value[:adapter] = adapter if adapter
|
65
|
+
value[:adapter] = _adapter if _adapter
|
55
66
|
end
|
56
67
|
config
|
57
68
|
end
|
69
|
+
|
70
|
+
def adapter
|
71
|
+
ENV["ACTIVE_LDAP_TEST_ADAPTER"]
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
module ExampleFile
|
76
|
+
def certificate_path
|
77
|
+
File.join(@example_dir, 'example.der')
|
78
|
+
end
|
79
|
+
|
80
|
+
@@certificate = nil
|
81
|
+
def certificate
|
82
|
+
return @@certificate if @@certificate
|
83
|
+
if File.exists?(certificate_path)
|
84
|
+
@@certificate = File.read(certificate_path)
|
85
|
+
return @@certificate
|
86
|
+
end
|
87
|
+
|
88
|
+
require 'openssl'
|
89
|
+
rsa = OpenSSL::PKey::RSA.new(512)
|
90
|
+
comment = "Generated by Ruby/OpenSSL"
|
91
|
+
|
92
|
+
cert = OpenSSL::X509::Certificate.new
|
93
|
+
cert.version = 3
|
94
|
+
cert.serial = 0
|
95
|
+
subject = [["OU", "test"],
|
96
|
+
["CN", Socket.gethostname]]
|
97
|
+
name = OpenSSL::X509::Name.new(subject)
|
98
|
+
cert.subject = name
|
99
|
+
cert.issuer = name
|
100
|
+
cert.not_before = Time.now
|
101
|
+
cert.not_after = Time.now + (365*24*60*60)
|
102
|
+
cert.public_key = rsa.public_key
|
103
|
+
|
104
|
+
ef = OpenSSL::X509::ExtensionFactory.new(nil, cert)
|
105
|
+
ef.issuer_certificate = cert
|
106
|
+
cert.extensions = [
|
107
|
+
ef.create_extension("basicConstraints","CA:FALSE"),
|
108
|
+
ef.create_extension("keyUsage", "keyEncipherment"),
|
109
|
+
ef.create_extension("subjectKeyIdentifier", "hash"),
|
110
|
+
ef.create_extension("extendedKeyUsage", "serverAuth"),
|
111
|
+
ef.create_extension("nsComment", comment),
|
112
|
+
]
|
113
|
+
aki = ef.create_extension("authorityKeyIdentifier",
|
114
|
+
"keyid:always,issuer:always")
|
115
|
+
cert.add_extension(aki)
|
116
|
+
cert.sign(rsa, OpenSSL::Digest::SHA1.new)
|
117
|
+
|
118
|
+
@@certificate = cert.to_der
|
119
|
+
@@certificate
|
120
|
+
end
|
121
|
+
|
122
|
+
def jpeg_photo_path
|
123
|
+
File.join(@example_dir, 'example.jpg')
|
124
|
+
end
|
125
|
+
|
126
|
+
def jpeg_photo
|
127
|
+
File.open(jpeg_photo_path, "rb") {|f| f.read}
|
128
|
+
end
|
58
129
|
end
|
59
130
|
|
60
131
|
module Connection
|
@@ -153,7 +224,8 @@ module AlTestUtils
|
|
153
224
|
end
|
154
225
|
|
155
226
|
module TemporaryEntry
|
156
|
-
|
227
|
+
include ExampleFile
|
228
|
+
|
157
229
|
def setup
|
158
230
|
super
|
159
231
|
@user_index = 0
|
@@ -218,8 +290,9 @@ module AlTestUtils
|
|
218
290
|
yield(uid)
|
219
291
|
ensure
|
220
292
|
if @user_class.exists?(uid)
|
221
|
-
@user_class.find(uid)
|
222
|
-
|
293
|
+
user = @user_class.find(uid)
|
294
|
+
user.remove_connection
|
295
|
+
@user_class.delete(user.dn)
|
223
296
|
end
|
224
297
|
end
|
225
298
|
|
@@ -236,59 +309,6 @@ module AlTestUtils
|
|
236
309
|
def default_gid
|
237
310
|
"10000#{@group_index}"
|
238
311
|
end
|
239
|
-
|
240
|
-
def certificate_path
|
241
|
-
File.join(@example_dir, 'example.der')
|
242
|
-
end
|
243
|
-
|
244
|
-
def certificate
|
245
|
-
return @@certificate if @@certificate
|
246
|
-
if File.exists?(certificate_path)
|
247
|
-
@@certificate = File.read(certificate_path)
|
248
|
-
return @@certificate
|
249
|
-
end
|
250
|
-
|
251
|
-
require 'openssl'
|
252
|
-
rsa = OpenSSL::PKey::RSA.new(512)
|
253
|
-
comment = "Generated by Ruby/OpenSSL"
|
254
|
-
|
255
|
-
cert = OpenSSL::X509::Certificate.new
|
256
|
-
cert.version = 3
|
257
|
-
cert.serial = 0
|
258
|
-
subject = [["OU", "test"],
|
259
|
-
["CN", Socket.gethostname]]
|
260
|
-
name = OpenSSL::X509::Name.new(subject)
|
261
|
-
cert.subject = name
|
262
|
-
cert.issuer = name
|
263
|
-
cert.not_before = Time.now
|
264
|
-
cert.not_after = Time.now + (365*24*60*60)
|
265
|
-
cert.public_key = rsa.public_key
|
266
|
-
|
267
|
-
ef = OpenSSL::X509::ExtensionFactory.new(nil, cert)
|
268
|
-
ef.issuer_certificate = cert
|
269
|
-
cert.extensions = [
|
270
|
-
ef.create_extension("basicConstraints","CA:FALSE"),
|
271
|
-
ef.create_extension("keyUsage", "keyEncipherment"),
|
272
|
-
ef.create_extension("subjectKeyIdentifier", "hash"),
|
273
|
-
ef.create_extension("extendedKeyUsage", "serverAuth"),
|
274
|
-
ef.create_extension("nsComment", comment),
|
275
|
-
]
|
276
|
-
aki = ef.create_extension("authorityKeyIdentifier",
|
277
|
-
"keyid:always,issuer:always")
|
278
|
-
cert.add_extension(aki)
|
279
|
-
cert.sign(rsa, OpenSSL::Digest::SHA1.new)
|
280
|
-
|
281
|
-
@@certificate = cert.to_der
|
282
|
-
@@certificate
|
283
|
-
end
|
284
|
-
|
285
|
-
def jpeg_photo_path
|
286
|
-
File.join(@example_dir, 'example.jpg')
|
287
|
-
end
|
288
|
-
|
289
|
-
def jpeg_photo
|
290
|
-
File.read(jpeg_photo_path)
|
291
|
-
end
|
292
312
|
end
|
293
313
|
|
294
314
|
module CommandSupport
|
data/test/command.rb
CHANGED
@@ -27,11 +27,12 @@ module Command
|
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
30
|
-
def run(cmd, *args)
|
30
|
+
def run(cmd, *args, &block)
|
31
31
|
raise ArgumentError, "command isn't specified" if cmd.nil?
|
32
32
|
if args.any? {|x| x.nil?}
|
33
33
|
raise ArgumentError, "args has nil: #{args.inspect}"
|
34
34
|
end
|
35
|
+
return java_run(cmd, *args, &block) unless Kernel.respond_to?(:fork)
|
35
36
|
in_r, in_w = IO.pipe
|
36
37
|
out_r, out_w = IO.pipe
|
37
38
|
pid = exit_status = nil
|
@@ -59,4 +60,53 @@ module Command
|
|
59
60
|
pid, status = Process.waitpid2(pid)
|
60
61
|
[status.exited? && status.exitstatus.zero?, out_r.read]
|
61
62
|
end
|
63
|
+
|
64
|
+
def java_run(cmd, *args, &block)
|
65
|
+
runtime = java.lang.Runtime.get_runtime
|
66
|
+
process = runtime.exec([cmd, *args].to_java(:string))
|
67
|
+
input = JavaReaderWrapper.new(process.get_input_stream)
|
68
|
+
output = JavaWriterWrapper.new(process.get_output_stream)
|
69
|
+
error = JavaReaderWrapper.new(process.get_error_stream)
|
70
|
+
yield(input, output) if block_given?
|
71
|
+
output.close
|
72
|
+
success = process.wait_for.zero?
|
73
|
+
|
74
|
+
[success, input.read + error.read]
|
75
|
+
end
|
76
|
+
|
77
|
+
class JavaReaderWrapper
|
78
|
+
def initialize(input)
|
79
|
+
@input = input
|
80
|
+
end
|
81
|
+
|
82
|
+
def read
|
83
|
+
result = ""
|
84
|
+
while (c = @input.read) != -1
|
85
|
+
result << c.chr
|
86
|
+
end
|
87
|
+
result
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
class JavaWriterWrapper
|
92
|
+
def initialize(output)
|
93
|
+
output = java.io.OutputStreamWriter.new(output)
|
94
|
+
@output = java.io.BufferedWriter.new(output)
|
95
|
+
end
|
96
|
+
|
97
|
+
def puts(*messages)
|
98
|
+
messages.each do |message|
|
99
|
+
message += "\n" if /\n/ !~ message
|
100
|
+
@output.write(message)
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
def flush
|
105
|
+
@output.flush
|
106
|
+
end
|
107
|
+
|
108
|
+
def close
|
109
|
+
@output.close
|
110
|
+
end
|
111
|
+
end
|
62
112
|
end
|
@@ -23,12 +23,16 @@ module Test
|
|
23
23
|
end
|
24
24
|
end
|
25
25
|
|
26
|
+
alias_method :method_added_without_priority, :method_added
|
26
27
|
def method_added(name)
|
28
|
+
method_added_without_priority(name)
|
27
29
|
set_priority(name) if defined?(@priority_initialized)
|
28
30
|
end
|
29
31
|
|
30
32
|
def priority(name, *tests)
|
31
|
-
|
33
|
+
singleton_class = (class << self; self; end)
|
34
|
+
priority_check_method = priority_check_method_name(name)
|
35
|
+
unless singleton_class.private_method_defined?(priority_check_method)
|
32
36
|
raise ArgumentError, "unknown priority: #{name}"
|
33
37
|
end
|
34
38
|
if tests.empty?
|
@@ -106,16 +110,35 @@ module Test
|
|
106
110
|
end
|
107
111
|
|
108
112
|
def result_dir
|
109
|
-
|
110
|
-
|
113
|
+
components = [".test-result", self.class.name, @method_name.to_s]
|
114
|
+
dir = File.join(File.dirname($0), *components)
|
111
115
|
dir = File.expand_path(dir)
|
112
|
-
|
116
|
+
begin
|
117
|
+
FileUtils.mkdir_p(dir)
|
118
|
+
rescue Errno::EACCES
|
119
|
+
retry_dir = File.join(File.dirname(__FILE__), "..", *components)
|
120
|
+
retry_dir = File.expand_path(retry_dir)
|
121
|
+
raise if retry_dir == dir
|
122
|
+
dir = retry_dir
|
123
|
+
retry
|
124
|
+
end
|
113
125
|
dir
|
114
126
|
end
|
115
127
|
|
116
128
|
def passed_file
|
117
129
|
File.join(result_dir, "passed")
|
118
130
|
end
|
131
|
+
|
132
|
+
def escaped_method_name
|
133
|
+
@method_name.to_s.gsub(/[!?]$/) do |matched|
|
134
|
+
case matched
|
135
|
+
when "!"
|
136
|
+
".destructive"
|
137
|
+
when "?"
|
138
|
+
".predicate"
|
139
|
+
end
|
140
|
+
end
|
141
|
+
end
|
119
142
|
end
|
120
143
|
|
121
144
|
class TestSuite
|
@@ -150,9 +173,9 @@ module Test
|
|
150
173
|
end
|
151
174
|
|
152
175
|
class AutoRunner
|
153
|
-
alias_method :
|
176
|
+
alias_method :options_without_priority, :options
|
154
177
|
def options
|
155
|
-
opts =
|
178
|
+
opts = options_without_priority
|
156
179
|
opts.on("--[no-]priority", "use priority mode") do |bool|
|
157
180
|
TestSuite.priority_mode = bool
|
158
181
|
end
|
data/test/test_adapter.rb
CHANGED
@@ -10,6 +10,19 @@ class TestAdapter < Test::Unit::TestCase
|
|
10
10
|
end
|
11
11
|
|
12
12
|
priority :must
|
13
|
+
def test_operator
|
14
|
+
assert_parse_filter("(uid~=Alice)", ["uid", "~=", "Alice"])
|
15
|
+
assert_parse_filter("(&(uid~=Alice)(uid~=Bob))",
|
16
|
+
["uid", "~=", "Alice", "Bob"])
|
17
|
+
assert_parse_filter("(uid~=Alice)", [["uid", "~=", "Alice"]])
|
18
|
+
assert_parse_filter("(|(uid~=Alice)(uid~=Bob))",
|
19
|
+
[:or,
|
20
|
+
["uid", "~=", "Alice"],
|
21
|
+
["uid", "~=", "Bob"]])
|
22
|
+
assert_parse_filter("(|(uid~=Alice)(uid~=Bob))",
|
23
|
+
[:or,
|
24
|
+
["uid", "~=", "Alice", "Bob"]])
|
25
|
+
end
|
13
26
|
|
14
27
|
priority :normal
|
15
28
|
def test_filter_with_escaped_character
|
@@ -73,14 +86,20 @@ class TestAdapter < Test::Unit::TestCase
|
|
73
86
|
assert_parse_filter("(&(gidNumber=100001)" +
|
74
87
|
"(|(uid=temp-user1)(uid=temp-user2)))",
|
75
88
|
[:and,
|
76
|
-
[:and, {"gidNumber"=>["100001"]}],
|
77
|
-
[:or, {"uid"=>["temp-user1", "temp-user2"]}]])
|
89
|
+
[:and, {"gidNumber" => ["100001"]}],
|
90
|
+
[:or, {"uid" => ["temp-user1", "temp-user2"]}]])
|
78
91
|
assert_parse_filter("(&(gidNumber=100001)" +
|
79
92
|
"(objectClass=person)(objectClass=posixAccount))",
|
80
93
|
[:and,
|
81
94
|
[:or, ["gidNumber", "100001"]],
|
82
95
|
["objectClass", "person"],
|
83
96
|
["objectClass", "posixAccount"]])
|
97
|
+
assert_parse_filter("(&(!(|(gidNumber=100001)(gidNumber=100002)))" +
|
98
|
+
"(objectClass=person)(!(objectClass=posixAccount)))",
|
99
|
+
[:and,
|
100
|
+
[:not, [:or, ["gidNumber", "100001", "100002"]]],
|
101
|
+
["objectClass", "person"],
|
102
|
+
[:not, ["objectClass", "posixAccount"]]])
|
84
103
|
end
|
85
104
|
|
86
105
|
def test_invalid_operator
|
data/test/test_attributes.rb
CHANGED
@@ -34,12 +34,25 @@ class TestAttributes < Test::Unit::TestCase
|
|
34
34
|
ActiveLdap::Base.normalize_attribute("userCertificate", []))
|
35
35
|
assert_equal(["usercertificate", [{"binary" => []}]],
|
36
36
|
ActiveLdap::Base.normalize_attribute("userCertificate", nil))
|
37
|
+
assert_equal(["usercertificate", [{"binary" => "BINARY DATA"}]],
|
38
|
+
ActiveLdap::Base.normalize_attribute("userCertificate",
|
39
|
+
"BINARY DATA"))
|
40
|
+
assert_equal(["usercertificate", [{"binary" => ["BINARY DATA"]}]],
|
41
|
+
ActiveLdap::Base.normalize_attribute("userCertificate",
|
42
|
+
{"binary" =>
|
43
|
+
["BINARY DATA"]}))
|
37
44
|
end
|
38
45
|
|
39
46
|
def test_unnormalize_attribute
|
47
|
+
assert_equal({"sn" => ["Surname"]},
|
48
|
+
ActiveLdap::Base.unnormalize_attribute("sn", ["Surname"]))
|
40
49
|
assert_equal({"userCertificate;binary" => []},
|
41
50
|
ActiveLdap::Base.unnormalize_attribute("userCertificate",
|
42
51
|
[{"binary" => []}]))
|
52
|
+
assert_equal({"userCertificate;binary" => ["BINARY DATA"]},
|
53
|
+
ActiveLdap::Base.unnormalize_attribute("userCertificate",
|
54
|
+
[{"binary" =>
|
55
|
+
["BINARY DATA"]}]))
|
43
56
|
end
|
44
57
|
|
45
58
|
def test_attr_protected
|
data/test/test_base.rb
CHANGED
@@ -1,11 +1,50 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
1
2
|
require 'al-test-utils'
|
2
3
|
|
3
4
|
class TestBase < Test::Unit::TestCase
|
4
5
|
include AlTestUtils
|
5
6
|
|
6
7
|
priority :must
|
8
|
+
def test_excluded_classes
|
9
|
+
mapping = {:classes => ["person"]}
|
10
|
+
person_class = Class.new(@user_class)
|
11
|
+
person_class.ldap_mapping(mapping)
|
12
|
+
|
13
|
+
no_organizational_person_class = Class.new(@user_class)
|
14
|
+
no_organizational_person_mapping =
|
15
|
+
mapping.merge(:excluded_classes => ["organizationalPerson"])
|
16
|
+
no_organizational_person_class.ldap_mapping(no_organizational_person_mapping)
|
17
|
+
|
18
|
+
no_simple_person_class = Class.new(@user_class)
|
19
|
+
no_simple_person_mapping =
|
20
|
+
mapping.merge(:excluded_classes => ['shadowAccount', 'inetOrgPerson',
|
21
|
+
"organizationalPerson"])
|
22
|
+
no_simple_person_class.ldap_mapping(no_simple_person_mapping)
|
23
|
+
|
24
|
+
make_temporary_user do |user1,|
|
25
|
+
make_temporary_user(:simple => true) do |user2,|
|
26
|
+
assert_equal([user1.dn, user2.dn].sort,
|
27
|
+
person_class.find(:all).collect(&:dn).sort)
|
28
|
+
|
29
|
+
no_organizational_people = no_organizational_person_class.find(:all)
|
30
|
+
assert_equal([user2.dn].sort,
|
31
|
+
no_organizational_people.collect(&:dn).sort)
|
32
|
+
|
33
|
+
assert_equal([user2.dn].sort,
|
34
|
+
no_simple_person_class.find(:all).collect(&:dn).sort)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
7
38
|
|
8
39
|
priority :normal
|
40
|
+
def test_new_with_dn
|
41
|
+
cn = "XXX"
|
42
|
+
dn = "cn=#{cn},#{@user_class.base}"
|
43
|
+
user = @user_class.new(ActiveLdap::DN.parse(dn))
|
44
|
+
assert_equal(cn, user.cn)
|
45
|
+
assert_equal(dn, user.dn)
|
46
|
+
end
|
47
|
+
|
9
48
|
def test_dn_attribute_per_instance_with_invalid_value
|
10
49
|
user = @user_class.new
|
11
50
|
assert_equal("uid", user.dn_attribute)
|
@@ -134,6 +173,15 @@ class TestBase < Test::Unit::TestCase
|
|
134
173
|
ou_class.search(:value => name).collect {|dn, attrs| dn})
|
135
174
|
end
|
136
175
|
|
176
|
+
def test_search_with_attributes_without_object_class
|
177
|
+
make_temporary_user do |user, password|
|
178
|
+
entries = @user_class.search(:filter => "#{user.dn_attribute}=#{user.id}",
|
179
|
+
:attributes => ["uidNumber"])
|
180
|
+
assert_equal([[user.dn, {"uidNumber" => [user.uid_number.to_s]}]],
|
181
|
+
entries)
|
182
|
+
end
|
183
|
+
end
|
184
|
+
|
137
185
|
def test_new_without_argument
|
138
186
|
user = @user_class.new
|
139
187
|
assert_equal(@user_class_classes, user.classes)
|
@@ -343,7 +391,9 @@ class TestBase < Test::Unit::TestCase
|
|
343
391
|
user2.attributes.reject {|k, v| k == "cn"})
|
344
392
|
|
345
393
|
user2.reload
|
346
|
-
assert_equal(user1.
|
394
|
+
assert_equal(user1.cn, user2.cn)
|
395
|
+
assert_equal(user1.attributes.reject {|k, v| k == "cn"},
|
396
|
+
user2.attributes.reject {|k, v| k == "cn"})
|
347
397
|
end
|
348
398
|
end
|
349
399
|
|