pact_broker 2.68.0 → 2.68.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +7 -0
- data/docker-compose-issue-repro.yml +18 -0
- data/issue-reproduction/Dockerfile-pact-broker +42 -0
- data/lib/pact_broker/configuration.rb +3 -0
- data/lib/pact_broker/domain/webhook_request.rb +2 -1
- data/lib/pact_broker/test/http_test_data_builder.rb +121 -0
- data/lib/pact_broker/version.rb +1 -1
- data/script/reproduce-issue.rb +20 -0
- data/spec/lib/pact_broker/domain/webhook_request_spec.rb +1 -1
- metadata +6 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d1076b8629f5570c2304ec89fc169be77c2b6f54aaf832ceec91d5a939806f97
|
4
|
+
data.tar.gz: 28c09fcdf4d7abc16f367b8c6aaebfd3f3baaa68850ae5809aefb33d92bae8fa
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6fd730f1c2500942f680f66c4f526b138e71fd6f27a194b85fc280f9f1d959d6ecf79e88cb4aa685d451373cc9c3ac80714751a7d3658ec75c00f874925a8a39
|
7
|
+
data.tar.gz: 4327534a89cbaae5d76a86bb36aeb220668fd41805837923188e4ae1bfe2e3968d416b4c26338c6b80cc911552bb3f41db2ac0feef4a0bf70470820d1f780136
|
data/CHANGELOG.md
CHANGED
@@ -0,0 +1,18 @@
|
|
1
|
+
version: "3"
|
2
|
+
|
3
|
+
services:
|
4
|
+
pact-broker:
|
5
|
+
build:
|
6
|
+
context: .
|
7
|
+
dockerfile: issue-reproduction/Dockerfile-pact-broker
|
8
|
+
ports:
|
9
|
+
- "9292:9292"
|
10
|
+
command: bundle exec rackup -p 9292 -o 0.0.0.0
|
11
|
+
|
12
|
+
repro-issue:
|
13
|
+
build:
|
14
|
+
context: .
|
15
|
+
dockerfile: issue-reproduction/Dockerfile-pact-broker
|
16
|
+
depends_on:
|
17
|
+
- pact-broker
|
18
|
+
command: dockerize -wait http://pact-broker:9292 -timeout 30s /home/script/reproduce-issue.rb
|
@@ -0,0 +1,42 @@
|
|
1
|
+
FROM ruby:2.5.3-alpine
|
2
|
+
|
3
|
+
RUN apk update \
|
4
|
+
&& apk --no-cache add \
|
5
|
+
"build-base>=0.5" \
|
6
|
+
"bash>=4.4" \
|
7
|
+
"ca-certificates>=20190108" \
|
8
|
+
"git>=2.20" \
|
9
|
+
"postgresql-dev>=11.3" \
|
10
|
+
"sqlite-dev>=3.28" \
|
11
|
+
"sqlite>=3.28" \
|
12
|
+
"tzdata>=2019" \
|
13
|
+
"mariadb-dev>=10.3" \
|
14
|
+
&& rm -rf /var/cache/apk/*
|
15
|
+
|
16
|
+
RUN apk add --no-cache openssl less
|
17
|
+
|
18
|
+
ENV DOCKERIZE_VERSION v0.6.1
|
19
|
+
RUN wget https://github.com/jwilder/dockerize/releases/download/$DOCKERIZE_VERSION/dockerize-alpine-linux-amd64-$DOCKERIZE_VERSION.tar.gz \
|
20
|
+
&& tar -C /usr/local/bin -xzvf dockerize-alpine-linux-amd64-$DOCKERIZE_VERSION.tar.gz \
|
21
|
+
&& rm dockerize-alpine-linux-amd64-$DOCKERIZE_VERSION.tar.gz
|
22
|
+
|
23
|
+
|
24
|
+
WORKDIR /home
|
25
|
+
|
26
|
+
COPY Gemfile /home/Gemfile
|
27
|
+
COPY pact_broker.gemspec /home/pact_broker.gemspec
|
28
|
+
COPY lib/pact_broker/version.rb /home/lib/pact_broker/version.rb
|
29
|
+
COPY .gitignore /home/.gitignore
|
30
|
+
|
31
|
+
RUN gem install bundler -v '~>2.0.0' \
|
32
|
+
&& bundle install --jobs 3 --retry 3
|
33
|
+
|
34
|
+
COPY lib /home/lib
|
35
|
+
COPY db /home/db
|
36
|
+
COPY public /home/public
|
37
|
+
COPY tasks /home/tasks
|
38
|
+
COPY config.ru /home/config.ru
|
39
|
+
COPY Rakefile /home/Rakefile
|
40
|
+
COPY script /home/script
|
41
|
+
|
42
|
+
RUN ls /home
|
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'pact_broker/version'
|
1
2
|
require 'pact_broker/error'
|
2
3
|
require 'pact_broker/config/space_delimited_string_list'
|
3
4
|
require 'semantic_logger'
|
@@ -46,6 +47,7 @@ module PactBroker
|
|
46
47
|
attr_accessor :warning_error_class_names
|
47
48
|
attr_accessor :check_for_potential_duplicate_pacticipant_names
|
48
49
|
attr_accessor :webhook_retry_schedule
|
50
|
+
attr_accessor :user_agent
|
49
51
|
attr_reader :webhook_http_method_whitelist, :webhook_scheme_whitelist, :webhook_host_whitelist
|
50
52
|
attr_accessor :semver_formats
|
51
53
|
attr_accessor :enable_public_badge_access, :shields_io_base_url, :badge_provider_mode
|
@@ -93,6 +95,7 @@ module PactBroker
|
|
93
95
|
require 'pact_broker/db/seed_example_data'
|
94
96
|
PactBroker::DB::SeedExampleData.call
|
95
97
|
end
|
98
|
+
config.user_agent = "Pact Broker v#{PactBroker::VERSION}"
|
96
99
|
config.base_equality_only_on_content_that_affects_verification_results = true
|
97
100
|
config.order_versions_by_date = true
|
98
101
|
config.semver_formats = ["%M.%m.%p%s%d", "%M.%m", "%M"]
|
@@ -9,6 +9,7 @@ require 'cgi'
|
|
9
9
|
require 'delegate'
|
10
10
|
require 'rack/utils'
|
11
11
|
require 'pact_broker/webhooks/webhook_request_logger'
|
12
|
+
require 'pact_broker/configuration'
|
12
13
|
|
13
14
|
module PactBroker
|
14
15
|
module Domain
|
@@ -61,7 +62,7 @@ module PactBroker
|
|
61
62
|
@http_request ||= begin
|
62
63
|
req = Net::HTTP.const_get(method.capitalize).new(uri.request_uri)
|
63
64
|
req.delete("accept-encoding")
|
64
|
-
req
|
65
|
+
req["user-agent"] = PactBroker.configuration.user_agent
|
65
66
|
headers.each_pair { | name, value | req[name] = value }
|
66
67
|
req.basic_auth(username, password) if username && username.size > 0
|
67
68
|
req.body = body unless body.nil?
|
@@ -0,0 +1,121 @@
|
|
1
|
+
require 'faraday'
|
2
|
+
require 'faraday_middleware'
|
3
|
+
require 'logger'
|
4
|
+
require 'erb'
|
5
|
+
require 'yaml'
|
6
|
+
|
7
|
+
module PactBroker
|
8
|
+
module Test
|
9
|
+
class HttpTestDataBuilder
|
10
|
+
|
11
|
+
attr_reader :client, :last_consumer_name, :last_provider_name, :last_consumer_version_number, :last_provider_version_number
|
12
|
+
|
13
|
+
def initialize(pact_broker_base_url, auth)
|
14
|
+
@client = Faraday.new(url: pact_broker_base_url) do |faraday|
|
15
|
+
faraday.request :json
|
16
|
+
faraday.response :json, :content_type => /\bjson$/
|
17
|
+
faraday.response :logger, ::Logger.new($stdout), headers: false do | logger |
|
18
|
+
logger.filter(/(Authorization: ).*/,'\1[REMOVED]')
|
19
|
+
end
|
20
|
+
# faraday.headers['Authorization'] = "Bearer #{pactflow_api_token}"
|
21
|
+
faraday.adapter Faraday.default_adapter
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def sleep
|
26
|
+
Kernel.sleep 1
|
27
|
+
self
|
28
|
+
end
|
29
|
+
|
30
|
+
def create_tagged_pacticipant_version(pacticipant:, version:, tag:)
|
31
|
+
[*tag].each do | tag |
|
32
|
+
create_tag(pacticipant: pacticipant, version: version, tag: tag)
|
33
|
+
end
|
34
|
+
self
|
35
|
+
end
|
36
|
+
|
37
|
+
def create_tag(pacticipant:, version:, tag:)
|
38
|
+
puts "Creating tag '#{tag}' for #{pacticipant} version #{version}"
|
39
|
+
client.put("/pacticipants/#{encode(pacticipant)}/versions/#{encode(version)}/tags/#{encode(tag)}", {})
|
40
|
+
self
|
41
|
+
end
|
42
|
+
|
43
|
+
def publish_pact(consumer: last_consumer_name, consumer_version:, provider: last_provider_name, content_id:, tag:)
|
44
|
+
@last_consumer_name = consumer
|
45
|
+
@last_provider_name = provider
|
46
|
+
@last_consumer_version_number = consumer_version
|
47
|
+
|
48
|
+
[*tag].each do | tag |
|
49
|
+
create_tag(pacticipant: consumer, version: consumer_version, tag: tag)
|
50
|
+
end
|
51
|
+
|
52
|
+
|
53
|
+
content = generate_content(consumer, provider, content_id)
|
54
|
+
puts "Publishing pact for consumer #{consumer} version #{consumer_version} and provider #{provider}"
|
55
|
+
pact_path = "/pacts/provider/#{encode(provider)}/consumer/#{encode(consumer)}/version/#{encode(consumer_version)}"
|
56
|
+
@publish_pact_response = client.put(pact_path, content)
|
57
|
+
self
|
58
|
+
end
|
59
|
+
|
60
|
+
def get_pacts_for_verification(provider: last_provider_name, provider_version_tag: , consumer_version_selectors:, enable_pending: false, include_wip_pacts_since: nil)
|
61
|
+
puts "Fetching pacts for verification for #{provider}"
|
62
|
+
body = {
|
63
|
+
providerVersionTags: [*provider_version_tag],
|
64
|
+
consumerVersionSelectors: consumer_version_selectors,
|
65
|
+
includePendingStatus: enable_pending,
|
66
|
+
includeWipPactsSince: include_wip_pacts_since
|
67
|
+
}
|
68
|
+
@pacts_for_verification_response = client.post("/pacts/provider/#{encode(provider)}/for-verification", body)
|
69
|
+
self
|
70
|
+
end
|
71
|
+
|
72
|
+
def print_pacts_for_verification
|
73
|
+
puts "Pacts for verification:"
|
74
|
+
@pacts_for_verification_response.body["_embedded"]["pacts"].each do | pact |
|
75
|
+
puts({
|
76
|
+
"url" => pact["_links"]["self"]["href"],
|
77
|
+
"wip" => pact["verificationProperties"]["wip"],
|
78
|
+
"pending" => pact["verificationProperties"]["pending"]
|
79
|
+
}.to_yaml)
|
80
|
+
end
|
81
|
+
self
|
82
|
+
end
|
83
|
+
|
84
|
+
def print_pacts_for_verification_response
|
85
|
+
puts @pacts_for_verification_response.body
|
86
|
+
self
|
87
|
+
end
|
88
|
+
|
89
|
+
def delete_integration(consumer:, provider:)
|
90
|
+
client.delete("/integrations/provider/#{encode(provider)}/consumer/#{encode(consumer)}")
|
91
|
+
self
|
92
|
+
end
|
93
|
+
|
94
|
+
def generate_content(consumer_name, provider_name, content_id)
|
95
|
+
{
|
96
|
+
consumer: {
|
97
|
+
name: consumer_name
|
98
|
+
},
|
99
|
+
provider: {
|
100
|
+
name: provider_name
|
101
|
+
},
|
102
|
+
interactions: [
|
103
|
+
{
|
104
|
+
request: {
|
105
|
+
method: "GET",
|
106
|
+
path: "/things/#{content_id}"
|
107
|
+
},
|
108
|
+
response: {
|
109
|
+
status: 200
|
110
|
+
}
|
111
|
+
}
|
112
|
+
]
|
113
|
+
}
|
114
|
+
end
|
115
|
+
|
116
|
+
def encode string
|
117
|
+
ERB::Util.url_encode(string)
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
data/lib/pact_broker/version.rb
CHANGED
@@ -0,0 +1,20 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
$LOAD_PATH << "#{Dir.pwd}/lib"
|
4
|
+
|
5
|
+
require 'pact_broker/test/http_test_data_builder'
|
6
|
+
|
7
|
+
td = PactBroker::Test::HttpTestDataBuilder.new('http://pact-broker:9292', { })
|
8
|
+
td.delete_integration(consumer: "Foo", provider: "Bar")
|
9
|
+
.create_tagged_pacticipant_version(pacticipant: "Bar", version: "1", tag: "master")
|
10
|
+
.sleep
|
11
|
+
.publish_pact(consumer: "Foo", consumer_version: "1", provider: "Bar", content_id: "111", tag: "master")
|
12
|
+
.sleep
|
13
|
+
.publish_pact(consumer_version: "2", content_id: "222", tag: "feat-x")
|
14
|
+
.sleep
|
15
|
+
.get_pacts_for_verification(
|
16
|
+
enable_pending: true,
|
17
|
+
provider_version_tag: "master",
|
18
|
+
include_wip_pacts_since: "2020-01-01",
|
19
|
+
consumer_version_selectors: [{ tag: "master", latest: true }])
|
20
|
+
.print_pacts_for_verification
|
@@ -77,7 +77,7 @@ module PactBroker
|
|
77
77
|
describe "execute" do
|
78
78
|
let!(:http_request) do
|
79
79
|
stub_request(:post, "http://example.org/hook").
|
80
|
-
with(:headers => {'Content-Type'=>'text/plain'}, :body => request_body).
|
80
|
+
with(:headers => {'Content-Type'=>'text/plain', 'User-Agent' => /Pact Broker/}, :body => request_body).
|
81
81
|
to_return(:status => status, :body => "respbod", :headers => {'Content-Type' => 'text/foo, blah'})
|
82
82
|
end
|
83
83
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pact_broker
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.68.
|
4
|
+
version: 2.68.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bethany Skurrie
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2020-10-
|
13
|
+
date: 2020-10-25 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: httparty
|
@@ -555,6 +555,7 @@ files:
|
|
555
555
|
- db/test/change_migration_strategy/Rakefile
|
556
556
|
- db/test/change_migration_strategy/before/Gemfile
|
557
557
|
- docker-compose-dev-postgres.yml
|
558
|
+
- docker-compose-issue-repro.yml
|
558
559
|
- docker-compose-test.yml
|
559
560
|
- docs/images/Pactflow logo - black small.png
|
560
561
|
- example/Gemfile
|
@@ -565,6 +566,7 @@ files:
|
|
565
566
|
- example/basic_auth/config.ru
|
566
567
|
- example/config.ru
|
567
568
|
- example/example_data.sql
|
569
|
+
- issue-reproduction/Dockerfile-pact-broker
|
568
570
|
- lib/db.rb
|
569
571
|
- lib/pact/doc/README.md
|
570
572
|
- lib/pact/doc/doc_file.rb
|
@@ -873,6 +875,7 @@ files:
|
|
873
875
|
- lib/pact_broker/tasks/delete_overwritten_data_task.rb
|
874
876
|
- lib/pact_broker/tasks/migration_task.rb
|
875
877
|
- lib/pact_broker/tasks/version_task.rb
|
878
|
+
- lib/pact_broker/test/http_test_data_builder.rb
|
876
879
|
- lib/pact_broker/test/test_data_builder.rb
|
877
880
|
- lib/pact_broker/ui.rb
|
878
881
|
- lib/pact_broker/ui/app.rb
|
@@ -1039,6 +1042,7 @@ files:
|
|
1039
1042
|
- script/recreate-test-database.sh
|
1040
1043
|
- script/release-via-github-action.sh
|
1041
1044
|
- script/release.sh
|
1045
|
+
- script/reproduce-issue.rb
|
1042
1046
|
- script/restart.sh
|
1043
1047
|
- script/run-with-ssl.rb
|
1044
1048
|
- script/seed-example-matrix.rb
|