pact-mock_service 0.8.1 → 0.8.2
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.md +14 -0
- data/lib/pact/consumer/server.rb +8 -13
- data/lib/pact/mock_service/app_manager.rb +30 -23
- data/lib/pact/mock_service/cli.rb +1 -0
- data/lib/pact/mock_service/control_server/run.rb +1 -0
- data/lib/pact/mock_service/request_handlers/interactions_put.rb +1 -1
- data/lib/pact/mock_service/run.rb +1 -1
- data/lib/pact/mock_service/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b2fe31dd5077800edd5307e100979a92d3056eb9
|
4
|
+
data.tar.gz: cae8ad2a915922e11bab37deb7e38dbc6a467314
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8156beaceb8f03bc993d9510455fc194fe7dc60705521621cf016b660f73ef1a58cde961f322fcde32f76c02745800523a824b345a2e4ccda3f1dc90c564c7c6
|
7
|
+
data.tar.gz: 50b3011a79bd77eb5f905433ec9e78b31450925acbb79da724e6630ae65da005920be792b90c4c243da26c07354f2055920bb2102d3c9542dadbf25772cf1d9f
|
data/CHANGELOG.md
CHANGED
@@ -2,6 +2,20 @@ Do this to generate your change history
|
|
2
2
|
|
3
3
|
git log --pretty=format:' * %h - %s (%an, %ad)' vX.Y.Z..HEAD
|
4
4
|
|
5
|
+
### 0.8.2 (19 April 2016)
|
6
|
+
* e392333 - Merge pull request #45 from aaronrenner/ar-fix-almost-duplicate-error-web-response (Beth Skurrie, Tue Apr 19 09:53:01 2016 +1000)
|
7
|
+
* 6fbcce2 - Fixed invalid Rack response on AlmostDuplicateInteractionError (Aaron Renner, Mon Apr 18 14:08:19 2016 -0600)
|
8
|
+
* 2cdce52 - Merge pull request #44 from sebdiem/sebdiem/add_host_option (Sergei Matheson, Tue Mar 29 09:23:35 2016 +1100)
|
9
|
+
* a76a321 - add host option for control server (Sébastien Diemer, Sun Mar 27 23:25:19 2016 +0200)
|
10
|
+
* aadbb8d - Merge pull request #43 from taiki45/find-available-port-option (Sergei Matheson, Mon Mar 21 09:35:40 2016 +1100)
|
11
|
+
* 98c9233 - remove --pact-dir from the windows bat file #41 (Ron Holshausen, Fri Mar 18 11:42:22 2016 +1100)
|
12
|
+
* f4c2fa5 - Fix timing issue on server test (Taiki Ono, Thu Mar 17 17:24:22 2016 +0900)
|
13
|
+
* 0655161 - Format code (Taiki Ono, Thu Mar 17 00:19:45 2016 +0900)
|
14
|
+
* fbea6d4 - Support find_available_port option (Taiki Ono, Wed Mar 16 19:12:36 2016 +0900)
|
15
|
+
* e72b0cd - WEBrick expects port as Integer (Taiki Ono, Wed Feb 24 19:16:57 2016 +0900)
|
16
|
+
* 9580c41 - Merge pull request #42 from taiki45/update-travis-ci-setting (Sergei Matheson, Wed Mar 16 19:59:08 2016 +1100)
|
17
|
+
* 01b90e0 - Update Travis CI setting with new Rubies (Taiki Ono, Sun Mar 13 21:19:43 2016 +0900)
|
18
|
+
|
5
19
|
|
6
20
|
### 0.8.1 (25 February 2016)
|
7
21
|
* ffa37f8 - Merge pull request #40 from taiki45/add-option-not-to-write-pact-file (Beth Skurrie, Thu Feb 25 09:33:30 2016 +1100)
|
data/lib/pact/consumer/server.rb
CHANGED
@@ -70,10 +70,13 @@ module Pact
|
|
70
70
|
|
71
71
|
def run_default_server(app, port)
|
72
72
|
require 'rack/handler/webrick'
|
73
|
-
Rack::Handler::WEBrick.run(app, webrick_opts)
|
73
|
+
Rack::Handler::WEBrick.run(app, webrick_opts) do |server|
|
74
|
+
@port = server[:Port]
|
75
|
+
end
|
74
76
|
end
|
75
77
|
|
76
78
|
def get_identity
|
79
|
+
return false unless @port
|
77
80
|
http = Net::HTTP.new host, @port
|
78
81
|
if options[:ssl]
|
79
82
|
http.use_ssl = true
|
@@ -83,33 +86,25 @@ module Pact
|
|
83
86
|
end
|
84
87
|
|
85
88
|
def webrick_opts
|
86
|
-
opts = {:
|
89
|
+
opts = {Port: port.nil? ? 0 : port, AccessLog: [], Logger: WEBrick::Log::new(nil, 0)}
|
87
90
|
opts.merge!(ssl_opts) if options[:ssl]
|
88
91
|
opts
|
89
92
|
end
|
90
93
|
|
91
94
|
def ssl_opts
|
92
|
-
{
|
93
|
-
:SSLEnable => true,
|
94
|
-
:SSLCertName => [ %w[CN localhost] ]
|
95
|
-
}
|
95
|
+
{ SSLEnable: true, SSLCertName: [ %w[CN localhost] ] }
|
96
96
|
end
|
97
97
|
|
98
98
|
def boot
|
99
99
|
unless responsive?
|
100
|
-
|
101
|
-
|
102
|
-
@server_thread = Thread.new do
|
103
|
-
run_default_server(@middleware, @port)
|
104
|
-
end
|
105
|
-
|
100
|
+
@server_thread = Thread.new { run_default_server(@middleware, @port) }
|
106
101
|
Timeout.timeout(60) { @server_thread.join(0.1) until responsive? }
|
107
102
|
end
|
108
103
|
rescue Timeout::Error
|
109
104
|
raise "Rack application timed out during boot"
|
110
105
|
else
|
106
|
+
Pact::Server.ports[@app.object_id] = @port
|
111
107
|
self
|
112
108
|
end
|
113
|
-
|
114
109
|
end
|
115
110
|
end
|
@@ -2,12 +2,10 @@ require 'thwait'
|
|
2
2
|
|
3
3
|
require 'net/http'
|
4
4
|
require 'uri'
|
5
|
-
require 'find_a_port'
|
6
5
|
require 'pact/logging'
|
7
6
|
require 'pact/consumer/server'
|
8
7
|
require 'singleton'
|
9
8
|
require 'pact/mock_service/app'
|
10
|
-
require 'find_a_port'
|
11
9
|
|
12
10
|
module Pact
|
13
11
|
module MockService
|
@@ -22,20 +20,29 @@ module Pact
|
|
22
20
|
@app_registrations = []
|
23
21
|
end
|
24
22
|
|
25
|
-
def register_mock_service_for
|
23
|
+
def register_mock_service_for(name, url, options = {})
|
26
24
|
uri = URI(url)
|
27
25
|
raise "Currently only http is supported" unless uri.scheme == 'http'
|
28
26
|
raise "Currently only services on localhost are supported" unless uri.host == 'localhost'
|
27
|
+
uri.port = nil if options[:find_available_port]
|
29
28
|
|
30
|
-
|
29
|
+
app = Pact::MockService.new(
|
30
|
+
name: name,
|
31
|
+
log_file: create_log_file(name),
|
32
|
+
pact_dir: pact_dir,
|
33
|
+
pact_specification_version: options[:pact_specification_version]
|
34
|
+
)
|
35
|
+
register(app, uri.port)
|
31
36
|
end
|
32
37
|
|
33
|
-
def register(app, port =
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
port
|
38
|
+
def register(app, port = nil)
|
39
|
+
if port
|
40
|
+
existing = existing_app_on_port(port)
|
41
|
+
raise "Port #{port} is already being used by #{existing}" if existing and not existing == app
|
42
|
+
end
|
43
|
+
app_registration = register_app(app, port)
|
44
|
+
app_registration.spawn
|
45
|
+
app_registration.port
|
39
46
|
end
|
40
47
|
|
41
48
|
def ports_of_mock_services
|
@@ -63,12 +70,12 @@ module Pact
|
|
63
70
|
|
64
71
|
private
|
65
72
|
|
66
|
-
def existing_app_on_port
|
67
|
-
app_registration = registration_on_port
|
73
|
+
def existing_app_on_port(port)
|
74
|
+
app_registration = registration_on_port(port)
|
68
75
|
app_registration ? app_registration.app : nil
|
69
76
|
end
|
70
77
|
|
71
|
-
def registration_on_port
|
78
|
+
def registration_on_port(port)
|
72
79
|
@app_registrations.find { |app_registration| app_registration.port == port }
|
73
80
|
end
|
74
81
|
|
@@ -76,18 +83,18 @@ module Pact
|
|
76
83
|
Pact.configuration.pact_dir
|
77
84
|
end
|
78
85
|
|
79
|
-
def create_log_file
|
80
|
-
FileUtils::mkdir_p
|
86
|
+
def create_log_file(service_name)
|
87
|
+
FileUtils::mkdir_p(Pact.configuration.log_dir)
|
81
88
|
log = File.open(log_file_path(service_name), 'w')
|
82
89
|
log.sync = true
|
83
90
|
log
|
84
91
|
end
|
85
92
|
|
86
|
-
def log_file_path
|
93
|
+
def log_file_path(service_name)
|
87
94
|
File.join(Pact.configuration.log_dir, "#{log_file_name(service_name)}.log")
|
88
95
|
end
|
89
96
|
|
90
|
-
def log_file_name
|
97
|
+
def log_file_name(service_name)
|
91
98
|
lower_case_name = service_name.downcase.gsub(/\s+/, '_')
|
92
99
|
if lower_case_name.include?('_service')
|
93
100
|
lower_case_name.gsub('_service', '_mock_service')
|
@@ -100,8 +107,8 @@ module Pact
|
|
100
107
|
@app_registrations
|
101
108
|
end
|
102
109
|
|
103
|
-
def register_app
|
104
|
-
app_registration = AppRegistration.new
|
110
|
+
def register_app(app, port)
|
111
|
+
app_registration = AppRegistration.new(app: app, port: port)
|
105
112
|
app_registrations << app_registration
|
106
113
|
app_registration
|
107
114
|
end
|
@@ -109,10 +116,9 @@ module Pact
|
|
109
116
|
|
110
117
|
class AppRegistration
|
111
118
|
include Pact::Logging
|
112
|
-
attr_accessor :port
|
113
|
-
attr_accessor :app
|
119
|
+
attr_accessor :port, :app
|
114
120
|
|
115
|
-
def initialize
|
121
|
+
def initialize(opts)
|
116
122
|
@max_wait = 10
|
117
123
|
@port = opts[:port]
|
118
124
|
@app = opts[:app]
|
@@ -133,7 +139,7 @@ module Pact
|
|
133
139
|
end
|
134
140
|
|
135
141
|
def is_a_mock_service?
|
136
|
-
app.is_a?
|
142
|
+
app.is_a?(Pact::MockService::App)
|
137
143
|
end
|
138
144
|
|
139
145
|
def to_s
|
@@ -143,6 +149,7 @@ module Pact
|
|
143
149
|
def spawn
|
144
150
|
logger.info "Starting app #{self}..."
|
145
151
|
@server = Pact::Server.new(app, port).boot
|
152
|
+
@port = @server.port
|
146
153
|
@spawned = true
|
147
154
|
logger.info "Started on port #{port}"
|
148
155
|
end
|
@@ -28,6 +28,7 @@ module Pact
|
|
28
28
|
|
29
29
|
desc 'control', "Run a Pact mock service control server."
|
30
30
|
method_option :port, aliases: "-p", desc: "Port on which to run the service"
|
31
|
+
method_option :host, aliases: "-h", desc: "Host on which to bind the service", default: 'localhost'
|
31
32
|
method_option :log_dir, aliases: "-l", desc: "File to which to log output"
|
32
33
|
method_option :pact_dir, aliases: "-d", desc: "Directory to which the pacts will be written"
|
33
34
|
method_option :pact_specification_version, aliases: "-i", desc: "The pact specification version to use when writing the pact", default: '1'
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pact-mock_service
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.8.
|
4
|
+
version: 0.8.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- James Fraser
|
@@ -12,7 +12,7 @@ authors:
|
|
12
12
|
autorequire:
|
13
13
|
bindir: bin
|
14
14
|
cert_chain: []
|
15
|
-
date: 2016-
|
15
|
+
date: 2016-04-19 00:00:00.000000000 Z
|
16
16
|
dependencies:
|
17
17
|
- !ruby/object:Gem::Dependency
|
18
18
|
name: rack
|
@@ -331,7 +331,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
331
331
|
version: '0'
|
332
332
|
requirements: []
|
333
333
|
rubyforge_project:
|
334
|
-
rubygems_version: 2.
|
334
|
+
rubygems_version: 2.4.5
|
335
335
|
signing_key:
|
336
336
|
specification_version: 4
|
337
337
|
summary: Provides a mock service for use with Pact
|