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.
- checksums.yaml +4 -4
- data/README.md +1 -3
- data/bin/eye +7 -0
- data/bin/loader_eye +7 -5
- data/examples/notify.eye +1 -1
- data/eye.gemspec +4 -4
- data/lib/eye.rb +1 -3
- data/lib/eye/controller.rb +4 -0
- data/lib/eye/controller/status.rb +1 -1
- data/lib/eye/dsl.rb +1 -1
- data/lib/eye/dsl/main.rb +0 -13
- data/lib/eye/dsl/opts.rb +4 -2
- data/lib/eye/loader.rb +2 -3
- data/lib/eye/notify.rb +3 -3
- data/lib/eye/process/monitor.rb +5 -3
- data/lib/eye/process/notify.rb +5 -5
- data/lib/eye/process/scheduler.rb +4 -4
- data/lib/eye/process/system.rb +3 -10
- data/lib/eye/process/trigger.rb +1 -1
- data/lib/eye/process/watchers.rb +1 -1
- data/lib/eye/server.rb +9 -8
- data/lib/eye/system.rb +2 -7
- data/lib/eye/system_resources.rb +3 -3
- data/lib/eye/utils/celluloid_chain.rb +2 -2
- metadata +7 -241
- data/lib/eye/io/unix_server.rb +0 -44
- data/lib/eye/io/unix_socket.rb +0 -39
- data/spec/checker/cpu_spec.rb +0 -58
- data/spec/checker/file_ctime_spec.rb +0 -34
- data/spec/checker/file_size_spec.rb +0 -107
- data/spec/checker/http_spec.rb +0 -114
- data/spec/checker/memory_spec.rb +0 -64
- data/spec/checker/socket_spec.rb +0 -116
- data/spec/checker_spec.rb +0 -187
- data/spec/child_process/child_process_spec.rb +0 -46
- data/spec/client_server_spec.rb +0 -33
- data/spec/controller/commands_spec.rb +0 -92
- data/spec/controller/controller_spec.rb +0 -157
- data/spec/controller/find_objects_spec.rb +0 -176
- data/spec/controller/group_spec.rb +0 -110
- data/spec/controller/intergration_spec.rb +0 -366
- data/spec/controller/load_spec.rb +0 -371
- data/spec/controller/races_spec.rb +0 -70
- data/spec/controller/stop_on_delete_spec.rb +0 -157
- data/spec/dsl/chain_spec.rb +0 -146
- data/spec/dsl/checks_spec.rb +0 -219
- data/spec/dsl/config_spec.rb +0 -44
- data/spec/dsl/dsl_spec.rb +0 -73
- data/spec/dsl/getter_spec.rb +0 -223
- data/spec/dsl/integration_spec.rb +0 -376
- data/spec/dsl/load_spec.rb +0 -52
- data/spec/dsl/notify_spec.rb +0 -114
- data/spec/dsl/process_spec.rb +0 -380
- data/spec/dsl/sub_procs_spec.rb +0 -93
- data/spec/dsl/with_server_spec.rb +0 -128
- data/spec/example/em.rb +0 -57
- data/spec/example/forking.rb +0 -20
- data/spec/example/sample.rb +0 -154
- data/spec/fixtures/dsl/0.rb +0 -8
- data/spec/fixtures/dsl/0a.rb +0 -8
- data/spec/fixtures/dsl/0c.rb +0 -8
- data/spec/fixtures/dsl/1.rb +0 -5
- data/spec/fixtures/dsl/bad.eye +0 -6
- data/spec/fixtures/dsl/configs/1.eye +0 -3
- data/spec/fixtures/dsl/configs/2.eye +0 -1
- data/spec/fixtures/dsl/configs/3.eye +0 -1
- data/spec/fixtures/dsl/configs/4.eye +0 -3
- data/spec/fixtures/dsl/empty.eye +0 -20
- data/spec/fixtures/dsl/include_test.eye +0 -5
- data/spec/fixtures/dsl/include_test/1.rb +0 -6
- data/spec/fixtures/dsl/include_test/ha.rb +0 -4
- data/spec/fixtures/dsl/include_test2.eye +0 -5
- data/spec/fixtures/dsl/integration.eye +0 -30
- data/spec/fixtures/dsl/integration2.eye +0 -32
- data/spec/fixtures/dsl/integration_locks.eye +0 -30
- data/spec/fixtures/dsl/integration_sor.eye +0 -32
- data/spec/fixtures/dsl/integration_sor2.eye +0 -27
- data/spec/fixtures/dsl/integration_sor3.eye +0 -32
- data/spec/fixtures/dsl/load.eye +0 -25
- data/spec/fixtures/dsl/load2.eye +0 -7
- data/spec/fixtures/dsl/load2_dup2.eye +0 -13
- data/spec/fixtures/dsl/load2_dup_pid.eye +0 -7
- data/spec/fixtures/dsl/load3.eye +0 -10
- data/spec/fixtures/dsl/load4.eye +0 -7
- data/spec/fixtures/dsl/load5.eye +0 -8
- data/spec/fixtures/dsl/load6.eye +0 -17
- data/spec/fixtures/dsl/load_dubls.eye +0 -36
- data/spec/fixtures/dsl/load_dup_ex_names.eye +0 -15
- data/spec/fixtures/dsl/load_error.eye +0 -5
- data/spec/fixtures/dsl/load_error_folder/load3.eye +0 -10
- data/spec/fixtures/dsl/load_error_folder/load4.eye +0 -7
- data/spec/fixtures/dsl/load_folder/load3.eye +0 -10
- data/spec/fixtures/dsl/load_folder/load4.eye +0 -7
- data/spec/fixtures/dsl/load_int.eye +0 -8
- data/spec/fixtures/dsl/load_int2.eye +0 -13
- data/spec/fixtures/dsl/load_logger.eye +0 -26
- data/spec/fixtures/dsl/load_logger2.eye +0 -3
- data/spec/fixtures/dsl/long_load.eye +0 -5
- data/spec/fixtures/dsl/subfolder1/proc1.rb +0 -3
- data/spec/fixtures/dsl/subfolder2.eye +0 -9
- data/spec/fixtures/dsl/subfolder2/common.rb +0 -1
- data/spec/fixtures/dsl/subfolder2/proc2.rb +0 -3
- data/spec/fixtures/dsl/subfolder2/sub/proc3.rb +0 -6
- data/spec/fixtures/dsl/subfolder3.eye +0 -8
- data/spec/fixtures/dsl/subfolder3/common.rb +0 -1
- data/spec/fixtures/dsl/subfolder3/proc4.rb +0 -3
- data/spec/fixtures/dsl/subfolder3/sub/proc5.rb +0 -6
- data/spec/fixtures/dsl/subfolder4.eye +0 -6
- data/spec/fixtures/dsl/subfolder4/a.rb +0 -2
- data/spec/fixtures/dsl/subfolder4/b.rb +0 -1
- data/spec/fixtures/dsl/subfolder4/c.rb +0 -1
- data/spec/mock_spec.rb +0 -31
- data/spec/notify/jabber_spec.rb +0 -25
- data/spec/notify/mail_spec.rb +0 -26
- data/spec/notify_spec.rb +0 -90
- data/spec/process/checks/child_checks_spec.rb +0 -79
- data/spec/process/checks/cpu_spec.rb +0 -114
- data/spec/process/checks/ctime_spec.rb +0 -43
- data/spec/process/checks/fsize_spec.rb +0 -22
- data/spec/process/checks/http_spec.rb +0 -52
- data/spec/process/checks/intergration_spec.rb +0 -32
- data/spec/process/checks/memory_spec.rb +0 -127
- data/spec/process/child_process_spec.rb +0 -125
- data/spec/process/config_spec.rb +0 -74
- data/spec/process/controller_spec.rb +0 -173
- data/spec/process/monitoring_spec.rb +0 -180
- data/spec/process/notify_spec.rb +0 -27
- data/spec/process/restart_spec.rb +0 -186
- data/spec/process/scheduler_spec.rb +0 -178
- data/spec/process/start_spec.rb +0 -261
- data/spec/process/states_history_spec.rb +0 -123
- data/spec/process/stop_spec.rb +0 -156
- data/spec/process/system_spec.rb +0 -136
- data/spec/process/triggers/flapping_spec.rb +0 -242
- data/spec/process/update_config_spec.rb +0 -62
- data/spec/spec_helper.rb +0 -128
- data/spec/support/rr_celluloid.rb +0 -15
- data/spec/support/spec_support.rb +0 -163
- data/spec/system_resources_spec.rb +0 -56
- data/spec/system_spec.rb +0 -174
- data/spec/utils/alive_array_spec.rb +0 -49
- data/spec/utils/celluloid_chain_spec.rb +0 -89
- data/spec/utils/tail_spec.rb +0 -20
@@ -1,186 +0,0 @@
|
|
1
|
-
require File.dirname(__FILE__) + '/../spec_helper'
|
2
|
-
|
3
|
-
describe "Process Restart" do
|
4
|
-
[C.p1, C.p2].each do |cfg|
|
5
|
-
it "restart by default command #{cfg[:name]}" do
|
6
|
-
start_ok_process(cfg)
|
7
|
-
old_pid = @pid
|
8
|
-
|
9
|
-
dont_allow(@process).check_crash
|
10
|
-
@process.restart
|
11
|
-
|
12
|
-
@process.pid.should_not == old_pid
|
13
|
-
@process.pid.should > 0
|
14
|
-
|
15
|
-
Eye::System.pid_alive?(@pid).should == false
|
16
|
-
Eye::System.pid_alive?(@process.pid).should == true
|
17
|
-
|
18
|
-
@process.state_name.should == :up
|
19
|
-
@process.states_history.seq?(:up, :restarting, :stopping, :down, :starting, :up).should == true
|
20
|
-
@process.watchers.keys.should == [:check_alive]
|
21
|
-
|
22
|
-
@process.load_pid_from_file.should == @process.pid
|
23
|
-
end
|
24
|
-
|
25
|
-
it "stop_command is #{cfg[:name]}" do
|
26
|
-
start_ok_process(cfg.merge(:stop_command => "kill -9 {{PID}}"))
|
27
|
-
old_pid = @pid
|
28
|
-
|
29
|
-
dont_allow(@process).check_crash
|
30
|
-
@process.restart
|
31
|
-
|
32
|
-
@process.pid.should_not == old_pid
|
33
|
-
@process.pid.should > 0
|
34
|
-
|
35
|
-
Eye::System.pid_alive?(@pid).should == false
|
36
|
-
Eye::System.pid_alive?(@process.pid).should == true
|
37
|
-
|
38
|
-
@process.state_name.should == :up
|
39
|
-
@process.watchers.keys.should == [:check_alive]
|
40
|
-
|
41
|
-
@process.load_pid_from_file.should == @process.pid
|
42
|
-
end
|
43
|
-
|
44
|
-
it "emulate restart_command that cant kill (USR1)" do
|
45
|
-
# not trully test, but its ok as should send signal (unicorn case)
|
46
|
-
start_ok_process(cfg.merge(:restart_command => "kill -USR1 {{PID}}"))
|
47
|
-
old_pid = @pid
|
48
|
-
|
49
|
-
dont_allow(@process).check_crash
|
50
|
-
@process.restart
|
51
|
-
|
52
|
-
sleep 3
|
53
|
-
@process.pid.should == old_pid
|
54
|
-
|
55
|
-
Eye::System.pid_alive?(@pid).should == true
|
56
|
-
|
57
|
-
@process.state_name.should == :up
|
58
|
-
@process.watchers.keys.should == [:check_alive]
|
59
|
-
|
60
|
-
@process.load_pid_from_file.should == @process.pid
|
61
|
-
@process.states_history.end?(:up, :restarting, :up).should == true
|
62
|
-
|
63
|
-
File.read(@log).should include("USR1")
|
64
|
-
end
|
65
|
-
|
66
|
-
it "emulate restart as stop,start where stop command does not kill" do
|
67
|
-
# should send command, than wait grace time,
|
68
|
-
# and than even if old process doesnot die, start another one, (looks like bug, but this is not, it just bad using, commands)
|
69
|
-
|
70
|
-
# same situation, when stop command kills so long time, that process cant stop
|
71
|
-
start_ok_process(cfg.merge(:stop_command => "kill -USR1 {{PID}}"))
|
72
|
-
old_pid = @pid
|
73
|
-
|
74
|
-
dont_allow(@process).check_crash
|
75
|
-
@process.restart
|
76
|
-
|
77
|
-
sleep 3
|
78
|
-
@process.pid.should_not == old_pid
|
79
|
-
|
80
|
-
Eye::System.pid_alive?(@pid).should == true
|
81
|
-
|
82
|
-
@process.state_name.should == :up
|
83
|
-
@process.watchers.keys.should == [:check_alive]
|
84
|
-
|
85
|
-
@process.load_pid_from_file.should == @process.pid
|
86
|
-
@process.states_history.end?(:up, :restarting, :stopping, :unmonitored, :starting, :up).should == true
|
87
|
-
|
88
|
-
File.read(@log).should include("USR1")
|
89
|
-
end
|
90
|
-
|
91
|
-
it "bad restart_command is #{cfg[:name]} and its kills" do
|
92
|
-
# not really restartin, just killing
|
93
|
-
# so monitor should see that process died, and up it
|
94
|
-
start_ok_process(cfg.merge(:restart_command => "kill -9 {{PID}}"))
|
95
|
-
|
96
|
-
mock(@process).check_crash
|
97
|
-
|
98
|
-
@process.restart
|
99
|
-
Eye::System.pid_alive?(@pid).should == false
|
100
|
-
@process.states_history.seq?(:up, :restarting, :down).should == true
|
101
|
-
end
|
102
|
-
|
103
|
-
it "Bad restart command, invalid" do
|
104
|
-
start_ok_process(cfg.merge(:restart_command => "asdfasdf sdf asd fasdf asdf"))
|
105
|
-
|
106
|
-
dont_allow(@process).check_crash
|
107
|
-
|
108
|
-
@process.restart
|
109
|
-
Eye::System.pid_alive?(@pid).should == true
|
110
|
-
@process.states_history.seq?(:up, :restarting, :up).should == true
|
111
|
-
end
|
112
|
-
|
113
|
-
it "restart command timeouted" do
|
114
|
-
start_ok_process(cfg.merge(:restart_command => "sleep 5", :restart_timeout => 3))
|
115
|
-
@process.restart
|
116
|
-
|
117
|
-
sleep 1
|
118
|
-
@process.pid.should == @pid
|
119
|
-
|
120
|
-
Eye::System.pid_alive?(@pid).should == true
|
121
|
-
|
122
|
-
@process.state_name.should == :up
|
123
|
-
@process.watchers.keys.should == [:check_alive]
|
124
|
-
|
125
|
-
@process.load_pid_from_file.should == @process.pid
|
126
|
-
@process.states_history.end?(:up, :restarting, :up).should == true
|
127
|
-
end
|
128
|
-
end
|
129
|
-
|
130
|
-
it "restart eye-daemonized lock-process from unmonitored status, and process realy running (WAS a problem)" do
|
131
|
-
start_ok_process(C.p4)
|
132
|
-
@pid = @process.pid
|
133
|
-
@process.unmonitor
|
134
|
-
Eye::System.pid_alive?(@pid).should == true
|
135
|
-
|
136
|
-
@process.restart
|
137
|
-
@process.state_name.should == :up
|
138
|
-
|
139
|
-
Eye::System.pid_alive?(@pid).should == false
|
140
|
-
@process.load_pid_from_file.should_not == @pid
|
141
|
-
end
|
142
|
-
|
143
|
-
[:down, :unmonitored, :up].each do |st|
|
144
|
-
it "ok restart from #{st}" do
|
145
|
-
start_ok_process(C.p1)
|
146
|
-
@process.state = st.to_s
|
147
|
-
old_pid = @pid
|
148
|
-
|
149
|
-
dont_allow(@process).check_crash
|
150
|
-
@process.restart
|
151
|
-
|
152
|
-
@process.pid.should_not == old_pid
|
153
|
-
@process.pid.should > 0
|
154
|
-
|
155
|
-
Eye::System.pid_alive?(@pid).should == false
|
156
|
-
Eye::System.pid_alive?(@process.pid).should == true
|
157
|
-
|
158
|
-
@process.state_name.should == :up
|
159
|
-
@process.watchers.keys.should == [:check_alive]
|
160
|
-
@process.states_history.seq?(:restarting, :stopping, :down, :starting, :up).should == true
|
161
|
-
|
162
|
-
@process.load_pid_from_file.should == @process.pid
|
163
|
-
end
|
164
|
-
end
|
165
|
-
|
166
|
-
[:starting, :restarting, :stopping].each do |st|
|
167
|
-
it "not restart from #{st}" do
|
168
|
-
@process = process(C.p1)
|
169
|
-
@process.state = st.to_s # force set state
|
170
|
-
|
171
|
-
dont_allow(@process).stop
|
172
|
-
dont_allow(@process).start
|
173
|
-
|
174
|
-
@process.restart.should == nil
|
175
|
-
@process.state_name.should == st
|
176
|
-
end
|
177
|
-
end
|
178
|
-
|
179
|
-
it "restart process without start command" do
|
180
|
-
@process = process(C.p2.merge(:start_command => nil))
|
181
|
-
@process.restart
|
182
|
-
sleep 1
|
183
|
-
@process.unmonitored?.should == true
|
184
|
-
end
|
185
|
-
|
186
|
-
end
|
@@ -1,178 +0,0 @@
|
|
1
|
-
require File.dirname(__FILE__) + '/../spec_helper'
|
2
|
-
|
3
|
-
class Eye::Process
|
4
|
-
attr_reader :test1, :test2, :test3, :test1_call
|
5
|
-
|
6
|
-
def scheduler_test1(a)
|
7
|
-
sleep 0.3
|
8
|
-
@test1_call ||= 0
|
9
|
-
@test1_call += 1
|
10
|
-
@test1 = a
|
11
|
-
end
|
12
|
-
|
13
|
-
def scheduler_test2(a, b)
|
14
|
-
sleep 0.6
|
15
|
-
@test2 = [a, b]
|
16
|
-
end
|
17
|
-
|
18
|
-
def scheduler_test3(*args)
|
19
|
-
@test3 = args
|
20
|
-
end
|
21
|
-
|
22
|
-
public :scheduler
|
23
|
-
|
24
|
-
end
|
25
|
-
|
26
|
-
describe "Scheduler" do
|
27
|
-
before :each do
|
28
|
-
@process = process C.p1
|
29
|
-
end
|
30
|
-
|
31
|
-
it "should schedule action" do
|
32
|
-
@process.test1.should == nil
|
33
|
-
@process.schedule :scheduler_test1, 1
|
34
|
-
sleep 0.1
|
35
|
-
@process.current_scheduled_command.should == :scheduler_test1
|
36
|
-
@process.test1.should == nil
|
37
|
-
sleep 0.4
|
38
|
-
@process.test1.should == 1
|
39
|
-
@process.current_scheduled_command.should == nil
|
40
|
-
end
|
41
|
-
|
42
|
-
it "should one after another" do
|
43
|
-
@process.test1.should == nil
|
44
|
-
@process.test2.should == nil
|
45
|
-
|
46
|
-
@process.schedule :scheduler_test1, 1
|
47
|
-
@process.schedule :scheduler_test2, 1, 2
|
48
|
-
|
49
|
-
sleep 0.4
|
50
|
-
@process.test1.should == 1
|
51
|
-
@process.test2.should == nil
|
52
|
-
|
53
|
-
sleep 0.6
|
54
|
-
@process.test1.should == 1
|
55
|
-
@process.test2.should == [1, 2]
|
56
|
-
end
|
57
|
-
|
58
|
-
it "should one after another2" do
|
59
|
-
@process.test1.should == nil
|
60
|
-
@process.test2.should == nil
|
61
|
-
|
62
|
-
@process.schedule :scheduler_test2, 1, 2
|
63
|
-
@process.schedule :scheduler_test1, 1
|
64
|
-
|
65
|
-
sleep 0.4
|
66
|
-
@process.test1.should == nil
|
67
|
-
@process.test2.should == nil
|
68
|
-
|
69
|
-
sleep 0.3
|
70
|
-
@process.test1.should == nil
|
71
|
-
@process.test2.should == [1, 2]
|
72
|
-
|
73
|
-
sleep 0.3
|
74
|
-
@process.test1.should == 1
|
75
|
-
@process.test2.should == [1, 2]
|
76
|
-
end
|
77
|
-
|
78
|
-
it "should not scheduler dublicates" do
|
79
|
-
@process.schedule :scheduler_test1, 1
|
80
|
-
@process.schedule :scheduler_test1, 1
|
81
|
-
@process.schedule :scheduler_test1, 1
|
82
|
-
|
83
|
-
sleep 1
|
84
|
-
@process.test1_call.should == 2
|
85
|
-
end
|
86
|
-
|
87
|
-
it "should scheduler dublicates by with different params" do
|
88
|
-
@process.schedule :scheduler_test1, 1
|
89
|
-
@process.schedule :scheduler_test1, 2
|
90
|
-
@process.schedule :scheduler_test1, 3
|
91
|
-
|
92
|
-
sleep 1
|
93
|
-
@process.test1_call.should == 3
|
94
|
-
end
|
95
|
-
|
96
|
-
it "should terminate when actor die" do
|
97
|
-
scheduler = @process.scheduler
|
98
|
-
@process.alive?.should == true
|
99
|
-
scheduler.alive?.should == true
|
100
|
-
@process.terminate
|
101
|
-
@process.alive?.should == false
|
102
|
-
scheduler.alive?.should == false
|
103
|
-
end
|
104
|
-
|
105
|
-
it "should terminate even with tasks" do
|
106
|
-
scheduler = @process.scheduler
|
107
|
-
@process.schedule :scheduler_test1, 1
|
108
|
-
@process.schedule :scheduler_test1, 1
|
109
|
-
@process.schedule :scheduler_test1, 1
|
110
|
-
|
111
|
-
@process.terminate
|
112
|
-
scheduler.alive?.should == false
|
113
|
-
end
|
114
|
-
|
115
|
-
it "when scheduling terminate of the parent actor" do
|
116
|
-
scheduler = @process.scheduler
|
117
|
-
@process.schedule :terminate
|
118
|
-
@process.schedule(:scheduler_test1, 1) rescue nil
|
119
|
-
|
120
|
-
sleep 0.2
|
121
|
-
@process.alive?.should == false
|
122
|
-
scheduler.alive?.should == false
|
123
|
-
end
|
124
|
-
|
125
|
-
it "schedule unexisted method should not raise and break anything" do
|
126
|
-
scheduler = @process.scheduler
|
127
|
-
@process.schedule :hahhaha
|
128
|
-
sleep 0.2
|
129
|
-
@process.alive?.should == true
|
130
|
-
scheduler.alive?.should == true
|
131
|
-
end
|
132
|
-
|
133
|
-
describe "reasons" do
|
134
|
-
it "1 param without reason" do
|
135
|
-
@process.schedule :scheduler_test3, 1
|
136
|
-
sleep 0.1
|
137
|
-
@process.last_scheduled_command.should == :scheduler_test3
|
138
|
-
@process.last_scheduled_reason.should == nil
|
139
|
-
@process.test3.should == [1]
|
140
|
-
end
|
141
|
-
|
142
|
-
it "1 param with reason" do
|
143
|
-
@process.schedule :scheduler_test3, 1, "reason"
|
144
|
-
sleep 0.1
|
145
|
-
@process.last_scheduled_command.should == :scheduler_test3
|
146
|
-
@process.last_scheduled_reason.should == 'reason'
|
147
|
-
@process.test3.should == [1]
|
148
|
-
end
|
149
|
-
|
150
|
-
it "many params with reason" do
|
151
|
-
@process.schedule :scheduler_test3, 1, :bla, 3, "reason"
|
152
|
-
sleep 0.1
|
153
|
-
@process.last_scheduled_command.should == :scheduler_test3
|
154
|
-
@process.last_scheduled_reason.should == 'reason'
|
155
|
-
@process.test3.should == [1, :bla, 3]
|
156
|
-
end
|
157
|
-
|
158
|
-
it "save history" do
|
159
|
-
@process.schedule :scheduler_test3, 1, :bla, 3, "reason"
|
160
|
-
sleep 0.1
|
161
|
-
h = @process.schedule_history
|
162
|
-
h.size.should == 1
|
163
|
-
h = h[0]
|
164
|
-
h[:state].should == :scheduler_test3
|
165
|
-
h[:reason].should == "reason"
|
166
|
-
end
|
167
|
-
end
|
168
|
-
|
169
|
-
describe "schedule_in" do
|
170
|
-
it "should schedule to future" do
|
171
|
-
@process.schedule_in(1.second, :scheduler_test3, 1, 2, 3)
|
172
|
-
sleep 0.5
|
173
|
-
@process.test3.should == nil
|
174
|
-
sleep 0.7
|
175
|
-
@process.test3.should == [1,2,3]
|
176
|
-
end
|
177
|
-
end
|
178
|
-
end
|
data/spec/process/start_spec.rb
DELETED
@@ -1,261 +0,0 @@
|
|
1
|
-
require File.dirname(__FILE__) + '/../spec_helper'
|
2
|
-
|
3
|
-
describe "Process Start" do
|
4
|
-
|
5
|
-
it "process already runned, started new process" do
|
6
|
-
# something already started process
|
7
|
-
@pid = Eye::System.daemonize(C.p1[:start_command], C.p1)[:pid]
|
8
|
-
Eye::System.pid_alive?(@pid).should == true
|
9
|
-
File.open(C.p1[:pid_file], 'w'){|f| f.write(@pid) }
|
10
|
-
|
11
|
-
# should not try to start something
|
12
|
-
dont_allow(Eye::System).daemonize
|
13
|
-
dont_allow(Eye::System).execute
|
14
|
-
|
15
|
-
# when start process
|
16
|
-
@process = process C.p1
|
17
|
-
@process.start.should == :ok
|
18
|
-
|
19
|
-
# wait while monitoring completely started
|
20
|
-
sleep 0.5
|
21
|
-
|
22
|
-
# pid and should be ok
|
23
|
-
@process.pid.should == @pid
|
24
|
-
@process.load_pid_from_file.should == @pid
|
25
|
-
|
26
|
-
@process.state_name.should == :up
|
27
|
-
@process.watchers.keys.should == [:check_alive]
|
28
|
-
end
|
29
|
-
|
30
|
-
it "process started and up, receive command start" do
|
31
|
-
@process = process C.p1
|
32
|
-
@process.start.should == {:pid=>@process.pid}
|
33
|
-
sleep 0.5
|
34
|
-
@process.state_name.should == :up
|
35
|
-
@process.watchers.keys.should == [:check_alive]
|
36
|
-
|
37
|
-
@process.start.should == :ok
|
38
|
-
sleep 1
|
39
|
-
@process.state_name.should == :up
|
40
|
-
@process.watchers.keys.should == [:check_alive]
|
41
|
-
end
|
42
|
-
|
43
|
-
[C.p1, C.p2].each do |c|
|
44
|
-
it "start new process, with config #{c[:name]}" do
|
45
|
-
@process = process c
|
46
|
-
@process.start.should == {:pid=>@process.pid}
|
47
|
-
|
48
|
-
sleep 0.5
|
49
|
-
|
50
|
-
@pid = @process.pid
|
51
|
-
@process.load_pid_from_file.should == @pid
|
52
|
-
|
53
|
-
@process.state_name.should == :up
|
54
|
-
@process.watchers.keys.should == [:check_alive]
|
55
|
-
end
|
56
|
-
|
57
|
-
it "pid_file already exists, but process not, with config #{c[:name]}" do
|
58
|
-
File.open(C.p1[:pid_file], 'w'){|f| f.write(1234567) }
|
59
|
-
|
60
|
-
@process = process c
|
61
|
-
@process.start.should == {:pid=>@process.pid}
|
62
|
-
|
63
|
-
sleep 0.5
|
64
|
-
|
65
|
-
@pid = @process.pid
|
66
|
-
@pid.should_not == 1234567
|
67
|
-
@process.load_pid_from_file.should == @pid
|
68
|
-
|
69
|
-
@process.state_name.should == :up
|
70
|
-
end
|
71
|
-
|
72
|
-
it "process crashed, with config #{c[:name]}" do
|
73
|
-
@process = process(c.merge(:start_command => c[:start_command] + " -r" ))
|
74
|
-
@process.start.should == {:error=>:not_realy_running}
|
75
|
-
|
76
|
-
sleep 1
|
77
|
-
|
78
|
-
# may be not saving pid?
|
79
|
-
#@pid = @process.pid
|
80
|
-
#@pid.should > 0
|
81
|
-
#@process.load_pid_from_file.should == @pid
|
82
|
-
|
83
|
-
# should try to up process many times
|
84
|
-
@process.states_history.seq?(:unmonitored, :starting, :down, :starting).should == true
|
85
|
-
@process.states_history.all?(:unmonitored, :starting, :down).should == true
|
86
|
-
|
87
|
-
@process.watchers.keys.should == []
|
88
|
-
end
|
89
|
-
|
90
|
-
it "start with invalid command" do
|
91
|
-
@process = process(c.merge(:start_command => "asdf asdf1 r f324 f324f 32f44f"))
|
92
|
-
mock(@process).check_crash
|
93
|
-
res = @process.start
|
94
|
-
res.should == {:error=>"#<Errno::ENOENT: No such file or directory - asdf>"}
|
95
|
-
|
96
|
-
sleep 0.5
|
97
|
-
|
98
|
-
@process.pid.should == nil
|
99
|
-
@process.load_pid_from_file.should == nil
|
100
|
-
[:starting, :down].should include(@process.state_name)
|
101
|
-
@process.states_history.all?(:unmonitored, :starting, :down).should == true
|
102
|
-
end
|
103
|
-
|
104
|
-
it "start PROBLEM with stdout permissions" do
|
105
|
-
@process = process(c.merge(:stdout => "/var/run/1.log"))
|
106
|
-
mock(@process).check_crash
|
107
|
-
res = @process.start
|
108
|
-
res.should == {:error=>"#<Errno::EACCES: Permission denied - open>"}
|
109
|
-
|
110
|
-
sleep 0.5
|
111
|
-
|
112
|
-
@process.pid.should == nil
|
113
|
-
@process.load_pid_from_file.should == nil
|
114
|
-
[:starting, :down].should include(@process.state_name)
|
115
|
-
@process.states_history.all?(:unmonitored, :starting, :down).should == true
|
116
|
-
end
|
117
|
-
|
118
|
-
it "start PROBLEM binary permissions" do
|
119
|
-
@process = process(c.merge(:start_command => "./sample.rb"))
|
120
|
-
mock(@process).check_crash
|
121
|
-
res = @process.start
|
122
|
-
res.should == {:error=>"#<Errno::EACCES: Permission denied - ./sample.rb>"}
|
123
|
-
|
124
|
-
sleep 0.5
|
125
|
-
|
126
|
-
@process.pid.should == nil
|
127
|
-
@process.load_pid_from_file.should == nil
|
128
|
-
[:starting, :down].should include(@process.state_name)
|
129
|
-
@process.states_history.all?(:unmonitored, :starting, :down).should == true
|
130
|
-
end
|
131
|
-
|
132
|
-
end
|
133
|
-
|
134
|
-
it "C.p1 pid_file failed to write" do
|
135
|
-
@process = process(C.p1.merge(:pid_file => "/tmpasdfasdf/asdfa/dfa/df/ad/fad/fd.pid"))
|
136
|
-
res = @process.start
|
137
|
-
res.should == {:error=>:cant_write_pid}
|
138
|
-
|
139
|
-
sleep 1
|
140
|
-
|
141
|
-
[:starting, :down].should include(@process.state_name)
|
142
|
-
@process.states_history.seq?(:unmonitored, :starting, :down, :starting).should == true
|
143
|
-
@process.states_history.all?(:unmonitored, :starting, :down).should == true
|
144
|
-
|
145
|
-
@process.watchers.keys.should == []
|
146
|
-
end
|
147
|
-
|
148
|
-
it "C.p2 pid_file failed to write" do
|
149
|
-
pid = "/tmpasdfasdf/asdfa/dfa/df/ad/fad/fd.pid"
|
150
|
-
@process = process(C.p2.merge(:pid_file => pid,
|
151
|
-
:start_command => "ruby sample.rb -d --pid #{pid} --log #{C.log_name}"))
|
152
|
-
res = @process.start
|
153
|
-
res.should == {:error=>:pid_not_found}
|
154
|
-
|
155
|
-
sleep 1
|
156
|
-
|
157
|
-
[:starting, :down].should include(@process.state_name)
|
158
|
-
@process.states_history.seq?(:unmonitored, :starting, :down, :starting).should == true
|
159
|
-
@process.states_history.all?(:unmonitored, :starting, :down).should == true
|
160
|
-
|
161
|
-
@process.watchers.keys.should == []
|
162
|
-
end
|
163
|
-
|
164
|
-
it "long process with #{C.p1[:name]} (with daemonize)" do
|
165
|
-
# this is no matter for starting
|
166
|
-
@process = process(C.p1.merge(:start_command => C.p1[:start_command] + " --daemonize_delay 3",
|
167
|
-
:start_grace => 2.seconds ))
|
168
|
-
@process.start.should == {:pid=>@process.pid}
|
169
|
-
|
170
|
-
sleep 5
|
171
|
-
Eye::System.pid_alive?(@process.pid).should == true
|
172
|
-
@process.state_name.should == :up
|
173
|
-
end
|
174
|
-
|
175
|
-
it "long process with #{C.p2[:name]}" do
|
176
|
-
@process = process(C.p2.merge(:start_command => C.p2[:start_command] + " --daemonize_delay 3",
|
177
|
-
:start_timeout => 2.seconds))
|
178
|
-
@process.start.should == {:error=>"#<Timeout::Error: execution expired>"}
|
179
|
-
|
180
|
-
sleep 0.5
|
181
|
-
@process.pid.should == nil
|
182
|
-
@process.load_pid_from_file.should == nil
|
183
|
-
|
184
|
-
[:starting, :down].should include(@process.state_name)
|
185
|
-
|
186
|
-
@process.states_history.seq?(:unmonitored, :starting, :down, :starting).should == true
|
187
|
-
@process.states_history.all?(:unmonitored, :starting, :down).should == true
|
188
|
-
end
|
189
|
-
|
190
|
-
it "long process with #{C.p2[:name]} but start_timeout is OK" do
|
191
|
-
@process = process(C.p2.merge(:start_command => C.p2[:start_command] + " --daemonize_delay 3",
|
192
|
-
:start_timeout => 10.seconds))
|
193
|
-
@process.start.should == {:pid => @process.pid}
|
194
|
-
|
195
|
-
@process.load_pid_from_file.should == @process.pid
|
196
|
-
@process.state_name.should == :up
|
197
|
-
end
|
198
|
-
|
199
|
-
# O_o, what checks this spec
|
200
|
-
it "blocking start with lock" do
|
201
|
-
@process = process(C.p2.merge(:start_command => C.p2[:start_command] + " --daemonize_delay 3 -L 1.lock", :start_timeout => 2.seconds))
|
202
|
-
@process.start.should == {:error => "#<Timeout::Error: execution expired>"}
|
203
|
-
|
204
|
-
sleep 0.5
|
205
|
-
@process.pid.should == nil
|
206
|
-
@process.load_pid_from_file.should == nil
|
207
|
-
|
208
|
-
[:starting, :down].should include(@process.state_name)
|
209
|
-
|
210
|
-
@process.states_history.seq?(:unmonitored, :starting, :down, :starting).should == true
|
211
|
-
@process.states_history.all?(:unmonitored, :starting, :down).should == true
|
212
|
-
end
|
213
|
-
|
214
|
-
it "bad config daemonize self daemonized process pid the same" do
|
215
|
-
# little crazy behaviour, but process after first death, upped from pid_file pid
|
216
|
-
# NOT RECOMENDED FOR USE CASE
|
217
|
-
@process = process(C.p2.merge(:daemonize => true, :start_grace => 10.seconds))
|
218
|
-
old_pid = @process.pid
|
219
|
-
|
220
|
-
@process.start.should == {:error => :not_realy_running}
|
221
|
-
|
222
|
-
sleep 5
|
223
|
-
|
224
|
-
# should reload process from pid_file
|
225
|
-
@process.state_name.should == :up
|
226
|
-
@process.pid.should_not == old_pid
|
227
|
-
@process.load_pid_from_file.should == @process.pid
|
228
|
-
end
|
229
|
-
|
230
|
-
it "bad config daemonize self daemonized process pid different" do
|
231
|
-
# NOT RECOMENDED FOR USE CASE
|
232
|
-
@process = process(C.p2.merge(:daemonize => true, :pid_file => "2.pid", :start_grace => 10.seconds))
|
233
|
-
@process.start.should == {:error => :not_realy_running}
|
234
|
-
@process.pid.should == nil
|
235
|
-
|
236
|
-
ensure_kill_samples
|
237
|
-
end
|
238
|
-
|
239
|
-
it "without start command" do
|
240
|
-
@process = process(C.p2.merge(:start_command => nil))
|
241
|
-
@process.start.should == :no_start_command
|
242
|
-
sleep 1
|
243
|
-
@process.unmonitored?.should == true
|
244
|
-
end
|
245
|
-
|
246
|
-
[:up, :starting, :stopping, :restarting].each do |st|
|
247
|
-
it "should not start from #{st}" do
|
248
|
-
@process = process(C.p1)
|
249
|
-
@process.state = st.to_s # force set state
|
250
|
-
|
251
|
-
dont_allow(Eye::System).daemonize
|
252
|
-
dont_allow(Eye::System).execute
|
253
|
-
|
254
|
-
@process.start.should == :state_error
|
255
|
-
@process.state_name.should == st
|
256
|
-
|
257
|
-
@process.pid.should == nil
|
258
|
-
end
|
259
|
-
end
|
260
|
-
|
261
|
-
end
|