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,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
@@ -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