eye 0.2.4 → 0.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.
Files changed (143) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -3
  3. data/bin/eye +7 -0
  4. data/bin/loader_eye +7 -5
  5. data/examples/notify.eye +1 -1
  6. data/eye.gemspec +4 -4
  7. data/lib/eye.rb +1 -3
  8. data/lib/eye/controller.rb +4 -0
  9. data/lib/eye/controller/status.rb +1 -1
  10. data/lib/eye/dsl.rb +1 -1
  11. data/lib/eye/dsl/main.rb +0 -13
  12. data/lib/eye/dsl/opts.rb +4 -2
  13. data/lib/eye/loader.rb +2 -3
  14. data/lib/eye/notify.rb +3 -3
  15. data/lib/eye/process/monitor.rb +5 -3
  16. data/lib/eye/process/notify.rb +5 -5
  17. data/lib/eye/process/scheduler.rb +4 -4
  18. data/lib/eye/process/system.rb +3 -10
  19. data/lib/eye/process/trigger.rb +1 -1
  20. data/lib/eye/process/watchers.rb +1 -1
  21. data/lib/eye/server.rb +9 -8
  22. data/lib/eye/system.rb +2 -7
  23. data/lib/eye/system_resources.rb +3 -3
  24. data/lib/eye/utils/celluloid_chain.rb +2 -2
  25. metadata +7 -241
  26. data/lib/eye/io/unix_server.rb +0 -44
  27. data/lib/eye/io/unix_socket.rb +0 -39
  28. data/spec/checker/cpu_spec.rb +0 -58
  29. data/spec/checker/file_ctime_spec.rb +0 -34
  30. data/spec/checker/file_size_spec.rb +0 -107
  31. data/spec/checker/http_spec.rb +0 -114
  32. data/spec/checker/memory_spec.rb +0 -64
  33. data/spec/checker/socket_spec.rb +0 -116
  34. data/spec/checker_spec.rb +0 -187
  35. data/spec/child_process/child_process_spec.rb +0 -46
  36. data/spec/client_server_spec.rb +0 -33
  37. data/spec/controller/commands_spec.rb +0 -92
  38. data/spec/controller/controller_spec.rb +0 -157
  39. data/spec/controller/find_objects_spec.rb +0 -176
  40. data/spec/controller/group_spec.rb +0 -110
  41. data/spec/controller/intergration_spec.rb +0 -366
  42. data/spec/controller/load_spec.rb +0 -371
  43. data/spec/controller/races_spec.rb +0 -70
  44. data/spec/controller/stop_on_delete_spec.rb +0 -157
  45. data/spec/dsl/chain_spec.rb +0 -146
  46. data/spec/dsl/checks_spec.rb +0 -219
  47. data/spec/dsl/config_spec.rb +0 -44
  48. data/spec/dsl/dsl_spec.rb +0 -73
  49. data/spec/dsl/getter_spec.rb +0 -223
  50. data/spec/dsl/integration_spec.rb +0 -376
  51. data/spec/dsl/load_spec.rb +0 -52
  52. data/spec/dsl/notify_spec.rb +0 -114
  53. data/spec/dsl/process_spec.rb +0 -380
  54. data/spec/dsl/sub_procs_spec.rb +0 -93
  55. data/spec/dsl/with_server_spec.rb +0 -128
  56. data/spec/example/em.rb +0 -57
  57. data/spec/example/forking.rb +0 -20
  58. data/spec/example/sample.rb +0 -154
  59. data/spec/fixtures/dsl/0.rb +0 -8
  60. data/spec/fixtures/dsl/0a.rb +0 -8
  61. data/spec/fixtures/dsl/0c.rb +0 -8
  62. data/spec/fixtures/dsl/1.rb +0 -5
  63. data/spec/fixtures/dsl/bad.eye +0 -6
  64. data/spec/fixtures/dsl/configs/1.eye +0 -3
  65. data/spec/fixtures/dsl/configs/2.eye +0 -1
  66. data/spec/fixtures/dsl/configs/3.eye +0 -1
  67. data/spec/fixtures/dsl/configs/4.eye +0 -3
  68. data/spec/fixtures/dsl/empty.eye +0 -20
  69. data/spec/fixtures/dsl/include_test.eye +0 -5
  70. data/spec/fixtures/dsl/include_test/1.rb +0 -6
  71. data/spec/fixtures/dsl/include_test/ha.rb +0 -4
  72. data/spec/fixtures/dsl/include_test2.eye +0 -5
  73. data/spec/fixtures/dsl/integration.eye +0 -30
  74. data/spec/fixtures/dsl/integration2.eye +0 -32
  75. data/spec/fixtures/dsl/integration_locks.eye +0 -30
  76. data/spec/fixtures/dsl/integration_sor.eye +0 -32
  77. data/spec/fixtures/dsl/integration_sor2.eye +0 -27
  78. data/spec/fixtures/dsl/integration_sor3.eye +0 -32
  79. data/spec/fixtures/dsl/load.eye +0 -25
  80. data/spec/fixtures/dsl/load2.eye +0 -7
  81. data/spec/fixtures/dsl/load2_dup2.eye +0 -13
  82. data/spec/fixtures/dsl/load2_dup_pid.eye +0 -7
  83. data/spec/fixtures/dsl/load3.eye +0 -10
  84. data/spec/fixtures/dsl/load4.eye +0 -7
  85. data/spec/fixtures/dsl/load5.eye +0 -8
  86. data/spec/fixtures/dsl/load6.eye +0 -17
  87. data/spec/fixtures/dsl/load_dubls.eye +0 -36
  88. data/spec/fixtures/dsl/load_dup_ex_names.eye +0 -15
  89. data/spec/fixtures/dsl/load_error.eye +0 -5
  90. data/spec/fixtures/dsl/load_error_folder/load3.eye +0 -10
  91. data/spec/fixtures/dsl/load_error_folder/load4.eye +0 -7
  92. data/spec/fixtures/dsl/load_folder/load3.eye +0 -10
  93. data/spec/fixtures/dsl/load_folder/load4.eye +0 -7
  94. data/spec/fixtures/dsl/load_int.eye +0 -8
  95. data/spec/fixtures/dsl/load_int2.eye +0 -13
  96. data/spec/fixtures/dsl/load_logger.eye +0 -26
  97. data/spec/fixtures/dsl/load_logger2.eye +0 -3
  98. data/spec/fixtures/dsl/long_load.eye +0 -5
  99. data/spec/fixtures/dsl/subfolder1/proc1.rb +0 -3
  100. data/spec/fixtures/dsl/subfolder2.eye +0 -9
  101. data/spec/fixtures/dsl/subfolder2/common.rb +0 -1
  102. data/spec/fixtures/dsl/subfolder2/proc2.rb +0 -3
  103. data/spec/fixtures/dsl/subfolder2/sub/proc3.rb +0 -6
  104. data/spec/fixtures/dsl/subfolder3.eye +0 -8
  105. data/spec/fixtures/dsl/subfolder3/common.rb +0 -1
  106. data/spec/fixtures/dsl/subfolder3/proc4.rb +0 -3
  107. data/spec/fixtures/dsl/subfolder3/sub/proc5.rb +0 -6
  108. data/spec/fixtures/dsl/subfolder4.eye +0 -6
  109. data/spec/fixtures/dsl/subfolder4/a.rb +0 -2
  110. data/spec/fixtures/dsl/subfolder4/b.rb +0 -1
  111. data/spec/fixtures/dsl/subfolder4/c.rb +0 -1
  112. data/spec/mock_spec.rb +0 -31
  113. data/spec/notify/jabber_spec.rb +0 -25
  114. data/spec/notify/mail_spec.rb +0 -26
  115. data/spec/notify_spec.rb +0 -90
  116. data/spec/process/checks/child_checks_spec.rb +0 -79
  117. data/spec/process/checks/cpu_spec.rb +0 -114
  118. data/spec/process/checks/ctime_spec.rb +0 -43
  119. data/spec/process/checks/fsize_spec.rb +0 -22
  120. data/spec/process/checks/http_spec.rb +0 -52
  121. data/spec/process/checks/intergration_spec.rb +0 -32
  122. data/spec/process/checks/memory_spec.rb +0 -127
  123. data/spec/process/child_process_spec.rb +0 -125
  124. data/spec/process/config_spec.rb +0 -74
  125. data/spec/process/controller_spec.rb +0 -173
  126. data/spec/process/monitoring_spec.rb +0 -180
  127. data/spec/process/notify_spec.rb +0 -27
  128. data/spec/process/restart_spec.rb +0 -186
  129. data/spec/process/scheduler_spec.rb +0 -178
  130. data/spec/process/start_spec.rb +0 -261
  131. data/spec/process/states_history_spec.rb +0 -123
  132. data/spec/process/stop_spec.rb +0 -156
  133. data/spec/process/system_spec.rb +0 -136
  134. data/spec/process/triggers/flapping_spec.rb +0 -242
  135. data/spec/process/update_config_spec.rb +0 -62
  136. data/spec/spec_helper.rb +0 -128
  137. data/spec/support/rr_celluloid.rb +0 -15
  138. data/spec/support/spec_support.rb +0 -163
  139. data/spec/system_resources_spec.rb +0 -56
  140. data/spec/system_spec.rb +0 -174
  141. data/spec/utils/alive_array_spec.rb +0 -49
  142. data/spec/utils/celluloid_chain_spec.rb +0 -89
  143. data/spec/utils/tail_spec.rb +0 -20
@@ -1,371 +0,0 @@
1
- require File.dirname(__FILE__) + '/../spec_helper'
2
-
3
- describe "Eye::Controller::Load" do
4
- subject{ Eye::Controller.new }
5
-
6
- it "blank" do
7
- subject.load.should == {:error => true, :message => "config file '' not found!"}
8
- end
9
-
10
- it "not exists file" do
11
- subject.load("/asdf/asd/fasd/fas/df/sfd").should == {:error => true, :message => "config file '/asdf/asd/fasd/fas/df/sfd' not found!"}
12
- end
13
-
14
- it "load 1 app" do
15
- subject.load(fixture("dsl/load.eye")).should include(error: false)
16
- subject.short_tree.should == {
17
- "app1"=>{
18
- "gr1"=>{"p1"=>"/tmp/app1-gr1-p1.pid", "p2"=>"/tmp/app1-gr1-p2.pid"},
19
- "gr2"=>{"q3"=>"/tmp/app1-gr2-q3.pid"},
20
- "__default__"=>{"g4"=>"/tmp/app1-g4.pid", "g5"=>"/tmp/app1-g5.pid"}},
21
- "app2"=>{"__default__"=>{"z1"=>"/tmp/app2-z1.pid"}}}
22
- end
23
-
24
- it "load correctly application, groups for full_names processes" do
25
- subject.load(fixture("dsl/load.eye")).should include(error: false)
26
-
27
- p1 = subject.process_by_name('p1')
28
- p1[:application].should == 'app1'
29
- p1[:group].should == 'gr1'
30
- p1.name.should == 'p1'
31
- p1.full_name.should == 'app1:gr1:p1'
32
-
33
- gr1 = subject.group_by_name 'gr1'
34
- gr1.full_name.should == 'app1:gr1'
35
-
36
- g4 = subject.process_by_name('g4')
37
- g4[:application].should == 'app1'
38
- g4[:group].should == '__default__'
39
- g4.name.should == 'g4'
40
- g4.full_name.should == 'app1:g4'
41
- end
42
-
43
- it "load + 1new app" do
44
- subject.load(fixture("dsl/load.eye")).should include(error: false)
45
- subject.short_tree.should == {
46
- "app1"=>{
47
- "gr1"=>{"p1"=>"/tmp/app1-gr1-p1.pid", "p2"=>"/tmp/app1-gr1-p2.pid"},
48
- "gr2"=>{"q3"=>"/tmp/app1-gr2-q3.pid"},
49
- "__default__"=>{"g4"=>"/tmp/app1-g4.pid", "g5"=>"/tmp/app1-g5.pid"}},
50
- "app2"=>{"__default__"=>{"z1"=>"/tmp/app2-z1.pid"}}}
51
-
52
- subject.load(fixture("dsl/load2.eye")).should include(error: false)
53
-
54
- subject.short_tree.should == {
55
- "app1"=>{
56
- "gr1"=>{"p1"=>"/tmp/app1-gr1-p1.pid", "p2"=>"/tmp/app1-gr1-p2.pid"},
57
- "gr2"=>{"q3"=>"/tmp/app1-gr2-q3.pid"},
58
- "__default__"=>{"g4"=>"/tmp/app1-g4.pid", "g5"=>"/tmp/app1-g5.pid"}},
59
- "app2"=>{"__default__"=>{"z1"=>"/tmp/app2-z1.pid"}},
60
- "app3"=>{"__default__"=>{"e1"=>"/tmp/app3-e1.pid"}}}
61
- end
62
-
63
- it "load 1 changed app" do
64
- subject.load(fixture("dsl/load.eye")).should include(error: false)
65
- subject.load(fixture("dsl/load2.eye")).should include(error: false)
66
-
67
- p = subject.process_by_name('e1')
68
- p[:daemonize].should == false
69
-
70
- proxy(p).schedule :update_config, is_a(Hash), is_a(String)
71
- dont_allow(p).schedule :monitor
72
-
73
- subject.load(fixture("dsl/load3.eye")).should include(error: false)
74
-
75
- subject.short_tree.should == {
76
- "app1"=>{
77
- "gr1"=>{"p1"=>"/tmp/app1-gr1-p1.pid", "p2"=>"/tmp/app1-gr1-p2.pid"},
78
- "gr2"=>{"q3"=>"/tmp/app1-gr2-q3.pid"},
79
- "__default__"=>{"g4"=>"/tmp/app1-g4.pid", "g5"=>"/tmp/app1-g5.pid"}},
80
- "app2"=>{"__default__"=>{"z1"=>"/tmp/app2-z1.pid"}},
81
- "app3"=>{"wow"=>{"e1"=>"/tmp/app3-e1.pid"}}}
82
-
83
- sleep 0.1
84
- p2 = subject.process_by_name('e1')
85
- p2[:daemonize].should == true
86
-
87
- p.object_id.should == p2.object_id
88
- end
89
-
90
- it "load -> delete -> load" do
91
- subject.load(fixture("dsl/load.eye")).should include(error: false)
92
- subject.load(fixture("dsl/load2.eye")).should include(error: false)
93
- subject.command(:delete, 'app3')
94
- subject.load(fixture("dsl/load3.eye")).should include(error: false)
95
-
96
- subject.short_tree.should == {
97
- "app1"=>{
98
- "gr1"=>{"p1"=>"/tmp/app1-gr1-p1.pid", "p2"=>"/tmp/app1-gr1-p2.pid"},
99
- "gr2"=>{"q3"=>"/tmp/app1-gr2-q3.pid"},
100
- "__default__"=>{"g4"=>"/tmp/app1-g4.pid", "g5"=>"/tmp/app1-g5.pid"}},
101
- "app2"=>{"__default__"=>{"z1"=>"/tmp/app2-z1.pid"}},
102
- "app3"=>{"wow"=>{"e1"=>"/tmp/app3-e1.pid"}}}
103
- end
104
-
105
- it "load + 1 app, and pid_file crossed" do
106
- subject.load(fixture("dsl/load2.eye")).should include(error: false)
107
- subject.load(fixture("dsl/load4.eye")).should include(:error => true, :message => "dublicate pid_files: {\"/tmp/app3-e1.pid\"=>2}")
108
-
109
- subject.short_tree.should == {
110
- "app3"=>{"__default__"=>{"e1"=>"/tmp/app3-e1.pid"}}}
111
- end
112
-
113
- it "check syntax" do
114
- subject.load(fixture("dsl/load2.eye")).should include(error: false)
115
- subject.check(fixture("dsl/load4.eye")).should include(:error => true, :message => "dublicate pid_files: {\"/tmp/app3-e1.pid\"=>2}")
116
- end
117
-
118
- it "check explain" do
119
- res = subject.explain(fixture("dsl/load2.eye"))
120
- res[:error].should == false
121
- res[:config].is_a?(Hash).should == true
122
- end
123
-
124
- it "process and groups disappears" do
125
- subject.load(fixture("dsl/load.eye")).should include(error: false)
126
- subject.group_by_name('gr1').processes.full_size.should == 2
127
-
128
- subject.load(fixture("dsl/load5.eye")).should include(error: false)
129
- sleep 0.5
130
-
131
- group_actors = Celluloid::Actor.all.select{|c| c.class == Eye::Group }
132
- process_actors = Celluloid::Actor.all.select{|c| c.class == Eye::Process }
133
-
134
- subject.short_tree.should == {
135
- "app1"=>{"gr1"=>{"p1"=>"/tmp/app1-gr1-p1.pid"}},
136
- "app2"=>{"__default__"=>{"z1"=>"/tmp/app2-z1.pid"}}}
137
-
138
- group_actors.map{|a| a.name}.sort.should == %w{__default__ gr1}
139
- process_actors.map{|a| a.name}.sort.should == %w{p1 z1}
140
-
141
- subject.group_by_name('gr1').processes.full_size.should == 1
142
-
143
- # terminate 1 action
144
- subject.process_by_name('p1').terminate
145
- subject.info_string.should be_a(String)
146
- end
147
-
148
- it "swap groups" do
149
- subject.load(fixture("dsl/load.eye")).should include(error: false)
150
- subject.load(fixture("dsl/load6.eye")).should include(error: false)
151
-
152
- subject.short_tree.should == {
153
- "app1" => {
154
- "gr2"=>{"p1"=>"/tmp/app1-gr1-p1.pid", "p2"=>"/tmp/app1-gr1-p2.pid"},
155
- "gr1"=>{"q3"=>"/tmp/app1-gr2-q3.pid"},
156
- "__default__"=>{"g4"=>"/tmp/app1-g4.pid", "g5"=>"/tmp/app1-g5.pid"}},
157
- "app2"=>{"__default__"=>{"z1"=>"/tmp/app2-z1.pid"}}}
158
- end
159
-
160
- it "two configs with same pids (should validate final config)" do
161
- subject.load(fixture("dsl/load.eye")).should include(error: false)
162
- subject.load(fixture("dsl/load2*.eye")).should == {:error => true, :message=>"dublicate pid_files: {\"/tmp/app3-e1.pid\"=>2}"}
163
- end
164
-
165
- it "two configs with same pids (should validate final config)" do
166
- subject.load(fixture("dsl/load.eye")).should include(error: false)
167
- subject.load(fixture("dsl/load2.eye")).should include(error: false)
168
- subject.load(fixture("dsl/load2_*.eye")).should == {:error => true, :message=>"dublicate pid_files: {\"/tmp/app3-e1.pid\"=>2}"}
169
- end
170
-
171
- it "dups of pid_files, but they different with expand" do
172
- subject.load(fixture("dsl/load2_dup2.eye")).should include(error: false)
173
- end
174
-
175
- it "dups of names but in different scopes" do
176
- subject.load(fixture("dsl/load_dup_ex_names.eye")).should include(error: false)
177
- end
178
-
179
- describe "configs" do
180
- after(:each){ set_glogger }
181
-
182
- it "load logger" do
183
- subject.load(fixture("dsl/load_logger.eye")).should include(error: false)
184
- Eye::Logger.dev.should == "/tmp/1.log"
185
- end
186
-
187
- it "set logger when load multiple configs" do
188
- subject.load(fixture("dsl/load_logger{,2}.eye")).should include(error: false)
189
- Eye::Logger.dev.should == "/tmp/1.log"
190
- end
191
-
192
- it "should corrent load config section" do
193
- subject.load(fixture("dsl/configs/{1,2}.eye")).should include(error: false)
194
- Eye::Logger.dev.should == "/tmp/a.log"
195
- subject.current_config[:config].should == {:logger=>"/tmp/a.log", :http=>{:enable=>true}}
196
-
197
- subject.load(fixture("dsl/configs/3.eye")).should include(error: false)
198
- Eye::Logger.dev.should == "/tmp/a.log"
199
- subject.current_config[:config].should == {:logger=>"/tmp/a.log", :http=>{:enable=>false}}
200
-
201
- subject.load(fixture("dsl/configs/4.eye")).should include(error: false)
202
- Eye::Logger.dev.should == nil
203
- subject.current_config[:config].should == {:logger=>'', :http=>{:enable=>false}}
204
-
205
- subject.load(fixture("dsl/configs/2.eye")).should include(error: false)
206
- Eye::Logger.dev.should == nil
207
- subject.current_config[:config].should == {:logger=>'', :http=>{:enable=>true}}
208
- end
209
- end
210
-
211
-
212
- it "load folder" do
213
- subject.load(fixture("dsl/load_folder/")).should include(error: false)
214
- subject.short_tree.should == {
215
- "app3" => {"wow"=>{"e1"=>"/tmp/app3-e1.pid"}},
216
- "app4" => {"__default__"=>{"e2"=>"/tmp/app4-e2.pid"}}
217
- }
218
- end
219
-
220
- it "load folder with error" do
221
- subject.load(fixture("dsl/load_error_folder/")).should include(error: true)
222
- end
223
-
224
- it "load files by mask" do
225
- subject.load(fixture("dsl/load_folder/*.eye")).should include(error: false)
226
- subject.short_tree.should == {
227
- "app3" => {"wow"=>{"e1"=>"/tmp/app3-e1.pid"}},
228
- "app4" => {"__default__"=>{"e2"=>"/tmp/app4-e2.pid"}}
229
- }
230
- end
231
-
232
- it "load files by mask with error" do
233
- subject.load(fixture("dsl/load_error_folder/*.eye")).should include(error: true)
234
- end
235
-
236
- it "load not files with mask" do
237
- subject.load(fixture("dsl/load_folder/*.bla")).should include(error: true)
238
- end
239
-
240
- it "bad mask" do
241
- subject.load(" asdf asdf afd d").should == {:error => true, :message => "config file ' asdf asdf afd d' not found!"}
242
- end
243
-
244
- it "group update it settings" do
245
- subject.load(fixture("dsl/load.eye")).should include(error: false)
246
- app = subject.application_by_name('app1')
247
- gr = subject.group_by_name('gr2')
248
- gr.config[:chain].should == {:restart => {:grace=>0.5, :action=>:restart}, :start => {:grace=>0.5, :action=>:start}}
249
-
250
- subject.load(fixture("dsl/load6.eye")).should include(error: false)
251
- sleep 1
252
-
253
- gr.config[:chain].should == {:restart => {:grace=>1.0, :action=>:restart}, :start => {:grace=>1.0, :action=>:start}}
254
- end
255
-
256
- it "load multiple apps with cross constants" do
257
- subject.load(fixture('dsl/subfolder{2,3}.eye'))
258
- subject.process_by_name('e1')[:working_dir].should == '/tmp'
259
- subject.process_by_name('e2')[:working_dir].should == 'sub3'
260
-
261
- subject.process_by_name('e3')[:working_dir].should == '/tmp'
262
- subject.process_by_name('e4')[:working_dir].should == 'sub2'
263
- end
264
-
265
- it "raised load" do
266
- subject.load(fixture("dsl/load_error.eye")).should == {error: true, message: "No such file or directory - /asd/fasd/fas/df/asd/fas/df/d"}
267
- Eye.logger = $logger_path
268
- end
269
-
270
- describe "synchronize groups" do
271
- it "correctly schedule monitor for groups and processes" do
272
- subject.load(fixture("dsl/load_int.eye")).should include(error: false)
273
- sleep 0.5
274
-
275
- p0 = subject.process_by_name 'p0'
276
- p1 = subject.process_by_name 'p1'
277
- p2 = subject.process_by_name 'p2'
278
- gr1 = subject.group_by_name 'gr1'
279
- gr_ = subject.group_by_name '__default__'
280
-
281
- p0.schedule_history.states.should == [:monitor]
282
- p1.schedule_history.states.should == [:monitor]
283
- p2.schedule_history.states.should == [:monitor]
284
- gr1.schedule_history.states.should == [:monitor]
285
- gr_.schedule_history.states.should == [:monitor]
286
-
287
- subject.load(fixture("dsl/load_int2.eye")).should include(error: false)
288
- sleep 0.5
289
-
290
- p1.alive?.should == false
291
- p0.alive?.should == false
292
-
293
- p01 = subject.process_by_name 'p0-1'
294
- p4 = subject.process_by_name 'p4'
295
- p5 = subject.process_by_name 'p5'
296
- gr2 = subject.group_by_name 'gr2'
297
-
298
- p2.schedule_history.states.should == [:monitor, :update_config]
299
- gr1.schedule_history.states.should == [:monitor, :update_config]
300
- gr_.schedule_history.states.should == [:monitor, :update_config]
301
-
302
- p01.schedule_history.states.should == [:monitor]
303
- p4.schedule_history.states.should == [:monitor]
304
- p5.schedule_history.states.should == [:monitor]
305
- gr2.schedule_history.states.should == [:monitor]
306
- end
307
- end
308
-
309
- describe "load is exclusive" do
310
- it "run double in time" do
311
- Eye::Control.async.command(:load, fixture("dsl/long_load.eye"))
312
- Eye::Control.async.command(:load, fixture("dsl/long_load.eye"))
313
- sleep 2.5
314
- should_spend(0, 0.2) do
315
- Eye::Control.command(:info).should be_a(String)
316
- end
317
- end
318
-
319
- it "load with subloads" do
320
- silence_warnings{
321
- Eye::Control.command(:load, fixture("dsl/subfolder2.eye"))
322
- }
323
- should_spend(0, 0.2) do
324
- Eye::Control.command(:info).should be_a(String)
325
- end
326
- end
327
- end
328
-
329
- describe "cleanup configs on delete" do
330
- it "load config, delete 1 process, load another config" do
331
- subject.load(fixture('dsl/load.eye'))
332
- subject.process_by_name('p1').should be
333
-
334
- subject.command(:delete, "p1"); sleep 0.1
335
- subject.process_by_name('p1').should be_nil
336
-
337
- subject.load(fixture('dsl/load2.eye'))
338
- subject.process_by_name('p1').should be_nil
339
- end
340
-
341
- it "load config, delete 1 group, load another config" do
342
- subject.load(fixture('dsl/load.eye'))
343
- subject.group_by_name('gr1').should be
344
-
345
- subject.command(:delete, "gr1"); sleep 0.1
346
- subject.group_by_name('p1').should be_nil
347
-
348
- subject.load(fixture('dsl/load2.eye'))
349
- subject.group_by_name('gr1').should be_nil
350
- end
351
-
352
- it "load config, then delete app, and load it with changed app-name" do
353
- subject.load(fixture('dsl/load3.eye'))
354
- subject.command(:delete, "app3"); sleep 0.1
355
- subject.load(fixture('dsl/load4.eye')).should include(error: false)
356
- end
357
- end
358
-
359
- it "should update only changed apps" do
360
- mock(subject).update_or_create_application('app1', is_a(Hash))
361
- mock(subject).update_or_create_application('app2', is_a(Hash))
362
- subject.load(fixture('dsl/load.eye'))
363
-
364
- mock(subject).update_or_create_application('app3', is_a(Hash))
365
- subject.load(fixture('dsl/load2.eye'))
366
-
367
- mock(subject).update_or_create_application('app3', is_a(Hash))
368
- subject.load(fixture('dsl/load3.eye'))
369
- end
370
-
371
- end
@@ -1,70 +0,0 @@
1
- require File.dirname(__FILE__) + '/../spec_helper'
2
-
3
- describe "Some crazey situations" do
4
-
5
- before :each do
6
- @c = Eye::Controller.new
7
- @c.load(fixture("dsl/integration.eye"))
8
- @processes = @c.all_processes
9
- @p1 = @processes.detect{|c| c.name == 'sample1'}
10
- @p2 = @processes.detect{|c| c.name == 'sample2'}
11
- @p3 = @processes.detect{|c| c.name == 'forking'}
12
- @samples = @c.all_groups.detect{|c| c.name == 'samples'}
13
- sleep 10 # to ensure that all processes started
14
-
15
- @processes.size.should == 3
16
- @processes.map{|c| c.state_name}.uniq.should == [:up]
17
- @childs = @p3.childs.keys rescue []
18
- end
19
-
20
- after :each do
21
- @processes.each do |p|
22
- p.schedule(:stop) if p.alive?
23
- end
24
- sleep 5
25
- @processes.each do |process|
26
- force_kill_process(process) if process.alive?
27
- end
28
-
29
- force_kill_pid(@old_pid1)
30
- force_kill_pid(@old_pid2)
31
- force_kill_pid(@old_pid3)
32
- (@childs || []).each do |pid|
33
- force_kill_pid(pid)
34
- end
35
-
36
- File.delete(File.join(C.sample_dir, "lock1.lock")) rescue nil
37
- File.delete(File.join(C.sample_dir, "lock2.lock")) rescue nil
38
- end
39
-
40
- it "load another config, with same processes but changed names" do
41
- @old_pid1 = @p1.pid
42
- @old_pid2 = @p2.pid
43
- @old_pid3 = @p3.pid
44
-
45
- @c.load(fixture("dsl/integration2.eye"))
46
- sleep 10
47
-
48
- # @p1, @p2 recreates
49
- # @p3 the same
50
-
51
- procs = @c.all_processes
52
- @p1_ = procs.detect{|c| c.name == 'sample1_'}
53
- @p2_ = procs.detect{|c| c.name == 'sample2_'}
54
- @p3_ = procs.detect{|c| c.name == 'forking'}
55
-
56
- @p3.object_id.should == @p3_.object_id
57
- @p1.alive?.should == false
58
- @p1_.alive?.should == true
59
-
60
- @p2.alive?.should == false
61
- @p2_.alive?.should == true
62
-
63
- @p1_.pid.should == @old_pid1
64
- @p2_.pid.should == @old_pid2
65
- @p3_.pid.should == @old_pid3
66
-
67
- @p1_.state_name.should == :up
68
- end
69
-
70
- end
@@ -1,157 +0,0 @@
1
- require File.dirname(__FILE__) + '/../spec_helper'
2
-
3
- describe "StopOnDelete behaviour" do
4
- before :each do
5
- @c = Eye::Controller.new
6
- @c.load(fixture("dsl/integration_sor.eye"))
7
- @processes = @c.all_processes
8
- @p1 = @processes.detect{|c| c.name == 'sample1'}
9
- @p2 = @processes.detect{|c| c.name == 'sample2'}
10
- @p3 = @processes.detect{|c| c.name == 'forking'}
11
- @samples = @c.all_groups.detect{|c| c.name == 'samples'}
12
- sleep 10 # to ensure that all processes started
13
-
14
- @processes.size.should == 3
15
- @processes.map{|c| c.state_name}.uniq.should == [:up]
16
- @childs = @p3.childs.keys rescue []
17
-
18
- @old_pid1 = @p1.pid
19
- @old_pid2 = @p2.pid
20
- @old_pid3 = @p3.pid
21
- end
22
-
23
- after :each do
24
- @processes = @c.all_processes
25
- @processes.each do |p|
26
- p.schedule(:stop) if p.alive?
27
- end
28
- sleep 5
29
- @processes.each do |process|
30
- force_kill_process(process) if process.alive?
31
- end
32
-
33
- force_kill_pid(@old_pid1)
34
- force_kill_pid(@old_pid2)
35
- force_kill_pid(@old_pid3)
36
- (@childs || []).each do |pid|
37
- force_kill_pid(pid)
38
- end
39
- end
40
-
41
- it "delete process => stop process" do
42
- @c.send_command(:delete, "sample1")
43
- sleep 7 # while
44
-
45
- @c.all_processes.map(&:name).sort.should == %w{forking sample2}
46
- @c.all_groups.map(&:name).sort.should == %w{__default__ samples}
47
-
48
- Eye::System.pid_alive?(@old_pid1).should == false
49
- Eye::System.pid_alive?(@old_pid2).should == true
50
- Eye::System.pid_alive?(@old_pid3).should == true
51
-
52
- sleep 0.5
53
- Eye::System.pid_alive?(@old_pid1).should == false
54
- end
55
-
56
- it "delete application => stop group proceses" do
57
- @c.send_command(:delete, "samples").should == ["int:samples"]
58
- sleep 7 # while
59
-
60
- @c.all_processes.should == [@p3]
61
- @c.all_groups.map(&:name).should == ['__default__']
62
-
63
- Eye::System.pid_alive?(@old_pid1).should == false
64
- Eye::System.pid_alive?(@old_pid2).should == false
65
- Eye::System.pid_alive?(@old_pid3).should == true
66
-
67
- sleep 0.5
68
- Eye::System.pid_alive?(@old_pid1).should == false
69
-
70
- # noone up this
71
- sleep 2
72
- Eye::System.pid_alive?(@old_pid1).should == false
73
- end
74
-
75
- it "delete application => stop all proceses" do
76
- @c.send_command(:delete, "int")
77
- sleep 7 # while
78
-
79
- @c.all_processes.should == []
80
- @c.all_groups.should == []
81
- @c.applications.should == []
82
-
83
- Eye::System.pid_alive?(@old_pid1).should == false
84
- Eye::System.pid_alive?(@old_pid2).should == false
85
- Eye::System.pid_alive?(@old_pid3).should == false
86
-
87
- sleep 0.5
88
- Eye::System.pid_alive?(@old_pid1).should == false
89
-
90
- actors = Celluloid::Actor.all.map(&:class)
91
- actors.should_not include(Eye::Utils::CelluloidChain)
92
- actors.should_not include(Eye::Process)
93
- actors.should_not include(Eye::Group)
94
- actors.should_not include(Eye::Application)
95
- actors.should_not include(Eye::Checker::Memory)
96
- end
97
-
98
- it "load config when 1 process deleted, it should stopped" do
99
- @c.load(fixture("dsl/integration_sor2.eye"))
100
- sleep 10
101
-
102
- procs = @c.all_processes
103
- @p1_ = procs.detect{|c| c.name == 'sample1'}
104
- @p2_ = procs.detect{|c| c.name == 'sample2'}
105
- @p3_ = procs.detect{|c| c.name == 'sample3'}
106
-
107
- @p1_.object_id.should == @p1.object_id
108
- @p2_.object_id.should == @p2.object_id
109
- @p3_.state_name.should == :up
110
-
111
- @p1_.pid.should == @old_pid1
112
- @p2_.pid.should == @old_pid2
113
-
114
- Eye::System.pid_alive?(@old_pid1).should == true
115
- Eye::System.pid_alive?(@old_pid2).should == true
116
- Eye::System.pid_alive?(@old_pid3).should == false
117
-
118
- @p3.alive?.should == false
119
- @c.all_processes.map{|c| c.name}.sort.should == %w{sample1 sample2 sample3}
120
- end
121
-
122
- it "load another config, with same processes but changed names" do
123
- @c.load(fixture("dsl/integration_sor3.eye"))
124
- sleep 15
125
-
126
- # @p1, @p2 recreates
127
- # @p3 the same
128
-
129
- procs = @c.all_processes
130
- @p1_ = procs.detect{|c| c.name == 'sample1_'}
131
- @p2_ = procs.detect{|c| c.name == 'sample2_'}
132
- @p3_ = procs.detect{|c| c.name == 'forking'}
133
-
134
- @p3.object_id.should == @p3_.object_id
135
- @p1.alive?.should == false
136
- @p1_.alive?.should == true
137
-
138
- @p2.alive?.should == false
139
- @p2_.alive?.should == true
140
-
141
- @p1_.pid.should_not == @old_pid1
142
- @p2_.pid.should_not == @old_pid2
143
- @p3_.pid.should == @old_pid3
144
-
145
- @p1_.state_name.should == :up
146
- @p2_.state_name.should == :up
147
- @p3_.state_name.should == :up
148
-
149
- Eye::System.pid_alive?(@old_pid1).should == false
150
- Eye::System.pid_alive?(@old_pid2).should == false
151
- Eye::System.pid_alive?(@old_pid3).should == true
152
-
153
- Eye::System.pid_alive?(@p1_.pid).should == true
154
- Eye::System.pid_alive?(@p2_.pid).should == true
155
- end
156
-
157
- end