mirage 2.2.3 → 2.3.0
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/Gemfile +2 -0
- data/Gemfile.lock +11 -2
- data/HISTORY +1 -0
- data/VERSION +1 -1
- data/bin/mirage +6 -8
- data/features/client/clear.feature +8 -8
- data/features/client/{response.feature → preview_responses.feature} +0 -0
- data/features/client/put.feature +9 -1
- data/features/client/{request.feature → requests.feature} +0 -0
- data/features/client/running.feature +49 -0
- data/features/client/{command_line_interface.feature → start.feature} +0 -12
- data/features/client/stop.feature +85 -0
- data/features/server/commandline_interface/help.feature +16 -0
- data/features/server/commandline_interface/start.feature +30 -0
- data/features/server/commandline_interface/stop.feature +42 -0
- data/features/server/prime.feature +8 -7
- data/features/step_definitions/my_steps.rb +20 -16
- data/features/support/command_line.rb +22 -0
- data/features/support/env.rb +11 -121
- data/features/support/hooks.rb +30 -0
- data/features/support/mirage.rb +8 -0
- data/lib/mirage/client/client.rb +124 -0
- data/lib/mirage/client/error.rb +22 -0
- data/lib/mirage/client/response.rb +29 -0
- data/lib/mirage/client/runner.rb +142 -0
- data/lib/mirage/client.rb +4 -206
- data/mirage.gemspec +25 -8
- data/mirage_server.rb +15 -10
- data/rakefile +7 -1
- data/spec/running_via_api_spec.rb +147 -0
- data/spec/running_via_api_windows_spec.rb +187 -0
- data/test.rb +21 -4
- metadata +66 -33
- data/features/client/mirage_client.feature +0 -36
- data/features/server/command_line_iterface.feature +0 -45
- 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 '
|
2
|
-
require '
|
1
|
+
require 'sinatra'
|
2
|
+
require 'async_sinatra'
|
3
3
|
|
4
|
-
|
4
|
+
#class App < Sinatra::Base
|
5
5
|
|
6
|
-
|
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.
|
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-
|
12
|
+
date: 2012-08-26 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: sinatra
|
16
|
-
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: *
|
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: &
|
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: *
|
46
|
+
version_requirements: *17441940
|
36
47
|
- !ruby/object:Gem::Dependency
|
37
48
|
name: waitforit
|
38
|
-
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: *
|
68
|
+
version_requirements: *17439580
|
47
69
|
- !ruby/object:Gem::Dependency
|
48
70
|
name: thin
|
49
|
-
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: *
|
79
|
+
version_requirements: *17437920
|
58
80
|
- !ruby/object:Gem::Dependency
|
59
81
|
name: rake
|
60
|
-
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: *
|
90
|
+
version_requirements: *17436460
|
69
91
|
- !ruby/object:Gem::Dependency
|
70
92
|
name: cucumber
|
71
|
-
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: *
|
101
|
+
version_requirements: *17434960
|
80
102
|
- !ruby/object:Gem::Dependency
|
81
103
|
name: rspec
|
82
|
-
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: *
|
112
|
+
version_requirements: *17428620
|
91
113
|
- !ruby/object:Gem::Dependency
|
92
114
|
name: jeweler
|
93
|
-
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: *
|
123
|
+
version_requirements: *17427700
|
102
124
|
- !ruby/object:Gem::Dependency
|
103
125
|
name: sinatra-contrib
|
104
|
-
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: *
|
134
|
+
version_requirements: *17426800
|
113
135
|
- !ruby/object:Gem::Dependency
|
114
136
|
name: mechanize
|
115
|
-
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: *
|
145
|
+
version_requirements: *17425900
|
124
146
|
- !ruby/object:Gem::Dependency
|
125
147
|
name: nokogiri
|
126
|
-
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: *
|
156
|
+
version_requirements: *17425340
|
135
157
|
- !ruby/object:Gem::Dependency
|
136
158
|
name: jruby-openssl
|
137
|
-
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: *
|
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/
|
165
|
-
- features/client/mirage_client.feature
|
186
|
+
- features/client/preview_responses.feature
|
166
187
|
- features/client/put.feature
|
167
|
-
- features/client/
|
168
|
-
- features/client/
|
188
|
+
- features/client/requests.feature
|
189
|
+
- features/client/running.feature
|
169
190
|
- features/client/save_and_revert.feature
|
170
|
-
- features/
|
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:
|
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
|