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,62 +0,0 @@
1
- require File.dirname(__FILE__) + '/../spec_helper'
2
-
3
- describe "#update_config" do
4
- before :each do
5
- @cfg = C.p3.merge(:checks => join(C.check_mem, C.check_cpu), :monitor_children => {})
6
- start_ok_process(@cfg)
7
- sleep 6
8
- end
9
-
10
- after :each do
11
- @process.stop if @process
12
- end
13
-
14
- it "update only env" do
15
- @process.watchers.keys.should == [:check_alive, :check_childs, :check_memory, :check_cpu]
16
- @process.childs.keys.size.should == 3
17
- child_pids = @process.childs.keys
18
- @process[:environment].should == {"ENV1" => "SUPER"}
19
-
20
- @process.update_config(@cfg.merge(:environment => {"ENV2" => "SUPER"}))
21
- sleep 5
22
-
23
- @process.state_name.should == :up
24
- @process.watchers.keys.should == [:check_alive, :check_childs, :check_memory, :check_cpu]
25
- @process.childs.keys.size.should == 3
26
- @process.childs.keys.should == child_pids
27
- @process[:environment].should == {"ENV2" => "SUPER"}
28
- @process.pid.should == @pid
29
- end
30
-
31
- it "update watchers" do
32
- @process.watchers.keys.should == [:check_alive, :check_childs, :check_memory, :check_cpu]
33
- @process.childs.keys.size.should == 3
34
- child_pids = @process.childs.keys
35
-
36
- @process.update_config(@cfg.merge(:checks => C.check_mem))
37
- sleep 5
38
-
39
- @process.state_name.should == :up
40
- @process.watchers.keys.should == [:check_alive, :check_childs, :check_memory]
41
- @process.childs.keys.size.should == 3
42
- @process.childs.keys.should == child_pids
43
- @process.pid.should == @pid
44
- end
45
-
46
- it "when disable monitor_children they should remove" do
47
- @process.watchers.keys.should == [:check_alive, :check_childs, :check_memory, :check_cpu]
48
- @process.childs.keys.size.should == 3
49
- child_pids = @process.childs.keys
50
-
51
- @process.update_config(@cfg.merge(:monitor_children => nil))
52
- sleep 5
53
-
54
- @process.state_name.should == :up
55
- @process.watchers.keys.should == [:check_alive, :check_memory, :check_cpu]
56
- @process.childs.keys.size.should == 0
57
- @process.pid.should == @pid
58
- end
59
-
60
- end
61
-
62
-
@@ -1,128 +0,0 @@
1
- require 'rubygems'
2
- require "bundler/setup"
3
- require 'celluloid'
4
-
5
- if ENV['COV']
6
- require 'simplecov'
7
- SimpleCov.start do
8
- add_filter "/bundle/"
9
- end
10
- end
11
-
12
- Bundler.require :default
13
-
14
- # preload
15
- Eye::Control
16
- Eye::Controller
17
- Eye::Process
18
-
19
- class Eye::Controller
20
- public :find_objects, :remove_object_from_tree
21
- end
22
-
23
- require 'rspec/mocks'
24
- require 'fakeweb'
25
-
26
- require File.join(File.dirname(__FILE__), %w{support spec_support})
27
-
28
- $logger_path = File.join(File.dirname(__FILE__), %w{spec.log})
29
-
30
- def set_glogger
31
- Eye::Logger.log_level = Logger::DEBUG
32
- Eye::Logger.link_logger($logger_path)
33
- end
34
-
35
- set_glogger
36
-
37
- $logger = Eye::Logger.new("spec")
38
- Celluloid.logger = $logger
39
- STDERR.reopen($logger_path)
40
-
41
- $logger.info "specs started in process #{$$}"
42
-
43
- RSpec.configure do |config|
44
- config.mock_with :rr
45
-
46
- config.before(:all) do
47
- silence_warnings{ Eye::SystemResources::PsAxActor::UPDATE_INTERVAL = 2 }
48
- end
49
-
50
- config.before(:each) do
51
- FileUtils.rm(C.p1[:pid_file]) rescue nil
52
- FileUtils.rm(C.p2[:pid_file]) rescue nil
53
-
54
- @log = C.base[:stdout]
55
- FileUtils.rm(@log) rescue nil
56
-
57
- $logger.info "================== #{ self.class.description} '#{ example.description }'========================"
58
- end
59
-
60
- config.after(:each) do
61
- # clearing all
62
-
63
- if @pid_file
64
- FileUtils.rm(@pid_file) rescue nil
65
- end
66
-
67
- force_kill_process(@process)
68
- force_kill_pid(@pid)
69
-
70
- FileUtils.rm(C.p1[:pid_file]) rescue nil
71
- FileUtils.rm(C.p2[:pid_file]) rescue nil
72
-
73
- GC.start # for kill spawned threads
74
-
75
- terminate_old_actors
76
-
77
- # actors = Celluloid::Actor.all.map(&:class)
78
- # $logger.info "Actors: #{actors.inspect}"
79
- end
80
- end
81
-
82
- def terminate_old_actors
83
- Celluloid::Actor.all.each do |actor|
84
- next unless actor.alive?
85
- if [Eye::Process, Eye::Group, Eye::ChildProcess].include?(actor.class)
86
- actor.terminate
87
- end
88
- end
89
- end
90
-
91
- def force_kill_process(process)
92
- if process && process.alive?
93
- pid = process.pid
94
-
95
- process.terminate
96
-
97
- if pid && Eye::System.pid_alive?(pid)
98
- Eye::System.send_signal(pid, 9)
99
- end
100
-
101
- process = nil
102
- end
103
- end
104
-
105
- def force_kill_pid(pid)
106
- if pid && Eye::System.pid_alive?(pid)
107
- Eye::System.send_signal(pid, 9)
108
- end
109
- end
110
-
111
- def fixture(name)
112
- File.expand_path(File.join(File.dirname(__FILE__), 'fixtures', name))
113
- end
114
-
115
- def join(*args)
116
- result = {}
117
- args.each do |a|
118
- result.merge!(a)
119
- end
120
-
121
- result
122
- end
123
-
124
- def should_spend(timeout = 0, delta = 0.05, &block)
125
- tm1 = Time.now
126
- yield
127
- (Time.now - tm1).should be_within(delta).of(timeout)
128
- end
@@ -1,15 +0,0 @@
1
- require 'rr'
2
- require 'rspec/core/mocking/with_rr'
3
-
4
- module RR::CelluloidExt
5
- %w{mock stub dont_allow proxy strong}.each do |_method|
6
- module_eval <<-Q
7
- def #{_method}(*args)
8
- args[0] = args[0].wrapped_object if args[0].respond_to?(:wrapped_object)
9
- super
10
- end
11
- Q
12
- end
13
- end
14
-
15
- RSpec::Core::MockFrameworkAdapter.send(:include, RR::CelluloidExt)
@@ -1,163 +0,0 @@
1
- module C
2
- extend self
3
-
4
- def sample_dir
5
- File.expand_path(File.join(File.dirname(__FILE__), %w{.. example}))
6
- end
7
-
8
- def pid_name
9
- "1.pid"
10
- end
11
-
12
- def log_name
13
- "1111.log"
14
- end
15
-
16
- def base
17
- {
18
- :environment => {"ENV1" => "SUPER"},
19
- :working_dir => sample_dir,
20
- :application => "main",
21
- :group => "default",
22
- :name => "base",
23
- :pid_file => sample_dir + "/#{pid_name}",
24
- :stdout => sample_dir + "/#{log_name}",
25
- :stderr => sample_dir + "/#{log_name}",
26
- :check_alive_period => 1.seconds,
27
- :start_timeout => 5.seconds,
28
- :stop_timeout => 2.seconds,
29
- }
30
- end
31
-
32
- # eye daemonize process
33
- def p1
34
- base.merge(
35
- :name => "blocking process",
36
- :start_command => "ruby sample.rb",
37
- :daemonize => true
38
- )
39
- end
40
-
41
- # self daemonized process
42
- def p2
43
- base.merge(
44
- :name => "self daemonized process",
45
- :start_command => "ruby sample.rb -d --pid #{pid_name} --log #{log_name}",
46
- )
47
- end
48
-
49
- # forking example
50
- def p3
51
- base.merge(
52
- :name => "forking",
53
- :start_command => "ruby forking.rb start",
54
- :stop_command => "ruby forking.rb stop",
55
- :pid_file => "forking.pid",
56
- :childs_update_period => Eye::SystemResources::PsAxActor::UPDATE_INTERVAL + 1,
57
- :stop_timeout => 5.seconds,
58
- :start_timeout => 15.seconds
59
- )
60
- end
61
-
62
- # event machine
63
- def p4
64
- base.merge(
65
- :pid_file => "em.pid",
66
- :name => "em",
67
- :start_command => "ruby em.rb",
68
- :daemonize => true,
69
- :start_grace => 3.5,
70
- :stop_grace => 0.5
71
- )
72
- end
73
-
74
- def check_mem(a = {})
75
- {:memory => {:type => :memory, :every => 2.seconds, :below => 100.megabytes, :times => [3,5]}.merge(a)}
76
- end
77
-
78
- def check_cpu(a = {})
79
- {:cpu => {:type => :cpu, :every => 2.seconds, :below => 80, :times => [4,5]}.merge(a)}
80
- end
81
-
82
- def check_ctime(a = {})
83
- {:ctime => {:type => :ctime, :every => 2, :file => sample_dir + "/#{log_name}", :times => [3,5]}.merge(a)}
84
- end
85
-
86
- def check_fsize(a = {})
87
- {:fsize => {:type => :fsize, :every => 2, :file => sample_dir + "/#{log_name}", :times => [3,5]}.merge(a)}
88
- end
89
-
90
- def check_http(a = {})
91
- {:http => {
92
- :type => :http, :every => 2, :times => 1,
93
- :url => "http://localhost:3000/bla", :kind => :sucess,
94
- :pattern => /OK/, :timeout => 3.seconds
95
- }.merge(a)
96
- }
97
- end
98
-
99
- def flapping(a = {})
100
- {:flapping => { :type => :flapping, :times => 2, :within => 10.seconds }.merge(a)}
101
- end
102
-
103
- def restart_sync
104
- {:restart => {:action => :restart, :type => :sync, :grace => 5}}
105
- end
106
-
107
- def restart_async
108
- {:restart => {:action => :restart, :type => :async, :grace => 5}}
109
- end
110
-
111
- def socket_path
112
- File.join(sample_dir, 'sock1')
113
- end
114
-
115
- end
116
-
117
- class TrapError
118
- include Celluloid
119
-
120
- trap_exit :actor_died
121
-
122
- def actor_died(actor, reason)
123
- if reason
124
- $logger.error "Actor Died! #{actor.inspect} has died because of a #{reason.inspect}"
125
- end
126
- #$logger.error "#{reason.message}"
127
- #$logger.error "#{reason.backtrace * "\n"}"
128
- end
129
- end
130
-
131
- def process(cfg)
132
- p = Eye::Process.new(cfg)
133
- @trap = TrapError.new
134
- @trap.link(p)
135
- p
136
- end
137
-
138
- def start_ok_process(cfg = C.p1)
139
- @process = process(cfg)
140
- @process.start
141
- sleep 0.2
142
-
143
- @process.process_realy_running?.should == true
144
- @process.pid.should > 0
145
- @process.watchers.keys.should == [:check_alive] if !cfg[:check_alive] == false
146
- @process.state_name.should == :up
147
- @pid = @process.pid
148
- Eye::System.pid_alive?(@pid).should == true
149
-
150
- @process
151
- end
152
-
153
- def die_process!(pid, signal = :term, int = 0.2)
154
- Eye::System.send_signal(pid, signal)
155
- sleep int.to_f
156
- Eye::System.pid_alive?(pid).should == false
157
- end
158
-
159
- def ensure_kill_samples
160
- `ps aux | grep 'ruby sample.rb' | awk '{print $2}' | xargs kill -2 2>/dev/null` rescue nil
161
- end
162
-
163
- require_relative 'rr_celluloid'
@@ -1,56 +0,0 @@
1
- require File.dirname(__FILE__) + '/spec_helper'
2
-
3
- describe "Eye::SystemResources" do
4
-
5
- it "should get memory" do
6
- x = Eye::SystemResources.memory($$)
7
- x.should > 100
8
- x.should < 300_000
9
- end
10
-
11
- it "should get cpu" do
12
- x = Eye::SystemResources.cpu($$)
13
- x.should >= 0
14
- x.should <= 150
15
- end
16
-
17
- it "should get start time" do
18
- x = Eye::SystemResources.start_time($$)
19
- x.length.should >= 4
20
- end
21
-
22
- it "should get childs" do
23
- x = Eye::SystemResources.childs($$)
24
- x.is_a?(Array).should == true
25
- x.first.should > 0
26
- x.size.should > 0
27
- x.all?{|c| c > 0 }.should == true
28
- end
29
-
30
- it "should cache and update when interval" do
31
- Eye::SystemResources.send :reset!
32
- stub(Eye::System).ps_aux{ {$$ => {:rss => 123}} }
33
-
34
- silence_warnings{ Eye::SystemResources::PsAxActor::UPDATE_INTERVAL = 1 }
35
-
36
- x1 = Eye::SystemResources.memory($$)
37
- x2 = Eye::SystemResources.memory($$)
38
- x1.should == x2
39
-
40
- sleep 0.5
41
- x3 = Eye::SystemResources.memory($$)
42
- x1.should == x3
43
-
44
- stub(Eye::System).ps_aux{ {$$ => {:rss => 124}} }
45
-
46
- sleep 0.7
47
- x4 = Eye::SystemResources.memory($$)
48
- x1.should == x4 # first value is old
49
-
50
- sleep 0.1
51
-
52
- x5 = Eye::SystemResources.memory($$)
53
- x1.should_not == x5 # seconds is new
54
- end
55
-
56
- end
@@ -1,174 +0,0 @@
1
- require File.dirname(__FILE__) + '/spec_helper'
2
-
3
- describe "Eye::System" do
4
-
5
- it "pid_alive?" do
6
- Eye::System.pid_alive?($$).should == true
7
- Eye::System.pid_alive?(123456).should == false
8
- Eye::System.pid_alive?(-122).should == false
9
- Eye::System.pid_alive?(nil).should == false
10
- end
11
-
12
- it "check_pid_alive" do
13
- Eye::System.check_pid_alive($$).should == {:result => true}
14
- Eye::System.check_pid_alive(123456)[:error].class.should == Errno::ESRCH
15
- Eye::System.check_pid_alive(-122)[:error].should be
16
- Eye::System.check_pid_alive(nil).should == {:result => false}
17
- end
18
-
19
- it "ps_aux" do
20
- h = Eye::System.ps_aux
21
- h.size.should > 10
22
- x = h[$$]
23
- x.should be
24
- x.is_a?(Hash).should be_true
25
- x[:ppid].should > 1 # parent pid
26
- x[:cpu].should >= 0 # proc
27
- x[:rss].should > 1000 # memory
28
- x[:start_time].length.should >= 4
29
- end
30
-
31
- it "prepare env" do
32
- Eye::System.send(:prepare_env, {}).should include({})
33
- Eye::System.send(:prepare_env, {:environment => {'A' => 'B'}}).should include({'A' => 'B'})
34
- Eye::System.send(:prepare_env, {:environment => {'A' => 'B'}, :working_dir => "/tmp"}).should include({'A' => 'B', 'PWD' => '/tmp'})
35
-
36
- r = Eye::System.send(:prepare_env, {:environment => {'A' => [], 'B' => {}, 'C' => nil, 'D' => 1, 'E' => '2'}})
37
- r['A'].should == '[]'
38
- r['B'].should == '{}'
39
- r['C'].should == nil
40
- r['D'].should == '1'
41
- r['E'].should == '2'
42
- end
43
-
44
- describe "daemonize" do
45
- it "daemonize default" do
46
- @pid = Eye::System.daemonize("ruby sample.rb", {:environment => {"ENV1" => "SECRET1", 'BLA' => {}},
47
- :working_dir => C.p1[:working_dir], :stdout => @log})[:pid]
48
-
49
- @pid.should > 0
50
-
51
- # process should be alive
52
- Eye::System.pid_alive?(@pid).should == true
53
-
54
- sleep 4
55
-
56
- # should capture log
57
- data = File.read(@log)
58
- data.should include("SECRET1")
59
- data.should include("- tick")
60
- end
61
-
62
- it "daemonize empty" do
63
- @pid = Eye::System.daemonize("ruby sample.rb", {:working_dir => C.p1[:working_dir]})[:pid]
64
-
65
- # process should be alive
66
- Eye::System.pid_alive?(@pid).should == true
67
- end
68
-
69
- it "daemonize empty" do
70
- @pid = Eye::System.daemonize("echo 'some'", {:stdout => @log})[:pid]
71
-
72
- sleep 0.3
73
-
74
- data = File.read(@log)
75
- data.should == "some\n"
76
- end
77
-
78
- it "should add LANG env varible" do
79
- mock(Process).spawn({"BLA"=>"1", "LANG"=>ENV_LANG}, 'echo', 'some', anything)
80
- stub(Process).detach
81
-
82
- @pid = Eye::System.daemonize("echo 'some'", {:stdout => @log, :environment => {"BLA" => "1"}})[:pid]
83
- end
84
- end
85
-
86
- describe "execute" do
87
- it "sleep and exit" do
88
- should_spend(1, 0.2) do
89
- Eye::System.execute("sleep 1")
90
- end
91
- end
92
- end
93
-
94
- describe "send signal" do
95
- it "send_signal to spec" do
96
- Eye::System.send_signal($$, 0)[:result].should == :ok
97
- end
98
-
99
- it "send_signal to unexisted process" do
100
- res = Eye::System.send_signal(-12234)
101
- res[:status].should == nil
102
- res[:error].message.should include("No such process")
103
- end
104
-
105
- it "send_signal to daemon" do
106
- @pid = Eye::System.daemonize("ruby sample.rb", {:working_dir => C.p1[:working_dir]})[:pid]
107
-
108
- # process should be alive
109
- Eye::System.pid_alive?(@pid).should == true
110
-
111
- Eye::System.send_signal(@pid, :term)[:result].should == :ok
112
- sleep 0.2
113
-
114
- Eye::System.pid_alive?(@pid).should == false
115
- end
116
-
117
- it "catch signal in fork" do
118
- @pid = Eye::System.daemonize("ruby sample.rb", {:working_dir => C.p1[:working_dir],
119
- :stdout => @log})[:pid]
120
-
121
- sleep 4
122
-
123
- Eye::System.send_signal(@pid, :usr1)[:result].should == :ok
124
-
125
- sleep 0.5
126
-
127
- data = File.read(@log)
128
- data.should include("USR1 sig")
129
- end
130
-
131
- it "signals transformation" do
132
- mock(Process).kill('USR1', 123)
133
- Eye::System.send_signal(123, :usr1)
134
-
135
- mock(Process).kill('KILL', 123)
136
- Eye::System.send_signal(123, :KILL)
137
-
138
- mock(Process).kill('USR1', 123)
139
- Eye::System.send_signal(123, 'usr1')
140
-
141
- mock(Process).kill('KILL', 123)
142
- Eye::System.send_signal(123, 'KILL')
143
-
144
- mock(Process).kill(9, 123)
145
- Eye::System.send_signal(123, 9)
146
-
147
- mock(Process).kill(9, 123)
148
- Eye::System.send_signal(123, '9')
149
-
150
- mock(Process).kill(9, 123)
151
- Eye::System.send_signal(123, '-9')
152
-
153
- mock(Process).kill(9, 123)
154
- Eye::System.send_signal(123, -9)
155
-
156
- mock(Process).kill(0, 123)
157
- Eye::System.send_signal(123, '0')
158
- end
159
- end
160
-
161
- it "normalized_file" do
162
- Eye::System.normalized_file("/tmp/1.rb").should == "/tmp/1.rb"
163
- Eye::System.normalized_file("/tmp/1.rb", '/usr').should == "/tmp/1.rb"
164
-
165
- Eye::System.normalized_file("tmp/1.rb").should == Dir.getwd + "/tmp/1.rb"
166
- Eye::System.normalized_file("tmp/1.rb", '/usr').should == "/usr/tmp/1.rb"
167
-
168
- Eye::System.normalized_file("./tmp/1.rb").should == Dir.getwd + "/tmp/1.rb"
169
- Eye::System.normalized_file("./tmp/1.rb", '/usr/').should == "/usr/tmp/1.rb"
170
-
171
- Eye::System.normalized_file("../tmp/1.rb", '/usr/').should == "/tmp/1.rb"
172
- end
173
-
174
- end