ruby-activeldap 0.8.2 → 0.8.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (83) hide show
  1. data/test/test_adapter.rb +17 -0
  2. data/test/test_associations.rb +19 -0
  3. data/test/test_attributes.rb +2 -1
  4. data/test/test_base.rb +28 -1
  5. data/test/test_base_per_instance.rb +2 -1
  6. data/test/test_callback.rb +2 -2
  7. data/test/test_connection.rb +2 -1
  8. data/test/test_connection_per_dn.rb +81 -0
  9. data/test/test_dn.rb +3 -2
  10. data/test/test_find.rb +35 -1
  11. data/test/test_object_class.rb +12 -1
  12. data/test/test_reflection.rb +16 -10
  13. data/test/test_schema.rb +141 -2
  14. data/test/test_user.rb +14 -4
  15. metadata +7 -104
  16. data/CHANGES +0 -397
  17. data/COPYING +0 -340
  18. data/LICENSE +0 -58
  19. data/Manifest.txt +0 -99
  20. data/README +0 -85
  21. data/Rakefile +0 -70
  22. data/TODO +0 -23
  23. data/benchmark/bench-al.rb +0 -152
  24. data/examples/config.yaml.example +0 -5
  25. data/examples/example.der +0 -0
  26. data/examples/example.jpg +0 -0
  27. data/examples/groupadd +0 -41
  28. data/examples/groupdel +0 -35
  29. data/examples/groupls +0 -49
  30. data/examples/groupmod +0 -42
  31. data/examples/lpasswd +0 -55
  32. data/examples/objects/group.rb +0 -13
  33. data/examples/objects/ou.rb +0 -4
  34. data/examples/objects/user.rb +0 -20
  35. data/examples/ouadd +0 -38
  36. data/examples/useradd +0 -45
  37. data/examples/useradd-binary +0 -50
  38. data/examples/userdel +0 -34
  39. data/examples/userls +0 -50
  40. data/examples/usermod +0 -42
  41. data/examples/usermod-binary-add +0 -47
  42. data/examples/usermod-binary-add-time +0 -51
  43. data/examples/usermod-binary-del +0 -48
  44. data/examples/usermod-lang-add +0 -43
  45. data/lib/active_ldap.rb +0 -964
  46. data/lib/active_ldap/adapter/base.rb +0 -461
  47. data/lib/active_ldap/adapter/ldap.rb +0 -232
  48. data/lib/active_ldap/adapter/ldap_ext.rb +0 -69
  49. data/lib/active_ldap/adapter/net_ldap.rb +0 -288
  50. data/lib/active_ldap/adapter/net_ldap_ext.rb +0 -29
  51. data/lib/active_ldap/association/belongs_to.rb +0 -40
  52. data/lib/active_ldap/association/belongs_to_many.rb +0 -39
  53. data/lib/active_ldap/association/collection.rb +0 -80
  54. data/lib/active_ldap/association/has_many.rb +0 -40
  55. data/lib/active_ldap/association/has_many_wrap.rb +0 -55
  56. data/lib/active_ldap/association/proxy.rb +0 -89
  57. data/lib/active_ldap/associations.rb +0 -162
  58. data/lib/active_ldap/attributes.rb +0 -203
  59. data/lib/active_ldap/base.rb +0 -1510
  60. data/lib/active_ldap/callbacks.rb +0 -19
  61. data/lib/active_ldap/command.rb +0 -46
  62. data/lib/active_ldap/configuration.rb +0 -106
  63. data/lib/active_ldap/connection.rb +0 -142
  64. data/lib/active_ldap/distinguished_name.rb +0 -246
  65. data/lib/active_ldap/ldap_error.rb +0 -74
  66. data/lib/active_ldap/object_class.rb +0 -74
  67. data/lib/active_ldap/schema.rb +0 -299
  68. data/lib/active_ldap/timeout.rb +0 -75
  69. data/lib/active_ldap/timeout_stub.rb +0 -17
  70. data/lib/active_ldap/user_password.rb +0 -92
  71. data/lib/active_ldap/validations.rb +0 -76
  72. data/rails/plugin/active_ldap/README +0 -54
  73. data/rails/plugin/active_ldap/generators/scaffold_al/scaffold_al_generator.rb +0 -7
  74. data/rails/plugin/active_ldap/generators/scaffold_al/templates/ldap.yml +0 -21
  75. data/rails/plugin/active_ldap/init.rb +0 -12
  76. data/test/TODO +0 -2
  77. data/test/al-test-utils.rb +0 -381
  78. data/test/command.rb +0 -62
  79. data/test/config.yaml.sample +0 -6
  80. data/test/run-test.rb +0 -29
  81. data/test/test-unit-ext.rb +0 -2
  82. data/test/test-unit-ext/always-show-result.rb +0 -28
  83. data/test/test-unit-ext/priority.rb +0 -163
@@ -1,17 +0,0 @@
1
- require 'timeout'
2
-
3
- module Timeout
4
- # STUB
5
- def Timeout.alarm(sec, exception=Timeout::Error, &block)
6
- return block.call
7
- end
8
- end # Timeout
9
-
10
- if __FILE__ == $0
11
- require 'time'
12
- Timeout.alarm(2) do
13
- loop do
14
- p Time.now
15
- end
16
- end
17
- end
@@ -1,92 +0,0 @@
1
- require 'English'
2
- require 'base64'
3
- require 'md5'
4
- require 'sha1'
5
-
6
- module ActiveLdap
7
- module UserPassword
8
- module_function
9
- def valid?(password, hashed_password)
10
- unless /^\{([A-Z][A-Z\d]+)\}/ =~ hashed_password
11
- raise ArgumentError, "Invalid hashed password"
12
- end
13
- type = $1
14
- hashed_password_without_type = $POSTMATCH
15
- normalized_type = type.downcase
16
- unless respond_to?(normalized_type)
17
- raise ArgumentError, "Unknown Hash type #{type}"
18
- end
19
- salt_extractor = "extract_salt_for_#{normalized_type}"
20
- if respond_to?(salt_extractor)
21
- salt = send(salt_extractor, hashed_password_without_type)
22
- if salt.nil?
23
- raise ArgumentError, "Can't extract salt from hashed password"
24
- end
25
- generated_password = send(normalized_type, password, salt)
26
- else
27
- generated_password = send(normalized_type, password)
28
- end
29
- hashed_password == generated_password
30
- end
31
-
32
- def crypt(password, salt=nil)
33
- salt ||= "$1$#{Salt.generate(8)}"
34
- "{CRYPT}#{password.crypt(salt)}"
35
- end
36
-
37
- def extract_salt_for_crypt(crypted_password)
38
- if /^\$1\$/ =~ crypted_password
39
- $MATCH + $POSTMATCH[0, 8].sub(/\$.*/, '') + "$"
40
- else
41
- crypted_password[0, 2]
42
- end
43
- end
44
-
45
- def md5(password)
46
- "{MD5}#{Base64.encode64(MD5.md5(password).digest).chomp}"
47
- end
48
-
49
- def smd5(password, salt=nil)
50
- if salt and salt.size != 4
51
- raise ArgumentError.new("salt size must be == 4")
52
- end
53
- salt ||= Salt.generate(4)
54
- md5_hash_with_salt = "#{MD5.md5(password + salt).digest}#{salt}"
55
- "{SMD5}#{Base64.encode64(md5_hash_with_salt).chomp}"
56
- end
57
-
58
- def extract_salt_for_smd5(smd5ed_password)
59
- Base64.decode64(smd5ed_password)[-4, 4]
60
- end
61
-
62
- def sha(password)
63
- "{SHA}#{Base64.encode64(SHA1.sha1(password).digest).chomp}"
64
- end
65
-
66
- def ssha(password, salt=nil)
67
- if salt and salt.size != 4
68
- raise ArgumentError.new("salt size must be == 4")
69
- end
70
- salt ||= Salt.generate(4)
71
- sha1_hash_with_salt = "#{SHA1.sha1(password + salt).digest}#{salt}"
72
- "{SSHA}#{Base64.encode64(sha1_hash_with_salt).chomp}"
73
- end
74
-
75
- def extract_salt_for_ssha(sshaed_password)
76
- extract_salt_for_smd5(sshaed_password)
77
- end
78
-
79
- module Salt
80
- CHARS = ['.', '/', '0'..'9', 'A'..'Z', 'a'..'z'].collect do |x|
81
- x.to_a
82
- end.flatten
83
-
84
- module_function
85
- def generate(length)
86
- salt = ""
87
- length.times {salt << CHARS[rand(CHARS.length)]}
88
- salt
89
- end
90
- end
91
- end
92
- end
@@ -1,76 +0,0 @@
1
- require 'active_record/validations'
2
-
3
- module ActiveLdap
4
- module Validations
5
- def self.append_features(base)
6
- super
7
-
8
- base.class_eval do
9
- alias_method :new_record?, :new_entry?
10
- include ActiveRecord::Validations
11
-
12
- validate :validate_required_values
13
-
14
- class << self
15
- def evaluate_condition_with_active_ldap_support(condition, entry)
16
- evaluate_condition_without_active_ldap_support(condition, entry)
17
- rescue ActiveRecord::ActiveRecordError
18
- raise Error, $!.message
19
- end
20
- alias_method_chain :evaluate_condition, :active_ldap_support
21
- end
22
-
23
- def save_with_active_ldap_support!
24
- save_without_active_ldap_support!
25
- rescue ActiveRecord::RecordInvalid
26
- raise EntryInvalid, $!.message
27
- end
28
- alias_method_chain :save!, :active_ldap_support
29
-
30
- def valid?
31
- ensure_apply_object_class
32
- super
33
- end
34
-
35
- # validate_required_values
36
- #
37
- # Basic validation:
38
- # - Verify that every 'MUST' specified in the schema has a value defined
39
- def validate_required_values
40
- logger.debug {"stub: validate_required_values called"}
41
-
42
- # Make sure all MUST attributes have a value
43
- @musts.each do |object_class, attributes|
44
- attributes.each do |required_attribute|
45
- # Normalize to ensure we catch schema problems
46
- real_name = to_real_attribute_name(required_attribute, true)
47
- raise UnknownAttribute.new(required_attribute) if real_name.nil?
48
- # # Set default if it wasn't yet set.
49
- # @data[real_name] ||= [] # need?
50
- value = @data[real_name] || []
51
- # Check for missing requirements.
52
- if value.empty?
53
- aliases = schema.attribute_aliases(real_name) - [real_name]
54
- message = "is required attribute "
55
- unless aliases.empty?
56
- message << "(aliases: #{aliases.join(', ')}) "
57
- end
58
- message << "by objectClass '#{object_class}'"
59
- errors.add(real_name, message)
60
- end
61
- end
62
- end
63
- logger.debug {"stub: validate_required_values finished"}
64
- end
65
-
66
- private
67
- def run_validations_with_active_ldap_support(validation_method)
68
- run_validations_without_active_ldap_support(validation_method)
69
- rescue ActiveRecord::ActiveRecordError
70
- raise Error, $!.message
71
- end
72
- alias_method_chain :run_validations, :active_ldap_support
73
- end
74
- end
75
- end
76
- end
@@ -1,54 +0,0 @@
1
- = ActiveLdap plugin for Ruby on Rails
2
-
3
- == Setup
4
-
5
- You need to write RAILS_ROOT/config/ldap.yml like the following:
6
-
7
- development:
8
- host: 127.0.0.1
9
- port: 389
10
- base: dc=devel,dc=local,dc=net
11
- bind_dn: cn=admin,dc=local,dc=net
12
- password: secret
13
-
14
- test:
15
- host: 127.0.0.1
16
- port: 389
17
- base: dc=test,dc=local,dc=net
18
- bind_dn: cn=admin,dc=local,dc=net
19
- password: secret
20
-
21
- production:
22
- host: 127.0.0.1
23
- port: 389
24
- base: dc=production,dc=local,dc=net
25
- bind_dn: cn=admin,dc=local,dc=net
26
- password: secret
27
-
28
- == Model
29
-
30
- Here is some examples.
31
-
32
- app/model/member.rb:
33
- class Member < ActiveLdap::Base
34
- ldap_mapping :dn_attribute => 'uid',
35
- :classes => ['person', 'posixAccount']
36
- belongs_to :primary_group, :class => "Group",
37
- :foreign_key => "gidNumber", :primary_key => "gidNumber"
38
- belongs_to :groups, :many => 'memberUid'
39
- end
40
-
41
- app/model/group.rb:
42
- class Group < ActiveLdap::Base
43
- ldap_mapping :dn_attribute => "cn", :classes => ['posixGroup']
44
- has_many :members, :wrap => "memberUid"
45
- has_many :primary_members,
46
- :foreign_key => 'gidNumber',
47
- :primary_key => 'gidNumber'
48
- end
49
-
50
- app/model/ou.rb:
51
- class Ou < ActiveLdap::Base
52
- ldap_mapping :prefix => "",
53
- :classes => ["top", "organizationalUnit"]
54
- end
@@ -1,7 +0,0 @@
1
- class ScaffoldAlGenerator < Rails::Generator::Base
2
- def manifest
3
- record do |m|
4
- m.template("ldap.yml", File.join("config", "ldap.yml"))
5
- end
6
- end
7
- end
@@ -1,21 +0,0 @@
1
- development:
2
- host: 127.0.0.1
3
- port: 389
4
- base: dc=devel,dc=local,dc=net
5
- bind_dn: cn=admin,dc=local,dc=net
6
- password: secret
7
-
8
- test:
9
- host: 127.0.0.1
10
- port: 389
11
- base: dc=test,dc=local,dc=net
12
- bind_dn: cn=admin,dc=local,dc=net
13
- password: secret
14
-
15
- production:
16
- host: 127.0.0.1
17
- port: 389
18
- method: :tls
19
- base: dc=production,dc=local,dc=net
20
- bind_dn: cn=admin,dc=local,dc=net
21
- password: secret
@@ -1,12 +0,0 @@
1
- require_library_or_gem 'active_ldap'
2
- ActiveLdap::Base.logger ||= RAILS_DEFAULT_LOGGER
3
- ldap_configuration_file = File.join(RAILS_ROOT, 'config', 'ldap.yml')
4
- if File.exist?(ldap_configuration_file)
5
- configurations = YAML::load(ERB.new(IO.read(ldap_configuration_file)).result)
6
- ActiveLdap::Base.configurations = configurations
7
- ActiveLdap::Base.establish_connection
8
- else
9
- message = "You should run 'script/generator scaffold_al' " +
10
- "to make #{ldap_configuration_file}"
11
- ActiveLdap::Base.logger.error(message)
12
- end
data/test/TODO DELETED
@@ -1,2 +0,0 @@
1
-
2
- - Perform explicit testing of Schema2, ActiveLdap::Base, etc
@@ -1,381 +0,0 @@
1
- require 'test/unit'
2
- require 'test-unit-ext'
3
-
4
- require 'erb'
5
- require 'yaml'
6
- require 'socket'
7
- require 'openssl'
8
- require 'rbconfig'
9
- require 'tempfile'
10
-
11
- require 'active_ldap'
12
-
13
- require File.join(File.expand_path(File.dirname(__FILE__)), "command")
14
-
15
- LDAP_ENV = "test" unless defined?(LDAP_ENV)
16
-
17
- module AlTestUtils
18
- def self.included(base)
19
- base.class_eval do
20
- include Config
21
- include Connection
22
- include Populate
23
- include TemporaryEntry
24
- include CommandSupport
25
- include MockLogger
26
- end
27
- end
28
-
29
- module Config
30
- def setup
31
- super
32
- @base_dir = File.expand_path(File.dirname(__FILE__))
33
- @top_dir = File.expand_path(File.join(@base_dir, ".."))
34
- @example_dir = File.join(@top_dir, "examples")
35
- @config_file = File.join(File.dirname(__FILE__), "config.yaml")
36
- ActiveLdap::Base.configurations = read_config
37
- end
38
-
39
- def teardown
40
- super
41
- end
42
-
43
- def current_configuration
44
- ActiveLdap::Base.configurations[LDAP_ENV]
45
- end
46
-
47
- def read_config
48
- unless File.exist?(@config_file)
49
- raise "config file for testing doesn't exist: #{@config_file}"
50
- end
51
- config = YAML.load(ERB.new(File.read(@config_file)).result)
52
- config.each do |key, value|
53
- adapter = ENV["ACTIVE_LDAP_TEST_ADAPTER"]
54
- value[:adapter] = adapter if adapter
55
- end
56
- config
57
- end
58
- end
59
-
60
- module Connection
61
- def setup
62
- super
63
- ActiveLdap::Base.establish_connection
64
- end
65
-
66
- def teardown
67
- ActiveLdap::Base.clear_active_connections!
68
- super
69
- end
70
- end
71
-
72
- module Populate
73
- def setup
74
- @dumped_data = nil
75
- super
76
- begin
77
- @dumped_data = ActiveLdap::Base.dump(:scope => :sub)
78
- rescue ActiveLdap::ConnectionError
79
- end
80
- ActiveLdap::Base.delete_all(nil, :scope => :sub)
81
- populate
82
- end
83
-
84
- def teardown
85
- if @dumped_data
86
- ActiveLdap::Base.establish_connection
87
- ActiveLdap::Base.delete_all(nil, :scope => :sub)
88
- ActiveLdap::Base.load(@dumped_data)
89
- end
90
- super
91
- end
92
-
93
- def populate
94
- populate_base
95
- populate_ou
96
- populate_user_class
97
- populate_group_class
98
- populate_associations
99
- end
100
-
101
- def populate_base
102
- unless ActiveLdap::Base.search(:scope => :base).empty?
103
- return
104
- end
105
-
106
- suffixes = []
107
- ActiveLdap::Base.base.split(/,/).reverse_each do |suffix|
108
- prefix = suffixes.join(",")
109
- suffixes.unshift(suffix)
110
- name, value = suffix.split(/=/, 2)
111
- next unless name == "dc"
112
- dc_class = Class.new(ActiveLdap::Base)
113
- dc_class.ldap_mapping :dn_attribute => "dc",
114
- :prefix => "",
115
- :scope => :base,
116
- :classes => ["top", "dcObject", "organization"]
117
- dc_class.base = prefix
118
- next if dc_class.exists?(value, :prefix => "dc=#{value}")
119
- dc = dc_class.new(value)
120
- dc.o = dc.dc
121
- begin
122
- dc.save
123
- rescue ActiveLdap::OperationNotPermitted
124
- end
125
- end
126
- end
127
-
128
- def ou_class(prefix="")
129
- ou_class = Class.new(ActiveLdap::Base)
130
- ou_class.ldap_mapping :dn_attribute => "ou",
131
- :prefix => prefix,
132
- :classes => ["top", "organizationalUnit"]
133
- ou_class
134
- end
135
-
136
- def populate_ou
137
- %w(Users Groups).each do |name|
138
- make_ou(name)
139
- end
140
- end
141
-
142
- def make_ou(name)
143
- ou_class.new(name).save
144
- end
145
-
146
- def populate_user_class
147
- @user_class = Class.new(ActiveLdap::Base)
148
- @user_class_classes = ["posixAccount", "person"]
149
- @user_class.ldap_mapping :dn_attribute => "uid",
150
- :prefix => "ou=Users",
151
- :scope => :sub,
152
- :classes => @user_class_classes
153
- end
154
-
155
- def populate_group_class
156
- @group_class = Class.new(ActiveLdap::Base)
157
- @group_class.ldap_mapping :prefix => "ou=Groups",
158
- :scope => :sub,
159
- :classes => ["posixGroup"]
160
- end
161
-
162
- def populate_associations
163
- @user_class.belongs_to :groups, :many => "memberUid"
164
- @user_class.belongs_to :primary_group,
165
- :foreign_key => "gidNumber",
166
- :primary_key => "gidNumber"
167
- @group_class.has_many :members, :wrap => "memberUid"
168
- @group_class.has_many :primary_members,
169
- :foreign_key => "gidNumber",
170
- :primary_key => "gidNumber"
171
- @user_class.set_associated_class(:groups, @group_class)
172
- @user_class.set_associated_class(:primary_group, @group_class)
173
- @group_class.set_associated_class(:members, @user_class)
174
- @group_class.set_associated_class(:primary_members, @user_class)
175
- end
176
- end
177
-
178
- module TemporaryEntry
179
- @@certificate = nil
180
- def setup
181
- super
182
- @user_index = 0
183
- @group_index = 0
184
- end
185
-
186
- def make_temporary_user(config={})
187
- @user_index += 1
188
- uid = config[:uid] || "temp-user#{@user_index}"
189
- ensure_delete_user(uid) do
190
- password = config[:password] || "password"
191
- uid_number = config[:uid_number] || default_uid
192
- gid_number = config[:gid_number] || default_gid
193
- home_directory = config[:home_directory] || "/nonexistent"
194
- _wrap_assertion do
195
- assert(!@user_class.exists?(uid))
196
- assert_raise(ActiveLdap::EntryNotFound) do
197
- @user_class.find(uid).dn
198
- end
199
- user = @user_class.new(uid)
200
- assert(user.new_entry?)
201
- user.cn = user.uid
202
- user.sn = user.uid
203
- user.uid_number = uid_number
204
- user.gid_number = gid_number
205
- user.home_directory = home_directory
206
- user.user_password = ActiveLdap::UserPassword.ssha(password)
207
- unless config[:simple]
208
- user.add_class('shadowAccount', 'inetOrgPerson',
209
- 'organizationalPerson')
210
- user.user_certificate = certificate
211
- user.jpeg_photo = jpeg_photo
212
- end
213
- user.save
214
- assert(!user.new_entry?)
215
- yield(@user_class.find(user.uid), password)
216
- end
217
- end
218
- end
219
-
220
- def make_temporary_group(config={})
221
- @group_index += 1
222
- cn = config[:cn] || "temp-group#{@group_index}"
223
- ensure_delete_group(cn) do
224
- gid_number = config[:gid_number] || default_gid
225
- _wrap_assertion do
226
- assert(!@group_class.exists?(cn))
227
- assert_raise(ActiveLdap::EntryNotFound) do
228
- @group_class.find(cn)
229
- end
230
- group = @group_class.new(cn)
231
- assert(group.new_entry?)
232
- group.gid_number = gid_number
233
- assert(group.save)
234
- assert(!group.new_entry?)
235
- yield(@group_class.find(group.cn))
236
- end
237
- end
238
- end
239
-
240
- def ensure_delete_user(uid)
241
- yield(uid)
242
- ensure
243
- @user_class.delete(uid) if @user_class.exists?(uid)
244
- end
245
-
246
- def ensure_delete_group(cn)
247
- yield(cn)
248
- ensure
249
- @group_class.delete(cn) if @group_class.exists?(cn)
250
- end
251
-
252
- def default_uid
253
- "10000#{@user_index}"
254
- end
255
-
256
- def default_gid
257
- "10000#{@group_index}"
258
- end
259
-
260
- def certificate_path
261
- File.join(@example_dir, 'example.der')
262
- end
263
-
264
- def certificate
265
- return @@certificate if @@certificate
266
- if File.exists?(certificate_path)
267
- @@certificate = File.read(certificate_path)
268
- return @@certificate
269
- end
270
-
271
- rsa = OpenSSL::PKey::RSA.new(512)
272
- comment = "Generated by Ruby/OpenSSL"
273
-
274
- cert = OpenSSL::X509::Certificate.new
275
- cert.version = 3
276
- cert.serial = 0
277
- subject = [["OU", "test"],
278
- ["CN", Socket.gethostname]]
279
- name = OpenSSL::X509::Name.new(subject)
280
- cert.subject = name
281
- cert.issuer = name
282
- cert.not_before = Time.now
283
- cert.not_after = Time.now + (365*24*60*60)
284
- cert.public_key = rsa.public_key
285
-
286
- ef = OpenSSL::X509::ExtensionFactory.new(nil, cert)
287
- ef.issuer_certificate = cert
288
- cert.extensions = [
289
- ef.create_extension("basicConstraints","CA:FALSE"),
290
- ef.create_extension("keyUsage", "keyEncipherment"),
291
- ef.create_extension("subjectKeyIdentifier", "hash"),
292
- ef.create_extension("extendedKeyUsage", "serverAuth"),
293
- ef.create_extension("nsComment", comment),
294
- ]
295
- aki = ef.create_extension("authorityKeyIdentifier",
296
- "keyid:always,issuer:always")
297
- cert.add_extension(aki)
298
- cert.sign(rsa, OpenSSL::Digest::SHA1.new)
299
-
300
- @@certificate = cert.to_der
301
- @@certificate
302
- end
303
-
304
- def jpeg_photo_path
305
- File.join(@example_dir, 'example.jpg')
306
- end
307
-
308
- def jpeg_photo
309
- File.read(jpeg_photo_path)
310
- end
311
- end
312
-
313
- module CommandSupport
314
- def setup
315
- super
316
- @fakeroot = "fakeroot"
317
- @ruby = File.join(::Config::CONFIG["bindir"],
318
- ::Config::CONFIG["RUBY_INSTALL_NAME"])
319
- @top_dir = File.expand_path(File.join(File.dirname(__FILE__), ".."))
320
- @examples_dir = File.join(@top_dir, "examples")
321
- @lib_dir = File.join(@top_dir, "lib")
322
- @ruby_args = [
323
- "-I", @examples_dir,
324
- "-I", @lib_dir,
325
- ]
326
- end
327
-
328
- def run_command(*args, &block)
329
- file = Tempfile.new("al-command-support")
330
- file.open
331
- file.puts(ActiveLdap::Base.configurations["test"].to_yaml)
332
- file.close
333
- run_ruby(*[@command, "--config", file.path, *args], &block)
334
- end
335
-
336
- def run_ruby(*ruby_args, &block)
337
- args = [@ruby, *@ruby_args]
338
- args.concat(ruby_args)
339
- Command.run(*args, &block)
340
- end
341
-
342
- def run_ruby_with_fakeroot(*ruby_args, &block)
343
- args = [@fakeroot, @ruby, *@ruby_args]
344
- args.concat(ruby_args)
345
- Command.run(*args, &block)
346
- end
347
- end
348
-
349
- module MockLogger
350
- def make_mock_logger
351
- logger = Object.new
352
- class << logger
353
- def messages(type)
354
- @messages ||= {}
355
- @messages[type] ||= []
356
- @messages[type]
357
- end
358
-
359
- def info(content=nil)
360
- messages(:info) << (block_given? ? yield : content)
361
- end
362
- def warn(content=nil)
363
- messages(:warn) << (block_given? ? yield : content)
364
- end
365
- def error(content=nil)
366
- messages(:error) << (block_given? ? yield : content)
367
- end
368
- end
369
- logger
370
- end
371
-
372
- def with_mock_logger
373
- original_logger = ActiveLdap::Base.logger
374
- mock_logger = make_mock_logger
375
- ActiveLdap::Base.logger = mock_logger
376
- yield(mock_logger)
377
- ensure
378
- ActiveLdap::Base.logger = original_logger
379
- end
380
- end
381
- end