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.
Files changed (33) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +8 -0
  3. data/lib/pact/consumer/app_manager.rb +23 -35
  4. data/lib/pact/consumer/mock_service/app.rb +11 -75
  5. data/lib/pact/consumer/mock_service/error_handler.rb +28 -0
  6. data/lib/pact/consumer/mock_service/index_get.rb +22 -0
  7. data/lib/pact/consumer/mock_service/interaction_delete.rb +3 -3
  8. data/lib/pact/consumer/mock_service/interaction_post.rb +2 -2
  9. data/lib/pact/consumer/mock_service/log_get.rb +2 -2
  10. data/lib/pact/consumer/mock_service/missing_interactions_get.rb +2 -3
  11. data/lib/pact/consumer/mock_service/mock_service_administration_endpoint.rb +11 -13
  12. data/lib/pact/consumer/mock_service/pact_post.rb +2 -2
  13. data/lib/pact/consumer/mock_service/request_handlers.rb +41 -0
  14. data/lib/pact/consumer/mock_service/verification_get.rb +2 -2
  15. data/lib/pact/consumer/mock_service.rb +41 -0
  16. data/lib/pact/consumer/server.rb +28 -7
  17. data/lib/pact/mock_service/cli/pidfile.rb +97 -0
  18. data/lib/pact/mock_service/cli.rb +109 -59
  19. data/lib/pact/mock_service/control_server/app.rb +42 -0
  20. data/lib/pact/mock_service/control_server/delegator.rb +55 -0
  21. data/lib/pact/mock_service/control_server/index.rb +25 -0
  22. data/lib/pact/mock_service/control_server/mock_service_creator.rb +34 -0
  23. data/lib/pact/mock_service/control_server/mock_services.rb +26 -0
  24. data/lib/pact/mock_service/control_server/require_pacticipant_headers.rb +20 -0
  25. data/lib/pact/mock_service/control_server/run.rb +68 -0
  26. data/lib/pact/mock_service/run.rb +81 -0
  27. data/lib/pact/mock_service/server/restart.rb +20 -0
  28. data/lib/pact/mock_service/server/spawn.rb +37 -0
  29. data/lib/pact/mock_service/server/wait_for_server_up.rb +35 -0
  30. data/lib/pact/mock_service/spawn.rb +68 -0
  31. data/lib/pact/mock_service/version.rb +1 -1
  32. metadata +18 -3
  33. 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
@@ -1,5 +1,5 @@
1
1
  module Pact
2
2
  module MockService
3
- VERSION = "0.2.3"
3
+ VERSION = "0.2.4"
4
4
  end
5
5
  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.3
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-20 00:00:00.000000000 Z
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