pact-mock_service 0.2.3 → 0.2.4

Sign up to get free protection for your applications and to get access to all the features.
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