pact-provider-verifier 1.2.0 → 1.3.0

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: 841f89c7d8e4630a4e451fe78a7aa565e040bfd9
4
- data.tar.gz: 5185190d6bb9316ea3187bd804f883f5efec301c
3
+ metadata.gz: 8b43ff3b5b20e388373c13ea48743bdd78a24e6d
4
+ data.tar.gz: 73378cfd5da336900a6bc5b4ccf231287eef90e8
5
5
  SHA512:
6
- metadata.gz: 4270937089f9520069c711ca967b0a5dc2d9c936748db259da8af1edc2d8ccc5fb43c24a9833ad6e1d08f97fe694b869d18bcf32fcf6cd6aa4751b3df614fdbf
7
- data.tar.gz: 2fd9ed5470c4fd58325d962232eb2b3e24c6a27e42ddcb69809a31da72712bd3311b6f99c806dd206bcf8ba828b9aad1187115fdfc811207d19031fb5f6af7c6
6
+ metadata.gz: 2200801d7a18443487d7954d6eb68df0a74751332377ffdbd046638e3358ec66270144eafff2cd7499c9b347380f7494711d43ffe17cba094c672d1ca5969333
7
+ data.tar.gz: 0e5995e8176546921343631e1d5b7dcec3f18236d279073038941432bb26269b04eecbda45ed1411ffd055d7ad737ecc63665286dff2889eb45aeb125ceb172e
data/CHANGELOG.md CHANGED
@@ -1,3 +1,11 @@
1
+ <a name="1.3.0-1"></a>
2
+ # v1.3.0 (2017-08-08)
3
+
4
+ #### Features
5
+
6
+ * **custom provider header**
7
+ * Allow a --custom-provider-header to be specified ([e3ea6fa](/../../commit/e3ea6fa))
8
+
1
9
  <a name="1.2.0"></a>
2
10
  # 1.2.0 (2017-08-05)
3
11
 
@@ -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
- Rack::ReverseProxy.new do
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}")
@@ -1,5 +1,5 @@
1
1
  module Pact
2
2
  module ProviderVerifier
3
- VERSION = "1.2.0"
3
+ VERSION = "1.3.0"
4
4
  end
5
5
  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.2.0
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-05 00:00:00.000000000 Z
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