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/Gemfile b/Gemfile index e6cea9d..099b114 100644 --- a/Gemfile +++ b/Gemfile @@ -9,3 +9,6 @@ if ENV['X_PACT_DEVELOPMENT'] gem "pact-message", path: '../pact-message-ruby' gem "pact-support", path: '../pact-support' end + +gem 'rack-reverse-proxy', git: 'https://github.com/pact-foundation/rack-reverse-proxy.git', + branch: 'feat/rack_2_and_3_compat' diff --git a/pact-provider-verifier.gemspec b/pact-provider-verifier.gemspec index 25d6e96..17eba6b 100644 --- a/pact-provider-verifier.gemspec +++ b/pact-provider-verifier.gemspec @@ -26,7 +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', '~> 2.1' + 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/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 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