eye 0.1.11

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 (190) hide show
  1. data/.gitignore +31 -0
  2. data/.rspec +2 -0
  3. data/Gemfile +4 -0
  4. data/LICENSE +22 -0
  5. data/README.md +132 -0
  6. data/Rakefile +18 -0
  7. data/bin/eye +282 -0
  8. data/bin/loader_eye +56 -0
  9. data/examples/processes/em.rb +56 -0
  10. data/examples/processes/forking.rb +20 -0
  11. data/examples/processes/sample.rb +144 -0
  12. data/examples/rbenv.eye +11 -0
  13. data/examples/test.eye +65 -0
  14. data/examples/unicorn.eye +29 -0
  15. data/eye.gemspec +37 -0
  16. data/lib/eye.rb +25 -0
  17. data/lib/eye/application.rb +65 -0
  18. data/lib/eye/checker.rb +118 -0
  19. data/lib/eye/checker/cpu.rb +27 -0
  20. data/lib/eye/checker/file_ctime.rb +29 -0
  21. data/lib/eye/checker/file_size.rb +38 -0
  22. data/lib/eye/checker/http.rb +94 -0
  23. data/lib/eye/checker/memory.rb +27 -0
  24. data/lib/eye/checker/socket.rb +148 -0
  25. data/lib/eye/checker/validation.rb +49 -0
  26. data/lib/eye/child_process.rb +75 -0
  27. data/lib/eye/client.rb +32 -0
  28. data/lib/eye/control.rb +2 -0
  29. data/lib/eye/controller.rb +43 -0
  30. data/lib/eye/controller/commands.rb +64 -0
  31. data/lib/eye/controller/helpers.rb +61 -0
  32. data/lib/eye/controller/load.rb +224 -0
  33. data/lib/eye/controller/send_command.rb +88 -0
  34. data/lib/eye/controller/status.rb +136 -0
  35. data/lib/eye/dsl.rb +52 -0
  36. data/lib/eye/dsl/application_opts.rb +33 -0
  37. data/lib/eye/dsl/chain.rb +12 -0
  38. data/lib/eye/dsl/child_process_opts.rb +7 -0
  39. data/lib/eye/dsl/config_opts.rb +11 -0
  40. data/lib/eye/dsl/group_opts.rb +27 -0
  41. data/lib/eye/dsl/helpers.rb +12 -0
  42. data/lib/eye/dsl/main.rb +58 -0
  43. data/lib/eye/dsl/opts.rb +88 -0
  44. data/lib/eye/dsl/process_opts.rb +21 -0
  45. data/lib/eye/dsl/pure_opts.rb +132 -0
  46. data/lib/eye/dsl/validate.rb +41 -0
  47. data/lib/eye/group.rb +125 -0
  48. data/lib/eye/group/chain.rb +68 -0
  49. data/lib/eye/io/unix_server.rb +44 -0
  50. data/lib/eye/io/unix_socket.rb +39 -0
  51. data/lib/eye/loader.rb +13 -0
  52. data/lib/eye/logger.rb +80 -0
  53. data/lib/eye/process.rb +83 -0
  54. data/lib/eye/process/child.rb +61 -0
  55. data/lib/eye/process/commands.rb +256 -0
  56. data/lib/eye/process/config.rb +70 -0
  57. data/lib/eye/process/controller.rb +72 -0
  58. data/lib/eye/process/data.rb +46 -0
  59. data/lib/eye/process/monitor.rb +97 -0
  60. data/lib/eye/process/notify.rb +17 -0
  61. data/lib/eye/process/scheduler.rb +50 -0
  62. data/lib/eye/process/states.rb +92 -0
  63. data/lib/eye/process/states_history.rb +62 -0
  64. data/lib/eye/process/system.rb +60 -0
  65. data/lib/eye/process/trigger.rb +32 -0
  66. data/lib/eye/process/watchers.rb +67 -0
  67. data/lib/eye/server.rb +51 -0
  68. data/lib/eye/settings.rb +35 -0
  69. data/lib/eye/system.rb +145 -0
  70. data/lib/eye/system_resources.rb +83 -0
  71. data/lib/eye/trigger.rb +53 -0
  72. data/lib/eye/trigger/flapping.rb +24 -0
  73. data/lib/eye/utils.rb +5 -0
  74. data/lib/eye/utils/alive_array.rb +31 -0
  75. data/lib/eye/utils/celluloid_chain.rb +51 -0
  76. data/lib/eye/utils/leak_19.rb +7 -0
  77. data/lib/eye/utils/tail.rb +20 -0
  78. data/spec/checker/cpu_spec.rb +58 -0
  79. data/spec/checker/file_ctime_spec.rb +34 -0
  80. data/spec/checker/file_size_spec.rb +107 -0
  81. data/spec/checker/http_spec.rb +109 -0
  82. data/spec/checker/memory_spec.rb +64 -0
  83. data/spec/checker/socket_spec.rb +116 -0
  84. data/spec/checker_spec.rb +188 -0
  85. data/spec/child_process/child_process_spec.rb +46 -0
  86. data/spec/client_server_spec.rb +34 -0
  87. data/spec/controller/commands_spec.rb +92 -0
  88. data/spec/controller/controller_spec.rb +133 -0
  89. data/spec/controller/find_objects_spec.rb +150 -0
  90. data/spec/controller/group_spec.rb +110 -0
  91. data/spec/controller/intergration_spec.rb +327 -0
  92. data/spec/controller/load_spec.rb +326 -0
  93. data/spec/controller/races_spec.rb +70 -0
  94. data/spec/controller/stop_on_delete_spec.rb +157 -0
  95. data/spec/dsl/chain_spec.rb +140 -0
  96. data/spec/dsl/checks_spec.rb +202 -0
  97. data/spec/dsl/config_spec.rb +44 -0
  98. data/spec/dsl/dsl_spec.rb +73 -0
  99. data/spec/dsl/getter_spec.rb +223 -0
  100. data/spec/dsl/integration_spec.rb +311 -0
  101. data/spec/dsl/load_spec.rb +52 -0
  102. data/spec/dsl/process_spec.rb +330 -0
  103. data/spec/dsl/sub_procs_spec.rb +93 -0
  104. data/spec/dsl/with_server_spec.rb +104 -0
  105. data/spec/example/em.rb +57 -0
  106. data/spec/example/forking.rb +20 -0
  107. data/spec/example/sample.rb +154 -0
  108. data/spec/fixtures/dsl/0.rb +8 -0
  109. data/spec/fixtures/dsl/0a.rb +8 -0
  110. data/spec/fixtures/dsl/0c.rb +8 -0
  111. data/spec/fixtures/dsl/1.rb +5 -0
  112. data/spec/fixtures/dsl/bad.eye +6 -0
  113. data/spec/fixtures/dsl/configs/1.eye +3 -0
  114. data/spec/fixtures/dsl/configs/2.eye +1 -0
  115. data/spec/fixtures/dsl/configs/3.eye +1 -0
  116. data/spec/fixtures/dsl/configs/4.eye +3 -0
  117. data/spec/fixtures/dsl/empty.eye +20 -0
  118. data/spec/fixtures/dsl/include_test.eye +5 -0
  119. data/spec/fixtures/dsl/include_test/1.rb +6 -0
  120. data/spec/fixtures/dsl/include_test/ha.rb +4 -0
  121. data/spec/fixtures/dsl/include_test2.eye +5 -0
  122. data/spec/fixtures/dsl/integration.eye +30 -0
  123. data/spec/fixtures/dsl/integration2.eye +32 -0
  124. data/spec/fixtures/dsl/integration_locks.eye +30 -0
  125. data/spec/fixtures/dsl/integration_sor.eye +32 -0
  126. data/spec/fixtures/dsl/integration_sor2.eye +27 -0
  127. data/spec/fixtures/dsl/integration_sor3.eye +32 -0
  128. data/spec/fixtures/dsl/load.eye +25 -0
  129. data/spec/fixtures/dsl/load2.eye +7 -0
  130. data/spec/fixtures/dsl/load2_dup2.eye +13 -0
  131. data/spec/fixtures/dsl/load2_dup_pid.eye +7 -0
  132. data/spec/fixtures/dsl/load3.eye +10 -0
  133. data/spec/fixtures/dsl/load4.eye +7 -0
  134. data/spec/fixtures/dsl/load5.eye +8 -0
  135. data/spec/fixtures/dsl/load6.eye +17 -0
  136. data/spec/fixtures/dsl/load_dubls.eye +36 -0
  137. data/spec/fixtures/dsl/load_dup_ex_names.eye +15 -0
  138. data/spec/fixtures/dsl/load_error.eye +5 -0
  139. data/spec/fixtures/dsl/load_error_folder/load3.eye +10 -0
  140. data/spec/fixtures/dsl/load_error_folder/load4.eye +7 -0
  141. data/spec/fixtures/dsl/load_folder/load3.eye +10 -0
  142. data/spec/fixtures/dsl/load_folder/load4.eye +7 -0
  143. data/spec/fixtures/dsl/load_int.eye +8 -0
  144. data/spec/fixtures/dsl/load_int2.eye +13 -0
  145. data/spec/fixtures/dsl/load_logger.eye +26 -0
  146. data/spec/fixtures/dsl/load_logger2.eye +3 -0
  147. data/spec/fixtures/dsl/long_load.eye +5 -0
  148. data/spec/fixtures/dsl/subfolder1/proc1.rb +3 -0
  149. data/spec/fixtures/dsl/subfolder2.eye +9 -0
  150. data/spec/fixtures/dsl/subfolder2/common.rb +1 -0
  151. data/spec/fixtures/dsl/subfolder2/proc2.rb +3 -0
  152. data/spec/fixtures/dsl/subfolder2/sub/proc3.rb +6 -0
  153. data/spec/fixtures/dsl/subfolder3.eye +8 -0
  154. data/spec/fixtures/dsl/subfolder3/common.rb +1 -0
  155. data/spec/fixtures/dsl/subfolder3/proc4.rb +3 -0
  156. data/spec/fixtures/dsl/subfolder3/sub/proc5.rb +6 -0
  157. data/spec/fixtures/dsl/subfolder4.eye +6 -0
  158. data/spec/fixtures/dsl/subfolder4/a.rb +2 -0
  159. data/spec/fixtures/dsl/subfolder4/b.rb +1 -0
  160. data/spec/fixtures/dsl/subfolder4/c.rb +1 -0
  161. data/spec/mock_spec.rb +32 -0
  162. data/spec/process/checks/child_checks_spec.rb +79 -0
  163. data/spec/process/checks/cpu_spec.rb +114 -0
  164. data/spec/process/checks/ctime_spec.rb +43 -0
  165. data/spec/process/checks/fsize_spec.rb +22 -0
  166. data/spec/process/checks/http_spec.rb +52 -0
  167. data/spec/process/checks/intergration_spec.rb +32 -0
  168. data/spec/process/checks/memory_spec.rb +113 -0
  169. data/spec/process/child_process_spec.rb +125 -0
  170. data/spec/process/config_spec.rb +75 -0
  171. data/spec/process/controller_spec.rb +173 -0
  172. data/spec/process/monitoring_spec.rb +180 -0
  173. data/spec/process/restart_spec.rb +174 -0
  174. data/spec/process/scheduler_spec.rb +150 -0
  175. data/spec/process/start_spec.rb +261 -0
  176. data/spec/process/states_history_spec.rb +118 -0
  177. data/spec/process/stop_spec.rb +150 -0
  178. data/spec/process/system_spec.rb +100 -0
  179. data/spec/process/triggers/flapping_spec.rb +81 -0
  180. data/spec/process/update_config_spec.rb +63 -0
  181. data/spec/spec_helper.rb +120 -0
  182. data/spec/support/rr_celluloid.rb +36 -0
  183. data/spec/support/scheduler_hack.rb +16 -0
  184. data/spec/support/spec_support.rb +164 -0
  185. data/spec/system_resources_spec.rb +59 -0
  186. data/spec/system_spec.rb +170 -0
  187. data/spec/utils/alive_array_spec.rb +50 -0
  188. data/spec/utils/celluloid_chain_spec.rb +82 -0
  189. data/spec/utils/tail_spec.rb +21 -0
  190. metadata +558 -0
@@ -0,0 +1,3 @@
1
+ Eye.application "app4" do
2
+ working_dir "/tmp"
3
+ end
@@ -0,0 +1,5 @@
1
+ Eye.info "haha"
2
+
3
+ Eye.application "long_load" do
4
+ sleep 1
5
+ end
@@ -0,0 +1,3 @@
1
+ def proc1(proxy, name)
2
+ proxy.process(name){ pid_file "#{name}.pid" }
3
+ end
@@ -0,0 +1,9 @@
1
+ Eye.load("./subfolder2/sub/*.rb")
2
+ Eye.load("subfolder2/*.rb")
3
+
4
+ Eye.application "subfolder2" do
5
+ working_dir "/tmp"
6
+
7
+ proc2 self, "e3"
8
+ proc3 self, "e4"
9
+ end
@@ -0,0 +1 @@
1
+ ROOT = 'sub2'
@@ -0,0 +1,3 @@
1
+ def proc2(proxy, name)
2
+ proxy.process(name){ pid_file "#{name}.pid2" }
3
+ end
@@ -0,0 +1,6 @@
1
+ def proc3(proxy, name)
2
+ proxy.process(name){
3
+ working_dir ROOT
4
+ pid_file "#{name}.pid3"
5
+ }
6
+ end
@@ -0,0 +1,8 @@
1
+ Eye.load("./subfolder3/**/*.rb")
2
+
3
+ Eye.application "subfolder3" do
4
+ working_dir "/tmp"
5
+
6
+ proc4 self, "e1"
7
+ proc5 self, "e2"
8
+ end
@@ -0,0 +1 @@
1
+ ROOT = 'sub3'
@@ -0,0 +1,3 @@
1
+ def proc4(proxy, name)
2
+ proxy.process(name){ pid_file "#{name}.pid4" }
3
+ end
@@ -0,0 +1,6 @@
1
+ def proc5(proxy, name)
2
+ proxy.process(name){
3
+ working_dir ROOT
4
+ pid_file "#{name}.pid5"
5
+ }
6
+ end
@@ -0,0 +1,6 @@
1
+ Eye.load("./subfolder4/a.rb")
2
+ Eye.load("./subfolder4/c.rb")
3
+
4
+ Eye.application "subfolder4" do
5
+ env 'a' => A, 'b' => B, 'c' => D
6
+ end
@@ -0,0 +1,2 @@
1
+ A = 1
2
+ Eye.load("b.rb")
@@ -0,0 +1,32 @@
1
+ # -*- encoding : utf-8 -*-
2
+ require File.dirname(__FILE__) + '/spec_helper'
3
+
4
+ class Aaa
5
+ include Celluloid
6
+
7
+ def int
8
+ 1
9
+ end
10
+
11
+ def ext
12
+ int
13
+ end
14
+
15
+ end
16
+
17
+ describe "Actor mocking" do
18
+ before :each do
19
+ @a = Aaa.new
20
+ end
21
+
22
+ it "int" do
23
+ mock(@a).int{2}
24
+ @a.int.should == 2
25
+ end
26
+
27
+ it "ext" do
28
+ mock(@a).int{2}
29
+ @a.ext.should == 2
30
+ end
31
+
32
+ end
@@ -0,0 +1,79 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper'
2
+
3
+ describe "ChildProcess" do
4
+
5
+ describe "starting, monitoring" do
6
+ after :each do
7
+ @process.stop if @process
8
+ end
9
+
10
+ it "should just monitoring, and do nothin" do
11
+ start_ok_process(C.p3.merge(:monitor_children => {:checks => join(C.check_mem, C.check_cpu)}))
12
+ sleep 6
13
+
14
+ @process.state_name.should == :up
15
+ @process.childs.keys.should_not == []
16
+ @process.childs.keys.size.should == 3
17
+ @process.watchers.keys.should == [:check_alive, :check_childs]
18
+
19
+ @childs = @process.childs.values
20
+ @childs.each do |child|
21
+ child.watchers.keys.should == [:check_memory, :check_cpu]
22
+ dont_allow(child).schedule :restart
23
+ end
24
+
25
+ sleep 7
26
+ end
27
+
28
+ it "should check childs even when one of them respawned" do
29
+ start_ok_process(C.p3.merge(:monitor_children => {:checks => join(C.check_mem, C.check_cpu)}, :childs_update_period => Eye::SystemResources::PsAxActor::UPDATE_INTERVAL + 1))
30
+ @process.watchers.keys.should == [:check_alive, :check_childs]
31
+
32
+ sleep 6 # ensure that childs finds
33
+
34
+ @process.childs.size.should == 3
35
+
36
+ # now restarting
37
+ died = @process.childs.keys.sample
38
+ die_process!(died, 9)
39
+
40
+ # sleep enought for update list
41
+ sleep (Eye::SystemResources::PsAxActor::UPDATE_INTERVAL * 2 + 3).seconds
42
+
43
+ @process.childs.size.should == 3
44
+ @process.childs.keys.should_not include(died)
45
+
46
+ @childs = @process.childs.values
47
+ @childs.each do |child|
48
+ child.watchers.keys.should == [:check_memory, :check_cpu]
49
+ dont_allow(child).schedule :restart
50
+ end
51
+ end
52
+
53
+ it "some child get condition" do
54
+ start_ok_process(C.p3.merge(:monitor_children => {:checks =>
55
+ join(C.check_mem, C.check_cpu(:below => 50, :times => 2))}))
56
+ sleep 6
57
+
58
+ @process.childs.size.should == 3
59
+
60
+ @childs = @process.childs.values
61
+ crazy = @childs.shift
62
+
63
+ @childs.each do |child|
64
+ child.watchers.keys.should == [:check_memory, :check_cpu]
65
+ dont_allow(child).schedule :restart
66
+ end
67
+
68
+ stub(Eye::SystemResources).cpu(crazy.pid){ 55 }
69
+ stub(Eye::SystemResources).cpu(anything){ 5 }
70
+
71
+
72
+ crazy.watchers.keys.should == [:check_memory, :check_cpu]
73
+ mock(crazy).notify(:crit, "Bounded cpu(50%): [*55%, *55%]")
74
+ mock(crazy).schedule :restart, anything
75
+
76
+ sleep 4
77
+ end
78
+ end
79
+ end
@@ -0,0 +1,114 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper'
2
+
3
+ describe "Process Cpu check" do
4
+
5
+ before :each do
6
+ @c = C.p1.merge(
7
+ :checks => C.check_cpu
8
+ )
9
+ end
10
+
11
+ it "should start periodical watcher" do
12
+ start_ok_process(@c)
13
+
14
+ @process.watchers.keys.should == [:check_alive, :check_cpu]
15
+
16
+ @process.stop
17
+
18
+ # after process stop should remove watcher
19
+ @process.watchers.keys.should == []
20
+ end
21
+
22
+ describe "1 times" do
23
+ before :each do
24
+ @check = {:cpu => {:type => :cpu, :every => 2, :below => 10, :times => 1}}
25
+ end
26
+
27
+ it "when memory exceed limit process should restart" do
28
+ start_ok_process(@c.merge(:checks => @check))
29
+
30
+ stub(Eye::SystemResources).cpu(@process.pid){ 5 }
31
+
32
+ sleep 3
33
+
34
+ stub(Eye::SystemResources).cpu(@process.pid){ 20 }
35
+ mock(@process).schedule(:restart, anything)
36
+
37
+ sleep 1
38
+ end
39
+
40
+ it "else should not restart" do
41
+ start_ok_process(@c.merge(:checks => @check))
42
+
43
+ stub(Eye::SystemResources).cpu(@process.pid){ 5 }
44
+
45
+ sleep 3
46
+
47
+ stub(Eye::SystemResources).cpu(@process.pid){ 7 }
48
+ dont_allow(@process).schedule(:restart)
49
+
50
+ sleep 1
51
+ end
52
+ end
53
+
54
+ describe "3 times" do
55
+ before :each do
56
+ @check = {:cpu => {:type => :cpu, :every => 2, :below => 10, :times => 3}}
57
+ end
58
+
59
+ it "when memory exceed limit process should restart" do
60
+ start_ok_process(@c.merge(:checks => @check))
61
+ stub(Eye::SystemResources).cpu(@process.pid){ 5 }
62
+
63
+ sleep 3
64
+
65
+ stub(Eye::SystemResources).cpu(@process.pid){ 15 }
66
+ mock(@process).schedule(:restart, anything)
67
+
68
+ sleep 6
69
+ end
70
+
71
+ it "else should not restart" do
72
+ start_ok_process(@c.merge(:checks => @check))
73
+ stub(Eye::SystemResources).cpu(@process.pid){ 5 }
74
+
75
+ sleep 3
76
+
77
+ stub(Eye::SystemResources).cpu(@process.pid){ 7 }
78
+ dont_allow(@process).schedule(:restart)
79
+
80
+ sleep 6
81
+ end
82
+ end
83
+
84
+ describe "3 times" do
85
+ before :each do
86
+ @check = {:cpu => {:type => :cpu, :every => 2, :below => 10, :times => [3,5]}}
87
+ end
88
+
89
+ it "when memory exceed limit process should restart" do
90
+ start_ok_process(@c.merge(:checks => @check))
91
+ stub(Eye::SystemResources).cpu(@process.pid){ 5 }
92
+
93
+ sleep 5
94
+
95
+ stub(Eye::SystemResources).cpu(@process.pid){ 15 }
96
+ mock(@process).schedule(:restart, anything)
97
+
98
+ sleep 6
99
+ end
100
+
101
+ it "else should not restart" do
102
+ start_ok_process(@c.merge(:checks => @check))
103
+ stub(Eye::SystemResources).cpu(@process.pid){ 5 }
104
+
105
+ sleep 5
106
+
107
+ stub(Eye::SystemResources).cpu(@process.pid){ 7 }
108
+ dont_allow(@process).schedule(:restart)
109
+
110
+ sleep 6
111
+ end
112
+ end
113
+
114
+ end
@@ -0,0 +1,43 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper'
2
+
3
+ describe "Check CTime" do
4
+ before :each do
5
+ @c = C.p1.merge(
6
+ :checks => C.check_ctime(:times => 3)
7
+ )
8
+ end
9
+
10
+ it "should start periodical watcher" do
11
+ start_ok_process(@c)
12
+
13
+ @process.watchers.keys.should == [:check_alive, :check_ctime]
14
+
15
+ @process.stop
16
+
17
+ # after process stop should remove watcher
18
+ @process.watchers.keys.should == []
19
+ end
20
+
21
+ it "if ctime changes should_not restart" do
22
+ start_ok_process(@c)
23
+ @process.watchers.keys.should == [:check_alive, :check_ctime]
24
+
25
+ dont_allow(@process).schedule(:restart)
26
+
27
+ sleep 6
28
+ end
29
+
30
+ it "if ctime not changed should restart" do
31
+ start_ok_process(@c)
32
+
33
+ mock(@process).schedule(:restart, anything)
34
+
35
+ sleep 3
36
+
37
+ FileUtils.rm(C.p1[:stdout])
38
+
39
+ sleep 5
40
+ end
41
+
42
+ end
43
+
@@ -0,0 +1,22 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper'
2
+
3
+ describe "Check FSize" do
4
+ before :each do
5
+ @c = C.p1.merge(
6
+ :checks => C.check_fsize(:times => 3)
7
+ )
8
+ end
9
+
10
+ it "should start periodical watcher" do
11
+ start_ok_process(@c)
12
+
13
+ @process.watchers.keys.should == [:check_alive, :check_fsize]
14
+
15
+ @process.stop
16
+
17
+ # after process stop should remove watcher
18
+ @process.watchers.keys.should == []
19
+ end
20
+
21
+ end
22
+
@@ -0,0 +1,52 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper'
2
+
3
+ describe "Process Http check" do
4
+ before :each do
5
+ @c = C.p1.merge(
6
+ :checks => C.check_http
7
+ )
8
+ FakeWeb.register_uri(:get, "http://localhost:3000/bla", :body => "Somebody OK")
9
+ end
10
+
11
+ after :each do
12
+ FakeWeb.clean_registry
13
+ end
14
+
15
+ it "all ok" do
16
+ start_ok_process(@c)
17
+
18
+ dont_allow(@process).schedule(:restart)
19
+
20
+ # should not happens anything
21
+ sleep 6
22
+ end
23
+
24
+ it "bad body" do
25
+ start_ok_process(@c)
26
+ sleep 2
27
+
28
+ mock(@process).schedule(:restart, anything)
29
+ FakeWeb.register_uri(:get, "http://localhost:3000/bla", :body => "Somebody BAD")
30
+ sleep 2
31
+ end
32
+
33
+ it "bad status" do
34
+ start_ok_process(@c)
35
+ sleep 2
36
+
37
+ mock(@process).schedule(:restart, anything)
38
+ FakeWeb.register_uri(:get, "http://localhost:3000/bla", :body => "Somebody OK", :status => [500, 'err'])
39
+ sleep 2
40
+ end
41
+
42
+ it "not responded url" do
43
+ start_ok_process(@c)
44
+ sleep 2
45
+
46
+ mock(@process).schedule(:restart, anything)
47
+ FakeWeb.clean_registry
48
+ FakeWeb.allow_net_connect = false
49
+ sleep 2
50
+ end
51
+
52
+ end
@@ -0,0 +1,32 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper'
2
+
3
+ describe "Process Integration checks" do
4
+ before :each do
5
+ @c = C.p1.merge(
6
+ :checks => join(C.check_cpu, C.check_mem, C.check_ctime, C.check_http)
7
+ )
8
+
9
+ FakeWeb.register_uri(:get, "http://localhost:3000/bla", :body => "Somebody OK")
10
+ end
11
+
12
+ it "should start periodical watcher" do
13
+ start_ok_process(@c)
14
+
15
+ @process.watchers.keys.should == [:check_alive, :check_cpu, :check_memory, :check_ctime, :check_http]
16
+
17
+ @process.stop
18
+
19
+ # after process stop should remove watcher
20
+ @process.watchers.keys.should == []
21
+ end
22
+
23
+ it "intergration" do
24
+ start_ok_process(@c)
25
+
26
+ dont_allow(@process).schedule(:restart)
27
+
28
+ # should not happens anything
29
+ sleep 10
30
+ end
31
+
32
+ end