tengine_core 0.5.28

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.
Files changed (156) hide show
  1. data/.document +5 -0
  2. data/.rspec +1 -0
  3. data/Gemfile +40 -0
  4. data/Gemfile.lock +95 -0
  5. data/README.md +54 -0
  6. data/Rakefile +44 -0
  7. data/VERSION +1 -0
  8. data/bin/tengine_atd +8 -0
  9. data/bin/tengine_heartbeat_watchd +8 -0
  10. data/bin/tengined +182 -0
  11. data/examples/VERSION +1 -0
  12. data/examples/uc01_execute_processing_for_event.rb +11 -0
  13. data/examples/uc02_fire_another_event.rb +16 -0
  14. data/examples/uc03_2handlers_for_1event.rb +16 -0
  15. data/examples/uc08_if_both_a_and_b_occurs.rb +11 -0
  16. data/examples/uc10_if_the_event_occurs_at_the_server.rb +15 -0
  17. data/examples/uc50_commit_event_at_first.rb +17 -0
  18. data/examples/uc51_commit_event_at_first_submit.rb +29 -0
  19. data/examples/uc52_commit_event_after_all_handler_submit.rb +31 -0
  20. data/examples/uc52_never_commit_event_unless_all_handler_submit.rb +31 -0
  21. data/examples/uc60_event_in_handler.rb +18 -0
  22. data/examples/uc62_session_in_driver.rb +16 -0
  23. data/examples/uc64_safety_countup.rb +14 -0
  24. data/examples/uc70_driver_enabled_on_activation.rb +13 -0
  25. data/examples/uc71_driver_disabled_on_activation.rb +14 -0
  26. data/examples/uc72_setup_eventmachine.rb +17 -0
  27. data/examples/uc80_raise_io_error.rb +10 -0
  28. data/examples/uc81_raise_runtime_error.rb +10 -0
  29. data/examples2/driver01.rb +18 -0
  30. data/examples2/driver02.rb +19 -0
  31. data/examples2/uc08_if_both_a_and_b_occurs.rb +13 -0
  32. data/examples2/uc10_if_the_event_occurs_at_the_server.rb +18 -0
  33. data/examples2/uc51_commit_event_at_first_submit_1.rb +16 -0
  34. data/examples2/uc51_commit_event_at_first_submit_2.rb +17 -0
  35. data/examples2/uc51_commit_event_at_first_submit_3.rb +17 -0
  36. data/examples2/uc62_session_in_driver.rb +16 -0
  37. data/examples2/uc71_driver_disabled_on_activation.rb +16 -0
  38. data/failure_examples/VERSION +1 -0
  39. data/failure_examples/uc53_submit_outside_of_handler.rb +15 -0
  40. data/failure_examples/uc61_event_outside_of_handler.rb +12 -0
  41. data/failure_examples/uc63_session_outside_of_driver.rb +13 -0
  42. data/lib/tengine/core.rb +74 -0
  43. data/lib/tengine/core/bootstrap.rb +123 -0
  44. data/lib/tengine/core/collection_accessible.rb +34 -0
  45. data/lib/tengine/core/config.rb +10 -0
  46. data/lib/tengine/core/config/atd.rb +225 -0
  47. data/lib/tengine/core/config/core.rb +319 -0
  48. data/lib/tengine/core/config/heartbeat_watcher.rb +229 -0
  49. data/lib/tengine/core/connection_test/.gitignore +1 -0
  50. data/lib/tengine/core/connection_test/fire_bar_on_foo.rb +16 -0
  51. data/lib/tengine/core/driveable.rb +213 -0
  52. data/lib/tengine/core/driver.rb +69 -0
  53. data/lib/tengine/core/driver/finder.rb +42 -0
  54. data/lib/tengine/core/dsl_evaluator.rb +110 -0
  55. data/lib/tengine/core/dsl_filter_def.rb +11 -0
  56. data/lib/tengine/core/dsl_loader.rb +108 -0
  57. data/lib/tengine/core/event.rb +145 -0
  58. data/lib/tengine/core/event/finder.rb +82 -0
  59. data/lib/tengine/core/event_exception_reportable.rb +88 -0
  60. data/lib/tengine/core/event_wrapper.rb +21 -0
  61. data/lib/tengine/core/find_by_name.rb +31 -0
  62. data/lib/tengine/core/handler.rb +152 -0
  63. data/lib/tengine/core/handler_path.rb +33 -0
  64. data/lib/tengine/core/heartbeat_watcher.rb +161 -0
  65. data/lib/tengine/core/io_to_logger.rb +22 -0
  66. data/lib/tengine/core/kernel.rb +510 -0
  67. data/lib/tengine/core/kernel_runtime.rb +91 -0
  68. data/lib/tengine/core/method_traceable.rb +38 -0
  69. data/lib/tengine/core/mongoid_fix.rb +19 -0
  70. data/lib/tengine/core/mutex.rb +177 -0
  71. data/lib/tengine/core/optimistic_lock.rb +69 -0
  72. data/lib/tengine/core/plugins.rb +54 -0
  73. data/lib/tengine/core/schedule.rb +21 -0
  74. data/lib/tengine/core/scheduler.rb +156 -0
  75. data/lib/tengine/core/selectable_attr.rb +29 -0
  76. data/lib/tengine/core/session.rb +21 -0
  77. data/lib/tengine/core/session_wrapper.rb +68 -0
  78. data/lib/tengine/core/setting.rb +21 -0
  79. data/lib/tengine/core/validation.rb +36 -0
  80. data/lib/tengine/errors.rb +18 -0
  81. data/lib/tengine/rspec.rb +8 -0
  82. data/lib/tengine/rspec/context_wrapper.rb +51 -0
  83. data/lib/tengine/rspec/extension.rb +53 -0
  84. data/lib/tengine_core.rb +23 -0
  85. data/spec/factories/tengine_core_drivers.rb +10 -0
  86. data/spec/factories/tengine_core_events.rb +14 -0
  87. data/spec/factories/tengine_core_handler_paths.rb +9 -0
  88. data/spec/factories/tengine_core_handlers.rb +9 -0
  89. data/spec/factories/tengine_core_sessions.rb +9 -0
  90. data/spec/mongoid.yml +35 -0
  91. data/spec/spec_helper.rb +48 -0
  92. data/spec/support/mongo_index_key_log.rb +91 -0
  93. data/spec/tengine/core/bootstrap_spec.rb +278 -0
  94. data/spec/tengine/core/bugfix/bind_dsl_file_in_multi_byte_dir_spec.rb +21 -0
  95. data/spec/tengine/core/bugfix/enabled_on_activation_spec.rb +112 -0
  96. data/spec/tengine/core/bugfix/receive_event_spec.rb +133 -0
  97. data/spec/tengine/core/bugfix/use_dsl_version_method.rb +12 -0
  98. data/spec/tengine/core/bugfix/use_dsl_version_method_spec.rb +28 -0
  99. data/spec/tengine/core/bugfix/use_event_in_handler_dsl.rb +11 -0
  100. data/spec/tengine/core/bugfix//351/235/236ACSII/343/201/256/343/203/206/343/202/231/343/202/243/343/203/254/343/202/257/343/203/210/343/203/252/345/220/215/source_location_encoding.rb +35 -0
  101. data/spec/tengine/core/bugfix//351/235/236ACSII/343/201/256/343/203/206/343/202/231/343/202/243/343/203/254/343/202/257/343/203/210/343/203/252/345/220/215//351/235/236ASCII/343/201/256/343/203/225/343/202/241/343/202/244/343/203/253/345/220/215_dsl.rb +38 -0
  102. data/spec/tengine/core/bugfix//351/235/236ACSII/343/201/256/343/203/207/343/202/243/343/203/254/343/202/257/343/203/210/343/203/252/345/220/215/source_location_encoding.rb +35 -0
  103. data/spec/tengine/core/bugfix//351/235/236ACSII/343/201/256/343/203/207/343/202/243/343/203/254/343/202/257/343/203/210/343/203/252/345/220/215//351/235/236ASCII/343/201/256/343/203/225/343/202/241/343/202/244/343/203/253/345/220/215_dsl.rb +38 -0
  104. data/spec/tengine/core/config/atd_spec.rb +62 -0
  105. data/spec/tengine/core/config/core_spec.rb +479 -0
  106. data/spec/tengine/core/config/heartbeat_watcher_spec.rb +62 -0
  107. data/spec/tengine/core/config/syntax_error_in_erb.yml.erb +13 -0
  108. data/spec/tengine/core/config/wrong_category_name.yml.erb +13 -0
  109. data/spec/tengine/core/config/wrong_field_name.yml.erb +12 -0
  110. data/spec/tengine/core/config/wrong_yaml.yml.erb +13 -0
  111. data/spec/tengine/core/config_spec/another_port.yml +54 -0
  112. data/spec/tengine/core/config_spec/config_with_dir_absolute_load_path.yml +16 -0
  113. data/spec/tengine/core/config_spec/config_with_dir_relative_load_path.yml +16 -0
  114. data/spec/tengine/core/config_spec/config_with_file_absolute_load_path.yml +16 -0
  115. data/spec/tengine/core/config_spec/config_with_file_relative_load_path.yml +16 -0
  116. data/spec/tengine/core/config_spec/log_config_spec.rb +235 -0
  117. data/spec/tengine/core/driveable_spec.rb +240 -0
  118. data/spec/tengine/core/driver_spec.rb +159 -0
  119. data/spec/tengine/core/dsl_loader_spec.rb +172 -0
  120. data/spec/tengine/core/dsls/uc08_if_both_a_and_b_occurs_spec.rb +35 -0
  121. data/spec/tengine/core/dsls/uc10_if_the_event_occurs_at_the_server_spec.rb +58 -0
  122. data/spec/tengine/core/dsls/uc50_commit_event_at_first_spec.rb +29 -0
  123. data/spec/tengine/core/dsls/uc52_commit_event_after_all_handler_submit_spec.rb +33 -0
  124. data/spec/tengine/core/dsls/uc52_never_commit_event_unless_all_handler_submit_spec.rb +37 -0
  125. data/spec/tengine/core/dsls/uc53_submit_outside_of_handler_spec.rb +37 -0
  126. data/spec/tengine/core/dsls/uc60_event_in_handler_spec.rb +31 -0
  127. data/spec/tengine/core/dsls/uc61_event_outside_of_handler_spec.rb +37 -0
  128. data/spec/tengine/core/dsls/uc62_session_in_driver_spec.rb +36 -0
  129. data/spec/tengine/core/dsls/uc63_session_outside_of_driver_spec.rb +35 -0
  130. data/spec/tengine/core/dsls/uc64_safety_countup_spec.rb +134 -0
  131. data/spec/tengine/core/dsls/uc70_driver_enabled_on_activation_spec.rb +39 -0
  132. data/spec/tengine/core/dsls/uc71_driver_disabled_on_activation_spec.rb +36 -0
  133. data/spec/tengine/core/dsls/uc72_setup_eventmachine_spec.rb +39 -0
  134. data/spec/tengine/core/dsls/uc80_raise_io_error_spec.rb +53 -0
  135. data/spec/tengine/core/dsls/uc81_raise_runtime_error_spec.rb +49 -0
  136. data/spec/tengine/core/event/finder_spec.rb +136 -0
  137. data/spec/tengine/core/event_exception_reportable_spec.rb +33 -0
  138. data/spec/tengine/core/event_spec.rb +161 -0
  139. data/spec/tengine/core/event_wrapper_spec.rb +35 -0
  140. data/spec/tengine/core/handler_path_spec.rb +87 -0
  141. data/spec/tengine/core/handler_spec.rb +190 -0
  142. data/spec/tengine/core/heartbeat_watcher_spec.rb +131 -0
  143. data/spec/tengine/core/io_to_logger_spec.rb +30 -0
  144. data/spec/tengine/core/kernel_spec.rb +885 -0
  145. data/spec/tengine/core/mutex_spec.rb +184 -0
  146. data/spec/tengine/core/optimistic_lock_spec.rb +55 -0
  147. data/spec/tengine/core/scheculer_spec.rb +121 -0
  148. data/spec/tengine/core/selectable_attr_spec.rb +30 -0
  149. data/spec/tengine/core/session_spec.rb +104 -0
  150. data/spec/tengine/core/setting_spec.rb +79 -0
  151. data/spec/tengine/core_spec.rb +13 -0
  152. data/spec/tengine_spec.rb +14 -0
  153. data/tengine_core.gemspec +248 -0
  154. data/tmp/log/.gitignore +1 -0
  155. data/tmp/tengined_status/.gitignore +1 -0
  156. metadata +421 -0
@@ -0,0 +1,62 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'spec_helper'
3
+
4
+ require 'tengine/event'
5
+
6
+ describe Tengine::Core::Config::HeartbeatWatcher do
7
+
8
+ describe :[] do
9
+ it "should convert a Hash to a Tengine::Core::Config::HeartbeatWatcher" do
10
+ converted = Tengine::Core::Config::HeartbeatWatcher[{:process => {:daemon => true}}]
11
+ converted.should be_a(Tengine::Core::Config::HeartbeatWatcher)
12
+ converted[:process][:daemon].should be_true
13
+ end
14
+
15
+ it "should return same Tengine::Core::Config::HeartbeatWatcher" do
16
+ converted = Tengine::Core::Config::HeartbeatWatcher.new(:process => {:daemon => true})
17
+ Tengine::Core::Config::HeartbeatWatcher[converted].should == converted
18
+ end
19
+ end
20
+
21
+ context "デフォルト" do
22
+ subject do
23
+ Tengine::Core::Config::HeartbeatWatcher.new
24
+ end
25
+ its(:db){ should == {
26
+ 'host' => 'localhost',
27
+ 'port' => 27017,
28
+ 'username' => nil,
29
+ 'password' => nil,
30
+ 'database' => 'tengine_production',
31
+ }}
32
+
33
+ it "db" do
34
+ subject.db.should == {
35
+ 'host' => 'localhost',
36
+ 'port' => 27017,
37
+ 'username' => nil,
38
+ 'password' => nil,
39
+ 'database' => 'tengine_production',
40
+ }
41
+ end
42
+
43
+ it "process_daemon" do
44
+ subject[:process][:daemon].should be_false
45
+ end
46
+
47
+ it "heartbeat_hbw" do
48
+ subject[:heartbeat][:hbw][:interval].should == 0
49
+ end
50
+
51
+ end
52
+
53
+ context "指定した設定ファイルが存在しない場合" do
54
+ it "例外を生成します" do
55
+ config_path = File.expand_path("../config_spec/unexist_config.yml", File.dirname(__FILE__))
56
+ expect{
57
+ Tengine::Core::Config::HeartbeatWatcher.new(:config => config_path)
58
+ }.to raise_error(Tengine::Core::ConfigError, /No such file or directory - #{config_path}/)
59
+ end
60
+ end
61
+
62
+ end
@@ -0,0 +1,13 @@
1
+ --
2
+ process:
3
+ daemon: true
4
+ pid_dir: "/var/run/tengined_pids"
5
+ tengined:
6
+ load_path: "/var/lib/tengine"
7
+ status_dir: "/var/run/tengined_status"
8
+ activation_dir: "/var/run/tengined_activations"
9
+ heartbeat_period: <%= 10 * 60 - %>
10
+ confirmation_threshold: "warn"
11
+ event_queue:
12
+ queue:
13
+ name: tengine_event_queue2
@@ -0,0 +1,13 @@
1
+ ---
2
+ process_configs:
3
+ daemon: true
4
+ pid_dir: "/var/run/tengined_pids"
5
+ tengined:
6
+ load_path: "/var/lib/tengine"
7
+ status_dir: "/var/run/tengined_status"
8
+ activation_dir: "/var/run/tengined_activations"
9
+ heartbeat_period: 600
10
+ confirmation_threshold: "warn"
11
+ event_queue:
12
+ queue:
13
+ name: tengine_event_queue2
@@ -0,0 +1,12 @@
1
+ ---
2
+ process:
3
+ daemon: true
4
+ pid_dir: "/var/run/tengined_pids"
5
+ load_path: "/var/lib/tengine"
6
+ status_dir: "/var/run/tengined_status"
7
+ activation_dir: "/var/run/tengined_activations"
8
+ heartbeat_period: 600
9
+ confirmation_threshold: "warn"
10
+ event_queue:
11
+ queue:
12
+ name: tengine_event_queue2
@@ -0,0 +1,13 @@
1
+ ---
2
+ process:
3
+ daemon: true
4
+ pid_dir: "/var/run/tengined_pids"
5
+ tengined:
6
+ load_path: "/var/lib/tengine"
7
+ - status_dir: "/var/run/tengined_status"
8
+ activation_dir: "/var/run/tengined_activations"
9
+ heartbeat_period: 600
10
+ confirmation_threshold: "warn"
11
+ event_queue:
12
+ queue:
13
+ name: tengine_event_queue2
@@ -0,0 +1,54 @@
1
+ process:
2
+ daemon: false
3
+ pid_dir: "./tmp/tengined_pids" # 本番環境での例 "/var/run/tengined_pids"
4
+
5
+ tengined:
6
+ activation_timeout: 300,
7
+ load_path: "./spec_dsl/"
8
+ activation_dir: "./tmp/tengined_activations" # 本番環境での例 "/var/run/tengined_activations"
9
+
10
+ db:
11
+ host: 'localhost'
12
+ port: 21039
13
+ username:
14
+ password:
15
+ database: 'tengine_production'
16
+
17
+ event_queue:
18
+ connection:
19
+ host: 'localhost'
20
+ port: 5672
21
+ # vhost:
22
+ # user:
23
+ # pass:
24
+ exchange:
25
+ name: 'tengine_event_exchange'
26
+ type: 'direct'
27
+ durable: true
28
+ queue:
29
+ name: 'tengine_event_queue'
30
+ durable: true
31
+
32
+ log_common:
33
+ output: # file path or "STDOUT" / "STDERR"
34
+ rotation: 3 # rotation file count or daily,weekly,monthly. default: 3
35
+ rotation_size: 1024 * 1024 # number of max log file size. default: 1048576 (10MB)
36
+ level: 'debug' # debug/info/warn/error/fatal. default: info
37
+
38
+ application_log:
39
+ output: # file path or "STDOUT" / "STDERR". default: if daemon process then "./log/application.log" else "STDOUT"
40
+ rotation: # rotation file count or daily,weekly,monthly. default: value of --log-common-rotation
41
+ rotation_size: # number of max log file size. default: value of --log-common-rotation-size
42
+ level: # debug/info/warn/error/fatal. default: value of --log-common-level
43
+
44
+ process_stdout_log:
45
+ output: # file path or "STDOUT" / "STDERR". default: if daemon process then "./log/#{$PROGRAM_NAME}_#{Process.pid}_stdout.log" else "STDOUT"
46
+ rotation: # rotation file count or daily,weekly,monthly. default: value of --log-common-rotation
47
+ rotation_size: # number of max log file size. default: value of --log-common-rotation-size
48
+ level: # debug/info/warn/error/fatal. default: value of --log-common-level
49
+
50
+ process_stderr_log:
51
+ output: # file path or "STDOUT" / "STDERR". default: if daemon process then "./log/#{$PROGRAM_NAME}_#{Process.pid}_stderr.log" else "STDERR"
52
+ rotation: # rotation file count or daily,weekly,monthly. default: value of --log-common-rotation
53
+ rotation_size: # number of max log file size. default: value of --log-common-rotation-size
54
+ level: # debug/info/warn/error/fatal. default: value of --log-common-level
@@ -0,0 +1,16 @@
1
+ process:
2
+ daemon: true
3
+ pid_dir: "/var/run/tengined_pids"
4
+
5
+ tengined:
6
+ load_path: "/var/lib/tengine"
7
+ status_dir: "/var/run/tengined_status"
8
+ activation_dir: "/var/run/tengined_activations"
9
+ # heartbeat_period: 600
10
+ confirmation_threshold: "warn"
11
+ event_queue:
12
+ queue:
13
+ name: tengine_event_queue2
14
+ heartbeat:
15
+ core:
16
+ interval: 600
@@ -0,0 +1,16 @@
1
+ process:
2
+ daemon: true
3
+ pid_dir: "tmp/tengined_pids"
4
+
5
+ tengined:
6
+ load_path: "tengine_dsls"
7
+ status_dir: "tmp/tengined_status"
8
+ activation_dir: "tmp/tengined_activations"
9
+ # heartbeat_period: 600
10
+ confirmation_threshold: "warn"
11
+ event_queue:
12
+ queue:
13
+ name: tengine_event_queue2
14
+ heartbeat:
15
+ core:
16
+ interval: 600
@@ -0,0 +1,16 @@
1
+ process:
2
+ daemon: true
3
+ pid_dir: "/var/run/tengined_pids"
4
+
5
+ tengined:
6
+ load_path: "/var/lib/tengine/init.rb"
7
+ status_dir: "/var/run/tengined_status"
8
+ activation_dir: "/var/run/tengined_activations"
9
+ # heartbeat_period: 600
10
+ confirmation_threshold: "warn"
11
+ event_queue:
12
+ queue:
13
+ name: tengine_event_queue2
14
+ heartbeat:
15
+ core:
16
+ interval: 600
@@ -0,0 +1,16 @@
1
+ process:
2
+ daemon: true
3
+ pid_dir: "tmp/tengined_pids"
4
+
5
+ tengined:
6
+ load_path: "tengine_dsls/init.rb"
7
+ status_dir: "tmp/tengined_status"
8
+ activation_dir: "tmp/tengined_activations"
9
+ # heartbeat_period: 600
10
+ confirmation_threshold: "warn"
11
+ event_queue:
12
+ queue:
13
+ name: tengine_event_queue2
14
+ heartbeat:
15
+ core:
16
+ interval: 600
@@ -0,0 +1,235 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'spec_helper'
3
+
4
+ describe Tengine::Core::Config::Core do
5
+
6
+ context "ログの設定なし" do
7
+ {
8
+ true => "デーモン起動",
9
+ false => "非デーモン起動",
10
+ }.each do |daemon_process, context_name|
11
+ context(context_name) do
12
+ before{ @config = Tengine::Core::Config::Core.new(:process => {:daemon => daemon_process})}
13
+
14
+ context "正しい設定の場合" do
15
+
16
+ context :application_log do
17
+ it do
18
+ @config[:process][:daemon].should == daemon_process
19
+
20
+ mock_logger = mock(:logger)
21
+ Logger.should_receive(:new).
22
+ with(daemon_process ? "./log/application.log" : STDOUT, 3, 1024 * 1024).
23
+ and_return(mock_logger)
24
+ mock_logger.should_receive(:level=).with(Logger::INFO)
25
+ mock_logger.should_receive(:formatter=).with(an_instance_of(Proc))
26
+ @config.application_log.new_logger
27
+ end
28
+ end
29
+
30
+ context :process_stdout_log do
31
+ it do
32
+ mock_logger = mock(:logger)
33
+ Logger.should_receive(:new).
34
+ with(daemon_process ? %r{^\./log/.*_stdout\.log} : STDOUT, 3, 1024 * 1024).
35
+ and_return(mock_logger)
36
+ mock_logger.should_receive(:level=).with(Logger::INFO)
37
+ mock_logger.should_receive(:formatter=).with(an_instance_of(Proc))
38
+ @config.process_stdout_log.new_logger
39
+ end
40
+ end
41
+
42
+ context :process_stderr_log do
43
+ it do
44
+ mock_logger = mock(:logger)
45
+ Logger.should_receive(:new).
46
+ with(daemon_process ? %r{^\./log/.*_stderr\.log} : STDERR, 3, 1024 * 1024).
47
+ and_return(mock_logger)
48
+ mock_logger.should_receive(:level=).with(Logger::INFO)
49
+ mock_logger.should_receive(:formatter=).with(an_instance_of(Proc))
50
+ @config.process_stderr_log.new_logger
51
+ end
52
+ end
53
+ end
54
+
55
+ context :invalid_log_type_name do
56
+ it "should raise ArgumentError"do
57
+ expect{
58
+ @config.invalid_log_type_name
59
+ }.to raise_error(NoMethodError)
60
+ end
61
+ end
62
+
63
+
64
+ end
65
+ end
66
+ end
67
+
68
+ context "共通設定なし各ログの設定あり" do
69
+ {
70
+ true => "デーモン起動の場合",
71
+ false => "非デーモン起動の場合",
72
+ }.each do |daemon_process, context_name|
73
+ context(context_name) do
74
+ before do
75
+ @config = Tengine::Core::Config::Core.new({
76
+ :process => {:daemon => daemon_process},
77
+ :application_log => {
78
+ :output => "/var/log/tengined/application.log",
79
+ :rotation => "daily",
80
+ :level => "error",
81
+ },
82
+ :process_stdout_log => {
83
+ :output => "/var/log/tengined/process_stdout.log",
84
+ :rotation => "weekly",
85
+ :level => "info",
86
+ },
87
+ :process_stderr_log => {
88
+ :output => "/var/log/tengined/process_stderr.log",
89
+ :rotation => "monthly",
90
+ :level => "info",
91
+ },
92
+ })
93
+ end
94
+
95
+ context :application_log do
96
+ it do
97
+ mock_logger = mock(:logger)
98
+ Logger.should_receive(:new).
99
+ with("/var/log/tengined/application.log", "daily", 1048576).
100
+ and_return(mock_logger)
101
+ mock_logger.should_receive(:level=).with(Logger::ERROR)
102
+ mock_logger.should_receive(:formatter=).with(an_instance_of(Proc))
103
+ @config.application_log.new_logger
104
+ end
105
+ end
106
+
107
+ context :process_stdout_log do
108
+ it do
109
+ mock_logger = mock(:logger)
110
+ Logger.should_receive(:new).
111
+ with("/var/log/tengined/process_stdout.log", "weekly", 1048576).
112
+ and_return(mock_logger)
113
+ mock_logger.should_receive(:level=).with(Logger::INFO)
114
+ mock_logger.should_receive(:formatter=).with(an_instance_of(Proc))
115
+ @config.process_stdout_log.new_logger
116
+ end
117
+ end
118
+
119
+ context :process_stderr_log do
120
+ it do
121
+ mock_logger = mock(:logger)
122
+ Logger.should_receive(:new).
123
+ with("/var/log/tengined/process_stderr.log", "monthly", 1048576).
124
+ and_return(mock_logger)
125
+ mock_logger.should_receive(:level=).with(Logger::INFO)
126
+ mock_logger.should_receive(:formatter=).with(an_instance_of(Proc))
127
+ @config.process_stderr_log.new_logger
128
+ end
129
+ end
130
+
131
+ end
132
+ end
133
+ end
134
+
135
+ context "共通設定あり各ログの設定あり" do
136
+ {
137
+ true => "デーモン起動の場合",
138
+ false => "非デーモン起動の場合",
139
+ }.each do |daemon_process, context_name|
140
+ context(context_name) do
141
+ before do
142
+ @config = Tengine::Core::Config::Core.new({
143
+ :process => {:daemon => daemon_process},
144
+ :log_common => {
145
+ :rotation => "daily",
146
+ :level => "info",
147
+ },
148
+ :application_log => {
149
+ :output => "/var/log/tengined/application.log",
150
+ },
151
+ :process_stdout_log => {
152
+ :output => "/var/log/tengined/process_stdout.log",
153
+ },
154
+ :process_stderr_log => {
155
+ :output => "/var/log/tengined/process_stderr.log",
156
+ :rotation => "monthly",
157
+ },
158
+ })
159
+ end
160
+
161
+ context :application_log do
162
+ it do
163
+ mock_logger = mock(:logger)
164
+ Logger.should_receive(:new).
165
+ with("/var/log/tengined/application.log", "daily", 1048576).
166
+ and_return(mock_logger)
167
+ mock_logger.should_receive(:level=).with(Logger::INFO)
168
+ mock_logger.should_receive(:formatter=).with(an_instance_of(Proc))
169
+ @config.application_log.new_logger
170
+ end
171
+ end
172
+
173
+ context :process_stdout_log do
174
+ it do
175
+ mock_logger = mock(:logger)
176
+ Logger.should_receive(:new).
177
+ with("/var/log/tengined/process_stdout.log", "daily", 1048576).
178
+ and_return(mock_logger)
179
+ mock_logger.should_receive(:level=).with(Logger::INFO)
180
+ mock_logger.should_receive(:formatter=).with(an_instance_of(Proc))
181
+ @config.process_stdout_log.new_logger
182
+ end
183
+ end
184
+
185
+ context :process_stderr_log do
186
+ it do
187
+ mock_logger = mock(:logger)
188
+ Logger.should_receive(:new).
189
+ with("/var/log/tengined/process_stderr.log", "monthly", 1048576).
190
+ and_return(mock_logger)
191
+ mock_logger.should_receive(:level=).with(Logger::INFO)
192
+ mock_logger.should_receive(:formatter=).with(an_instance_of(Proc))
193
+ @config.process_stderr_log.new_logger
194
+ end
195
+ end
196
+
197
+ describe :setup_loggers do
198
+ before do
199
+ @tengine_logger_bak = Tengine.logger
200
+ @tengine_core_stdout_logger_bak = Tengine::Core.stdout_logger
201
+ @tengine_core_stderr_logger_bak = Tengine::Core.stderr_logger
202
+ @stdout_bak = $stdout
203
+ @stderr_bak = $stderr
204
+ end
205
+ after do
206
+ Tengine.logger = @tengine_logger_bak
207
+ Tengine::Core.stdout_logger = @tengine_core_stdout_logger_bak
208
+ Tengine::Core.stderr_logger = @tengine_core_stderr_logger_bak
209
+ $stdout = @stdout_bak
210
+ $stderr = @stderr_bak
211
+ end
212
+ it do
213
+ mock_logger1 = mock(:logger1)
214
+ mock_logger2 = mock(:logger2)
215
+ mock_logger3 = mock(:logger3)
216
+ mock_loggers = [mock_logger1, mock_logger2, mock_logger3]
217
+ mock_loggers.each{|m| [:level=, :formatter=].each {|n| m.should_receive(n)}}
218
+ mock_logger2.should_receive(:info).with("Tengine::Core::Config::Core#setup_loggers complete")
219
+ # mock_logger3.should_receive(:info).with("Tengine::Core::Config::Core#setup_loggers failure")
220
+ Logger.should_receive(:new).with("/var/log/tengined/application.log", "daily", 1024 * 1024).and_return(mock_logger1)
221
+ Logger.should_receive(:new).with("/var/log/tengined/process_stdout.log", "daily", 1024 * 1024).and_return(mock_logger2)
222
+ Logger.should_receive(:new).with("/var/log/tengined/process_stderr.log", "monthly", 1024 * 1024).and_return(mock_logger3)
223
+ @config.setup_loggers
224
+ Tengine.logger.should == mock_logger1
225
+ Tengine::Core.stdout_logger.should == mock_logger2
226
+ Tengine::Core.stderr_logger.should == mock_logger3
227
+ end
228
+
229
+ end
230
+
231
+ end
232
+ end
233
+ end
234
+
235
+ end