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
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -16,14 +16,17 @@ GEM
|
|
16
16
|
diff-lcs (1.1.3)
|
17
17
|
domain_name (0.5.1)
|
18
18
|
unf (~> 0.0.3)
|
19
|
-
eventmachine (0.
|
20
|
-
eventmachine (0.
|
19
|
+
eventmachine (1.0.0.rc.4)
|
20
|
+
eventmachine (1.0.0.rc.4-java)
|
21
|
+
eventmachine (1.0.0.rc.4-x86-mingw32)
|
21
22
|
ffi (1.0.11)
|
22
23
|
ffi (1.0.11-java)
|
23
24
|
gherkin (2.7.2)
|
24
25
|
json (>= 1.4.6)
|
25
26
|
gherkin (2.7.2-java)
|
26
27
|
json (>= 1.4.6)
|
28
|
+
gherkin (2.7.2-x86-mingw32)
|
29
|
+
json (>= 1.4.6)
|
27
30
|
git (1.2.5)
|
28
31
|
jeweler (1.6.4)
|
29
32
|
bundler (~> 1.0)
|
@@ -44,6 +47,7 @@ GEM
|
|
44
47
|
net-http-persistent (2.3.3)
|
45
48
|
nokogiri (1.5.0)
|
46
49
|
nokogiri (1.5.0-java)
|
50
|
+
nokogiri (1.5.0-x86-mingw32)
|
47
51
|
ntlm-http (0.1.1)
|
48
52
|
rack (1.4.0)
|
49
53
|
rack-protection (1.2.0)
|
@@ -75,10 +79,12 @@ GEM
|
|
75
79
|
daemons (>= 1.0.9)
|
76
80
|
eventmachine (>= 0.12.6)
|
77
81
|
rack (>= 1.0.0)
|
82
|
+
thor (0.15.4)
|
78
83
|
tilt (1.3.3)
|
79
84
|
unf (0.0.4)
|
80
85
|
unf_ext
|
81
86
|
unf_ext (0.0.4)
|
87
|
+
unf_ext (0.0.4-x86-mingw32)
|
82
88
|
waitforit (0.0.1)
|
83
89
|
webrobots (0.0.12)
|
84
90
|
nokogiri (>= 1.4.4)
|
@@ -86,10 +92,12 @@ GEM
|
|
86
92
|
PLATFORMS
|
87
93
|
java
|
88
94
|
ruby
|
95
|
+
x86-mingw32
|
89
96
|
|
90
97
|
DEPENDENCIES
|
91
98
|
childprocess
|
92
99
|
cucumber
|
100
|
+
eventmachine (= 1.0.0.rc.4)
|
93
101
|
jeweler
|
94
102
|
jruby-openssl
|
95
103
|
mechanize
|
@@ -99,4 +107,5 @@ DEPENDENCIES
|
|
99
107
|
sinatra
|
100
108
|
sinatra-contrib
|
101
109
|
thin
|
110
|
+
thor
|
102
111
|
waitforit
|
data/HISTORY
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.
|
1
|
+
2.3.0
|
data/bin/mirage
CHANGED
@@ -1,16 +1,14 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
require 'rubygems'
|
3
3
|
|
4
|
+
|
4
5
|
$LOAD_PATH.unshift("#{File.dirname(__FILE__)}/../lib")
|
5
6
|
require 'mirage/client'
|
6
7
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
elsif ARGV.include?('stop')
|
12
|
-
Mirage.stop
|
13
|
-
else
|
14
|
-
Mirage::CLI.parse_options ['--help']
|
8
|
+
begin
|
9
|
+
Mirage::Runner.start
|
10
|
+
rescue Mirage::ClientError => e
|
11
|
+
puts e.message
|
15
12
|
exit 1
|
16
13
|
end
|
14
|
+
|
@@ -1,4 +1,4 @@
|
|
1
|
-
Feature: The client can be used for clearing
|
1
|
+
Feature: The client can be used for clearing response templates from Mirage
|
2
2
|
|
3
3
|
Background:
|
4
4
|
Given the following gems are required to run the Mirage client test code:
|
@@ -7,22 +7,22 @@ Feature: The client can be used for clearing responses from Mirage
|
|
7
7
|
require 'rspec'
|
8
8
|
require 'mirage/client'
|
9
9
|
"""
|
10
|
-
|
10
|
+
|
11
11
|
And I send PUT to 'http://localhost:7001/mirage/templates/greeting' with request entity
|
12
12
|
"""
|
13
13
|
Hello
|
14
14
|
"""
|
15
15
|
And I send GET to 'http://localhost:7001/mirage/responses/greeting' with parameters:
|
16
16
|
| message | hello there |
|
17
|
-
|
17
|
+
|
18
18
|
And I send PUT to 'http://localhost:7001/mirage/templates/leaving' with request entity
|
19
19
|
"""
|
20
20
|
Goodbye
|
21
21
|
"""
|
22
22
|
And I send GET to 'http://localhost:7001/mirage/responses/greeting' with parameters:
|
23
|
-
|
23
|
+
| message | I'm going |
|
24
|
+
|
24
25
|
|
25
|
-
|
26
26
|
Scenario: Clearing everything
|
27
27
|
When I run
|
28
28
|
"""
|
@@ -51,12 +51,12 @@ Feature: The client can be used for clearing responses from Mirage
|
|
51
51
|
|
52
52
|
When I send GET to 'http://localhost:7001/mirage/requests/2'
|
53
53
|
Then a 404 should be returned
|
54
|
-
|
54
|
+
|
55
55
|
When I send GET to 'http://localhost:7001/mirage/responses/greeting'
|
56
56
|
Then a 200 should be returned
|
57
57
|
When I send GET to 'http://localhost:7001/mirage/responses/leaving'
|
58
58
|
Then a 200 should be returned
|
59
|
-
|
59
|
+
|
60
60
|
|
61
61
|
Scenario: Clearning a response
|
62
62
|
Given I run
|
@@ -71,7 +71,7 @@ Feature: The client can be used for clearing responses from Mirage
|
|
71
71
|
Then a 200 should be returned
|
72
72
|
When I send GET to 'http://localhost:7001/mirage/requests/2'
|
73
73
|
Then a 200 should be returned
|
74
|
-
|
74
|
+
|
75
75
|
|
76
76
|
Scenario: Clearning a request
|
77
77
|
Given I run
|
File without changes
|
data/features/client/put.feature
CHANGED
@@ -66,7 +66,6 @@ Feature: the Mirage client provides methods for setting responses and loading de
|
|
66
66
|
Then 'default greeting' should be returned
|
67
67
|
|
68
68
|
|
69
|
-
|
70
69
|
Scenario: Setting the content type
|
71
70
|
Given I run
|
72
71
|
"""
|
@@ -132,3 +131,12 @@ Feature: the Mirage client provides methods for setting responses and loading de
|
|
132
131
|
"""
|
133
132
|
When I send GET to 'http://localhost:7001/mirage/responses/greeting'
|
134
133
|
Then a 203 should be returned
|
134
|
+
|
135
|
+
|
136
|
+
Scenario: Setting a response with a delay
|
137
|
+
Given I run
|
138
|
+
"""
|
139
|
+
Mirage::Client.new.put('greeting', 'hello'){|response| response.delay = 2}
|
140
|
+
"""
|
141
|
+
When I send GET to 'http://localhost:7001/mirage/responses/greeting'
|
142
|
+
Then it should take at least '2' seconds
|
File without changes
|
@@ -0,0 +1,49 @@
|
|
1
|
+
@command_line
|
2
|
+
Feature: Use the mirage client api to check if Mirage is running either on the local machine or on a remote host.
|
3
|
+
|
4
|
+
|
5
|
+
Background:
|
6
|
+
Given the following gems are required to run the Mirage client test code:
|
7
|
+
"""
|
8
|
+
require 'rubygems'
|
9
|
+
require 'rspec'
|
10
|
+
require 'mirage/client'
|
11
|
+
"""
|
12
|
+
|
13
|
+
|
14
|
+
Scenario: Check if mirage is running on the local machine on the default port
|
15
|
+
Given Mirage is not running
|
16
|
+
Then I run
|
17
|
+
"""
|
18
|
+
Mirage.running?.should == false
|
19
|
+
"""
|
20
|
+
Given Mirage is running
|
21
|
+
Then I run
|
22
|
+
"""
|
23
|
+
Mirage.running?.should == true
|
24
|
+
"""
|
25
|
+
|
26
|
+
|
27
|
+
Scenario: Check if mirage is running on the local machine on a non standard port
|
28
|
+
Given I run 'mirage start -p 9001'
|
29
|
+
Then I run
|
30
|
+
"""
|
31
|
+
Mirage.running?(:port => 9001).should == true
|
32
|
+
"""
|
33
|
+
|
34
|
+
|
35
|
+
Scenario: Checking if mirage is running on remote machine
|
36
|
+
Given I run 'mirage start -p 9001'
|
37
|
+
Then I run
|
38
|
+
"""
|
39
|
+
Mirage.running? "http://localhost:9001/mirage"
|
40
|
+
"""
|
41
|
+
|
42
|
+
|
43
|
+
Scenario: Check if mirage is running using the client directly
|
44
|
+
Given I run 'mirage start -p 9001'
|
45
|
+
Then I run
|
46
|
+
"""
|
47
|
+
client = Mirage::Client.new "http://localhost:9001/mirage"
|
48
|
+
client.running?.should == true
|
49
|
+
"""
|
@@ -1,4 +1,3 @@
|
|
1
|
-
@command_line
|
2
1
|
Feature: The Mirage client provides a programmatic interface equivalent to the command line interface. This gives an
|
3
2
|
easy method for bringing a local instance of Mirage in situ inside a test suite.
|
4
3
|
|
@@ -14,7 +13,6 @@ Feature: The Mirage client provides a programmatic interface equivalent to the c
|
|
14
13
|
|
15
14
|
|
16
15
|
Scenario: Starting mirage with defaults
|
17
|
-
Given Mirage is not running
|
18
16
|
When I run
|
19
17
|
"""
|
20
18
|
Mirage.start
|
@@ -22,16 +20,6 @@ Feature: The Mirage client provides a programmatic interface equivalent to the c
|
|
22
20
|
Then mirage should be running on 'http://localhost:7001/mirage'
|
23
21
|
|
24
22
|
|
25
|
-
Scenario: Stopping Mirage
|
26
|
-
Given Mirage is not running
|
27
|
-
When I run
|
28
|
-
"""
|
29
|
-
Mirage.start
|
30
|
-
Mirage.stop
|
31
|
-
"""
|
32
|
-
Then Connection should be refused to 'http://localhost:7001/mirage'
|
33
|
-
|
34
|
-
|
35
23
|
Scenario: Starting Mirage on a custom port
|
36
24
|
Given Mirage is not running
|
37
25
|
And the file './custom_responses_location/default_greetings.rb' contains:
|
@@ -0,0 +1,85 @@
|
|
1
|
+
Feature: The Mirage client provides a programmatic interface equivalent to the command line interface. This gives an
|
2
|
+
easy method for bringing a local instance of Mirage in situ inside a test suite.
|
3
|
+
|
4
|
+
The client can only be used to stop Mirage if it is was used to start the running instance.
|
5
|
+
|
6
|
+
Background:
|
7
|
+
Given the following gems are required to run the Mirage client test code:
|
8
|
+
"""
|
9
|
+
require 'rubygems'
|
10
|
+
require 'rspec'
|
11
|
+
require 'mirage/client'
|
12
|
+
"""
|
13
|
+
|
14
|
+
|
15
|
+
Scenario: Stopping Mirage
|
16
|
+
Given Mirage is not running
|
17
|
+
When I run
|
18
|
+
"""
|
19
|
+
Mirage.start
|
20
|
+
Mirage.stop :port => 7001
|
21
|
+
"""
|
22
|
+
Then Connection should be refused to 'http://localhost:7001/mirage'
|
23
|
+
|
24
|
+
Scenario: Stopping Mirage on custom port
|
25
|
+
Given Mirage is not running
|
26
|
+
And I run 'mirage start -p 7001'
|
27
|
+
And I run 'mirage start -p 9001'
|
28
|
+
When I run
|
29
|
+
"""
|
30
|
+
Mirage.stop :port => 9001
|
31
|
+
"""
|
32
|
+
Then mirage should be running on 'http://localhost:7001/mirage'
|
33
|
+
Then mirage should not be running on 'http://localhost:9001/mirage'
|
34
|
+
|
35
|
+
Scenario: Stopping multiple instances of Mirage
|
36
|
+
Given Mirage is not running
|
37
|
+
And I run 'mirage start -p 7001'
|
38
|
+
And I run 'mirage start -p 9001'
|
39
|
+
And I run 'mirage start -p 10001'
|
40
|
+
When I run
|
41
|
+
"""
|
42
|
+
Mirage.stop :port => [9001,10001]
|
43
|
+
"""
|
44
|
+
Then mirage should be running on 'http://localhost:7001/mirage'
|
45
|
+
Then mirage should not be running on 'http://localhost:9001/mirage'
|
46
|
+
Then mirage should not be running on 'http://localhost:10001/mirage'
|
47
|
+
|
48
|
+
Scenario: Stopping all instances of Mirage
|
49
|
+
Given Mirage is not running
|
50
|
+
And I run 'mirage start -p 7001'
|
51
|
+
And I run 'mirage start -p 9001'
|
52
|
+
And I run 'mirage start -p 10001'
|
53
|
+
When I run
|
54
|
+
"""
|
55
|
+
Mirage.stop :all
|
56
|
+
"""
|
57
|
+
Then mirage should not be running on 'http://localhost:7001/mirage'
|
58
|
+
Then mirage should not be running on 'http://localhost:9001/mirage'
|
59
|
+
Then mirage should not be running on 'http://localhost:10001/mirage'
|
60
|
+
|
61
|
+
|
62
|
+
|
63
|
+
Scenario: Using client to stop mirage
|
64
|
+
Given Mirage is not running
|
65
|
+
And I run 'mirage start -p 7001'
|
66
|
+
And I run 'mirage start -p 9001'
|
67
|
+
When I run
|
68
|
+
"""
|
69
|
+
begin
|
70
|
+
Mirage.stop
|
71
|
+
raise "should have errored"
|
72
|
+
rescue Mirage::ClientError => ce
|
73
|
+
end
|
74
|
+
"""
|
75
|
+
Then mirage should be running on 'http://localhost:7001/mirage'
|
76
|
+
And mirage should be running on 'http://localhost:9001/mirage'
|
77
|
+
|
78
|
+
Scenario: Stopping Mirage without specifying the port when more than one instance of Mirage is running
|
79
|
+
Given Mirage is not running
|
80
|
+
When I run
|
81
|
+
"""
|
82
|
+
client = Mirage.start
|
83
|
+
client.stop
|
84
|
+
"""
|
85
|
+
Then Connection should be refused to 'http://localhost:7001/mirage'
|
@@ -0,0 +1,16 @@
|
|
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
|
+
| Tasks: |
|
9
|
+
| mirage help [TASK] # Describe available tasks or one specific task |
|
10
|
+
# | mirage start # Starts mirage |
|
11
|
+
# | mirage stop -p, --port=[port_1 port_2\|all] # stops mirage |
|
12
|
+
|
13
|
+
|
14
|
+
Scenario: Starting with help option
|
15
|
+
Given I run 'mirage help'
|
16
|
+
Then the usage information should be displayed
|
@@ -0,0 +1,30 @@
|
|
1
|
+
@command_line
|
2
|
+
Feature: Mirage is started from the command line.
|
3
|
+
more than instance of Mirage can be started on different ports at the same time.
|
4
|
+
|
5
|
+
|
6
|
+
Scenario: Starting mirage
|
7
|
+
Given Mirage is not running
|
8
|
+
When I run 'mirage start'
|
9
|
+
Then mirage should be running on 'http://localhost:7001/mirage'
|
10
|
+
And 'mirage.log' should exist
|
11
|
+
|
12
|
+
|
13
|
+
Scenario: Starting Mirage on a custom port
|
14
|
+
Given Mirage is not running
|
15
|
+
When I run 'mirage start -p 9001'
|
16
|
+
Then mirage should be running on 'http://localhost:9001/mirage'
|
17
|
+
|
18
|
+
|
19
|
+
Scenario: Starting multiple instances of Mirage
|
20
|
+
Given Mirage is not running
|
21
|
+
When I run 'mirage start -p 7001'
|
22
|
+
And I run 'mirage start -p 9001'
|
23
|
+
Then mirage should be running on 'http://localhost:7001/mirage'
|
24
|
+
And mirage should be running on 'http://localhost:9001/mirage'
|
25
|
+
|
26
|
+
|
27
|
+
Scenario: Starting Mirage when it is already running
|
28
|
+
Given Mirage is running
|
29
|
+
When I run 'mirage start -p 7001'
|
30
|
+
Then I should see 'Mirage is already running' on the command line
|
@@ -0,0 +1,42 @@
|
|
1
|
+
@command_line
|
2
|
+
Feature: stop
|
3
|
+
|
4
|
+
Scenario: Calling stop without specifying the port when only one instance is running
|
5
|
+
Given I run 'mirage start -p 7001'
|
6
|
+
When I run 'mirage stop'
|
7
|
+
Then mirage should not be running on 'http://localhost:7001/mirage'
|
8
|
+
|
9
|
+
|
10
|
+
Scenario: Calling stop without specifying the port when more than one instance is running
|
11
|
+
Given I run 'mirage start -p 7001'
|
12
|
+
Given I run 'mirage start -p 9001'
|
13
|
+
When I run 'mirage stop'
|
14
|
+
Then I should see 'Mirage is running on ports 7001, 9001. Please run mirage stop -p [PORT(s)] instead' on the command line
|
15
|
+
And mirage should be running on 'http://localhost:7001/mirage'
|
16
|
+
And mirage should be running on 'http://localhost:9001/mirage'
|
17
|
+
|
18
|
+
|
19
|
+
Scenario: stopping on a single instance
|
20
|
+
Given I run 'mirage start -p 7001'
|
21
|
+
And I run 'mirage start -p 9001'
|
22
|
+
When I run 'mirage stop -p 7001'
|
23
|
+
Then mirage should be running on 'http://localhost:9001/mirage'
|
24
|
+
Then mirage should not be running on 'http://localhost:7001/mirage'
|
25
|
+
|
26
|
+
Scenario: stop more than one instance
|
27
|
+
Given I run 'mirage start -p 7001'
|
28
|
+
And I run 'mirage start -p 9001'
|
29
|
+
And I run 'mirage start -p 10001'
|
30
|
+
When I run 'mirage stop -p 7001 9001'
|
31
|
+
Then mirage should be running on 'http://localhost:10001/mirage'
|
32
|
+
Then mirage should not be running on 'http://localhost:7001/mirage'
|
33
|
+
Then mirage should not be running on 'http://localhost:9001/mirage'
|
34
|
+
|
35
|
+
Scenario: stop all instances
|
36
|
+
Given I run 'mirage start -p 7001'
|
37
|
+
And I run 'mirage start -p 9001'
|
38
|
+
When I run 'mirage stop -p all'
|
39
|
+
Then mirage should not be running on 'http://localhost:10001/mirage'
|
40
|
+
Then mirage should not be running on 'http://localhost:7001/mirage'
|
41
|
+
Then mirage should not be running on 'http://localhost:9001/mirage'
|
42
|
+
|
@@ -4,7 +4,7 @@ Feature: Mirage can be primed with a set of responses.
|
|
4
4
|
of your choosing
|
5
5
|
|
6
6
|
Responses can be added to the responses directory and used to prime Mirage after Mirage has been started.
|
7
|
-
|
7
|
+
|
8
8
|
Priming mirage causes any modifications to its state to be lost
|
9
9
|
|
10
10
|
|
@@ -36,13 +36,14 @@ Feature: Mirage can be primed with a set of responses.
|
|
36
36
|
|
37
37
|
|
38
38
|
Scenario: Mirage is started pointing with a full path for the responses
|
39
|
-
Given
|
39
|
+
Given Mirage is not running
|
40
|
+
And the file '/tmp/responses/default_greetings.rb' contains:
|
40
41
|
"""
|
41
42
|
prime do |mirage|
|
42
43
|
mirage.put('greeting', 'hello')
|
43
44
|
end
|
44
45
|
"""
|
45
|
-
And I run 'mirage start
|
46
|
+
And I run 'mirage start --defaults /tmp/responses'
|
46
47
|
When I send PUT to 'http://localhost:7001/mirage/defaults'
|
47
48
|
And I send GET to 'http://localhost:7001/mirage/responses/greeting'
|
48
49
|
Then 'hello' should be returned
|
@@ -58,9 +59,9 @@ Feature: Mirage can be primed with a set of responses.
|
|
58
59
|
And I run 'mirage start'
|
59
60
|
And I send DELETE to 'http://localhost:7001/mirage/templates'
|
60
61
|
And I send PUT to 'http://localhost:7001/mirage/templates/a_new_response' with request entity
|
61
|
-
|
62
|
-
|
63
|
-
|
62
|
+
"""
|
63
|
+
new response
|
64
|
+
"""
|
64
65
|
|
65
66
|
When I send PUT to 'http://localhost:7001/mirage/defaults'
|
66
67
|
When I send GET to 'http://localhost:7001/mirage/responses/greeting'
|
@@ -68,7 +69,7 @@ Feature: Mirage can be primed with a set of responses.
|
|
68
69
|
When I send GET to 'http://localhost:7001/mirage/responses/a_new_response'
|
69
70
|
Then a 404 should be returned
|
70
71
|
|
71
|
-
|
72
|
+
@command_line
|
72
73
|
Scenario: Mirage is started with a bad file
|
73
74
|
Given the file 'responses/default_greetings.rb' contains:
|
74
75
|
"""
|
@@ -1,11 +1,3 @@
|
|
1
|
-
Before('@command_line') do
|
2
|
-
stop_mirage
|
3
|
-
end
|
4
|
-
|
5
|
-
After('@command_line') do
|
6
|
-
stop_mirage
|
7
|
-
end
|
8
|
-
|
9
1
|
Then /^'([^']*)' should be returned$/ do |expected_response|
|
10
2
|
response_text = @response.body
|
11
3
|
if response_text != expected_response
|
@@ -23,20 +15,31 @@ Then /^it should take at least '(.*)' seconds$/ do |time|
|
|
23
15
|
end
|
24
16
|
|
25
17
|
|
26
|
-
Then /^mirage should be running on '(.*)'$/ do |url|
|
27
|
-
|
18
|
+
Then /^mirage (should|should not) be running on '(.*)'$/ do |should, url|
|
19
|
+
running = false
|
20
|
+
begin
|
21
|
+
running = http_get(url).code.to_i.should == 200
|
22
|
+
rescue
|
23
|
+
end
|
24
|
+
|
25
|
+
should == "should" ? running.should == true : running.should == false
|
28
26
|
end
|
29
27
|
|
30
28
|
Given /^I run '(.*)'$/ do |command|
|
31
|
-
|
29
|
+
if ENV['mode'] == 'regression' && ChildProcess.windows?
|
30
|
+
command.gsub!(/^mirage/, MIRAGE_CMD)
|
31
|
+
else
|
32
|
+
path = "#{RUBY_CMD} ../bin/"
|
33
|
+
end
|
34
|
+
|
32
35
|
@commandline_output = normalise(run("#{path}#{command}"))
|
33
36
|
end
|
34
37
|
|
35
38
|
Given /^Mirage (is|is not) running$/ do |running|
|
36
39
|
if running == 'is'
|
37
|
-
|
40
|
+
start_mirage_in_scratch_dir unless Mirage.running?
|
38
41
|
else
|
39
|
-
|
42
|
+
Mirage.stop :all
|
40
43
|
end
|
41
44
|
end
|
42
45
|
|
@@ -61,8 +64,9 @@ Given /^the file '(.*)' contains:$/ do |file_path, content|
|
|
61
64
|
end
|
62
65
|
|
63
66
|
Then /^the usage information should be displayed$/ do
|
64
|
-
@usage.each { |line| @commandline_output.should
|
67
|
+
@usage.each { |line| @commandline_output.should include(line) }
|
65
68
|
end
|
69
|
+
|
66
70
|
Given /^usage information:$/ do |table|
|
67
71
|
@usage = table.raw.flatten.collect { |line| normalise(line) }
|
68
72
|
end
|
@@ -70,7 +74,7 @@ end
|
|
70
74
|
Then /^I run$/ do |text|
|
71
75
|
text.gsub!("\"", "\\\\\"")
|
72
76
|
Dir.chdir SCRATCH do
|
73
|
-
raise "run failed" unless system "#{RUBY_CMD} -e \"#{@code_snippet}\n#{text}\""
|
77
|
+
raise "run failed" unless system "#{RUBY_CMD} -I #{SOURCE_PATH} -e \"#{@code_snippet}\n#{text}\""
|
74
78
|
end
|
75
79
|
end
|
76
80
|
|
@@ -126,7 +130,7 @@ When /^I send PUT to '(http:\/\/localhost:7001\/mirage\/([^']*))' with body '([^
|
|
126
130
|
end
|
127
131
|
|
128
132
|
Then /^I should see '(.*?)' on the command line$/ do |content|
|
129
|
-
@commandline_output.should
|
133
|
+
@commandline_output.should include(content)
|
130
134
|
end
|
131
135
|
|
132
136
|
Then /^'(.*)' should exist$/ do |path|
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'tempfile'
|
2
|
+
module CommandLine
|
3
|
+
def run command
|
4
|
+
output = Tempfile.new("child")
|
5
|
+
Dir.chdir SCRATCH do
|
6
|
+
process = ChildProcess.build(*("#{command}".split(' ')))
|
7
|
+
process.detach
|
8
|
+
process.io.stdout = output
|
9
|
+
process.io.stderr = output
|
10
|
+
process.start
|
11
|
+
wait_until(:timeout_after => 30.seconds) { process.exited? }
|
12
|
+
end
|
13
|
+
File.read(output.path)
|
14
|
+
end
|
15
|
+
|
16
|
+
def normalise text
|
17
|
+
text.gsub(/[\n]/, ' ').gsub(/\s+/, ' ')
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
World CommandLine
|
22
|
+
include CommandLine
|