foreground 0.0.3 → 0.0.4
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.
- data/bin/foreground_sample_daemon +5 -3
- data/features/start_stop.feature +19 -3
- data/features/steps/sample_daemon_steps.rb +25 -6
- data/lib/foreground/signal_handlers.rb +10 -3
- data/lib/foreground/version.rb +1 -1
- metadata +117 -126
@@ -1,12 +1,14 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
3
|
# Files
|
4
|
-
|
5
|
-
|
4
|
+
name = File.basename($PROGRAM_NAME)
|
5
|
+
$PROGRAM_NAME=name
|
6
|
+
pid_file = "/tmp/#{name}.pid"
|
7
|
+
log_file = "/tmp/#{name}.log"
|
6
8
|
|
7
9
|
# Run only run one daemon at a time.
|
8
10
|
if File.exists?(pid_file)
|
9
|
-
puts "PID file exists already!"
|
11
|
+
File.open(log_file, 'a') { |f| f.puts "PID file exists already!" }
|
10
12
|
exit
|
11
13
|
end
|
12
14
|
|
data/features/start_stop.feature
CHANGED
@@ -4,12 +4,28 @@ Feature: Start and stop
|
|
4
4
|
As a funky user
|
5
5
|
I want foreground to start and stop that background daemon
|
6
6
|
|
7
|
-
Scenario:
|
7
|
+
Scenario: Run sample daemon via foreground
|
8
8
|
When I run the sample daemon via foreground
|
9
|
-
Then
|
9
|
+
Then foreground should run
|
10
|
+
And the sample daemon should run
|
10
11
|
|
11
|
-
|
12
|
+
Scenario Outline: Kill sample daemon via foreground
|
13
|
+
Given I run the sample daemon via foreground
|
14
|
+
When I send foreground a <signal> signal
|
12
15
|
And I run `sleep 1`
|
13
16
|
Then foreground should not run
|
14
17
|
And the sample daemon should not run
|
15
18
|
And the sample daemon should have received a TERM signal
|
19
|
+
|
20
|
+
Examples:
|
21
|
+
| signal |
|
22
|
+
| TERM |
|
23
|
+
| INT |
|
24
|
+
|
25
|
+
Scenario: Refresh sample daemon via foreground
|
26
|
+
Given I run the sample daemon via foreground
|
27
|
+
When I send foreground a HUP signal
|
28
|
+
And I run `sleep 1`
|
29
|
+
Then foreground should run
|
30
|
+
And the sample daemon should run
|
31
|
+
And the sample daemon should have received a HUP signal
|
@@ -2,14 +2,20 @@ STDOUT.sync = true # for debugging
|
|
2
2
|
|
3
3
|
def sample_daemons
|
4
4
|
proclist = `/bin/ps -A -o pid,command`
|
5
|
-
proclist.to_a.grep(%r{^\s*\d+\s+
|
5
|
+
proclist.to_a.grep(%r{^\s*\d+\s+foreground_sample_daemon\s*$}) { |l| l[/^\s*(\d+)\s+/,1].to_i }
|
6
6
|
end
|
7
7
|
|
8
|
-
def kill_foreground
|
8
|
+
def kill_foreground(signal = :TERM)
|
9
9
|
if @foreground
|
10
|
+
#TODO: Replace sleep with a timeout!
|
11
|
+
sleep 2 # Give foreground some time to setup signal handling... or tests might break.
|
10
12
|
begin
|
11
|
-
Process.kill(
|
12
|
-
|
13
|
+
Process.kill(signal, @foreground)
|
14
|
+
if signal.to_sym == :HUP
|
15
|
+
sleep 1
|
16
|
+
else
|
17
|
+
Process.waitpid(@foreground)
|
18
|
+
end
|
13
19
|
rescue Errno::ESRCH, Errno::ECHILD
|
14
20
|
end
|
15
21
|
end
|
@@ -17,6 +23,7 @@ end
|
|
17
23
|
|
18
24
|
def kill_all_sample_daemons(signal=:TERM)
|
19
25
|
sample_daemons.each { |pid| system("kill -#{signal} #{pid}") }
|
26
|
+
#TODO: Replace sleep with a timeout!
|
20
27
|
sleep 1 # Give the process time to say goodbye.
|
21
28
|
end
|
22
29
|
|
@@ -46,8 +53,18 @@ When /^I send the sample daemon a (\w+) signal$/ do |signal|
|
|
46
53
|
end
|
47
54
|
|
48
55
|
When /^I kill foreground$/ do
|
49
|
-
|
50
|
-
|
56
|
+
steps %q{
|
57
|
+
When I send foreground a TERM signal
|
58
|
+
}
|
59
|
+
end
|
60
|
+
|
61
|
+
When /^I send foreground a (\w+) signal$/ do |signal|
|
62
|
+
kill_foreground(signal)
|
63
|
+
end
|
64
|
+
|
65
|
+
Then /^foreground should run$/ do
|
66
|
+
lambda { Process.kill(0, @foreground) }.should_not raise_error(Errno::ESRCH),
|
67
|
+
"No such foreground process with PID #{@foreground}"
|
51
68
|
end
|
52
69
|
|
53
70
|
Then /^foreground should not run$/ do
|
@@ -70,6 +87,8 @@ Then /^the sample daemon should not run$/ do
|
|
70
87
|
end
|
71
88
|
|
72
89
|
Then /^(\d+) sample daemons? should run$/ do |expected|
|
90
|
+
#TODO: Replace sleep with a timeout!
|
91
|
+
sleep 2 # some time to start the daemon
|
73
92
|
expected = expected.to_i
|
74
93
|
actual = sample_daemons.count
|
75
94
|
actual.should eql(expected),
|
data/lib/foreground/version.rb
CHANGED
metadata
CHANGED
@@ -1,143 +1,137 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: foreground
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.4
|
5
5
|
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 0
|
9
|
-
- 3
|
10
|
-
version: 0.0.3
|
11
6
|
platform: ruby
|
12
|
-
authors:
|
13
|
-
-
|
7
|
+
authors:
|
8
|
+
- Björn Albers
|
14
9
|
autorequire:
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
requirement:
|
12
|
+
date: 2012-09-08 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: mixlib-cli
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
22
17
|
none: false
|
23
|
-
requirements:
|
18
|
+
requirements:
|
24
19
|
- - ~>
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
hash: 27
|
27
|
-
segments:
|
28
|
-
- 1
|
29
|
-
- 2
|
30
|
-
- 2
|
20
|
+
- !ruby/object:Gem::Version
|
31
21
|
version: 1.2.2
|
32
|
-
prerelease: false
|
33
22
|
type: :runtime
|
34
|
-
|
35
|
-
version_requirements:
|
36
|
-
- !ruby/object:Gem::Dependency
|
37
|
-
requirement: &id002 !ruby/object:Gem::Requirement
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
38
25
|
none: false
|
39
|
-
requirements:
|
40
|
-
- -
|
41
|
-
- !ruby/object:Gem::Version
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 1.2.2
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: aruba
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
47
37
|
version: 0.4.11
|
48
|
-
prerelease: false
|
49
38
|
type: :development
|
50
|
-
|
51
|
-
version_requirements:
|
52
|
-
- !ruby/object:Gem::Dependency
|
53
|
-
requirement: &id003 !ruby/object:Gem::Requirement
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
54
41
|
none: false
|
55
|
-
requirements:
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: 0.4.11
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: aruba-doubles
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
56
51
|
- - ~>
|
57
|
-
- !ruby/object:Gem::Version
|
58
|
-
hash: 29
|
59
|
-
segments:
|
60
|
-
- 1
|
61
|
-
- 2
|
62
|
-
- 1
|
52
|
+
- !ruby/object:Gem::Version
|
63
53
|
version: 1.2.1
|
64
|
-
prerelease: false
|
65
54
|
type: :development
|
66
|
-
name: aruba-doubles
|
67
|
-
version_requirements: *id003
|
68
|
-
- !ruby/object:Gem::Dependency
|
69
|
-
requirement: &id004 !ruby/object:Gem::Requirement
|
70
|
-
none: false
|
71
|
-
requirements:
|
72
|
-
- - ">="
|
73
|
-
- !ruby/object:Gem::Version
|
74
|
-
hash: 9
|
75
|
-
segments:
|
76
|
-
- 0
|
77
|
-
- 7
|
78
|
-
- 5
|
79
|
-
version: 0.7.5
|
80
55
|
prerelease: false
|
81
|
-
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ~>
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 1.2.1
|
62
|
+
- !ruby/object:Gem::Dependency
|
82
63
|
name: guard-cucumber
|
83
|
-
|
84
|
-
- !ruby/object:Gem::Dependency
|
85
|
-
requirement: &id005 !ruby/object:Gem::Requirement
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
86
65
|
none: false
|
87
|
-
requirements:
|
88
|
-
- -
|
89
|
-
- !ruby/object:Gem::Version
|
90
|
-
|
91
|
-
segments:
|
92
|
-
- 0
|
93
|
-
- 5
|
94
|
-
- 1
|
95
|
-
version: 0.5.1
|
96
|
-
prerelease: false
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: 0.7.5
|
97
70
|
type: :development
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: 0.7.5
|
78
|
+
- !ruby/object:Gem::Dependency
|
98
79
|
name: guard-rspec
|
99
|
-
|
100
|
-
- !ruby/object:Gem::Dependency
|
101
|
-
requirement: &id006 !ruby/object:Gem::Requirement
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
102
81
|
none: false
|
103
|
-
requirements:
|
104
|
-
- -
|
105
|
-
- !ruby/object:Gem::Version
|
106
|
-
|
107
|
-
segments:
|
108
|
-
- 0
|
109
|
-
version: "0"
|
110
|
-
prerelease: false
|
82
|
+
requirements:
|
83
|
+
- - ! '>='
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: 0.5.1
|
111
86
|
type: :development
|
87
|
+
prerelease: false
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: 0.5.1
|
94
|
+
- !ruby/object:Gem::Dependency
|
112
95
|
name: rake
|
113
|
-
|
114
|
-
- !ruby/object:Gem::Dependency
|
115
|
-
requirement: &id007 !ruby/object:Gem::Requirement
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
116
97
|
none: false
|
117
|
-
requirements:
|
118
|
-
- -
|
119
|
-
- !ruby/object:Gem::Version
|
120
|
-
|
121
|
-
segments:
|
122
|
-
- 0
|
123
|
-
- 9
|
124
|
-
- 0
|
125
|
-
version: 0.9.0
|
126
|
-
prerelease: false
|
98
|
+
requirements:
|
99
|
+
- - ! '>='
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: '0'
|
127
102
|
type: :development
|
103
|
+
prerelease: false
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
110
|
+
- !ruby/object:Gem::Dependency
|
128
111
|
name: rb-fsevent
|
129
|
-
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
113
|
+
none: false
|
114
|
+
requirements:
|
115
|
+
- - ! '>='
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: 0.9.0
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
none: false
|
122
|
+
requirements:
|
123
|
+
- - ! '>='
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: 0.9.0
|
130
126
|
description: Control daemonizing background processes with launchd.
|
131
|
-
email:
|
127
|
+
email:
|
132
128
|
- bjoernalbers@googlemail.com
|
133
|
-
executables:
|
129
|
+
executables:
|
134
130
|
- foreground
|
135
131
|
- foreground_sample_daemon
|
136
132
|
extensions: []
|
137
|
-
|
138
133
|
extra_rdoc_files: []
|
139
|
-
|
140
|
-
files:
|
134
|
+
files:
|
141
135
|
- .gitignore
|
142
136
|
- Gemfile
|
143
137
|
- Guardfile
|
@@ -162,38 +156,35 @@ files:
|
|
162
156
|
- spec/spec_helper.rb
|
163
157
|
homepage: https://github.com/bjoernalbers/foreground
|
164
158
|
licenses: []
|
165
|
-
|
166
159
|
post_install_message:
|
167
160
|
rdoc_options: []
|
168
|
-
|
169
|
-
require_paths:
|
161
|
+
require_paths:
|
170
162
|
- lib
|
171
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
163
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
172
164
|
none: false
|
173
|
-
requirements:
|
174
|
-
- -
|
175
|
-
- !ruby/object:Gem::Version
|
176
|
-
|
177
|
-
segments:
|
165
|
+
requirements:
|
166
|
+
- - ! '>='
|
167
|
+
- !ruby/object:Gem::Version
|
168
|
+
version: '0'
|
169
|
+
segments:
|
178
170
|
- 0
|
179
|
-
|
180
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
171
|
+
hash: -3093177780394288803
|
172
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
181
173
|
none: false
|
182
|
-
requirements:
|
183
|
-
- -
|
184
|
-
- !ruby/object:Gem::Version
|
185
|
-
|
186
|
-
segments:
|
174
|
+
requirements:
|
175
|
+
- - ! '>='
|
176
|
+
- !ruby/object:Gem::Version
|
177
|
+
version: '0'
|
178
|
+
segments:
|
187
179
|
- 0
|
188
|
-
|
180
|
+
hash: -3093177780394288803
|
189
181
|
requirements: []
|
190
|
-
|
191
182
|
rubyforge_project:
|
192
183
|
rubygems_version: 1.8.24
|
193
184
|
signing_key:
|
194
185
|
specification_version: 3
|
195
|
-
summary: foreground-0.0.
|
196
|
-
test_files:
|
186
|
+
summary: foreground-0.0.4
|
187
|
+
test_files:
|
197
188
|
- features/sample_daemon.feature
|
198
189
|
- features/start_stop.feature
|
199
190
|
- features/steps/sample_daemon_steps.rb
|