pact-provider-verifier 1.0.2 → 1.1.0
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 +6 -0
- data/Gemfile +4 -0
- data/README.md +2 -16
- data/lib/pact/provider_verifier/app.rb +6 -30
- data/lib/pact/provider_verifier/cli.rb +1 -1
- data/lib/pact/provider_verifier/pact_helper.rb +5 -38
- data/lib/pact/provider_verifier/set_up_provider_state.rb +37 -0
- data/lib/pact/provider_verifier/version.rb +1 -1
- metadata +6 -33
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b360526fb17120efd9f9e2a54c0814a78a5b4b01
|
4
|
+
data.tar.gz: a143308b319b38f0e959916bcd224e5e3757ee50
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3b3bc38d83093fcbc5d1c044dc8234b8e0dfd5a0522a210074f4139a6c7a8587408e9baf105dfd336f720baa9989336fa2518073a35a8df136c2d838d961197f
|
7
|
+
data.tar.gz: 82cae026c525577a538a347b2530e0c4a3fae57abd226a8f5ee09e0298e146e19e91144021dda6fbcfec2d0cef1664c6754194cb4dd5a79d94067cdbb01bf1ac
|
data/CHANGELOG.md
CHANGED
@@ -2,6 +2,12 @@ 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
|
+
### 1.1.0 (01 June 2017)
|
6
|
+
* 7106832 - chore(docs): update docs for provider states URL (Matt Fellows, Fri May 26 22:45:09 2017 +1000)
|
7
|
+
* 8f787e6 - Add deprecation warning for --provider-states-url (Beth Skurrie, Fri May 26 20:51:48 2017 +1000)
|
8
|
+
* 982ba7c - Remove need for provider-states-url by dynamically calling the set up code during test execution (Beth Skurrie, Fri May 26 16:30:14 2017 +1000)
|
9
|
+
* f055375 - Turn silent mode on for zip task in rake package (Beth Skurrie, Tue May 23 09:34:51 2017 +1000)
|
10
|
+
|
5
11
|
### 1.0.2 (23 May 2017)
|
6
12
|
* 33f0811 - Upgrade rspec version to ~>3.5 to fix #11 (Beth Skurrie, Tue May 23 09:01:07 2017 +1000)
|
7
13
|
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -53,20 +53,7 @@ bundle install
|
|
53
53
|
|
54
54
|
Execute pact provider verification against a provider which implements the following:
|
55
55
|
|
56
|
-
* an http
|
57
|
-
|
58
|
-
{
|
59
|
-
"SomeUI": [
|
60
|
-
"customer A is logged in",
|
61
|
-
"customer A has a million dollars"
|
62
|
-
],
|
63
|
-
"BackendAPI": [
|
64
|
-
"customer A is logged in",
|
65
|
-
"there are no customers"
|
66
|
-
]
|
67
|
-
}
|
68
|
-
|
69
|
-
* an http post endpoint which sets the active pact consumer and provider state
|
56
|
+
* an http POST endpoint (`--provider-states-setup-url`) which sets the active pact consumer and provider state accepting two parameters: `consumer` and `state` and returns an HTTP `200` eg.
|
70
57
|
|
71
58
|
consumer=web&state=customer%20is%20logged%20in
|
72
59
|
|
@@ -74,7 +61,6 @@ The following flags are required:
|
|
74
61
|
|
75
62
|
* `--pact-urls` - a comma delimited list of pact file urls
|
76
63
|
* `--provider-base-url` - the base url of the pact provider
|
77
|
-
* `--provider-states-url` - the full url of the endpoint which returns provider states by consumer
|
78
64
|
* `--provider-states-setup-url` - the full url of the endpoint which sets the active pact consumer and provider state
|
79
65
|
|
80
66
|
### Using the Pact Broker with Basic authentication
|
@@ -84,7 +70,7 @@ The following flags are required to use basic authentication with a Pact Broker:
|
|
84
70
|
* `--broker-user` - the Username for Pact Broker basic authentication.
|
85
71
|
* `--broker-password` - the Password for Pact Broker basic authentication.
|
86
72
|
|
87
|
-
NOTE: the `http://user:password@host` format
|
73
|
+
NOTE: the `http://user:password@host` format for basic HTTP auth is not supported.
|
88
74
|
|
89
75
|
## Contributing
|
90
76
|
|
@@ -33,9 +33,9 @@ module Pact
|
|
33
33
|
end
|
34
34
|
|
35
35
|
def verify_pacts
|
36
|
+
print_deprecation_note
|
36
37
|
pacts = @options.pact_urls.split(',')
|
37
38
|
proxy_pact_helper = File.expand_path(File.join(File.dirname(__FILE__), "pact_helper.rb"))
|
38
|
-
ENV['provider_states_url'] = @options.provider_states_url
|
39
39
|
ENV['provider_states_setup_url'] = @options.provider_states_setup_url
|
40
40
|
ENV['PACT_BROKER_USERNAME'] = @options.broker_username if @options.broker_username
|
41
41
|
ENV['PACT_BROKER_PASSWORD'] = @options.broker_password if @options.broker_password
|
@@ -62,8 +62,6 @@ module Pact
|
|
62
62
|
require ENV['PACT_PROJECT_PACT_HELPER'] if ENV.fetch('PACT_PROJECT_PACT_HELPER','') != ''
|
63
63
|
|
64
64
|
exit_statuses = pacts.collect do |pact_url|
|
65
|
-
ENV['pact_consumer'] = get_pact_consumer_name(pact_url)
|
66
|
-
|
67
65
|
begin
|
68
66
|
options = {
|
69
67
|
:pact_helper => proxy_pact_helper,
|
@@ -82,34 +80,12 @@ module Pact
|
|
82
80
|
# Return non-zero exit code if failures - increment for each Pact
|
83
81
|
exit exit_statuses.count{ | status | status != 0 }
|
84
82
|
end
|
85
|
-
end
|
86
|
-
end
|
87
|
-
end
|
88
|
-
|
89
|
-
def get_json(path)
|
90
|
-
case path
|
91
|
-
when URI::regexp
|
92
|
-
return get_json_from_server(path)
|
93
|
-
else
|
94
|
-
return get_json_from_local_file(path)
|
95
|
-
end
|
96
|
-
end
|
97
83
|
|
98
|
-
def
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
84
|
+
def print_deprecation_note
|
85
|
+
if @options.provider_states_url
|
86
|
+
$stderr.puts "The --provider-states-url option is deprecated and the URL endpoint can be removed from the application"
|
87
|
+
end
|
88
|
+
end
|
103
89
|
end
|
104
|
-
c.use FaradayMiddleware::ParseJson
|
105
|
-
c.use Faraday::Adapter::NetHttp
|
106
90
|
end
|
107
|
-
|
108
|
-
response = conn.get(url.request_uri)
|
109
|
-
return response.body
|
110
|
-
end
|
111
|
-
|
112
|
-
def get_json_from_local_file(path)
|
113
|
-
file = File.read(path)
|
114
|
-
return JSON.parse(file)
|
115
91
|
end
|
@@ -8,13 +8,13 @@ module Pact
|
|
8
8
|
desc 'verify', "Runs the Pact verification process"
|
9
9
|
method_option :pact_urls, aliases: "-u", desc: "Comma-separated list of Pact file URIs. Supports local and networked (http-based) files", :required => true
|
10
10
|
method_option :provider_base_url, aliases: "-h", desc: "Provide host URL", :required => true
|
11
|
-
method_option :provider_states_url, aliases: "-s", desc: "Base URL to retrieve the provider states from", :required => false
|
12
11
|
method_option :provider_states_setup_url, aliases: "-c", desc: "Base URL to setup the provider states at", :required => false
|
13
12
|
method_option :provider_app_version, aliases: "-a", desc: "The provider application version, required for publishing verification results", :required => false
|
14
13
|
method_option :publish_verification_results, aliases: "-r", desc: "Publish verification results to the broker", required: false
|
15
14
|
method_option :broker_username, aliases: "-n", desc: "Pact Broker username", :required => false
|
16
15
|
method_option :broker_password, aliases: "-p", desc: "Pact Broker password", :required => false
|
17
16
|
method_option :verbose, aliases: "-v", desc: "Verbose output", :required => false
|
17
|
+
method_option :provider_states_url, aliases: "-s", desc: "DEPRECATED", :required => false
|
18
18
|
|
19
19
|
def verify
|
20
20
|
app = Pact::ProviderVerifier::App.new(options)
|
@@ -2,45 +2,12 @@ require 'net/https'
|
|
2
2
|
require 'faraday_middleware'
|
3
3
|
require 'json'
|
4
4
|
require_relative './app'
|
5
|
+
require_relative 'set_up_provider_state'
|
6
|
+
require 'pact/provider/configuration'
|
5
7
|
|
6
8
|
# Responsible for making the call to the provider state server to set up the state
|
7
|
-
if ENV['provider_states_url']
|
8
|
-
module ProviderStateServerClient
|
9
|
-
def set_up_state provider_state
|
10
|
-
if ENV['VERBOSE_LOGGING']
|
11
|
-
puts "Setting up provider state '#{provider_state}' for consumer '#{ENV['pact_consumer']}' using provider state server at #{ENV['provider_states_setup_url']}"
|
12
|
-
end
|
13
9
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
end
|
18
|
-
faraday.adapter Faraday.default_adapter # make requests with Net::HTTP
|
19
|
-
end
|
20
|
-
conn.post do |req|
|
21
|
-
req.headers["Content-Type"] = "application/json"
|
22
|
-
req.body = JSON.dump ({"consumer" => ENV['pact_consumer'], "state" => provider_state })
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
Pact.configure do | config |
|
28
|
-
config.include ProviderStateServerClient
|
29
|
-
end
|
30
|
-
|
31
|
-
# get the consumer provider states from the provider
|
32
|
-
provider_states = get_json(ENV['provider_states_url'])
|
33
|
-
|
34
|
-
# register the consumer provider states with pact
|
35
|
-
provider_states.keys.each do |consumer|
|
36
|
-
Pact.provider_states_for consumer do
|
37
|
-
provider_states[consumer].each do |state|
|
38
|
-
provider_state state do
|
39
|
-
set_up do
|
40
|
-
set_up_state state
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
10
|
+
Pact.configure do | config |
|
11
|
+
config.provider_state_set_up = Pact::ProviderVerifier::SetUpProviderState
|
12
|
+
config.provider_state_tear_down = -> (*args){ }
|
46
13
|
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
module Pact
|
2
|
+
module ProviderVerifier
|
3
|
+
|
4
|
+
class SetUpProviderStateError < StandardError; end
|
5
|
+
|
6
|
+
class SetUpProviderState
|
7
|
+
|
8
|
+
def self.call provider_state, consumer, options
|
9
|
+
if verbose?
|
10
|
+
puts "Setting up provider state '#{provider_state}' for consumer '#{consumer}' using provider state server at #{provider_states_setup_url}"
|
11
|
+
end
|
12
|
+
|
13
|
+
conn = Faraday.new(:url => provider_states_setup_url) do |faraday|
|
14
|
+
faraday.adapter Faraday.default_adapter
|
15
|
+
end
|
16
|
+
response = conn.post do |req|
|
17
|
+
req.headers["Content-Type"] = "application/json"
|
18
|
+
req.body = {consumer: consumer, state: provider_state }.to_json
|
19
|
+
end
|
20
|
+
|
21
|
+
# Not sure about this?
|
22
|
+
# if response.status >= 300
|
23
|
+
# raise SetUpProviderStateError.new("Error setting up provider state '#{provider_state}' for consumer '#{consumer}' at #{provider_states_setup_url}. response status=#{response.status} response.body=#{response.body}")
|
24
|
+
# end
|
25
|
+
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.provider_states_setup_url
|
29
|
+
ENV['provider_states_setup_url']
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.verbose?
|
33
|
+
ENV['VERBOSE_LOGGING']
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pact-provider-verifier
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matt Fellows
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-06-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|
@@ -30,14 +30,14 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '1.
|
33
|
+
version: '1.13'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '1.
|
40
|
+
version: '1.13'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: pact-provider-proxy
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -86,34 +86,6 @@ dependencies:
|
|
86
86
|
- - "~>"
|
87
87
|
- !ruby/object:Gem::Version
|
88
88
|
version: 0.10.0
|
89
|
-
- !ruby/object:Gem::Dependency
|
90
|
-
name: pact-mock_service
|
91
|
-
requirement: !ruby/object:Gem::Requirement
|
92
|
-
requirements:
|
93
|
-
- - "~>"
|
94
|
-
- !ruby/object:Gem::Version
|
95
|
-
version: '1.0'
|
96
|
-
type: :runtime
|
97
|
-
prerelease: false
|
98
|
-
version_requirements: !ruby/object:Gem::Requirement
|
99
|
-
requirements:
|
100
|
-
- - "~>"
|
101
|
-
- !ruby/object:Gem::Version
|
102
|
-
version: '1.0'
|
103
|
-
- !ruby/object:Gem::Dependency
|
104
|
-
name: pact-support
|
105
|
-
requirement: !ruby/object:Gem::Requirement
|
106
|
-
requirements:
|
107
|
-
- - "~>"
|
108
|
-
- !ruby/object:Gem::Version
|
109
|
-
version: '0.6'
|
110
|
-
type: :runtime
|
111
|
-
prerelease: false
|
112
|
-
version_requirements: !ruby/object:Gem::Requirement
|
113
|
-
requirements:
|
114
|
-
- - "~>"
|
115
|
-
- !ruby/object:Gem::Version
|
116
|
-
version: '0.6'
|
117
89
|
- !ruby/object:Gem::Dependency
|
118
90
|
name: json
|
119
91
|
requirement: !ruby/object:Gem::Requirement
|
@@ -181,6 +153,7 @@ files:
|
|
181
153
|
- lib/pact/provider_verifier/app.rb
|
182
154
|
- lib/pact/provider_verifier/cli.rb
|
183
155
|
- lib/pact/provider_verifier/pact_helper.rb
|
156
|
+
- lib/pact/provider_verifier/set_up_provider_state.rb
|
184
157
|
- lib/pact/provider_verifier/version.rb
|
185
158
|
homepage: https://github.com/pact-foundation/pact-provider-verifier
|
186
159
|
licenses:
|
@@ -202,7 +175,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
202
175
|
version: '0'
|
203
176
|
requirements: []
|
204
177
|
rubyforge_project:
|
205
|
-
rubygems_version: 2.
|
178
|
+
rubygems_version: 2.4.5
|
206
179
|
signing_key:
|
207
180
|
specification_version: 4
|
208
181
|
summary: Provides a Pact verification service for use with Pact
|