mirage 2.2.3 → 2.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (36) hide show
  1. data/Gemfile +2 -0
  2. data/Gemfile.lock +11 -2
  3. data/HISTORY +1 -0
  4. data/VERSION +1 -1
  5. data/bin/mirage +6 -8
  6. data/features/client/clear.feature +8 -8
  7. data/features/client/{response.feature → preview_responses.feature} +0 -0
  8. data/features/client/put.feature +9 -1
  9. data/features/client/{request.feature → requests.feature} +0 -0
  10. data/features/client/running.feature +49 -0
  11. data/features/client/{command_line_interface.feature → start.feature} +0 -12
  12. data/features/client/stop.feature +85 -0
  13. data/features/server/commandline_interface/help.feature +16 -0
  14. data/features/server/commandline_interface/start.feature +30 -0
  15. data/features/server/commandline_interface/stop.feature +42 -0
  16. data/features/server/prime.feature +8 -7
  17. data/features/step_definitions/my_steps.rb +20 -16
  18. data/features/support/command_line.rb +22 -0
  19. data/features/support/env.rb +11 -121
  20. data/features/support/hooks.rb +30 -0
  21. data/features/support/mirage.rb +8 -0
  22. data/lib/mirage/client/client.rb +124 -0
  23. data/lib/mirage/client/error.rb +22 -0
  24. data/lib/mirage/client/response.rb +29 -0
  25. data/lib/mirage/client/runner.rb +142 -0
  26. data/lib/mirage/client.rb +4 -206
  27. data/mirage.gemspec +25 -8
  28. data/mirage_server.rb +15 -10
  29. data/rakefile +7 -1
  30. data/spec/running_via_api_spec.rb +147 -0
  31. data/spec/running_via_api_windows_spec.rb +187 -0
  32. data/test.rb +21 -4
  33. metadata +66 -33
  34. data/features/client/mirage_client.feature +0 -36
  35. data/features/server/command_line_iterface.feature +0 -45
  36. data/lib/mirage/cli.rb +0 -69
@@ -0,0 +1,187 @@
1
+ $LOAD_PATH.unshift "../lib"
2
+ require 'rspec'
3
+ require 'mirage/client'
4
+
5
+ if ChildProcess.windows?
6
+
7
+
8
+ def process_string_for_mirage(mirage_port, pid)
9
+ %Q{ruby.exe #{pid} Console 1 6,076 K Running WIN-ATPGMMC0218\\\\leon 0:01:58 mirage server port #{mirage_port}}
10
+ end
11
+
12
+ include Mirage
13
+
14
+ describe Mirage do
15
+
16
+ describe 'starting' do
17
+ before(:each) do
18
+ @runner = mock
19
+ Runner.should_receive(:new).and_return(@runner)
20
+ end
21
+
22
+ it 'should start Mirage on port 7001 by default' do
23
+ @runner.should_receive(:invoke).with(:start, [], {:port => 7001})
24
+ Mirage.start
25
+ end
26
+
27
+ it 'should start mirage on the given port' do
28
+ options = {:port => 9001}
29
+ @runner.should_receive(:invoke).with(:start, [], options)
30
+ Mirage.start options
31
+ end
32
+ end
33
+
34
+ describe 'stopping' do
35
+ before(:each) do
36
+ @runner = mock
37
+ Runner.stub(:new).and_return(@runner)
38
+ end
39
+
40
+ it 'should supply single port argument in an array to the runner' do
41
+ port = 7001
42
+ @runner.should_receive(:invoke).with(:stop, [], :port => [port])
43
+ @runner.should_receive(:invoke).with(:stop, [], :port => [:all])
44
+ Mirage.stop(:port => port)
45
+ Mirage.stop(:port => :all)
46
+ end
47
+
48
+ it 'should stop multiple instances of Mirage' do
49
+ ports = 7001, 7002
50
+ @runner.should_receive(:invoke).with(:stop, [], :port => ports)
51
+ Mirage.stop(:port => ports)
52
+ end
53
+
54
+ end
55
+
56
+ describe Mirage::Runner do
57
+ it 'should stop the running instance of Mirage' do
58
+
59
+ runner = Mirage::Runner.new
60
+
61
+ runner.should_receive(:`).with(/tasklist.*/).any_number_of_times.and_return(process_string_for_mirage(7001, 18903))
62
+ runner.should_receive(:`).with(/taskkill \/F \/T \/PID 18903/) do
63
+ runner.rspec_reset
64
+ runner.stub(:`).and_return("")
65
+ end
66
+
67
+ Mirage::Runner.should_receive(:new).with([], {}, anything).and_return(runner)
68
+ runner.invoke(:stop, [], nil)
69
+ end
70
+
71
+ it 'should not stop any instances when more than one is running' do
72
+ ps_aux_output =<<PS
73
+ #{process_string_for_mirage(7001, 18901)}
74
+ #{process_string_for_mirage(7002, 18902)}
75
+ #{process_string_for_mirage(7003, 18903)}
76
+ PS
77
+
78
+ runner = Mirage::Runner.new
79
+
80
+ runner.should_receive(:`).with(/tasklist.*/).any_number_of_times.and_return(ps_aux_output)
81
+ runner.should_not_receive(:`).with(/taskkill.*/)
82
+
83
+ Mirage::Runner.should_receive(:new).with([], {}, anything).and_return(runner)
84
+
85
+ lambda { runner.invoke(:stop, [], nil) }.should raise_error(Mirage::ClientError)
86
+
87
+ end
88
+
89
+
90
+ it 'should stop the instance running on the given port' do
91
+
92
+ task_list_output =<<TASKLIST
93
+ #{process_string_for_mirage(7001, 18901)}
94
+ #{process_string_for_mirage(7002, 18902)}
95
+ TASKLIST
96
+
97
+ options = {:port => [7001]}
98
+ runner = Mirage::Runner.new
99
+ runner.options = options
100
+
101
+ runner.should_receive(:`).with(/tasklist.*/).at_least(1).and_return(task_list_output)
102
+ runner.should_receive(:`).with(/taskkill \/F \/T \/PID 18901/) do
103
+ runner.rspec_reset
104
+ runner.stub(:`).and_return(process_string_for_mirage(7002, 18902))
105
+ end
106
+
107
+ Mirage::Runner.should_receive(:new).with([], options, anything).and_return(runner)
108
+
109
+ runner.invoke(:stop, [], options)
110
+ end
111
+
112
+ it 'should stop the instance running on the given ports' do
113
+ ps_aux_output =<<PS
114
+ #{process_string_for_mirage(7001, 18901)}
115
+ #{process_string_for_mirage(7002, 18902)}
116
+ #{process_string_for_mirage(7003, 18903)}
117
+ PS
118
+
119
+ options = {:port => [7001,7002]}
120
+ runner = Mirage::Runner.new
121
+ runner.options = options
122
+
123
+ runner.should_receive(:`).with(/tasklist.*/).any_number_of_times.and_return(ps_aux_output)
124
+ runner.should_receive(:`).with(/taskkill \/F \/T \/PID 18901/)
125
+ runner.should_receive(:`).with(/taskkill \/F \/T \/PID 18902/) do
126
+ runner.rspec_reset
127
+ runner.stub(:`).and_return(process_string_for_mirage("7003", 18903))
128
+ end
129
+
130
+ Mirage::Runner.should_receive(:new).with([], options, anything).and_return(runner)
131
+ runner.invoke(:stop, [], options)
132
+ end
133
+
134
+ it 'should stop all running instances' do
135
+ ps_aux_output =<<PS
136
+ #{process_string_for_mirage(7001, 18901)}
137
+ #{process_string_for_mirage(7002, 18902)}
138
+ #{process_string_for_mirage(7003, 18903)}
139
+ PS
140
+
141
+ options = {:port => [:all]}
142
+ runner = Mirage::Runner.new
143
+ runner.options = options
144
+
145
+
146
+ runner.should_receive(:`).with(/tasklist.*/).any_number_of_times.and_return(ps_aux_output)
147
+
148
+ runner.should_receive(:`).with(/taskkill \/F \/T \/PID 18901/)
149
+ runner.should_receive(:`).with(/taskkill \/F \/T \/PID 18902/)
150
+ runner.should_receive(:`).with(/taskkill \/F \/T \/PID 18903/) do
151
+ runner.rspec_reset
152
+ runner.stub(:`).and_return("")
153
+ end
154
+
155
+ Mirage::Runner.should_receive(:new).with([], options, anything).and_return(runner)
156
+ runner.invoke(:stop, [], options)
157
+
158
+ end
159
+
160
+ it 'should not error when asked to stop Mirage on a port that it is not running on' do
161
+ ps_aux_output =<<PS
162
+ #{process_string_for_mirage(7001, 18901)}
163
+ PS
164
+
165
+ options = {:port => [7002]}
166
+ runner = Mirage::Runner.new
167
+
168
+ runner.should_receive(:`).with(/tasklist.*/).any_number_of_times.and_return(ps_aux_output)
169
+ runner.should_not_receive(:`).with(/taskkill \/F \/T \/PID 18901/)
170
+
171
+ Mirage::Runner.should_receive(:new).with([], options, anything).and_return(runner)
172
+
173
+ lambda { runner.invoke(:stop, [], options) }.should_not raise_error(Mirage::ClientError)
174
+ end
175
+
176
+ # it 'should not start mirage on the same port' do
177
+ # ps_aux_output =<<PS
178
+ ##{process_string_for_mirage(7001, 18901)}
179
+ #PS
180
+ # IO.should_receive(:popen).with(/ps aux.*/).any_number_of_times.and_return(ps_aux_output)
181
+ # lambda{Mirage::Runner.new.invoke(:start, [], {:port => 7001})}.should raise_error(Mirage::ClientError)
182
+ # end
183
+
184
+
185
+ end
186
+ end
187
+ end
data/test.rb CHANGED
@@ -1,6 +1,23 @@
1
- require 'rubygems'
2
- require './lib/mirage/client'
1
+ require 'sinatra'
2
+ require 'async_sinatra'
3
3
 
4
- client = Mirage.start :port => 9001
4
+ #class App < Sinatra::Base
5
5
 
6
- client.stop
6
+ #class App < Sinatra::Base
7
+ configure do |config|
8
+ config.register Sinatra::Async
9
+ #alias :get :aget
10
+
11
+ end
12
+
13
+
14
+
15
+ aget '/' do
16
+ #EM.add_timer(5) do
17
+ # body "hello"
18
+ #end
19
+ status 201
20
+ body "hello"
21
+ end
22
+ #end
23
+ #run App
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mirage
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.3
4
+ version: 2.3.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-07-15 00:00:00.000000000Z
12
+ date: 2012-08-26 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: sinatra
16
- requirement: &26104860 !ruby/object:Gem::Requirement
16
+ requirement: &17467000 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,21 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *26104860
24
+ version_requirements: *17467000
25
+ - !ruby/object:Gem::Dependency
26
+ name: eventmachine
27
+ requirement: &17465480 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - =
31
+ - !ruby/object:Gem::Version
32
+ version: 1.0.0.rc.4
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: *17465480
25
36
  - !ruby/object:Gem::Dependency
26
37
  name: childprocess
27
- requirement: &26104180 !ruby/object:Gem::Requirement
38
+ requirement: &17441940 !ruby/object:Gem::Requirement
28
39
  none: false
29
40
  requirements:
30
41
  - - ! '>='
@@ -32,10 +43,21 @@ dependencies:
32
43
  version: '0'
33
44
  type: :runtime
34
45
  prerelease: false
35
- version_requirements: *26104180
46
+ version_requirements: *17441940
36
47
  - !ruby/object:Gem::Dependency
37
48
  name: waitforit
38
- requirement: &26103560 !ruby/object:Gem::Requirement
49
+ requirement: &17440560 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ type: :runtime
56
+ prerelease: false
57
+ version_requirements: *17440560
58
+ - !ruby/object:Gem::Dependency
59
+ name: thor
60
+ requirement: &17439580 !ruby/object:Gem::Requirement
39
61
  none: false
40
62
  requirements:
41
63
  - - ! '>='
@@ -43,10 +65,10 @@ dependencies:
43
65
  version: '0'
44
66
  type: :runtime
45
67
  prerelease: false
46
- version_requirements: *26103560
68
+ version_requirements: *17439580
47
69
  - !ruby/object:Gem::Dependency
48
70
  name: thin
49
- requirement: &26102980 !ruby/object:Gem::Requirement
71
+ requirement: &17437920 !ruby/object:Gem::Requirement
50
72
  none: false
51
73
  requirements:
52
74
  - - ! '>='
@@ -54,10 +76,10 @@ dependencies:
54
76
  version: '0'
55
77
  type: :development
56
78
  prerelease: false
57
- version_requirements: *26102980
79
+ version_requirements: *17437920
58
80
  - !ruby/object:Gem::Dependency
59
81
  name: rake
60
- requirement: &25937820 !ruby/object:Gem::Requirement
82
+ requirement: &17436460 !ruby/object:Gem::Requirement
61
83
  none: false
62
84
  requirements:
63
85
  - - ! '>='
@@ -65,10 +87,10 @@ dependencies:
65
87
  version: '0'
66
88
  type: :development
67
89
  prerelease: false
68
- version_requirements: *25937820
90
+ version_requirements: *17436460
69
91
  - !ruby/object:Gem::Dependency
70
92
  name: cucumber
71
- requirement: &25937120 !ruby/object:Gem::Requirement
93
+ requirement: &17434960 !ruby/object:Gem::Requirement
72
94
  none: false
73
95
  requirements:
74
96
  - - ! '>='
@@ -76,10 +98,10 @@ dependencies:
76
98
  version: '0'
77
99
  type: :development
78
100
  prerelease: false
79
- version_requirements: *25937120
101
+ version_requirements: *17434960
80
102
  - !ruby/object:Gem::Dependency
81
103
  name: rspec
82
- requirement: &25936520 !ruby/object:Gem::Requirement
104
+ requirement: &17428620 !ruby/object:Gem::Requirement
83
105
  none: false
84
106
  requirements:
85
107
  - - ! '>='
@@ -87,10 +109,10 @@ dependencies:
87
109
  version: '0'
88
110
  type: :development
89
111
  prerelease: false
90
- version_requirements: *25936520
112
+ version_requirements: *17428620
91
113
  - !ruby/object:Gem::Dependency
92
114
  name: jeweler
93
- requirement: &25935760 !ruby/object:Gem::Requirement
115
+ requirement: &17427700 !ruby/object:Gem::Requirement
94
116
  none: false
95
117
  requirements:
96
118
  - - ! '>='
@@ -98,10 +120,10 @@ dependencies:
98
120
  version: '0'
99
121
  type: :development
100
122
  prerelease: false
101
- version_requirements: *25935760
123
+ version_requirements: *17427700
102
124
  - !ruby/object:Gem::Dependency
103
125
  name: sinatra-contrib
104
- requirement: &25934980 !ruby/object:Gem::Requirement
126
+ requirement: &17426800 !ruby/object:Gem::Requirement
105
127
  none: false
106
128
  requirements:
107
129
  - - ! '>='
@@ -109,10 +131,10 @@ dependencies:
109
131
  version: '0'
110
132
  type: :development
111
133
  prerelease: false
112
- version_requirements: *25934980
134
+ version_requirements: *17426800
113
135
  - !ruby/object:Gem::Dependency
114
136
  name: mechanize
115
- requirement: &25934120 !ruby/object:Gem::Requirement
137
+ requirement: &17425900 !ruby/object:Gem::Requirement
116
138
  none: false
117
139
  requirements:
118
140
  - - ! '>='
@@ -120,10 +142,10 @@ dependencies:
120
142
  version: '0'
121
143
  type: :development
122
144
  prerelease: false
123
- version_requirements: *25934120
145
+ version_requirements: *17425900
124
146
  - !ruby/object:Gem::Dependency
125
147
  name: nokogiri
126
- requirement: &25933360 !ruby/object:Gem::Requirement
148
+ requirement: &17425340 !ruby/object:Gem::Requirement
127
149
  none: false
128
150
  requirements:
129
151
  - - ! '>='
@@ -131,10 +153,10 @@ dependencies:
131
153
  version: '0'
132
154
  type: :development
133
155
  prerelease: false
134
- version_requirements: *25933360
156
+ version_requirements: *17425340
135
157
  - !ruby/object:Gem::Dependency
136
158
  name: jruby-openssl
137
- requirement: &25932440 !ruby/object:Gem::Requirement
159
+ requirement: &17424280 !ruby/object:Gem::Requirement
138
160
  none: false
139
161
  requirements:
140
162
  - - ! '>='
@@ -142,7 +164,7 @@ dependencies:
142
164
  version: '0'
143
165
  type: :development
144
166
  prerelease: false
145
- version_requirements: *25932440
167
+ version_requirements: *17424280
146
168
  description: Mirage aids testing of your applications by hosting mock responses so
147
169
  that your applications do not have to talk to real endpoints. Its accessible via
148
170
  HTTP and has a RESTful interface.
@@ -161,13 +183,16 @@ files:
161
183
  - VERSION
162
184
  - bin/mirage
163
185
  - features/client/clear.feature
164
- - features/client/command_line_interface.feature
165
- - features/client/mirage_client.feature
186
+ - features/client/preview_responses.feature
166
187
  - features/client/put.feature
167
- - features/client/request.feature
168
- - features/client/response.feature
188
+ - features/client/requests.feature
189
+ - features/client/running.feature
169
190
  - features/client/save_and_revert.feature
170
- - features/server/command_line_iterface.feature
191
+ - features/client/start.feature
192
+ - features/client/stop.feature
193
+ - features/server/commandline_interface/help.feature
194
+ - features/server/commandline_interface/start.feature
195
+ - features/server/commandline_interface/stop.feature
171
196
  - features/server/logging.feature
172
197
  - features/server/prime.feature
173
198
  - features/server/requests/delete.feature
@@ -182,10 +207,16 @@ files:
182
207
  - features/server/templates/put/put_with_substitutions.feature
183
208
  - features/server/web_user_interface.feature
184
209
  - features/step_definitions/my_steps.rb
210
+ - features/support/command_line.rb
185
211
  - features/support/env.rb
212
+ - features/support/hooks.rb
213
+ - features/support/mirage.rb
186
214
  - full_build.sh
187
- - lib/mirage/cli.rb
188
215
  - lib/mirage/client.rb
216
+ - lib/mirage/client/client.rb
217
+ - lib/mirage/client/error.rb
218
+ - lib/mirage/client/response.rb
219
+ - lib/mirage/client/runner.rb
189
220
  - lib/mirage/client/web.rb
190
221
  - mirage.gemspec
191
222
  - mirage_server.rb
@@ -194,6 +225,8 @@ files:
194
225
  - server/extensions/hash.rb
195
226
  - server/extensions/object.rb
196
227
  - server/mock_response.rb
228
+ - spec/running_via_api_spec.rb
229
+ - spec/running_via_api_windows_spec.rb
197
230
  - test.rb
198
231
  - views/index.erb
199
232
  homepage: https://github.com/lashd/mirage
@@ -213,7 +246,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
213
246
  version: '0'
214
247
  segments:
215
248
  - 0
216
- hash: -2550697504653464882
249
+ hash: 3403539479088578528
217
250
  required_rubygems_version: !ruby/object:Gem::Requirement
218
251
  none: false
219
252
  requirements:
@@ -1,36 +0,0 @@
1
- @command_line
2
- Feature: Interacting with Mirage is done via HTTP using REST style URLs and therefore you can interact with it in any language.
3
- If however you are using Ruby, and you want to, you can use the Mirage Client that comes in the Mirage distribution.
4
-
5
- By default the client is configured to connect to an instance of the Mirage server on localhost:7001 which is where
6
- the Mirage server starts on by default.
7
-
8
- Background:
9
- Given the following gems are required to run the Mirage client test code:
10
- """
11
- require 'rubygems'
12
- require 'rspec'
13
- require 'mirage/client'
14
- """
15
-
16
-
17
- Scenario: checking if mirage is running
18
- Then I run
19
- """
20
- Mirage::Client.new.running?.should == false
21
- """
22
- Given Mirage is running
23
- Then I run
24
- """
25
- Mirage::Client.new.running?.should == true
26
- """
27
-
28
-
29
- Scenario: connecting to mirage running on a different url
30
- Given I run 'mirage start -p 9001'
31
- Then I run
32
- """
33
- Mirage::Client.new("http://localhost:9001/mirage").running?.should == true
34
- """
35
-
36
-
@@ -1,45 +0,0 @@
1
- @command_line
2
- Feature: Mirage is started from the command line.
3
- Mirage logs to mirage.log at the path where Mirage is started from
4
-
5
-
6
- Background: Mirage usage
7
- Given usage information:
8
- | Usage: mirage start\|stop [options] |
9
- | -p, --port PORT |
10
- | -d, --defaults DIR |
11
-
12
-
13
- Scenario: Starting with help option
14
- Given I run 'mirage --help'
15
- Then the usage information should be displayed
16
-
17
-
18
- Scenario: Starting with an invalid option
19
- Given I run 'mirage start --invalid-option'
20
- Then the usage information should be displayed
21
-
22
-
23
- Scenario: Starting mirage
24
- Given Mirage is not running
25
- When I run 'mirage start'
26
- Then mirage should be running on 'http://localhost:7001/mirage'
27
- And 'mirage.log' should exist
28
-
29
-
30
- Scenario: Stopping Mirage
31
- Given Mirage is running
32
- When I run 'mirage stop'
33
- Then Connection should be refused to 'http://localhost:7001/mirage'
34
-
35
-
36
- Scenario: Starting Mirage on a custom port
37
- Given Mirage is not running
38
- When I run 'mirage start -p 9001'
39
- Then mirage should be running on 'http://localhost:9001/mirage'
40
-
41
- Scenario: Starting Mirage when it is already running
42
- Given Mirage is running
43
- When I run 'mirage start -p 7001'
44
- Then I should see 'Mirage is already running' on the command line
45
- Then Connection should be refused to 'http://localhost:9001/mirage'
data/lib/mirage/cli.rb DELETED
@@ -1,69 +0,0 @@
1
- module Mirage
2
- class CLI
3
- RUBY_CMD = RUBY_PLATFORM == 'java' ? 'jruby' : 'ruby'
4
- class << self
5
-
6
-
7
- def parse_options args
8
- options = {:port => 7001, :defaults => 'responses', :root_directory => '.'}
9
-
10
- opt_parser = OptionParser.new do |opts|
11
- opts.banner = "Usage: mirage start|stop [options]"
12
- opts.on("-p", "--port PORT", "the port to start Mirage on") do |port|
13
- options[:port] = port.to_i
14
- end
15
-
16
- opts.on("-d", "--defaults DIR", "location to load default responses from") do |directory|
17
- options[:defaults] = directory
18
- end
19
-
20
- opts.on('--debug', 'run in debug mode') do
21
- options[:debug] = true
22
- end
23
- end
24
- opt_parser.parse args
25
-
26
- options
27
- rescue
28
- puts opt_parser
29
- exit 1
30
- end
31
-
32
- def run args
33
- unless mirage_process_ids.empty?
34
- puts "Mirage is already running"
35
- return
36
- end
37
-
38
- mirage_server_file = "#{File.dirname(__FILE__)}/../../mirage_server.rb"
39
- if windows?
40
- command = ["cmd", "/C", "start", "mirage server", RUBY_CMD, mirage_server_file]
41
- else
42
- command = [RUBY_CMD, mirage_server_file]
43
- end
44
-
45
- ChildProcess.build(*(command.concat(args))).start
46
- end
47
-
48
- def stop
49
- mirage_process_ids.each { |process_id| windows? ? `taskkill /F /T /PID #{process_id}` : `kill -9 #{process_id}` }
50
- wait_until { mirage_process_ids.size == 0 }
51
- end
52
-
53
- private
54
- def mirage_process_ids
55
- if windows?
56
- [`tasklist /V | findstr "mirage\\ server"`.split(' ')[1]].compact
57
- else
58
- ["Mirage Server", 'mirage_server'].collect do |process_name|
59
- `ps aux | grep "#{process_name}" | grep -v grep`.split(' ')[1]
60
- end.find_all { |process_id| process_id != $$.to_s }.compact
61
- end
62
- end
63
-
64
- def windows?
65
- ENV['OS'] == 'Windows_NT'
66
- end
67
- end
68
- end
69
- end