pact-mock_service 0.2.3 → 0.2.4
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 +8 -0
- data/lib/pact/consumer/app_manager.rb +23 -35
- data/lib/pact/consumer/mock_service/app.rb +11 -75
- data/lib/pact/consumer/mock_service/error_handler.rb +28 -0
- data/lib/pact/consumer/mock_service/index_get.rb +22 -0
- data/lib/pact/consumer/mock_service/interaction_delete.rb +3 -3
- data/lib/pact/consumer/mock_service/interaction_post.rb +2 -2
- data/lib/pact/consumer/mock_service/log_get.rb +2 -2
- data/lib/pact/consumer/mock_service/missing_interactions_get.rb +2 -3
- data/lib/pact/consumer/mock_service/mock_service_administration_endpoint.rb +11 -13
- data/lib/pact/consumer/mock_service/pact_post.rb +2 -2
- data/lib/pact/consumer/mock_service/request_handlers.rb +41 -0
- data/lib/pact/consumer/mock_service/verification_get.rb +2 -2
- data/lib/pact/consumer/mock_service.rb +41 -0
- data/lib/pact/consumer/server.rb +28 -7
- data/lib/pact/mock_service/cli/pidfile.rb +97 -0
- data/lib/pact/mock_service/cli.rb +109 -59
- data/lib/pact/mock_service/control_server/app.rb +42 -0
- data/lib/pact/mock_service/control_server/delegator.rb +55 -0
- data/lib/pact/mock_service/control_server/index.rb +25 -0
- data/lib/pact/mock_service/control_server/mock_service_creator.rb +34 -0
- data/lib/pact/mock_service/control_server/mock_services.rb +26 -0
- data/lib/pact/mock_service/control_server/require_pacticipant_headers.rb +20 -0
- data/lib/pact/mock_service/control_server/run.rb +68 -0
- data/lib/pact/mock_service/run.rb +81 -0
- data/lib/pact/mock_service/server/restart.rb +20 -0
- data/lib/pact/mock_service/server/spawn.rb +37 -0
- data/lib/pact/mock_service/server/wait_for_server_up.rb +35 -0
- data/lib/pact/mock_service/spawn.rb +68 -0
- data/lib/pact/mock_service/version.rb +1 -1
- metadata +18 -3
- data/lib/pact/consumer/mock_service/web_request_administration.rb +0 -27
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'pact/mock_service/server/wait_for_server_up'
|
2
|
+
|
3
|
+
module Pact
|
4
|
+
module MockService
|
5
|
+
module Server
|
6
|
+
class Spawn
|
7
|
+
|
8
|
+
class PortUnavailableError < StandardError; end
|
9
|
+
|
10
|
+
def self.call pidfile, port
|
11
|
+
if pidfile.can_start?
|
12
|
+
if port_available? port
|
13
|
+
pid = fork do
|
14
|
+
yield
|
15
|
+
end
|
16
|
+
pidfile.pid = pid
|
17
|
+
Process.detach(pid)
|
18
|
+
Server::WaitForServerUp.(port)
|
19
|
+
pidfile.write
|
20
|
+
else
|
21
|
+
raise PortUnavailableError.new("ERROR: Port #{port} already in use.")
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def self.port_available? port
|
27
|
+
server = TCPServer.new('127.0.0.1', port)
|
28
|
+
true
|
29
|
+
rescue
|
30
|
+
false
|
31
|
+
ensure
|
32
|
+
server.close if server
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'timeout'
|
2
|
+
require 'net/http'
|
3
|
+
|
4
|
+
module Pact
|
5
|
+
module MockService
|
6
|
+
module Server
|
7
|
+
class WaitForServerUp
|
8
|
+
|
9
|
+
def self.call(port, options = {ssl: false})
|
10
|
+
tries = 0
|
11
|
+
responsive = false
|
12
|
+
while !(responsive = responsive?(port, options)) && tries < 100
|
13
|
+
tries += 1
|
14
|
+
sleep 1
|
15
|
+
end
|
16
|
+
raise "Timed out waiting for server to start up on port #{port}" if !responsive
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.responsive? port, options
|
20
|
+
res = Net::HTTP.start("localhost", port) do |http|
|
21
|
+
request = Net::HTTP::Get.new "http://localhost:#{port}/"
|
22
|
+
request['X-Pact-Mock-Service'] = 'true'
|
23
|
+
response = http.request request
|
24
|
+
end
|
25
|
+
res.code == '200'
|
26
|
+
rescue SystemCallError => e
|
27
|
+
return false
|
28
|
+
rescue EOFError
|
29
|
+
return false
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
require 'pact/consumer/mock_service'
|
2
|
+
require 'pact/consumer/server'
|
3
|
+
|
4
|
+
module Pact
|
5
|
+
module MockService
|
6
|
+
class Spawn
|
7
|
+
|
8
|
+
def self.call consumer, provider, port, options
|
9
|
+
new(consumer, provider, port, options).call
|
10
|
+
end
|
11
|
+
|
12
|
+
attr_reader :consumer, :provider, :port, :options
|
13
|
+
|
14
|
+
def initialize consumer, provider, port, options
|
15
|
+
@consumer = consumer
|
16
|
+
@provider = provider
|
17
|
+
@port = port
|
18
|
+
@options = options
|
19
|
+
end
|
20
|
+
|
21
|
+
def call
|
22
|
+
mock_service = create_mock_service
|
23
|
+
start_mock_service mock_service, port
|
24
|
+
puts "Started mock service for #{provider} on #{port}"
|
25
|
+
mock_service
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
def create_mock_service
|
31
|
+
name = "#{provider} mock service"
|
32
|
+
Pact::Consumer::MockService.new(
|
33
|
+
log_file: create_log_file(name),
|
34
|
+
name: name,
|
35
|
+
consumer: consumer,
|
36
|
+
provider: provider,
|
37
|
+
pact_dir: options[:pact_dir] || ".",
|
38
|
+
cors_enabled: options[:cors_enabled]
|
39
|
+
)
|
40
|
+
end
|
41
|
+
|
42
|
+
def start_mock_service app, port
|
43
|
+
Pact::Server.new(app, port, ssl: options[:ssl]).boot
|
44
|
+
end
|
45
|
+
|
46
|
+
def create_log_file service_name
|
47
|
+
FileUtils::mkdir_p options[:log_dir]
|
48
|
+
log = File.open(log_file_path(service_name), 'w')
|
49
|
+
log.sync = true
|
50
|
+
log
|
51
|
+
end
|
52
|
+
|
53
|
+
def log_file_name service_name
|
54
|
+
lower_case_name = service_name.downcase.gsub(/\s+/, '_')
|
55
|
+
if lower_case_name.include?('_service')
|
56
|
+
lower_case_name.gsub('_service', '_mock_service')
|
57
|
+
else
|
58
|
+
lower_case_name + '_mock_service'
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def log_file_path service_name
|
63
|
+
File.join(options[:log_dir], "#{log_file_name(service_name)}.log")
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
end
|
68
|
+
end
|
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.2.
|
4
|
+
version: 0.2.4
|
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: 2015-01-
|
15
|
+
date: 2015-01-24 00:00:00.000000000 Z
|
16
16
|
dependencies:
|
17
17
|
- !ruby/object:Gem::Dependency
|
18
18
|
name: rack
|
@@ -257,7 +257,9 @@ files:
|
|
257
257
|
- lib/pact/consumer/mock_service/app.rb
|
258
258
|
- lib/pact/consumer/mock_service/candidate_interactions.rb
|
259
259
|
- lib/pact/consumer/mock_service/cors_origin_header_middleware.rb
|
260
|
+
- lib/pact/consumer/mock_service/error_handler.rb
|
260
261
|
- lib/pact/consumer/mock_service/expected_interactions.rb
|
262
|
+
- lib/pact/consumer/mock_service/index_get.rb
|
261
263
|
- lib/pact/consumer/mock_service/interaction_delete.rb
|
262
264
|
- lib/pact/consumer/mock_service/interaction_mismatch.rb
|
263
265
|
- lib/pact/consumer/mock_service/interaction_post.rb
|
@@ -268,10 +270,10 @@ files:
|
|
268
270
|
- lib/pact/consumer/mock_service/options.rb
|
269
271
|
- lib/pact/consumer/mock_service/pact_post.rb
|
270
272
|
- lib/pact/consumer/mock_service/rack_request_helper.rb
|
273
|
+
- lib/pact/consumer/mock_service/request_handlers.rb
|
271
274
|
- lib/pact/consumer/mock_service/verification.rb
|
272
275
|
- lib/pact/consumer/mock_service/verification_get.rb
|
273
276
|
- lib/pact/consumer/mock_service/verified_interactions.rb
|
274
|
-
- lib/pact/consumer/mock_service/web_request_administration.rb
|
275
277
|
- lib/pact/consumer/mock_service.rb
|
276
278
|
- lib/pact/consumer/mock_service_client.rb
|
277
279
|
- lib/pact/consumer/server.rb
|
@@ -280,10 +282,23 @@ files:
|
|
280
282
|
- lib/pact/consumer_contract/interaction_decorator.rb
|
281
283
|
- lib/pact/consumer_contract/request_decorator.rb
|
282
284
|
- lib/pact/consumer_contract/response_decorator.rb
|
285
|
+
- lib/pact/mock_service/cli/pidfile.rb
|
283
286
|
- lib/pact/mock_service/cli.rb
|
287
|
+
- lib/pact/mock_service/control_server/app.rb
|
288
|
+
- lib/pact/mock_service/control_server/delegator.rb
|
289
|
+
- lib/pact/mock_service/control_server/index.rb
|
290
|
+
- lib/pact/mock_service/control_server/mock_service_creator.rb
|
291
|
+
- lib/pact/mock_service/control_server/mock_services.rb
|
292
|
+
- lib/pact/mock_service/control_server/require_pacticipant_headers.rb
|
293
|
+
- lib/pact/mock_service/control_server/run.rb
|
284
294
|
- lib/pact/mock_service/interaction_decorator.rb
|
285
295
|
- lib/pact/mock_service/request_decorator.rb
|
286
296
|
- lib/pact/mock_service/response_decorator.rb
|
297
|
+
- lib/pact/mock_service/run.rb
|
298
|
+
- lib/pact/mock_service/server/restart.rb
|
299
|
+
- lib/pact/mock_service/server/spawn.rb
|
300
|
+
- lib/pact/mock_service/server/wait_for_server_up.rb
|
301
|
+
- lib/pact/mock_service/spawn.rb
|
287
302
|
- lib/pact/mock_service/version.rb
|
288
303
|
- lib/pact/mock_service.rb
|
289
304
|
- Gemfile
|
@@ -1,27 +0,0 @@
|
|
1
|
-
require 'pact/consumer/mock_service/rack_request_helper'
|
2
|
-
require 'pact/consumer/mock_service/mock_service_administration_endpoint'
|
3
|
-
|
4
|
-
module Pact
|
5
|
-
module Consumer
|
6
|
-
|
7
|
-
# Administration web requests (GET, DELETE, POST, PUT, etc.)
|
8
|
-
class WebRequestAdministration < MockServiceAdministrationEndpoint
|
9
|
-
|
10
|
-
def request_path
|
11
|
-
raise NotImplementedError
|
12
|
-
end
|
13
|
-
|
14
|
-
def request_method
|
15
|
-
raise NotImplementedError
|
16
|
-
end
|
17
|
-
|
18
|
-
private
|
19
|
-
|
20
|
-
def request_header_match? env
|
21
|
-
env['HTTP_X_PACT_MOCK_SERVICE']
|
22
|
-
end
|
23
|
-
|
24
|
-
end
|
25
|
-
|
26
|
-
end
|
27
|
-
end
|