rest-assured 2.0.0 → 2.0.1
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.
- checksums.yaml +4 -4
- data/CHANGELOG +4 -0
- data/README.markdown +12 -19
- data/db/development.db +0 -0
- data/db/test.db +0 -0
- data/features/ruby_api/test_server.feature +4 -4
- data/features/step_definitions/command_line_options_steps.rb +1 -1
- data/features/step_definitions/doubles_steps.rb +1 -1
- data/features/support/env.rb +3 -3
- data/features/support/world_helpers.rb +2 -8
- data/lib/rest-assured/api/app_session.rb +6 -1
- data/lib/rest-assured/api/server.rb +2 -14
- data/lib/rest-assured/config.rb +10 -3
- data/lib/rest-assured/models/double.rb +0 -2
- data/lib/rest-assured/models/redirect.rb +1 -3
- data/lib/rest-assured/routes/double.rb +2 -2
- data/lib/rest-assured/version.rb +1 -1
- data/spec/api/app_session_spec.rb +11 -5
- data/spec/api/resource_double_spec.rb +14 -13
- data/spec/api/server_spec.rb +38 -43
- data/spec/config_spec.rb +3 -3
- data/spec/functional/double_routes_spec.rb +53 -53
- data/spec/functional/redirect_routes_spec.rb +27 -27
- data/spec/functional/response_spec.rb +18 -18
- data/spec/models/double_spec.rb +22 -27
- data/spec/models/redirect_spec.rb +12 -15
- data/spec/models/request_spec.rb +4 -4
- data/spec/port_explorer_spec.rb +3 -3
- data/spec/spec_helper.rb +30 -22
- metadata +24 -37
- data/.gitignore +0 -9
- data/.rspec +0 -1
- data/.travis.yml +0 -15
- data/Gemfile +0 -36
- data/Gemfile.lock +0 -176
- data/Guardfile +0 -10
- data/Procfile +0 -1
- data/Rakefile +0 -2
- data/bin/console +0 -11
- data/bin/heroku_runner +0 -27
- data/cucumber.yml +0 -3
- data/features/support/test-server.rb +0 -35
- data/rest-assured.gemspec +0 -31
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 320425382c9e1d8d34f2a6d6daa53bf7e6af42f6
|
4
|
+
data.tar.gz: 5e9c14601074ee5b5ee589617b9d2e0be387fe9a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 805ce441b6dc113fe988e691533ecce3609798163e60875eeeb1c1640ecc0bc60ead758129a7dcec17012a3b3caab7623bf01d6af8a1893a88ca664fa74c5eaf
|
7
|
+
data.tar.gz: 1640ad76091994a6ff2794f5df9394a88158aaad556551da207ae2085b04bbd9d11ab8d44ea820707ae6c977f957d526b5f59df456138c5e2a960d1ff127de81
|
data/CHANGELOG
CHANGED
data/README.markdown
CHANGED
@@ -2,29 +2,31 @@
|
|
2
2
|
|
3
3
|
[](https://travis-ci.org/artemave/REST-assured)
|
4
4
|
[](http://badge.fury.io/rb/rest-assured)
|
5
|
-
[](https://bitdeli.com/free "Bitdeli Badge")
|
6
5
|
|
7
6
|
## Overview
|
8
7
|
|
9
8
|
Stub/spy http(s) based external dependencies in your integration/acceptance tests.
|
10
9
|
|
10
|
+
## Description
|
11
|
+
|
11
12
|
In a nutshell, you can:
|
12
13
|
|
13
14
|
* replace external data sources with predefined data (stubbing)
|
14
15
|
* verify requests to external services (spying)
|
15
16
|
* simulate different behavior of external services using web UI; useful in development
|
16
17
|
|
17
|
-
|
18
|
+
REST-assured runs in a standalone process. It can be configured at runtime (via ruby client library or REST api) to respond to any request with arbitrary content, status, headers, etc.
|
19
|
+
|
20
|
+
The idea is that in "test" environment your app is making calls to REST-assured rather than to real external services.
|
18
21
|
|
19
|
-
|
20
|
-
[Playground](http://rest-assured.herokuapp.com) (might take few seconds to load while heroku is taking off)
|
22
|
+
[Playground](http://fakesh.it/)
|
21
23
|
|
22
24
|
[Example project](https://github.com/artemave/REST-assured-example)
|
23
25
|
|
24
26
|
|
25
27
|
## Set up
|
26
28
|
|
27
|
-
You are going to need ruby >= 1.
|
29
|
+
You are going to need ruby >= 1.9.2 on Linux/MacOS. Also, one of sqlite3, postgres or mysql.
|
28
30
|
|
29
31
|
### In ruby project
|
30
32
|
|
@@ -65,24 +67,15 @@ This starts up an instance of rest-assured on port 4578. It is accessible via RE
|
|
65
67
|
|
66
68
|
Various options (such as ssl, port, db credentials, etc.) are available through command line options. Check out `rest-assured -h` to see what they are.
|
67
69
|
|
68
|
-
You can also deploy
|
69
|
-
|
70
|
-
$ git clone git://github.com/artemave/REST-assured.git
|
71
|
-
$ cd REST-assured
|
72
|
-
|
73
|
-
$ gem install heroku
|
74
|
-
$ heroku login # assuming you already have an account
|
75
|
-
$ heroku create --stack cedar
|
76
|
-
|
77
|
-
$ git push heroku master
|
70
|
+
You can also [](https://heroku.com/deploy)
|
78
71
|
|
79
72
|
## Usage
|
80
73
|
|
81
|
-
REST-assured
|
74
|
+
REST-assured can do two things: respond to a particular path and method (e.g. GET /stuff/v2?thing=1) and redirect requests based on a pattern (e.g. all /foo\* will redirect to http://example.com/bar). Both of these are available to create/read/delete in runtime via api.
|
82
75
|
|
83
|
-
### Ruby
|
76
|
+
### Ruby API
|
84
77
|
|
85
|
-
REST-assured provides client library to work with doubles. Check out 'Ruby API' section in [live documentation](https://www.relishapp.com/artemave/rest-assured) for full reference.
|
78
|
+
REST-assured provides ruby client library to work with doubles (but not redirects). Check out 'Ruby API' section in [live documentation](https://www.relishapp.com/artemave/rest-assured) for full reference.
|
86
79
|
|
87
80
|
Create double:
|
88
81
|
|
@@ -121,7 +114,7 @@ RestClient.delete "#{RestAssured::Server.address}/doubles/all"
|
|
121
114
|
|
122
115
|
### REST API
|
123
116
|
|
124
|
-
For
|
117
|
+
For using REST-assured from non-ruby environments.
|
125
118
|
|
126
119
|
#### Create double
|
127
120
|
|
data/db/development.db
ADDED
Binary file
|
data/db/test.db
ADDED
Binary file
|
@@ -12,7 +12,7 @@ Feature: test server
|
|
12
12
|
"""
|
13
13
|
Then rest-assured server should be running:
|
14
14
|
"""
|
15
|
-
RestAssured::Server.
|
15
|
+
expect(RestAssured::Server.up?).to eq true
|
16
16
|
"""
|
17
17
|
|
18
18
|
Scenario: start asyncronously (so that other heavy setup - e.g. firefox startup - can be done in parallel)
|
@@ -23,12 +23,12 @@ Feature: test server
|
|
23
23
|
"""
|
24
24
|
Then rest-assured server should not be running:
|
25
25
|
"""
|
26
|
-
RestAssured::Server.
|
26
|
+
expect(RestAssured::Server.up?).to eq false
|
27
27
|
"""
|
28
28
|
When it finally comes up
|
29
29
|
Then rest-assured server should be running:
|
30
30
|
"""
|
31
|
-
RestAssured::Server.
|
31
|
+
expect(RestAssured::Server.up?).to eq true
|
32
32
|
"""
|
33
33
|
|
34
34
|
Scenario: stop rest-assured server
|
@@ -39,5 +39,5 @@ Feature: test server
|
|
39
39
|
"""
|
40
40
|
Then it should be stopped:
|
41
41
|
"""
|
42
|
-
RestAssured::Server.
|
42
|
+
expect(RestAssured::Server.up?).to eq false
|
43
43
|
"""
|
@@ -21,7 +21,7 @@ Then /^database options should be:$/ do |table|
|
|
21
21
|
empty_to_nil = lambda do |string|
|
22
22
|
string.try(:empty?) ? nil : string
|
23
23
|
end
|
24
|
-
|
24
|
+
|
25
25
|
@app_config[:db_config][:adapter].should == res['adapter']
|
26
26
|
@app_config[:db_config][:database].should == res['dbname']
|
27
27
|
@app_config[:db_config][:username].should == res['dbuser']
|
@@ -16,7 +16,7 @@ end
|
|
16
16
|
|
17
17
|
Then /^I should be able to get json representation of that double from response$/ do
|
18
18
|
d = RestAssured::Models::Double.last
|
19
|
-
|
19
|
+
JSON.load( @create_a_double_response ).should == MultiJson.load( d.to_json )
|
20
20
|
end
|
21
21
|
|
22
22
|
Then /^I should get (#{CAPTURE_A_NUMBER}) in response status$/ do |status|
|
data/features/support/env.rb
CHANGED
@@ -33,19 +33,19 @@ end
|
|
33
33
|
World(Capybara, Rack::Test::Methods, RackHeaderHack, WorldHelpers, Anticipate)
|
34
34
|
|
35
35
|
require 'rest-assured/config'
|
36
|
-
db_opts = { :adapter => '
|
36
|
+
db_opts = { :adapter => 'postgresql' }
|
37
37
|
RestAssured::Config.build(db_opts)
|
38
38
|
|
39
39
|
require 'rest-assured'
|
40
40
|
require 'shoulda-matchers'
|
41
41
|
|
42
|
-
RestAssured::Server.start(db_opts.merge(:port =>
|
42
|
+
RestAssured::Server.start(db_opts.merge(:port => 19876))
|
43
43
|
|
44
44
|
Before "@api_server" do
|
45
45
|
RestAssured::Server.stop
|
46
46
|
end
|
47
47
|
After "@api_server" do
|
48
|
-
RestAssured::Server.start(db_opts.merge(:port =>
|
48
|
+
RestAssured::Server.start(db_opts.merge(:port => 19876))
|
49
49
|
end
|
50
50
|
|
51
51
|
require 'rest-assured/application'
|
@@ -6,9 +6,8 @@ module WorldHelpers
|
|
6
6
|
rest_assured_exec = File.expand_path '../../../bin/rest-assured', __FILE__
|
7
7
|
code = File.read rest_assured_exec
|
8
8
|
|
9
|
-
code.sub!(/(.*)/, "\\1\nENV['RACK_ENV'] = 'production'")
|
10
9
|
code.sub!(/require 'rest-assured\/application'/, '')
|
11
|
-
code.sub!(/RestAssured::Application.run!.*/m, 'puts AppConfig.to_yaml')
|
10
|
+
code.sub!(/RestAssured::Application.run!.*/m, 'require "yaml"; puts AppConfig.to_yaml')
|
12
11
|
|
13
12
|
new_exec = "#{rest_assured_exec}_temp"
|
14
13
|
File.open(new_exec, 'w') do |file|
|
@@ -17,12 +16,7 @@ module WorldHelpers
|
|
17
16
|
|
18
17
|
`chmod +x #{new_exec}`
|
19
18
|
|
20
|
-
|
21
|
-
#config_yaml, stderr_str, status = Open3.capture3({'RACK_ENV' => 'production'}, new_exec, *options.split(' '))
|
22
|
-
config_yaml = nil
|
23
|
-
Open3.popen3(new_exec, *options.split(' ')) do |stdin, stdout, stderr|
|
24
|
-
config_yaml = stdout.read
|
25
|
-
end
|
19
|
+
config_yaml, _, _ = Open3.capture3({'RACK_ENV' => 'production'}, new_exec, *options.split(' '))
|
26
20
|
|
27
21
|
`rm #{new_exec}`
|
28
22
|
|
@@ -3,11 +3,16 @@ require 'childprocess'
|
|
3
3
|
module RestAssured
|
4
4
|
class AppSession
|
5
5
|
def initialize
|
6
|
-
@child = ChildProcess.build('rest-assured', *Config.to_cmdargs)
|
6
|
+
@child = ChildProcess.build('bin/rest-assured', *Config.to_cmdargs)
|
7
|
+
@child.cwd = File.expand_path '../../../..', __FILE__
|
7
8
|
@child.io.inherit!
|
8
9
|
@child.start
|
9
10
|
end
|
10
11
|
|
12
|
+
def stop
|
13
|
+
@child.stop while @child.alive?
|
14
|
+
end
|
15
|
+
|
11
16
|
def method_missing(*args)
|
12
17
|
@child.send(*args)
|
13
18
|
end
|
@@ -11,8 +11,6 @@ module RestAssured
|
|
11
11
|
include Singleton
|
12
12
|
|
13
13
|
at_exit do
|
14
|
-
# I don't know why, but without this puts() at_exit is triggered on Ctrl-C when running in spork
|
15
|
-
puts ''
|
16
14
|
instance.stop if instance
|
17
15
|
end
|
18
16
|
|
@@ -39,21 +37,11 @@ module RestAssured
|
|
39
37
|
end
|
40
38
|
|
41
39
|
def stop
|
42
|
-
@session.try
|
43
|
-
|
44
|
-
10.times do
|
45
|
-
if up?
|
46
|
-
sleep 0.5
|
47
|
-
next
|
48
|
-
else
|
49
|
-
return
|
50
|
-
end
|
51
|
-
end
|
52
|
-
raise "Failed to stop RestAssured server"
|
40
|
+
@session.try :stop
|
53
41
|
end
|
54
42
|
|
55
43
|
def up?
|
56
|
-
!!@session && @session.alive? && !Utils::PortExplorer.port_free?(AppConfig.port)
|
44
|
+
!!@session && @session.alive? && !Utils::PortExplorer.port_free?(AppConfig.port)
|
57
45
|
end
|
58
46
|
|
59
47
|
def self.method_missing(*args)
|
data/lib/rest-assured/config.rb
CHANGED
@@ -103,9 +103,15 @@ module RestAssured
|
|
103
103
|
|
104
104
|
def self.migrate_db
|
105
105
|
migrate = lambda { ActiveRecord::Migrator.migrate(File.expand_path('../../../db/migrate', __FILE__)) }
|
106
|
+
silence_stdout = lambda do |&thing|
|
107
|
+
original_stdout = $stdout
|
108
|
+
$stdout = File.open(File::NULL, "w")
|
109
|
+
thing.call
|
110
|
+
$stdout = original_stdout
|
111
|
+
end
|
106
112
|
|
107
|
-
if AppConfig[:environment] == 'production'
|
108
|
-
|
113
|
+
if AppConfig[:environment] == 'production'
|
114
|
+
silence_stdout.call(&migrate)
|
109
115
|
else
|
110
116
|
migrate.call
|
111
117
|
end
|
@@ -135,7 +141,8 @@ module RestAssured
|
|
135
141
|
opts = {
|
136
142
|
:adapter => 'postgresql',
|
137
143
|
:username => AppConfig.user || 'root',
|
138
|
-
:database => AppConfig.database || default_database
|
144
|
+
:database => AppConfig.database || default_database,
|
145
|
+
:pool => 20
|
139
146
|
}
|
140
147
|
if adapter =~ /mysql/
|
141
148
|
adapter = RUBY_PLATFORM == "java" ? 'jdbcmysql' : 'mysql2'
|
@@ -1,11 +1,9 @@
|
|
1
1
|
module RestAssured
|
2
2
|
module Models
|
3
3
|
class Redirect < ActiveRecord::Base
|
4
|
-
attr_accessible :pattern, :to, :position
|
5
|
-
|
6
4
|
validates_presence_of :pattern, :to
|
7
5
|
|
8
|
-
scope :ordered, order('position')
|
6
|
+
scope :ordered, -> { order('position') }
|
9
7
|
|
10
8
|
before_create :assign_position
|
11
9
|
|
@@ -43,7 +43,7 @@ module RestAssured
|
|
43
43
|
router.post /^\/doubles(\.json)?$/ do |needs_json|
|
44
44
|
begin
|
45
45
|
data = request.body.read
|
46
|
-
d =
|
46
|
+
d = JSON.load(data)
|
47
47
|
|
48
48
|
# fix acitve resource dumbness
|
49
49
|
if d['response_headers'] and d['response_headers']['response_headers']
|
@@ -54,7 +54,7 @@ module RestAssured
|
|
54
54
|
params.slice(*%w[fullpath content description verb status response_headers])
|
55
55
|
end
|
56
56
|
|
57
|
-
@double = Models::Double.create(d)
|
57
|
+
@double = Models::Double.create(d)
|
58
58
|
|
59
59
|
if needs_json
|
60
60
|
if @double.errors.present?
|
data/lib/rest-assured/version.rb
CHANGED
@@ -4,17 +4,23 @@ require File.expand_path('../../../lib/rest-assured/api/app_session', __FILE__)
|
|
4
4
|
|
5
5
|
module RestAssured
|
6
6
|
describe AppSession do
|
7
|
+
let(:child) do
|
8
|
+
double(io: double, :cwd= => double)
|
9
|
+
end
|
10
|
+
|
7
11
|
it 'starts application in childprocess' do
|
8
12
|
cmdargs = %w{-d :memory: -p 6666}
|
9
|
-
Config.
|
13
|
+
allow(Config).to receive_messages(:to_cmdargs => cmdargs)
|
14
|
+
|
15
|
+
expect(ChildProcess).to receive(:build).with('bin/rest-assured', *cmdargs).and_return(child)
|
10
16
|
|
11
|
-
|
17
|
+
expect(child).to receive(:cwd=)
|
12
18
|
|
13
19
|
state = ''
|
14
|
-
child.io.
|
15
|
-
state.
|
20
|
+
expect(child.io).to receive(:inherit!) do
|
21
|
+
expect(state).not_to eq('started')
|
16
22
|
end
|
17
|
-
child.
|
23
|
+
expect(child).to receive(:start) do
|
18
24
|
state << 'started'
|
19
25
|
end
|
20
26
|
|
@@ -6,24 +6,25 @@ module RestAssured
|
|
6
6
|
before(:all) do
|
7
7
|
Server.start(DB_OPTS.merge(:port => 9877))
|
8
8
|
end
|
9
|
+
|
9
10
|
after(:all) do
|
10
11
|
Server.stop
|
11
12
|
end
|
12
13
|
|
13
|
-
it {
|
14
|
+
it { is_expected.to be_kind_of ActiveResource::Base }
|
14
15
|
|
15
16
|
it 'creates new double' do
|
16
|
-
d = Double.create :fullpath => '/some/api', :content => 'content'
|
17
|
-
Models::Double.where(:fullpath => d.fullpath, :content => d.content).
|
17
|
+
d = Models::Double.create! :fullpath => '/some/api', :content => 'content'
|
18
|
+
expect(Models::Double.where(:fullpath => d.fullpath, :content => d.content)).to exist
|
18
19
|
end
|
19
20
|
|
20
21
|
it 'finds exising double' do
|
21
|
-
d = Models::Double.create :fullpath => '/some/api', :content => 'content'
|
22
|
+
d = Models::Double.create! :fullpath => '/some/api', :content => 'content'
|
22
23
|
|
23
24
|
dd = Double.find(d.id)
|
24
25
|
|
25
|
-
dd.fullpath.
|
26
|
-
dd.content.
|
26
|
+
expect(dd.fullpath).to eq(d.fullpath)
|
27
|
+
expect(dd.content).to eq(d.content)
|
27
28
|
end
|
28
29
|
|
29
30
|
it 'shows request history' do
|
@@ -32,10 +33,10 @@ module RestAssured
|
|
32
33
|
d.requests << Models::Request.create(:rack_env => 'different rack_env', :body => 'other body', :params => 'more params')
|
33
34
|
|
34
35
|
dd = Double.find(d.id)
|
35
|
-
dd.requests.size.
|
36
|
-
dd.requests.first.rack_env.
|
37
|
-
dd.requests.first.params.
|
38
|
-
dd.requests.last.body.
|
36
|
+
expect(dd.requests.size).to eq(2)
|
37
|
+
expect(dd.requests.first.rack_env).to eq('rack_env json')
|
38
|
+
expect(dd.requests.first.params).to eq('params')
|
39
|
+
expect(dd.requests.last.body).to eq('other body')
|
39
40
|
end
|
40
41
|
|
41
42
|
context 'when waits requests' do
|
@@ -56,13 +57,13 @@ module RestAssured
|
|
56
57
|
|
57
58
|
dd.wait_for_requests(2)
|
58
59
|
|
59
|
-
dd.requests.count.
|
60
|
+
expect(dd.requests.count).to be >= 2
|
60
61
|
end
|
61
62
|
|
62
63
|
it 'raises exception if requests have not happened within timeout' do
|
63
64
|
d = Models::Double.create :fullpath => '/some/api', :content => 'content'
|
64
65
|
dd = Double.find(d.id)
|
65
|
-
dd.
|
66
|
+
allow(dd).to receive(:sleep)
|
66
67
|
|
67
68
|
@t = Thread.new do
|
68
69
|
2.times do
|
@@ -71,7 +72,7 @@ module RestAssured
|
|
71
72
|
end
|
72
73
|
|
73
74
|
sleep 0.5
|
74
|
-
|
75
|
+
expect { dd.wait_for_requests(3) }.to raise_error(MoreRequestsExpected, 'Expected 3 requests. Got 2.')
|
75
76
|
end
|
76
77
|
end
|
77
78
|
end
|
data/spec/api/server_spec.rb
CHANGED
@@ -3,95 +3,91 @@ require File.expand_path('../../../lib/rest-assured/api/server', __FILE__)
|
|
3
3
|
|
4
4
|
module RestAssured
|
5
5
|
describe Server do
|
6
|
-
|
7
|
-
|
8
|
-
example.run
|
9
|
-
Server.reset_instance
|
6
|
+
before do
|
7
|
+
allow(AppSession).to receive(:new).and_return(session)
|
10
8
|
end
|
11
9
|
|
10
|
+
after do
|
11
|
+
Singleton.__init__(Server)
|
12
|
+
end
|
13
|
+
|
14
|
+
let (:session) { double.as_null_object }
|
15
|
+
|
12
16
|
it 'khows when it is up' do
|
13
|
-
|
14
|
-
Utils::PortExplorer.
|
17
|
+
allow(session).to receive(:alive?).and_return(true)
|
18
|
+
allow(Utils::PortExplorer).to receive(:port_free?).and_return(false)
|
15
19
|
|
16
20
|
Server.start
|
17
|
-
Server.up
|
21
|
+
expect(Server.up?).to eq true
|
18
22
|
end
|
19
23
|
|
20
24
|
context 'knows that it is NOT up' do
|
21
25
|
it 'if it has not been started' do
|
22
|
-
Server.up
|
26
|
+
expect(Server.up?).to eq false
|
23
27
|
end
|
24
28
|
|
25
29
|
it 'if it is starting at the moment' do
|
26
|
-
|
27
|
-
Utils::PortExplorer.
|
30
|
+
allow(session).to receive(:alive?).and_return(true)
|
31
|
+
allow(Utils::PortExplorer).to receive(:port_free?).and_return(true)
|
28
32
|
Server.start!
|
29
33
|
|
30
|
-
Server.up
|
34
|
+
expect(Server.up?).to eq false
|
31
35
|
end
|
32
36
|
end
|
33
37
|
|
34
38
|
context 'when starts' do
|
35
39
|
it 'makes sure no previous session is running' do
|
36
|
-
session
|
37
|
-
|
38
|
-
Utils::PortExplorer.stub(:port_free? => false)
|
39
|
-
AppSession.stub(:new).and_return(session)
|
40
|
+
allow(session).to receive(:alive?).and_return(true, false)
|
41
|
+
allow(Utils::PortExplorer).to receive(:port_free?).and_return(false)
|
40
42
|
|
41
|
-
session.
|
43
|
+
expect(session).to receive(:stop).once
|
42
44
|
Server.start!
|
43
45
|
Server.start!
|
44
46
|
end
|
45
47
|
|
46
48
|
it 'builds application config' do
|
47
|
-
AppSession.stub(:new).as_null_object
|
48
|
-
|
49
49
|
opts = { :port => 34545, :database => ':memory:' }
|
50
50
|
|
51
|
-
Config.
|
51
|
+
expect(Config).to receive(:build).with(opts)
|
52
52
|
Server.start!(opts)
|
53
53
|
end
|
54
54
|
|
55
55
|
context 'sets up server address' do
|
56
|
-
before do
|
57
|
-
AppSession.stub(:new).as_null_object
|
58
|
-
end
|
59
|
-
|
60
56
|
it 'uses 127.0.0.1 as hostname' do
|
61
|
-
RestAssured::Double.
|
57
|
+
expect(RestAssured::Double).to receive(:site=).with(/127\.0\.0\.1/)
|
62
58
|
Server.start!
|
63
|
-
Server.address.
|
59
|
+
expect(Server.address).to match(/127\.0\.0\.1/)
|
64
60
|
end
|
65
61
|
|
66
62
|
it 'uses port from config' do
|
67
|
-
RestAssured::Double.
|
63
|
+
expect(RestAssured::Double).to receive(:site=).with(/#{AppConfig.port}/)
|
68
64
|
Server.start!
|
69
|
-
Server.address.
|
65
|
+
expect(Server.address).to match(/#{AppConfig.port}/)
|
70
66
|
end
|
71
67
|
|
72
68
|
it 'uses http by default' do
|
73
|
-
RestAssured::Double.
|
69
|
+
expect(RestAssured::Double).to receive(:site=).with(/http[^s]/)
|
74
70
|
Server.start!
|
75
|
-
Server.address.
|
71
|
+
expect(Server.address).to match(/http[^s]/)
|
76
72
|
end
|
77
73
|
|
78
74
|
it 'uses https if ssl is set in config' do
|
79
75
|
AppConfig.ssl = true
|
80
|
-
RestAssured::Double.
|
76
|
+
expect(RestAssured::Double).to receive(:site=).with(/https/)
|
81
77
|
Server.start!
|
82
|
-
Server.address.
|
78
|
+
expect(Server.address).to match(/https/)
|
83
79
|
end
|
84
80
|
end
|
85
81
|
|
86
82
|
describe 'async/sync start' do
|
87
83
|
before do
|
88
|
-
|
89
|
-
Utils::PortExplorer.
|
84
|
+
allow(session).to receive(:alive?).and_return(false)
|
85
|
+
allow(Utils::PortExplorer).to receive(:port_free?).and_return(true)
|
90
86
|
|
91
87
|
@t = Thread.new do
|
92
88
|
sleep 0.5
|
93
|
-
session.
|
94
|
-
Utils::PortExplorer.
|
89
|
+
allow(session).to receive(:alive?).and_return(true)
|
90
|
+
allow(Utils::PortExplorer).to receive(:port_free?).and_return(false)
|
95
91
|
end
|
96
92
|
end
|
97
93
|
|
@@ -101,31 +97,30 @@ module RestAssured
|
|
101
97
|
|
102
98
|
it 'does not wait for Application to come up' do
|
103
99
|
Server.start!
|
104
|
-
Server.up
|
100
|
+
expect(Server.up?).to eq false
|
105
101
|
end
|
106
102
|
|
107
103
|
it 'can wait until Application is up before passing control' do
|
108
104
|
Server.start
|
109
|
-
Server.up
|
105
|
+
expect(Server.up?).to eq true
|
110
106
|
end
|
111
107
|
end
|
112
108
|
end
|
113
109
|
|
114
110
|
context 'when stopped' do
|
115
111
|
it 'stops application subprocess' do
|
116
|
-
|
112
|
+
allow(session).to receive(:alive?).and_return(false)
|
117
113
|
Server.start!
|
118
114
|
|
119
|
-
session.
|
115
|
+
expect(session).to receive(:stop)
|
120
116
|
Server.stop
|
121
117
|
end
|
122
118
|
end
|
123
119
|
|
124
120
|
it 'stops application subprocess when current process exits' do
|
125
121
|
res_file = Tempfile.new('res')
|
126
|
-
|
127
|
-
session.
|
128
|
-
session.stub(:stop) do
|
122
|
+
allow(session).to receive(:alive?).and_return(false)
|
123
|
+
allow(session).to receive(:stop) do
|
129
124
|
res_file.write "stopped"
|
130
125
|
res_file.rewind
|
131
126
|
end
|
@@ -133,7 +128,7 @@ module RestAssured
|
|
133
128
|
Server.start!
|
134
129
|
end
|
135
130
|
Process.wait
|
136
|
-
res_file.read.
|
131
|
+
expect(res_file.read).to eq 'stopped'
|
137
132
|
end
|
138
133
|
end
|
139
134
|
end
|