pact-provider-verifier 1.2.0 → 1.3.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 +8 -0
- data/lib/pact/provider_verifier/add_header_middlware.rb +33 -0
- data/lib/pact/provider_verifier/app.rb +16 -3
- data/lib/pact/provider_verifier/cli.rb +1 -0
- data/lib/pact/provider_verifier/set_up_provider_state.rb +19 -0
- data/lib/pact/provider_verifier/version.rb +1 -1
- metadata +17 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8b43ff3b5b20e388373c13ea48743bdd78a24e6d
|
4
|
+
data.tar.gz: 73378cfd5da336900a6bc5b4ccf231287eef90e8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2200801d7a18443487d7954d6eb68df0a74751332377ffdbd046638e3358ec66270144eafff2cd7499c9b347380f7494711d43ffe17cba094c672d1ca5969333
|
7
|
+
data.tar.gz: 0e5995e8176546921343631e1d5b7dcec3f18236d279073038941432bb26269b04eecbda45ed1411ffd055d7ad737ecc63665286dff2889eb45aeb125ceb172e
|
data/CHANGELOG.md
CHANGED
@@ -0,0 +1,33 @@
|
|
1
|
+
module Pact
|
2
|
+
module ProviderVerifier
|
3
|
+
class AddHeaderMiddlware
|
4
|
+
|
5
|
+
def initialize app, headers
|
6
|
+
@app = app
|
7
|
+
@headers = headers
|
8
|
+
end
|
9
|
+
|
10
|
+
def call env
|
11
|
+
@app.call(add_headers(env))
|
12
|
+
end
|
13
|
+
|
14
|
+
def add_headers env
|
15
|
+
new_env = env.dup
|
16
|
+
@headers.each_pair do | key, value |
|
17
|
+
header_name = "HTTP_#{key.upcase.gsub("-", "_")}"
|
18
|
+
warn_about_header_replacement key, new_env[header_name], value
|
19
|
+
new_env[header_name] = value
|
20
|
+
end
|
21
|
+
new_env
|
22
|
+
end
|
23
|
+
|
24
|
+
def warn_about_header_replacement header_name, existing_value, new_value
|
25
|
+
if existing_value.nil?
|
26
|
+
$stderr.puts "WARN: Adding header '#{header_name}: #{new_value}' to replayed request. This header did not exist in the pact, and hence this test cannot confirm that the request will work in real life."
|
27
|
+
else
|
28
|
+
$stdout.puts "INFO: Replacing header '#{header_name}: #{existing_value}' with '#{header_name}: #{new_value}'"
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -6,6 +6,7 @@ require 'pact/cli/run_pact_verification'
|
|
6
6
|
require 'net/https'
|
7
7
|
require 'faraday_middleware'
|
8
8
|
require 'json'
|
9
|
+
require 'pact/provider_verifier/add_header_middlware'
|
9
10
|
|
10
11
|
module Pact
|
11
12
|
module ProviderVerifier
|
@@ -33,16 +34,23 @@ module Pact
|
|
33
34
|
proxy_pact_helper = File.expand_path(File.join(File.dirname(__FILE__), "pact_helper.rb"))
|
34
35
|
ENV['PROVIDER_STATES_SETUP_URL'] = @options.provider_states_setup_url
|
35
36
|
ENV['VERBOSE_LOGGING'] = @options.verbose if @options.verbose
|
37
|
+
ENV['CUSTOM_PROVIDER_HEADER'] = @options.custom_provider_header if @options.custom_provider_header
|
36
38
|
provider_base_url = @options.provider_base_url
|
37
39
|
|
38
40
|
provider_application_version = @options.provider_app_version
|
39
41
|
publish_results = @options.publish_verification_results
|
40
42
|
|
43
|
+
rack_reverse_proxy = Rack::ReverseProxy.new do
|
44
|
+
reverse_proxy '/', provider_base_url
|
45
|
+
end
|
46
|
+
|
47
|
+
if @options.custom_provider_header
|
48
|
+
rack_reverse_proxy = Pact::ProviderVerifier::AddHeaderMiddlware.new(rack_reverse_proxy, parse_header)
|
49
|
+
end
|
50
|
+
|
41
51
|
Pact.service_provider "Running Provider Application" do
|
42
52
|
app do
|
43
|
-
|
44
|
-
reverse_proxy '/', provider_base_url
|
45
|
-
end
|
53
|
+
rack_reverse_proxy
|
46
54
|
end
|
47
55
|
|
48
56
|
if provider_application_version
|
@@ -74,6 +82,11 @@ module Pact
|
|
74
82
|
exit exit_statuses.count{ | status | status != 0 }
|
75
83
|
end
|
76
84
|
|
85
|
+
def parse_header
|
86
|
+
header_name, header_value = @options.custom_provider_header.split(":", 2).collect(&:strip)
|
87
|
+
{header_name => header_value}
|
88
|
+
end
|
89
|
+
|
77
90
|
def print_deprecation_note
|
78
91
|
if @options.provider_states_url
|
79
92
|
$stderr.puts "The --provider-states-url option is deprecated and the URL endpoint can be removed from the application"
|
@@ -14,6 +14,7 @@ module Pact
|
|
14
14
|
method_option :broker_username, aliases: "-n", desc: "Pact Broker username", :required => false
|
15
15
|
method_option :broker_password, aliases: "-p", desc: "Pact Broker password", :required => false
|
16
16
|
method_option :verbose, aliases: "-v", desc: "Verbose output", :required => false
|
17
|
+
method_option :custom_provider_header, desc: "Header to add to provider state set up and pact requests. eg 'Authorization: Basic cGFjdDpwYWN0'", :required => false
|
17
18
|
method_option :provider_states_url, aliases: "-s", desc: "DEPRECATED", :required => false
|
18
19
|
|
19
20
|
def verify
|
@@ -36,6 +36,7 @@ module Pact
|
|
36
36
|
connection = Faraday.new(:url => provider_states_setup_url)
|
37
37
|
connection.post do |req|
|
38
38
|
req.headers["Content-Type"] = "application/json"
|
39
|
+
add_custom_provider_header req
|
39
40
|
req.body = {consumer: consumer, state: provider_state, states: [provider_state] }.to_json
|
40
41
|
end
|
41
42
|
end
|
@@ -48,6 +49,24 @@ module Pact
|
|
48
49
|
ENV['VERBOSE_LOGGING']
|
49
50
|
end
|
50
51
|
|
52
|
+
def provider_header_set?
|
53
|
+
ENV.fetch('CUSTOM_PROVIDER_HEADER', '') != ''
|
54
|
+
end
|
55
|
+
|
56
|
+
def provider_header_name
|
57
|
+
ENV['CUSTOM_PROVIDER_HEADER'].split(":", 2)[0]
|
58
|
+
end
|
59
|
+
|
60
|
+
def provider_header_value
|
61
|
+
ENV['CUSTOM_PROVIDER_HEADER'].split(":", 2)[1]
|
62
|
+
end
|
63
|
+
|
64
|
+
def add_custom_provider_header request
|
65
|
+
if provider_header_set?
|
66
|
+
request[provider_header_name] = provider_header_value
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
51
70
|
def check_for_error response
|
52
71
|
if response.status >= 300
|
53
72
|
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}")
|
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.
|
4
|
+
version: 1.3.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-08-
|
11
|
+
date: 2017-08-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|
@@ -190,6 +190,20 @@ dependencies:
|
|
190
190
|
- - "~>"
|
191
191
|
- !ruby/object:Gem::Version
|
192
192
|
version: '3.0'
|
193
|
+
- !ruby/object:Gem::Dependency
|
194
|
+
name: conventional-changelog
|
195
|
+
requirement: !ruby/object:Gem::Requirement
|
196
|
+
requirements:
|
197
|
+
- - "~>"
|
198
|
+
- !ruby/object:Gem::Version
|
199
|
+
version: '1.2'
|
200
|
+
type: :development
|
201
|
+
prerelease: false
|
202
|
+
version_requirements: !ruby/object:Gem::Requirement
|
203
|
+
requirements:
|
204
|
+
- - "~>"
|
205
|
+
- !ruby/object:Gem::Version
|
206
|
+
version: '1.2'
|
193
207
|
description: |-
|
194
208
|
A cross-platform Pact verification tool to validate API Providers.
|
195
209
|
Used in the pact-js-provider project to simplify development
|
@@ -206,6 +220,7 @@ files:
|
|
206
220
|
- README.md
|
207
221
|
- bin/pact-provider-verifier
|
208
222
|
- lib/pact/provider_verifier.rb
|
223
|
+
- lib/pact/provider_verifier/add_header_middlware.rb
|
209
224
|
- lib/pact/provider_verifier/app.rb
|
210
225
|
- lib/pact/provider_verifier/cli.rb
|
211
226
|
- lib/pact/provider_verifier/pact_helper.rb
|