mirage 2.2.3 → 2.3.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|