pact_broker 2.32.0 → 2.33.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (73) hide show
  1. checksums.yaml +4 -4
  2. data/.github/ISSUE_TEMPLATE.md +3 -0
  3. data/CHANGELOG.md +18 -0
  4. data/config/database.yml +5 -8
  5. data/db/migrations/20190510_set_version_sequence.rb +1 -0
  6. data/db/migrations/20190602_add_headers_column_to_webhooks.rb +6 -0
  7. data/db/migrations/20190603_migrate_webhook_headers.rb +10 -0
  8. data/lib/pact_broker/api/resources/index.rb +12 -0
  9. data/lib/pact_broker/api/resources/pact.rb +1 -1
  10. data/lib/pact_broker/api/resources/verifications.rb +1 -1
  11. data/lib/pact_broker/api/resources/webhook_execution.rb +1 -1
  12. data/lib/pact_broker/certificates/certificate.rb +1 -1
  13. data/lib/pact_broker/config/setting.rb +1 -1
  14. data/lib/pact_broker/db/data_migrations/migrate_webhook_headers.rb +30 -0
  15. data/lib/pact_broker/domain/pacticipant.rb +1 -1
  16. data/lib/pact_broker/domain/verification.rb +1 -1
  17. data/lib/pact_broker/domain/version.rb +1 -1
  18. data/lib/pact_broker/domain/webhook.rb +27 -1
  19. data/lib/pact_broker/domain/webhook_request.rb +9 -146
  20. data/lib/pact_broker/integrations/integration.rb +7 -0
  21. data/lib/pact_broker/matrix/repository.rb +0 -1
  22. data/lib/pact_broker/matrix/row.rb +58 -17
  23. data/lib/pact_broker/pacts/pact_publication.rb +8 -1
  24. data/lib/pact_broker/pacts/pact_version.rb +1 -1
  25. data/lib/pact_broker/pacts/repository.rb +5 -8
  26. data/lib/pact_broker/repositories/helpers.rb +5 -4
  27. data/lib/pact_broker/test/test_data_builder.rb +2 -2
  28. data/lib/pact_broker/version.rb +1 -1
  29. data/lib/pact_broker/versions/latest_version.rb +10 -0
  30. data/lib/pact_broker/webhooks/execution.rb +1 -1
  31. data/lib/pact_broker/webhooks/http_request_with_redacted_headers.rb +21 -0
  32. data/lib/pact_broker/webhooks/http_response_with_utf_8_safe_body.rb +21 -0
  33. data/lib/pact_broker/webhooks/job.rb +2 -2
  34. data/lib/pact_broker/webhooks/pact_and_verification_parameters.rb +86 -0
  35. data/lib/pact_broker/webhooks/render.rb +10 -71
  36. data/lib/pact_broker/webhooks/repository.rb +2 -9
  37. data/lib/pact_broker/webhooks/service.rb +5 -5
  38. data/lib/pact_broker/webhooks/triggered_webhook.rb +1 -1
  39. data/lib/pact_broker/webhooks/webhook.rb +9 -30
  40. data/lib/pact_broker/webhooks/webhook_event.rb +1 -1
  41. data/lib/pact_broker/{domain → webhooks}/webhook_execution_result.rb +6 -5
  42. data/lib/pact_broker/webhooks/webhook_request_logger.rb +105 -0
  43. data/lib/pact_broker/webhooks/webhook_request_template.rb +7 -6
  44. data/pact_broker.gemspec +1 -0
  45. data/script/docker/db-restore.sh +5 -0
  46. data/script/docker/db-rm.sh +3 -0
  47. data/script/docker/db-start.sh +7 -0
  48. data/script/import-pg-database.sh +5 -0
  49. data/script/seed.rb +1 -1
  50. data/spec/features/execute_webhook_spec.rb +1 -1
  51. data/spec/features/publish_verification_spec.rb +1 -1
  52. data/spec/integration/webhooks/certificate_spec.rb +4 -6
  53. data/spec/lib/pact_broker/api/decorators/webhook_execution_result_decorator_spec.rb +1 -1
  54. data/spec/lib/pact_broker/api/resources/verifications_spec.rb +1 -1
  55. data/spec/lib/pact_broker/api/resources/webhook_execution_spec.rb +1 -1
  56. data/spec/lib/pact_broker/db/data_migrations/migrate_webhook_headers_spec.rb +78 -0
  57. data/spec/lib/pact_broker/domain/webhook_request_spec.rb +8 -163
  58. data/spec/lib/pact_broker/domain/webhook_spec.rb +45 -8
  59. data/spec/lib/pact_broker/matrix/repository_spec.rb +24 -0
  60. data/spec/lib/pact_broker/pacticipants/find_potential_duplicate_pacticipant_names_spec.rb +4 -4
  61. data/spec/lib/pact_broker/pacts/pact_publication_spec.rb +60 -0
  62. data/spec/lib/pact_broker/webhooks/job_spec.rb +3 -3
  63. data/spec/lib/pact_broker/webhooks/render_spec.rb +22 -7
  64. data/spec/lib/pact_broker/webhooks/repository_spec.rb +24 -24
  65. data/spec/lib/pact_broker/webhooks/service_spec.rb +5 -5
  66. data/spec/lib/pact_broker/webhooks/webhook_request_logger_spec.rb +197 -0
  67. data/spec/lib/pact_broker/webhooks/webhook_request_template_spec.rb +13 -4
  68. data/spec/support/database.rb +1 -1
  69. data/spec/support/ssl_pact_broker_server.rb +46 -0
  70. data/tasks/database.rb +12 -0
  71. data/tasks/db.rake +26 -6
  72. data/tasks/docker_database.rb +25 -0
  73. metadata +35 -3
@@ -38,11 +38,15 @@ module PactBroker
38
38
  allow(PactBroker::Webhooks::Render).to receive(:call) do | content, pact, verification, &block |
39
39
  content + "BUILT"
40
40
  end
41
+
42
+ allow(PactAndVerificationParameters).to receive(:new).and_return(pact_and_verification_parameters)
41
43
  end
42
44
 
45
+ let(:pact_and_verification_parameters) { instance_double(PactAndVerificationParameters, to_hash: params_hash)}
46
+ let(:params_hash) { double('params hash') }
43
47
  let(:pact) { double('pact') }
44
48
  let(:verification) { double('verification') }
45
- let(:webhook_context) { { some: "context" } }
49
+ let(:webhook_context) { { some: "context", base_url: base_url } }
46
50
  let(:template_context) do
47
51
  {
48
52
  pact: pact,
@@ -52,8 +56,13 @@ module PactBroker
52
56
  end
53
57
  subject { WebhookRequestTemplate.new(attributes).build(template_context) }
54
58
 
59
+ it "creates the template parameters" do
60
+ expect(PactAndVerificationParameters).to receive(:new).with(pact, verification, webhook_context)
61
+ subject
62
+ end
63
+
55
64
  it "renders the url template" do
56
- expect(PactBroker::Webhooks::Render).to receive(:call).with(url, pact, verification, webhook_context) do | content, pact, verification, &block |
65
+ expect(PactBroker::Webhooks::Render).to receive(:call).with(url, params_hash) do | content, pact, verification, &block |
57
66
  expect(content).to eq url
58
67
  expect(pact).to be pact
59
68
  expect(verification).to be verification
@@ -67,7 +76,7 @@ module PactBroker
67
76
  let(:body) { 'body' }
68
77
 
69
78
  it "renders the body template with the String" do
70
- expect(PactBroker::Webhooks::Render).to receive(:call).with('body', pact, verification, webhook_context)
79
+ expect(PactBroker::Webhooks::Render).to receive(:call).with('body', params_hash)
71
80
  subject
72
81
  end
73
82
  end
@@ -76,7 +85,7 @@ module PactBroker
76
85
  let(:request_body_string) { '{"foo":"bar"}' }
77
86
 
78
87
  it "renders the body template with JSON" do
79
- expect(PactBroker::Webhooks::Render).to receive(:call).with(request_body_string, pact, verification, webhook_context)
88
+ expect(PactBroker::Webhooks::Render).to receive(:call).with(request_body_string, params_hash)
80
89
  subject
81
90
  end
82
91
  end
@@ -1,5 +1,5 @@
1
1
  require 'db'
2
2
  require 'tasks/database'
3
3
  require 'pact_broker/db'
4
- raise "Wrong environment!!! Don't run this script!! ENV['RACK_ENV'] is #{ENV['RACK_ENV']} and RACK_ENV is #{RACK_ENV}" if ENV['RACK_ENV'] != 'test' || RACK_ENV != 'test'
4
+ raise "Wrong environment!!! Don't run this script!! ENV['RACK_ENV'] is #{ENV['RACK_ENV']} and RACK_ENV is #{RACK_ENV}" if ENV['RACK_ENV'] != 'test'
5
5
  PactBroker::DB.connection = PactBroker::Database.database = DB::PACT_BROKER_DB
@@ -0,0 +1,46 @@
1
+ if __FILE__ == $0
2
+
3
+ SSL_KEY = 'spec/fixtures/certificates/key.pem'
4
+ SSL_CERT = 'spec/fixtures/certificates/cert.pem'
5
+
6
+ trap(:INT) do
7
+ @server.shutdown
8
+ exit
9
+ end
10
+
11
+ def webrick_opts port
12
+ certificate = OpenSSL::X509::Certificate.new(File.read(SSL_CERT))
13
+ cert_name = certificate.subject.to_a.collect{|a| a[0..1] }
14
+ {
15
+ Port: port,
16
+ Host: "0.0.0.0",
17
+ AccessLog: [],
18
+ SSLCertificate: certificate,
19
+ SSLPrivateKey: OpenSSL::PKey::RSA.new(File.read(SSL_KEY)),
20
+ SSLEnable: true,
21
+ SSLCertName: cert_name
22
+ }
23
+ end
24
+
25
+ require 'pact_broker'
26
+
27
+ DATABASE_CREDENTIALS = { adapter: "sqlite", database: "/tmp/pact_broker_ssl_database.sqlite3", :encoding => 'utf8' }
28
+
29
+ app = PactBroker::App.new do | config |
30
+ config.logger = ::Logger.new($stdout)
31
+ config.logger.level = ::Logger::INFO
32
+ config.auto_migrate_db = true
33
+ config.database_connection = Sequel.connect(DATABASE_CREDENTIALS.merge(:logger => PactBroker::DB::LogQuietener.new(Logger.new(StringIO.new))))
34
+ end
35
+
36
+ require 'webrick'
37
+ require 'webrick/https'
38
+ require 'rack'
39
+ require 'rack/handler/webrick'
40
+
41
+ opts = webrick_opts(4444)
42
+
43
+ Rack::Handler::WEBrick.run(app, opts) do |server|
44
+ @server = server
45
+ end
46
+ end
@@ -96,6 +96,18 @@ module PactBroker
96
96
  end
97
97
  end
98
98
 
99
+ def wait_for_database
100
+ tries = 0
101
+ begin
102
+ database
103
+ rescue StandardError => e
104
+ tries += 1
105
+ sleep 1
106
+ retry if tries < 10
107
+ raise e
108
+ end
109
+ end
110
+
99
111
  private
100
112
 
101
113
  def ordered_tables
@@ -21,7 +21,6 @@ namespace :db do
21
21
  task :env => ['bundler:setup'] do
22
22
  # Require RACK_ENV to be set for tasks that will be called in production
23
23
  raise "Please specify RACK_ENV" unless ENV['RACK_ENV']
24
- RACK_ENV = ENV['RACK_ENV']
25
24
  require File.dirname(__FILE__) + '/database.rb'
26
25
  end
27
26
 
@@ -97,11 +96,32 @@ namespace :db do
97
96
  end
98
97
 
99
98
  desc 'Annotate the Sequel domain classes with schema information'
100
- task :annotate =>['db:set_postgres_database_adapter', 'db:migrate'] do
101
- load 'tasks/database/annotate.rb'
102
- require 'pact_broker/db'
103
- PactBroker::DB.connection = PactBroker::Database.database
104
- PactBroker::Annotate.call
99
+ task :annotate do
100
+ begin
101
+ ENV['RACK_ENV'] = 'test'
102
+ ENV['DATABASE_ADAPTER'] = 'docker_postgres'
103
+ load 'tasks/docker_database.rb'
104
+ DockerDatabase.stop_and_remove("postgres-for-annotate")
105
+ DockerDatabase.start(name: "postgres-for-annotate", port: "5433")
106
+ load 'tasks/database.rb'
107
+ PactBroker::Database.wait_for_database
108
+ PactBroker::Database.migrate
109
+ load 'tasks/database/annotate.rb'
110
+ require 'pact_broker/db'
111
+ PactBroker::Annotate.call
112
+ ensure
113
+ DockerDatabase.stop_and_remove("postgres-for-annotate")
114
+ end
115
+ end
116
+
117
+ task 'docker:start' do
118
+ load 'tasks/docker_database.rb'
119
+ DockerDatabase.start(name: "postgres-for-pact-broker", port: "5433")
120
+ end
121
+
122
+ task 'docker:stop' do
123
+ load 'tasks/docker_database.rb'
124
+ DockerDatabase.stop_and_remove("postgres-for-pact-broker")
105
125
  end
106
126
 
107
127
  # task :create => 'db:env' do
@@ -0,0 +1,25 @@
1
+ require 'docker'
2
+
3
+ module DockerDatabase
4
+
5
+ POSTGRES_IMAGE_NAME = 'postgres:9.6'.freeze
6
+
7
+ def self.start(options)
8
+ Docker::Image.create('fromImage' => POSTGRES_IMAGE_NAME)
9
+ host_port = options.fetch(:port)
10
+ Docker::Container.create(
11
+ 'Image' => POSTGRES_IMAGE_NAME,
12
+ 'name' => options.fetch(:name),
13
+ 'ExposedPorts' => { '5432/tcp' => {} },
14
+ 'HostConfig' => {
15
+ 'PortBindings' => {
16
+ '5432/tcp' => [{ 'HostPort' => host_port }]
17
+ }
18
+ }
19
+ ).start({})
20
+ end
21
+
22
+ def self.stop_and_remove(name)
23
+ ::Docker::Container.get(name).remove(force: true) rescue nil
24
+ end
25
+ end
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.32.0
4
+ version: 2.33.0
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: 2019-05-30 00:00:00.000000000 Z
13
+ date: 2019-06-07 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: httparty
@@ -554,6 +554,20 @@ dependencies:
554
554
  - - "~>"
555
555
  - !ruby/object:Gem::Version
556
556
  version: '0.15'
557
+ - !ruby/object:Gem::Dependency
558
+ name: docker-api
559
+ requirement: !ruby/object:Gem::Requirement
560
+ requirements:
561
+ - - "~>"
562
+ - !ruby/object:Gem::Version
563
+ version: '1.34'
564
+ type: :development
565
+ prerelease: false
566
+ version_requirements: !ruby/object:Gem::Requirement
567
+ requirements:
568
+ - - "~>"
569
+ - !ruby/object:Gem::Version
570
+ version: '1.34'
557
571
  description: A server that stores and returns pact files generated by the pact gem.
558
572
  It enables head/prod cross testing of the consumer and provider projects.
559
573
  email:
@@ -695,6 +709,8 @@ files:
695
709
  - db/migrations/20190523_add_enabled_column_to_webhooks.rb
696
710
  - db/migrations/20190524_set_webhooks_enabled.rb
697
711
  - db/migrations/20190525_add_description_column_to_webhooks.rb
712
+ - db/migrations/20190602_add_headers_column_to_webhooks.rb
713
+ - db/migrations/20190603_migrate_webhook_headers.rb
698
714
  - db/migrations/migration_helper.rb
699
715
  - db/test/backwards_compatibility/.rspec
700
716
  - db/test/backwards_compatibility/Appraisals
@@ -867,6 +883,7 @@ files:
867
883
  - lib/pact_broker/db.rb
868
884
  - lib/pact_broker/db/clean.rb
869
885
  - lib/pact_broker/db/data_migrations/helpers.rb
886
+ - lib/pact_broker/db/data_migrations/migrate_webhook_headers.rb
870
887
  - lib/pact_broker/db/data_migrations/set_consumer_ids_for_pact_publications.rb
871
888
  - lib/pact_broker/db/data_migrations/set_latest_version_sequence_value.rb
872
889
  - lib/pact_broker/db/data_migrations/set_pacticipant_ids_for_verifications.rb
@@ -925,7 +942,6 @@ files:
925
942
  - lib/pact_broker/domain/verification.rb
926
943
  - lib/pact_broker/domain/version.rb
927
944
  - lib/pact_broker/domain/webhook.rb
928
- - lib/pact_broker/domain/webhook_execution_result.rb
929
945
  - lib/pact_broker/domain/webhook_request.rb
930
946
  - lib/pact_broker/domain/webhook_request_header.rb
931
947
  - lib/pact_broker/error.rb
@@ -1033,8 +1049,11 @@ files:
1033
1049
  - lib/pact_broker/versions/service.rb
1034
1050
  - lib/pact_broker/webhooks/check_host_whitelist.rb
1035
1051
  - lib/pact_broker/webhooks/execution.rb
1052
+ - lib/pact_broker/webhooks/http_request_with_redacted_headers.rb
1053
+ - lib/pact_broker/webhooks/http_response_with_utf_8_safe_body.rb
1036
1054
  - lib/pact_broker/webhooks/job.rb
1037
1055
  - lib/pact_broker/webhooks/latest_triggered_webhook.rb
1056
+ - lib/pact_broker/webhooks/pact_and_verification_parameters.rb
1038
1057
  - lib/pact_broker/webhooks/redact_logs.rb
1039
1058
  - lib/pact_broker/webhooks/render.rb
1040
1059
  - lib/pact_broker/webhooks/repository.rb
@@ -1044,6 +1063,8 @@ files:
1044
1063
  - lib/pact_broker/webhooks/triggered_webhook.rb
1045
1064
  - lib/pact_broker/webhooks/webhook.rb
1046
1065
  - lib/pact_broker/webhooks/webhook_event.rb
1066
+ - lib/pact_broker/webhooks/webhook_execution_result.rb
1067
+ - lib/pact_broker/webhooks/webhook_request_logger.rb
1047
1068
  - lib/pact_broker/webhooks/webhook_request_template.rb
1048
1069
  - lib/rack/hal_browser.rb
1049
1070
  - lib/rack/hal_browser/redirect.rb
@@ -1112,9 +1133,13 @@ files:
1112
1133
  - public/stylesheets/matrix.css
1113
1134
  - public/stylesheets/pact.css
1114
1135
  - script/db-spec.sh
1136
+ - script/docker/db-restore.sh
1137
+ - script/docker/db-rm.sh
1138
+ - script/docker/db-start.sh
1115
1139
  - script/foo-bar-verification.json
1116
1140
  - script/foo-bar.json
1117
1141
  - script/generate-certificates-for-webooks-certificate-spec.rb
1142
+ - script/import-pg-database.sh
1118
1143
  - script/insert-self-signed-certificate-from-url.rb
1119
1144
  - script/prod/migrate-latest-pacts.sh
1120
1145
  - script/publish-2.sh
@@ -1287,6 +1312,7 @@ files:
1287
1312
  - spec/lib/pact_broker/config/space_delimited_string_list_spec.rb
1288
1313
  - spec/lib/pact_broker/configuration_spec.rb
1289
1314
  - spec/lib/pact_broker/db/clean_spec.rb
1315
+ - spec/lib/pact_broker/db/data_migrations/migrate_webhook_headers_spec.rb
1290
1316
  - spec/lib/pact_broker/db/data_migrations/set_consumer_ids_for_pact_publications_spec.rb
1291
1317
  - spec/lib/pact_broker/db/data_migrations/set_latest_version_sequence_value_spec.rb
1292
1318
  - spec/lib/pact_broker/db/log_quietener_spec.rb
@@ -1360,6 +1386,7 @@ files:
1360
1386
  - spec/lib/pact_broker/webhooks/status_spec.rb
1361
1387
  - spec/lib/pact_broker/webhooks/trigger_service_spec.rb
1362
1388
  - spec/lib/pact_broker/webhooks/triggered_webhook_spec.rb
1389
+ - spec/lib/pact_broker/webhooks/webhook_request_logger_spec.rb
1363
1390
  - spec/lib/pact_broker/webhooks/webhook_request_template_spec.rb
1364
1391
  - spec/lib/pact_broker/webhooks/webhook_spec.rb
1365
1392
  - spec/lib/rack/hal_browser/redirect_spec.rb
@@ -1404,6 +1431,7 @@ files:
1404
1431
  - spec/support/shared_context.rb
1405
1432
  - spec/support/shared_examples_for_responses.rb
1406
1433
  - spec/support/simplecov.rb
1434
+ - spec/support/ssl_pact_broker_server.rb
1407
1435
  - spec/support/ssl_webhook_server.rb
1408
1436
  - spec/support/test_data_builder.rb
1409
1437
  - spec/support/verification_job.rb
@@ -1415,6 +1443,7 @@ files:
1415
1443
  - tasks/database/table_dependency_calculator.rb
1416
1444
  - tasks/db.rake
1417
1445
  - tasks/development.rake
1446
+ - tasks/docker_database.rb
1418
1447
  - tasks/pact.rake
1419
1448
  - tasks/release.rake
1420
1449
  - tasks/rspec.rake
@@ -1633,6 +1662,7 @@ test_files:
1633
1662
  - spec/lib/pact_broker/config/space_delimited_string_list_spec.rb
1634
1663
  - spec/lib/pact_broker/configuration_spec.rb
1635
1664
  - spec/lib/pact_broker/db/clean_spec.rb
1665
+ - spec/lib/pact_broker/db/data_migrations/migrate_webhook_headers_spec.rb
1636
1666
  - spec/lib/pact_broker/db/data_migrations/set_consumer_ids_for_pact_publications_spec.rb
1637
1667
  - spec/lib/pact_broker/db/data_migrations/set_latest_version_sequence_value_spec.rb
1638
1668
  - spec/lib/pact_broker/db/log_quietener_spec.rb
@@ -1706,6 +1736,7 @@ test_files:
1706
1736
  - spec/lib/pact_broker/webhooks/status_spec.rb
1707
1737
  - spec/lib/pact_broker/webhooks/trigger_service_spec.rb
1708
1738
  - spec/lib/pact_broker/webhooks/triggered_webhook_spec.rb
1739
+ - spec/lib/pact_broker/webhooks/webhook_request_logger_spec.rb
1709
1740
  - spec/lib/pact_broker/webhooks/webhook_request_template_spec.rb
1710
1741
  - spec/lib/pact_broker/webhooks/webhook_spec.rb
1711
1742
  - spec/lib/rack/hal_browser/redirect_spec.rb
@@ -1750,6 +1781,7 @@ test_files:
1750
1781
  - spec/support/shared_context.rb
1751
1782
  - spec/support/shared_examples_for_responses.rb
1752
1783
  - spec/support/simplecov.rb
1784
+ - spec/support/ssl_pact_broker_server.rb
1753
1785
  - spec/support/ssl_webhook_server.rb
1754
1786
  - spec/support/test_data_builder.rb
1755
1787
  - spec/support/verification_job.rb