pact-mock_service 2.1.0 → 2.1.1.pre.alpha.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b6c3b3cd0d4b633ce3a95b86f9e32f7ffa3111ee
4
- data.tar.gz: c7664be7b98c9a003312d5386756b06f2e3d2b30
3
+ metadata.gz: 5693645528ece7ef91958e2598f64bba38215104
4
+ data.tar.gz: 3a57c015eb730e45150a23a0b63b818461e61cbc
5
5
  SHA512:
6
- metadata.gz: d13741f947caeb81921a90156acdb4ef41813908d3da83c293f57693af92cd28aebe521ea21a55047a45dde1a7146fcbce4d37d4c31ee499e9e0e2859938c51d
7
- data.tar.gz: 935a0c04938be72338e03e797e810a0c1190c6207be120240a1495f8db27d0b95723003f4f650edc86546ef2cc0eacb94814ca03e767e47377bfe311ae5ae857
6
+ metadata.gz: e64fe9e5ed774d2bef6f2a2b8746b5dbb9f6e46ff586ebc37957c0bd9719444b31972dbb5aaf43b52046b85752bd0d2cc628102233d486387a97d07d26a362f1
7
+ data.tar.gz: 9713fb5b520bcff76a6e45aafb88dd17835e311a907e88288f4a3b6502c702a287af7cf6acb9af8b7f670371e8000f33aaed214db7d57555bf753bfa79936046
data/Gemfile CHANGED
@@ -5,4 +5,4 @@ gemspec
5
5
 
6
6
  if ENV['X_PACT_DEVELOPMENT']
7
7
  gem 'pact-support', path: '../pact-support'
8
- end
8
+ end
data/README.md CHANGED
@@ -1,8 +1,8 @@
1
1
  # Pact Mock Service
2
2
 
3
- [![Build Status](https://travis-ci.org/bethesque/pact-mock_service.svg?branch=master)](https://travis-ci.org/bethesque/pact-mock_service)
3
+ [![Build Status](https://travis-ci.org/pact-foundation/pact-mock_service.svg?branch=master)](https://travis-ci.org/pact-foundation/pact-mock_service)
4
4
 
5
- This codebase provides the mock service used by implementations of [Pact][pact]. It is packaged as a gem, and as a standalone executable for Mac OSX and Linux (Windows coming soon.)
5
+ This codebase provides the mock service used by implementations of [Pact][pact]. It is packaged as a gem, and as a standalone executable for Mac OSX and Linux and Windows.
6
6
 
7
7
  The mock service provides the following endpoints:
8
8
 
@@ -11,12 +11,20 @@ The mock service provides the following endpoints:
11
11
  * GET /interactions/verification - determine whether the expected interactions have taken place
12
12
  * POST /pact - write the pact file
13
13
 
14
- As the Pact mock service can be used as a standalone executable and administered via HTTP, it can be used for testing with any language. All that is required is a library in the native language to create the HTTP calls listed above. Currently there are binding for [Ruby][pact] and [Javascript][javascript]. If you are interested in creating bindings in a new langauge, and have a chat to one of us on the [pact-dev Google group][pact-dev].
14
+ As the Pact mock service can be used as a standalone executable and administered via HTTP, it can be used for testing with any language. All that is required is a library in the native language to create the HTTP calls listed above. Check out [docs.pact.io](https://docs.pact.io) for a list of implemented languages. If you are interested in creating bindings in a new langauge, and have a chat to one of us on the [pact-dev Google group][pact-dev].
15
+
16
+ ## Documentation
17
+
18
+ You can find documentation for the mock service in the repository [wiki][wiki].
15
19
 
16
20
  ## Usage
17
21
 
18
22
  For some examples of the HTTP requests that occur under the hood when using either the Ruby client or the Javascript client, see this [gist](https://gist.github.com/bethesque/9d81f21d6f77650811f4).
19
23
 
24
+ ### Mac OSX, Linux and Windows, without Ruby
25
+
26
+ See the [releases][releases] page for the latest standalone executables.
27
+
20
28
  ### With Ruby on Mac OSX and Linux
21
29
 
22
30
  $ gem install pact-mock_service
@@ -38,22 +46,14 @@ If you need to provide your own certificate and key, use the following syntax.
38
46
 
39
47
  $ pact-mock-service --port 1234 --ssl --sslcert PATH_TO_CERT --sslkey PATH_TO_KEY
40
48
 
41
- ### Mac OSX and Linux, without Ruby
42
-
43
- See the [releases][releases] page for the latest standalone executables.
44
-
45
- ### Windows, without Ruby
46
-
47
- See the [releases][releases] page for the latest standalone executables.
48
-
49
49
  ## Contributing
50
50
 
51
51
  See [CONTRIBUTING.md](/CONTRIBUTING.md)
52
52
 
53
53
  [pact]: https://github.com/realestate-com-au/pact
54
- [releases]: https://github.com/bethesque/pact-mock_service/releases
54
+ [releases]: https://github.com/pact-foundation/pact-mock_service/releases
55
55
  [javascript]: https://github.com/DiUS/pact-consumer-js-dsl
56
56
  [pact-dev]: https://groups.google.com/forum/#!forum/pact-dev
57
- [windows]: https://github.com/bethesque/pact-mock_service/wiki/Building-a-Windows-standalone-executable
58
57
  [install-windows]: https://github.com/bethesque/pact-mock_service/wiki/Installing-the-pact-mock_service-gem-on-Windows
59
58
  [why-generated]: https://github.com/realestate-com-au/pact/wiki/FAQ#why-are-the-pacts-generated-and-not-static
59
+ [wiki]: https://github.com/pact-foundation/pact-mock_service/wiki
@@ -5,6 +5,7 @@ require 'fileutils'
5
5
  require 'pact/mock_service/server/wait_for_server_up'
6
6
  require 'pact/mock_service/cli/pidfile'
7
7
  require 'socket'
8
+ require 'rake/file_utils'
8
9
 
9
10
  module Pact
10
11
  module MockService
@@ -59,9 +60,7 @@ module Pact
59
60
  method_option :pid_dir, desc: "PID dir", default: 'tmp/pids'
60
61
 
61
62
  def start
62
- start_server(mock_service_pidfile) do
63
- service
64
- end
63
+ spawn_mock_service
65
64
  end
66
65
 
67
66
  desc 'stop', "Stop a Pact mock service"
@@ -174,6 +173,34 @@ module Pact
174
173
  yield
175
174
  end
176
175
  end
176
+
177
+ def spawn_mock_service
178
+ require 'pact/mock_service/server/windows_safe_spawn'
179
+ pidfile = mock_service_pidfile
180
+ Pact::MockService::Server::WindowsSafeSpawn.(service_spawn_command, pidfile, options[:port], options[:ssl])
181
+ end
182
+
183
+ def service_spawn_command
184
+ command = []
185
+ if ENV['PACT_STANDALONE_WRAPPER_PATH']
186
+ command << ENV['PACT_STANDALONE_WRAPPER_PATH']
187
+ else
188
+ command << FileUtils::RUBY
189
+ command << "-S #{$0}"
190
+ end
191
+ command << "service"
192
+ command += build_service_options
193
+ command.join(" ")
194
+ end
195
+
196
+ def service_switch_names
197
+ Pact::MockService::CLI.commands['service'].options.values.each_with_object({}){| option, hash| hash[option.human_name] = option.switch_name }
198
+ end
199
+
200
+ def build_service_options
201
+ switch_names = service_switch_names
202
+ options.collect{ |key, value| "#{switch_names[key]} #{value}" if switch_names[key] }.compact
203
+ end
177
204
  end
178
205
  end
179
206
  end
@@ -1,4 +1,5 @@
1
1
  require 'fileutils'
2
+ require 'pact/mock_service/os'
2
3
 
3
4
  module Pact
4
5
  module MockService
@@ -73,14 +74,13 @@ module Pact
73
74
  sleep sleep_time
74
75
  tries += 1
75
76
  end
76
- raise "Process #{pid_from_file} not stopped after {100 * sleep_time} seconds." if process_running?
77
+ raise "Process #{pid_from_file} not stopped after #{100 * sleep_time} seconds." if process_running?
77
78
  end
78
79
 
79
80
  def kill_process
80
81
  if file_exists?
81
82
  begin
82
- `ps -ef | grep pact`
83
- Process.kill 2, pid_from_file
83
+ windows? ? windows_kill : kill_2
84
84
  waitpid
85
85
  delete
86
86
  rescue Errno::ESRCH
@@ -91,6 +91,19 @@ module Pact
91
91
  $stderr.puts "No PID file found at #{pidfile_path}, server probably not running. Use `ps -ef | grep pact` if you suspect the process is still running."
92
92
  end
93
93
  end
94
+
95
+ def windows?
96
+ Pact::MockService::OS.windows?
97
+ end
98
+
99
+ def kill_2
100
+ Process.kill 2, pid_from_file
101
+ end
102
+
103
+ def windows_kill
104
+ cmd = "taskkill /f /pid #{pid_from_file}"
105
+ `#{cmd}`
106
+ end
94
107
  end
95
108
  end
96
109
  end
@@ -0,0 +1,13 @@
1
+ module Pact
2
+ module MockService
3
+ module OS
4
+
5
+ extend self
6
+
7
+ # Thanks RSpec
8
+ def windows?
9
+ !!(RbConfig::CONFIG['host_os'] =~ /cygwin|mswin|mingw|bccwin|wince|emx/)
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,44 @@
1
+ require 'pact/mock_service/server/wait_for_server_up'
2
+ require 'pact/mock_service/os'
3
+
4
+ module Pact
5
+ module MockService
6
+ module Server
7
+ class WindowsSafeSpawn
8
+
9
+ class PortUnavailableError < StandardError; end
10
+
11
+ def self.call command, pidfile, port, ssl = false
12
+ if pidfile.can_start?
13
+ if port_available? port
14
+ pid = spawn(command, spawn_options)
15
+ pidfile.pid = pid
16
+ Process.detach(pid)
17
+ Server::WaitForServerUp.(port, {ssl: ssl})
18
+ pidfile.write
19
+ else
20
+ raise PortUnavailableError.new("ERROR: Port #{port} already in use.")
21
+ end
22
+ end
23
+ end
24
+
25
+ def self.spawn_options
26
+ if Pact::MockService::OS.windows?
27
+ {new_pgroup: true}
28
+ else
29
+ {}
30
+ end
31
+ end
32
+
33
+ def self.port_available? port
34
+ server = TCPServer.new('127.0.0.1', port)
35
+ true
36
+ rescue
37
+ false
38
+ ensure
39
+ server.close if server
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
@@ -1,5 +1,5 @@
1
1
  module Pact
2
2
  module MockService
3
- VERSION = "2.1.0"
3
+ VERSION = "2.1.1-alpha.2"
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: 2.1.0
4
+ version: 2.1.1.pre.alpha.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Fraser
@@ -12,22 +12,22 @@ authors:
12
12
  autorequire:
13
13
  bindir: bin
14
14
  cert_chain: []
15
- date: 2017-05-12 00:00:00.000000000 Z
15
+ date: 2017-07-28 00:00:00.000000000 Z
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
18
  name: rack
19
19
  requirement: !ruby/object:Gem::Requirement
20
20
  requirements:
21
- - - ">="
21
+ - - "~>"
22
22
  - !ruby/object:Gem::Version
23
- version: '0'
23
+ version: '2.0'
24
24
  type: :runtime
25
25
  prerelease: false
26
26
  version_requirements: !ruby/object:Gem::Requirement
27
27
  requirements:
28
- - - ">="
28
+ - - "~>"
29
29
  - !ruby/object:Gem::Version
30
- version: '0'
30
+ version: '2.0'
31
31
  - !ruby/object:Gem::Dependency
32
32
  name: rspec
33
33
  requirement: !ruby/object:Gem::Requirement
@@ -74,16 +74,16 @@ dependencies:
74
74
  name: thor
75
75
  requirement: !ruby/object:Gem::Requirement
76
76
  requirements:
77
- - - ">="
77
+ - - "~>"
78
78
  - !ruby/object:Gem::Version
79
- version: '0'
79
+ version: '0.19'
80
80
  type: :runtime
81
81
  prerelease: false
82
82
  version_requirements: !ruby/object:Gem::Requirement
83
83
  requirements:
84
- - - ">="
84
+ - - "~>"
85
85
  - !ruby/object:Gem::Version
86
- version: '0'
86
+ version: '0.19'
87
87
  - !ruby/object:Gem::Dependency
88
88
  name: json
89
89
  requirement: !ruby/object:Gem::Requirement
@@ -102,16 +102,16 @@ dependencies:
102
102
  name: webrick
103
103
  requirement: !ruby/object:Gem::Requirement
104
104
  requirements:
105
- - - ">="
105
+ - - "~>"
106
106
  - !ruby/object:Gem::Version
107
- version: '0'
107
+ version: '1.3'
108
108
  type: :runtime
109
109
  prerelease: false
110
110
  version_requirements: !ruby/object:Gem::Requirement
111
111
  requirements:
112
- - - ">="
112
+ - - "~>"
113
113
  - !ruby/object:Gem::Version
114
- version: '0'
114
+ version: '1.3'
115
115
  - !ruby/object:Gem::Dependency
116
116
  name: term-ansicolor
117
117
  requirement: !ruby/object:Gem::Requirement
@@ -214,30 +214,44 @@ dependencies:
214
214
  name: activesupport
215
215
  requirement: !ruby/object:Gem::Requirement
216
216
  requirements:
217
- - - ">="
217
+ - - "~>"
218
218
  - !ruby/object:Gem::Version
219
- version: '0'
219
+ version: '5.1'
220
220
  type: :development
221
221
  prerelease: false
222
222
  version_requirements: !ruby/object:Gem::Requirement
223
223
  requirements:
224
- - - ">="
224
+ - - "~>"
225
225
  - !ruby/object:Gem::Version
226
- version: '0'
226
+ version: '5.1'
227
227
  - !ruby/object:Gem::Dependency
228
228
  name: faraday
229
229
  requirement: !ruby/object:Gem::Requirement
230
230
  requirements:
231
- - - ">="
231
+ - - "~>"
232
232
  - !ruby/object:Gem::Version
233
- version: '0'
233
+ version: '0.12'
234
234
  type: :development
235
235
  prerelease: false
236
236
  version_requirements: !ruby/object:Gem::Requirement
237
237
  requirements:
238
- - - ">="
238
+ - - "~>"
239
239
  - !ruby/object:Gem::Version
240
- version: '0'
240
+ version: '0.12'
241
+ - !ruby/object:Gem::Dependency
242
+ name: octokit
243
+ requirement: !ruby/object:Gem::Requirement
244
+ requirements:
245
+ - - "~>"
246
+ - !ruby/object:Gem::Version
247
+ version: '4.7'
248
+ type: :development
249
+ prerelease: false
250
+ version_requirements: !ruby/object:Gem::Requirement
251
+ requirements:
252
+ - - "~>"
253
+ - !ruby/object:Gem::Version
254
+ version: '4.7'
241
255
  description:
242
256
  email:
243
257
  - james.fraser@alumni.swinburne.edu
@@ -288,6 +302,7 @@ files:
288
302
  - lib/pact/mock_service/interactions/verification.rb
289
303
  - lib/pact/mock_service/interactions/verified_interactions.rb
290
304
  - lib/pact/mock_service/logger.rb
305
+ - lib/pact/mock_service/os.rb
291
306
  - lib/pact/mock_service/request_decorator.rb
292
307
  - lib/pact/mock_service/request_handlers.rb
293
308
  - lib/pact/mock_service/request_handlers/base_administration_request_handler.rb
@@ -308,6 +323,7 @@ files:
308
323
  - lib/pact/mock_service/server/respawn.rb
309
324
  - lib/pact/mock_service/server/spawn.rb
310
325
  - lib/pact/mock_service/server/wait_for_server_up.rb
326
+ - lib/pact/mock_service/server/windows_safe_spawn.rb
311
327
  - lib/pact/mock_service/session.rb
312
328
  - lib/pact/mock_service/spawn.rb
313
329
  - lib/pact/mock_service/version.rb
@@ -326,12 +342,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
326
342
  version: '2.0'
327
343
  required_rubygems_version: !ruby/object:Gem::Requirement
328
344
  requirements:
329
- - - ">="
345
+ - - ">"
330
346
  - !ruby/object:Gem::Version
331
- version: '0'
347
+ version: 1.3.1
332
348
  requirements: []
333
349
  rubyforge_project:
334
- rubygems_version: 2.4.5
350
+ rubygems_version: 2.6.12
335
351
  signing_key:
336
352
  specification_version: 4
337
353
  summary: Provides a mock service for use with Pact