rims 0.2.2 → 0.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,533 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
-
3
- require 'digest'
4
- require 'fileutils'
5
- require 'logger'
6
- require 'pp' if $DEBUG
7
- require 'rims'
8
- require 'socket'
9
- require 'test/unit'
10
- require 'yaml'
11
-
12
- module RIMS::Test
13
- class ConfigTest < Test::Unit::TestCase
14
- def setup
15
- @base_dir = 'dummy_test_base_dir'
16
- end
17
-
18
- def teardown
19
- FileUtils.rm_rf(@base_dir)
20
- end
21
-
22
- def assert_load_from_base_dir(conf_params)
23
- conf = RIMS::Config.new
24
- conf.load_config_from_base_dir(conf_params, @base_dir)
25
- yield(conf)
26
- end
27
- private :assert_load_from_base_dir
28
-
29
- def assert_config(conf_params)
30
- conf = RIMS::Config.new
31
- conf.load(base_dir: @base_dir)
32
- conf.load(conf_params)
33
- yield(conf)
34
- end
35
- private :assert_config
36
-
37
- def assert_logging_params(conf_params, expected_params)
38
- assert_config(conf_params) {|conf|
39
- assert_equal(expected_params, conf.logging_params, 'logging_params')
40
- assert_equal({}, conf.through_server_params, 'throuth_server_params')
41
- }
42
- end
43
- private :assert_logging_params
44
-
45
- def assert_key_value_store_params(db_type, conf_params, expected_params)
46
- assert_config(conf_params) {|conf|
47
- assert_equal(expected_params, conf.key_value_store_params(db_type), 'key_value_store_params')
48
- assert_equal({}, conf.through_server_params, 'throuth_server_params')
49
- }
50
- end
51
- private :assert_key_value_store_params
52
-
53
- def assert_build_authentication(conf_params)
54
- assert_config(conf_params) {|conf|
55
- yield(conf.build_authentication)
56
- assert_equal({}, conf.through_server_params, 'throuth_server_params')
57
- }
58
- end
59
- private :assert_build_authentication
60
-
61
- def assert_privilege_params(conf_params, expected_params)
62
- assert_config(conf_params) {|conf|
63
- if ((expected_params.is_a? Class) && (expected_params <= Exception)) then
64
- assert_raise(expected_params) { conf.setup_privilege_params }
65
- else
66
- conf.setup_privilege_params
67
- assert_equal(expected_params, conf.through_server_params)
68
- end
69
- }
70
- end
71
- private :assert_privilege_params
72
-
73
- def test_load_from_base_dir
74
- assert_load_from_base_dir({}) {|conf|
75
- assert_equal(@base_dir, conf.base_dir)
76
- assert_equal({}, conf.through_server_params)
77
- }
78
-
79
- assert_load_from_base_dir({ ip_addr: '192.168.0.1' }) {|conf|
80
- assert_equal(@base_dir, conf.base_dir)
81
- assert_equal({ ip_addr: '192.168.0.1' }, conf.through_server_params)
82
- }
83
-
84
- assert_load_from_base_dir({ base_dir: 'foo' }) {|conf|
85
- assert_equal(File.join(@base_dir, 'foo'), conf.base_dir)
86
- assert_equal({}, conf.through_server_params)
87
- }
88
-
89
- assert_load_from_base_dir({ base_dir: 'foo', ip_addr: '192.168.0.1' }) {|conf|
90
- assert_equal(File.join(@base_dir, 'foo'), conf.base_dir)
91
- assert_equal({ ip_addr: '192.168.0.1' }, conf.through_server_params)
92
- }
93
-
94
- assert_load_from_base_dir({ base_dir: '/foo' }) {|conf|
95
- assert_equal('/foo', conf.base_dir)
96
- assert_equal({}, conf.through_server_params)
97
- }
98
-
99
- assert_load_from_base_dir({ base_dir: '/foo', ip_addr: '192.168.0.1' }) {|conf|
100
- assert_equal('/foo', conf.base_dir)
101
- assert_equal({ ip_addr: '192.168.0.1' }, conf.through_server_params)
102
- }
103
- end
104
-
105
- def test_load_libraries
106
- assert(! $LOADED_FEATURES.any?{|name| name =~ /prime/})
107
- fork{
108
- begin
109
- assert_config(load_libraries: %w[ prime ]) {|conf|
110
- conf.setup_load_libraries
111
- assert($LOADED_FEATURES.any?{|name| name =~ /prime/})
112
- }
113
- rescue
114
- exit!(1)
115
- end
116
- exit!(0)
117
- }
118
- Process.wait
119
- assert_equal(0, $?.exitstatus)
120
- end
121
-
122
- def test_logging_params
123
- assert_logging_params({}, {
124
- log_file: File.join(@base_dir, 'imap.log'),
125
- log_level: Logger::INFO,
126
- log_opt_args: [],
127
- log_stdout: Logger::INFO
128
- })
129
-
130
- assert_logging_params({ log_level: 'debug' }, {
131
- log_file: File.join(@base_dir, 'imap.log'),
132
- log_level: Logger::DEBUG,
133
- log_opt_args: [],
134
- log_stdout: Logger::INFO
135
- })
136
-
137
- assert_logging_params({ log_level: 'info' }, {
138
- log_file: File.join(@base_dir, 'imap.log'),
139
- log_level: Logger::INFO,
140
- log_opt_args: [],
141
- log_stdout: Logger::INFO
142
- })
143
-
144
- assert_logging_params({ log_level: 'warn' }, {
145
- log_file: File.join(@base_dir, 'imap.log'),
146
- log_level: Logger::WARN,
147
- log_opt_args: [],
148
- log_stdout: Logger::INFO
149
- })
150
-
151
- assert_logging_params({ log_level: 'error' }, {
152
- log_file: File.join(@base_dir, 'imap.log'),
153
- log_level: Logger::ERROR,
154
- log_opt_args: [],
155
- log_stdout: Logger::INFO
156
- })
157
-
158
- assert_logging_params({ log_stdout: 'debug' }, {
159
- log_file: File.join(@base_dir, 'imap.log'),
160
- log_level: Logger::INFO,
161
- log_opt_args: [],
162
- log_stdout: Logger::DEBUG
163
- })
164
-
165
- assert_logging_params({ log_stdout: 'info' }, {
166
- log_file: File.join(@base_dir, 'imap.log'),
167
- log_level: Logger::INFO,
168
- log_opt_args: [],
169
- log_stdout: Logger::INFO
170
- })
171
-
172
- assert_logging_params({ log_stdout: 'warn' }, {
173
- log_file: File.join(@base_dir, 'imap.log'),
174
- log_level: Logger::INFO,
175
- log_opt_args: [],
176
- log_stdout: Logger::WARN
177
- })
178
-
179
- assert_logging_params({ log_stdout: 'error' }, {
180
- log_file: File.join(@base_dir, 'imap.log'),
181
- log_level: Logger::INFO,
182
- log_opt_args: [],
183
- log_stdout: Logger::ERROR
184
- })
185
-
186
- assert_logging_params({ log_file: 'server.log' }, {
187
- log_file: File.join(@base_dir, 'server.log'),
188
- log_level: Logger::INFO,
189
- log_opt_args: [],
190
- log_stdout: Logger::INFO
191
- })
192
-
193
- assert_logging_params({ log_file: 'foo/bar/server.log' }, {
194
- log_file: File.join(@base_dir, 'foo/bar/server.log'),
195
- log_level: Logger::INFO,
196
- log_opt_args: [],
197
- log_stdout: Logger::INFO
198
- })
199
-
200
- assert_logging_params({ log_file: '/var/rims/server.log' }, {
201
- log_file: '/var/rims/server.log',
202
- log_level: Logger::INFO,
203
- log_opt_args: [],
204
- log_stdout: Logger::INFO
205
- })
206
-
207
- assert_logging_params({ log_shift_age: 'daily' }, {
208
- log_file: File.join(@base_dir, 'imap.log'),
209
- log_level: Logger::INFO,
210
- log_opt_args: [ 'daily' ],
211
- log_stdout: Logger::INFO
212
- })
213
-
214
- assert_logging_params({ log_shift_size: 1024**2 }, {
215
- log_file: File.join(@base_dir, 'imap.log'),
216
- log_level: Logger::INFO,
217
- log_opt_args: [ 1, 1024**2 ],
218
- log_stdout: Logger::INFO
219
- })
220
-
221
- assert_logging_params({ log_shift_age: 10,
222
- log_shift_size: 1024**2
223
- }, {
224
- log_file: File.join(@base_dir, 'imap.log'),
225
- log_level: Logger::INFO,
226
- log_opt_args: [ 10, 1024**2 ],
227
- log_stdout: Logger::INFO
228
- })
229
- end
230
-
231
- def test_key_value_store_params
232
- assert_key_value_store_params(:meta_key_value_store, {}, {
233
- origin_key_value_store: RIMS::GDBM_KeyValueStore,
234
- origin_config: {},
235
- middleware_key_value_store_list: [ RIMS::Checksum_KeyValueStore ]
236
- })
237
-
238
- assert_key_value_store_params(:meta_key_value_store, {
239
- meta_key_value_store: {
240
- 'plug_in' => 'gdbm'
241
- }
242
- }, {
243
- origin_key_value_store: RIMS::GDBM_KeyValueStore,
244
- origin_config: {},
245
- middleware_key_value_store_list: [ RIMS::Checksum_KeyValueStore ]
246
- })
247
-
248
- assert_key_value_store_params(:meta_key_value_store, {
249
- meta_key_value_store: {
250
- 'plug_in' => 'gdbm',
251
- 'configuration' => { 'foo' => 'bar' }
252
- }
253
- }, {
254
- origin_key_value_store: RIMS::GDBM_KeyValueStore,
255
- origin_config: { 'foo' => 'bar' },
256
- middleware_key_value_store_list: [ RIMS::Checksum_KeyValueStore ]
257
- })
258
-
259
- FileUtils.mkdir_p(@base_dir)
260
- IO.write(File.join(@base_dir, 'config.yml'), { 'foo' => 'bar' }.to_yaml)
261
-
262
- assert_key_value_store_params(:meta_key_value_store, {
263
- meta_key_value_store: {
264
- 'plug_in' => 'gdbm',
265
- 'configuration_file' => 'config.yml'
266
- }
267
- }, {
268
- origin_key_value_store: RIMS::GDBM_KeyValueStore,
269
- origin_config: { 'foo' => 'bar' },
270
- middleware_key_value_store_list: [ RIMS::Checksum_KeyValueStore ]
271
- })
272
-
273
- assert_key_value_store_params(:meta_key_value_store, {
274
- meta_key_value_store: {
275
- 'use_checksum' => true
276
- }
277
- }, {
278
- origin_key_value_store: RIMS::GDBM_KeyValueStore,
279
- origin_config: {},
280
- middleware_key_value_store_list: [ RIMS::Checksum_KeyValueStore ]
281
- })
282
-
283
- assert_key_value_store_params(:meta_key_value_store, {
284
- meta_key_value_store: {
285
- 'use_checksum' => false
286
- }
287
- }, {
288
- origin_key_value_store: RIMS::GDBM_KeyValueStore,
289
- origin_config: {},
290
- middleware_key_value_store_list: []
291
- })
292
-
293
- # for backward compatibility
294
- assert_key_value_store_params(:meta_key_value_store, { key_value_store_type: 'gdbm' }, {
295
- origin_key_value_store: RIMS::GDBM_KeyValueStore,
296
- origin_config: {},
297
- middleware_key_value_store_list: [ RIMS::Checksum_KeyValueStore ]
298
- })
299
-
300
- # for backward compatibility
301
- assert_key_value_store_params(:meta_key_value_store, { use_key_value_store_checksum: true }, {
302
- origin_key_value_store: RIMS::GDBM_KeyValueStore,
303
- origin_config: {},
304
- middleware_key_value_store_list: [ RIMS::Checksum_KeyValueStore ]
305
- })
306
-
307
- # for backward compatibility
308
- assert_key_value_store_params(:meta_key_value_store, { use_key_value_store_checksum: false }, {
309
- origin_key_value_store: RIMS::GDBM_KeyValueStore,
310
- origin_config: {},
311
- middleware_key_value_store_list: []
312
- })
313
- end
314
-
315
- def test_build_authentication
316
- username = 'foo'
317
- password = 'open_sesame'
318
- salt = "\x8F\x16\x63\x6D\x21\xE0\x0F\x3D"
319
-
320
- assert_build_authentication({ username: username, password: password }) {|auth|
321
- assert_equal(Socket.gethostname, auth.hostname, 'hostname')
322
- assert(auth.authenticate_login(username, password), 'user')
323
- refute(auth.authenticate_login(username.succ, password), 'mismatch username')
324
- refute(auth.authenticate_login(username, password.succ), 'mismatch password')
325
- }
326
-
327
- assert_build_authentication({ username: username, password: password, hostname: 'rims-test' }) {|auth|
328
- assert_equal('rims-test', auth.hostname, 'hostname')
329
- assert(auth.authenticate_login(username, password), 'user')
330
- refute(auth.authenticate_login(username.succ, password), 'mismatch username')
331
- refute(auth.authenticate_login(username, password.succ), 'mismatch password')
332
- }
333
-
334
- assert_build_authentication({ user_list: [
335
- { 'user' => username, 'pass' => password },
336
- { 'user' => username.succ, 'pass' => password.succ }
337
- ]
338
- }) {|auth|
339
- assert(auth.authenticate_login(username, password), 'user 1')
340
- assert(auth.authenticate_login(username.succ, password.succ), 'user 2')
341
- refute(auth.authenticate_login(username.succ.succ, password.succ.succ), 'user 3')
342
- }
343
-
344
- assert_build_authentication({ username: username, password: password,
345
- user_list: [
346
- { 'user' => username.succ, 'pass' => password.succ }
347
- ]
348
- }) {|auth|
349
- assert(auth.authenticate_login(username, password), 'user 1')
350
- assert(auth.authenticate_login(username.succ, password.succ), 'user 2')
351
- refute(auth.authenticate_login(username.succ.succ, password.succ.succ), 'user 3')
352
- }
353
-
354
- assert_build_authentication({ authentication: [
355
- { 'plug_in' => 'plain',
356
- 'configuration' => [
357
- { 'user' => username, 'pass' => password }
358
- ]
359
- }
360
- ]
361
- }) {|auth|
362
- assert(auth.authenticate_login(username, password), 'user')
363
- refute(auth.authenticate_login(username.succ, password), 'mismatch username')
364
- refute(auth.authenticate_login(username, password.succ), 'mismatch password')
365
- }
366
-
367
- assert_build_authentication({ authentication: [
368
- { 'plug_in' => 'hash',
369
- 'configuration' => [
370
- { 'user' => username,
371
- 'hash' => RIMS::Password::HashSource.make_entry(Digest::SHA256, 1000, salt, password).to_s
372
- }
373
- ]
374
- }
375
- ]
376
- }) {|auth|
377
- assert(auth.authenticate_login(username, password), 'user')
378
- refute(auth.authenticate_login(username.succ, password), 'mismatch username')
379
- refute(auth.authenticate_login(username, password.succ), 'mismatch password')
380
- }
381
-
382
- FileUtils.mkdir_p(@base_dir)
383
- IO.write(File.join(@base_dir, 'passwd.yml'), [
384
- { 'user' => username, 'pass' => password }
385
- ].to_yaml)
386
-
387
- assert_build_authentication({ authentication: [
388
- { 'plug_in' => 'plain',
389
- 'configuration_file' => 'passwd.yml'
390
- }
391
- ]
392
- }) {|auth|
393
- assert(auth.authenticate_login(username, password), 'user')
394
- refute(auth.authenticate_login(username.succ, password), 'mismatch username')
395
- refute(auth.authenticate_login(username, password.succ), 'mismatch password')
396
- }
397
-
398
- IO.write(File.join(@base_dir, 'passwd.yml'), [
399
- { 'user' => username,
400
- 'hash' => RIMS::Password::HashSource.make_entry(Digest::SHA256, 1000, salt, password).to_s
401
- }
402
- ].to_yaml)
403
-
404
- assert_build_authentication({ authentication: [
405
- { 'plug_in' => 'hash',
406
- 'configuration_file' => 'passwd.yml'
407
- }
408
- ]
409
- }) {|auth|
410
- assert(auth.authenticate_login(username, password), 'user')
411
- refute(auth.authenticate_login(username.succ, password), 'mismatch username')
412
- refute(auth.authenticate_login(username, password.succ), 'mismatch password')
413
- }
414
- end
415
-
416
- def test_setup_privilege_params
417
- assert_privilege_params({}, {
418
- process_privilege_uid: 65534,
419
- process_privilege_gid: 65534
420
- })
421
-
422
- assert_privilege_params({ process_privilege_user: 'root',
423
- process_privilege_group: '0'
424
- }, {
425
- process_privilege_uid: 0,
426
- process_privilege_gid: 0
427
- })
428
-
429
- assert_privilege_params({ process_privilege_user: 0,
430
- process_privilege_group: 0
431
- }, {
432
- process_privilege_uid: 0,
433
- process_privilege_gid: 0
434
- })
435
-
436
- assert_privilege_params({ process_privilege_user: 'detarame',
437
- process_privilege_group: 0
438
- },
439
- ArgumentError)
440
-
441
- assert_privilege_params({ process_privilege_user: 0,
442
- process_privilege_group: :detarame
443
- },
444
- TypeError)
445
- end
446
- end
447
-
448
- class ConfigPathUtilTest < Test::Unit::TestCase
449
- def setup
450
- @base_dir = "dummy_test_base_dir.#{$$}"
451
- FileUtils.rm_rf(@base_dir) if (File.directory? @base_dir)
452
- end
453
-
454
- def teardown
455
- FileUtils.rm_rf(@base_dir) unless $DEBUG
456
- end
457
-
458
- def test_load_plug_in_configuration
459
- assert_equal({},RIMS::Config.load_plug_in_configuration(@base_dir, {}))
460
- assert_equal({ 'foo' => 'bar' },
461
- RIMS::Config.load_plug_in_configuration(@base_dir,
462
- { 'configuration' => { 'foo' => 'bar' } }))
463
-
464
- FileUtils.mkdir_p(@base_dir)
465
- IO.write(File.join(@base_dir, 'config.yml'), { 'foo' => 'bar' }.to_yaml)
466
- assert_equal({ 'foo' => 'bar' },
467
- RIMS::Config.load_plug_in_configuration(@base_dir,
468
- { 'configuration_file' => 'config.yml' }))
469
-
470
- assert_raise(RuntimeError) {
471
- RIMS::Config.load_plug_in_configuration(@base_dir, {
472
- 'configuration' => { 'foo' => 'bar' },
473
- 'configuration_file' => 'config.yml'
474
- })
475
- }
476
- end
477
-
478
- def test_mkdir_from_base_dir
479
- target_dir = File.join(@base_dir, 'foo', 'bar')
480
- Dir.mkdir(@base_dir)
481
-
482
- refute(File.directory? target_dir)
483
- assert_equal(target_dir, RIMS::Config.mkdir_from_base_dir(@base_dir, %w[ foo bar ]))
484
- assert(File.directory? target_dir)
485
- end
486
-
487
- def test_mkdir_from_base_dir_already_exist_dir
488
- target_dir = File.join(@base_dir, 'foo', 'bar')
489
- FileUtils.mkdir_p(target_dir)
490
-
491
- assert(File.directory? target_dir)
492
- assert_nil(RIMS::Config.mkdir_from_base_dir(@base_dir, %w[ foo bar ]))
493
- assert(File.directory? target_dir)
494
- end
495
-
496
- def test_mkdir_from_base_dir_already_exist_file
497
- target_dir = File.join(@base_dir, 'foo', 'bar')
498
- FileUtils.mkdir_p(File.dirname(target_dir))
499
- FileUtils.touch(target_dir)
500
-
501
- assert(File.file? target_dir)
502
- assert_raise(RuntimeError) {
503
- RIMS::Config.mkdir_from_base_dir(@base_dir, %w[ foo bar ])
504
- }
505
- assert(File.file? target_dir)
506
- end
507
-
508
- def test_mkdir_from_base_dir_not_exist_base_dir
509
- refute(File.directory? @base_dir)
510
- assert_raise(RuntimeError) {
511
- RIMS::Config.mkdir_from_base_dir(@base_dir, %w[ foo bar ])
512
- }
513
- refute(File.directory? @base_dir)
514
- end
515
-
516
- def test_make_key_value_store_path_name_list
517
- assert_equal([ 'v1', 'ab', 'c' ],
518
- RIMS::Config.make_key_value_store_path_name_list('v1', 'abc'))
519
- assert_equal([ 'v1', 'e3', 'b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855' ],
520
- RIMS::Config.make_key_value_store_path_name_list('v1', 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855'))
521
- assert_equal([ 'v1', 'e3', 'b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855', 'meta_db' ],
522
- RIMS::Config.make_key_value_store_path_name_list('v1', 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855', db_name: 'meta_db'))
523
-
524
- assert_raise(ArgumentError) { RIMS::Config.make_key_value_store_path_name_list('v1', '') }
525
- assert_raise(ArgumentError) { RIMS::Config.make_key_value_store_path_name_list('v1', 'ab') }
526
- end
527
- end
528
- end
529
-
530
- # Local Variables:
531
- # mode: Ruby
532
- # indent-tabs-mode: nil
533
- # End: