From b812dc050b9509382abedb1e7e969993f16a75d0 Mon Sep 17 00:00:00 2001 From: Yousaf Nabi Date: Tue, 6 Aug 2024 12:50:50 +0100 Subject: [PATCH 1/4] fix: support rack 2 and 3 --- .github/workflows/test.yml | 7 +++++-- pact-provider-verifier.gemspec | 4 +++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 9a19fb6..630f5fa 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -4,16 +4,19 @@ on: [push, pull_request] jobs: test: - runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: ruby_version: ["2.7", "3.0", "3.1", "3.2", "3.3"] os: ["ubuntu-latest","windows-latest","macos-latest"] + rack_version: ["2", "3"] + runs-on: ${{ matrix.os }} + env: + RACK_VERSION: ${{ matrix.rack_version }} steps: - uses: actions/checkout@v4 - uses: ruby/setup-ruby@v1 with: ruby-version: ${{ matrix.ruby_version }} - run: "bundle install" - - run: "bundle exec rake" + - run: "bundle exec rake" \ No newline at end of file diff --git a/pact-provider-verifier.gemspec b/pact-provider-verifier.gemspec index 25d6e96..35510f7 100644 --- a/pact-provider-verifier.gemspec +++ b/pact-provider-verifier.gemspec @@ -26,7 +26,9 @@ Gem::Specification.new do |gem| gem.add_runtime_dependency 'faraday', '~> 2.5' gem.add_runtime_dependency 'faraday-retry', '~> 2.2' gem.add_runtime_dependency 'json', '>1.8' - gem.add_runtime_dependency 'rack', '~> 2.1' + gem.add_runtime_dependency 'rack', '>= 3.0', '< 4.0' + gem.add_runtime_dependency 'rackup', '~> 2.0' + gem.add_runtime_dependency 'rack-reverse-proxy' gem.add_runtime_dependency 'rspec_junit_formatter', '~> 0.3' gem.add_runtime_dependency 'ostruct' From cfb6dff09ed8b89b76c3786ffb7ea716c1043dba Mon Sep 17 00:00:00 2001 From: Yousaf Nabi Date: Tue, 6 Aug 2024 13:25:31 +0100 Subject: [PATCH 2/4] !fix: use rack-reverse-proxy fix for rack 3 compat note using pr fix from unmaintained gem https://github.com/waterlink/rack-reverse-proxy/pull/73 --- Gemfile | 6 ++++++ pact-provider-verifier.gemspec | 10 +++++++--- spec/support/provider-echo-host.ru | 2 +- spec/support/provider_with_self_signed_cert.rb | 2 +- spec/support/webbrick.rb | 11 +++++++++++ 5 files changed, 26 insertions(+), 5 deletions(-) create mode 100644 spec/support/webbrick.rb diff --git a/Gemfile b/Gemfile index e6cea9d..2f660f2 100644 --- a/Gemfile +++ b/Gemfile @@ -9,3 +9,9 @@ if ENV['X_PACT_DEVELOPMENT'] gem "pact-message", path: '../pact-message-ruby' gem "pact-support", path: '../pact-support' end + +if ENV['RACK_VERSION'] == '2' + gem 'rack-reverse-proxy' +else + gem 'rack-reverse-proxy', git: 'https://github.com/samedi/rack-reverse-proxy.git', ref: '06f21feb6afbbf902969c4f1df219df8f2080387' +end diff --git a/pact-provider-verifier.gemspec b/pact-provider-verifier.gemspec index 35510f7..17eba6b 100644 --- a/pact-provider-verifier.gemspec +++ b/pact-provider-verifier.gemspec @@ -26,9 +26,13 @@ Gem::Specification.new do |gem| gem.add_runtime_dependency 'faraday', '~> 2.5' gem.add_runtime_dependency 'faraday-retry', '~> 2.2' gem.add_runtime_dependency 'json', '>1.8' - gem.add_runtime_dependency 'rack', '>= 3.0', '< 4.0' - gem.add_runtime_dependency 'rackup', '~> 2.0' - + if ENV['RACK_VERSION'] == '2' + gem.add_runtime_dependency 'rack', '>= 2.0', '< 3.0' + else + gem.add_runtime_dependency 'rack', '>= 3.0', '< 4.0' + gem.add_runtime_dependency 'rackup', '~> 2.0' + end + gem.add_runtime_dependency 'rack-reverse-proxy' gem.add_runtime_dependency 'rspec_junit_formatter', '~> 0.3' gem.add_runtime_dependency 'ostruct' diff --git a/spec/support/provider-echo-host.ru b/spec/support/provider-echo-host.ru index 2f07d7f..b9b8d7d 100644 --- a/spec/support/provider-echo-host.ru +++ b/spec/support/provider-echo-host.ru @@ -2,5 +2,5 @@ require 'json' run -> (env) { body = {"Host" => env['HTTP_HOST']}.to_json - [200, {"Content-Type" => "application/json"}, [body]] + [200, {"content-type" => "application/json"}, [body]] } diff --git a/spec/support/provider_with_self_signed_cert.rb b/spec/support/provider_with_self_signed_cert.rb index 1bc9366..44305ba 100644 --- a/spec/support/provider_with_self_signed_cert.rb +++ b/spec/support/provider_with_self_signed_cert.rb @@ -3,7 +3,7 @@ def run_provider_with_self_signed_cert port # trap 'INT' do @server.shutdown end require 'rack' - require 'rack/handler/webrick' + require_relative 'webbrick' require 'webrick/https' webrick_opts = {:Port => port, :SSLEnable => true, :SSLCertName => [%w[CN localhost]]} diff --git a/spec/support/webbrick.rb b/spec/support/webbrick.rb new file mode 100644 index 0000000..be74e33 --- /dev/null +++ b/spec/support/webbrick.rb @@ -0,0 +1,11 @@ +module Rack + module Handler + begin + require 'rack/handler/webrick' + WEBrick = Class.new(Rack::Handler::WEBrick) + rescue LoadError + require 'rackup/handler/webrick' + WEBrick = Class.new(Rackup::Handler::WEBrick) + end + end +end \ No newline at end of file From c534282c933d51f533cbfbd5917a941571baa233 Mon Sep 17 00:00:00 2001 From: Yousaf Nabi Date: Fri, 29 Nov 2024 18:43:21 +0000 Subject: [PATCH 3/4] feat: rack 3 support with rack 2 backwards compat --- Gemfile | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/Gemfile b/Gemfile index 2f660f2..099b114 100644 --- a/Gemfile +++ b/Gemfile @@ -10,8 +10,5 @@ if ENV['X_PACT_DEVELOPMENT'] gem "pact-support", path: '../pact-support' end -if ENV['RACK_VERSION'] == '2' - gem 'rack-reverse-proxy' -else - gem 'rack-reverse-proxy', git: 'https://github.com/samedi/rack-reverse-proxy.git', ref: '06f21feb6afbbf902969c4f1df219df8f2080387' -end +gem 'rack-reverse-proxy', git: 'https://github.com/pact-foundation/rack-reverse-proxy.git', + branch: 'feat/rack_2_and_3_compat' From caa7bfadd6de9a1fbc4c66896f942f01f6ab54f8 Mon Sep 17 00:00:00 2001 From: Yousaf Nabi Date: Fri, 29 Nov 2024 19:12:44 +0000 Subject: [PATCH 4/4] chore(test): explicit require of ostruct --- spec/integration_with_pact_broker_config_spec.rb | 1 + spec/lib/pact/provider_verifier/aggregate_pact_configs_spec.rb | 1 + spec/support/message_producer_verifier.ru | 3 ++- 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/spec/integration_with_pact_broker_config_spec.rb b/spec/integration_with_pact_broker_config_spec.rb index 6fe7f44..1f74522 100644 --- a/spec/integration_with_pact_broker_config_spec.rb +++ b/spec/integration_with_pact_broker_config_spec.rb @@ -1,6 +1,7 @@ require 'pact/provider_verifier/cli/verify' require 'pact/pact_broker' require 'pact/cli/run_pact_verification' +require 'ostruct' describe "pact-provider-verifier with pact broker config" do before do diff --git a/spec/lib/pact/provider_verifier/aggregate_pact_configs_spec.rb b/spec/lib/pact/provider_verifier/aggregate_pact_configs_spec.rb index 3c06c2e..d2354a2 100644 --- a/spec/lib/pact/provider_verifier/aggregate_pact_configs_spec.rb +++ b/spec/lib/pact/provider_verifier/aggregate_pact_configs_spec.rb @@ -1,4 +1,5 @@ require 'pact/provider_verifier/aggregate_pact_configs' +require 'ostruct' module Pact module ProviderVerifier diff --git a/spec/support/message_producer_verifier.ru b/spec/support/message_producer_verifier.ru index 63c16f7..255e287 100644 --- a/spec/support/message_producer_verifier.ru +++ b/spec/support/message_producer_verifier.ru @@ -1,6 +1,7 @@ # TODO provider states require 'json' +require 'ostruct' class Provider def a_test_message @@ -31,7 +32,7 @@ class HttpRequestHandler request_body = JSON.parse(env['rack.input'].read) message_descriptor = OpenStruct.new(request_body) response_body = @message_creator.create(message_descriptor) - [200, {'Content-Type' => 'application/json'}, [response_body.to_json]] + [200, {'content-type' => 'application/json'}, [response_body.to_json]] end end