pact-python icon indicating copy to clipboard operation
pact-python copied to clipboard

pact-verifier fails when running against a service using SSL

Open ewortzman opened this issue 7 years ago • 3 comments

I am attempting to verify my contract against a running provider. The provider uses SSL verification, and When I run pact-verifier, all I get is a bunch of SSL errors. pact-verifier does not provide a way to disable SSL verification.

Failures:

  1) Verifying a pact between consumer and provider Given A service is deployed A request for a service with GET /api/services/contract/test/my_service returns a response which has status code 200
     Failure/Error: replay_interaction interaction

     OpenSSL::SSL::SSLError:
       SSL_connect returned=1 errno=0 state=error: certificate verify failed
     # /usr/local/lib/python2.7/dist-packages/pact/bin/pact/lib/ruby/lib/ruby/2.2.0/net/http.rb:923:in `connect'
     # /usr/local/lib/python2.7/dist-packages/pact/bin/pact/lib/ruby/lib/ruby/2.2.0/net/http.rb:923:in `block in connect'
     # /usr/local/lib/python2.7/dist-packages/pact/bin/pact/lib/ruby/lib/ruby/2.2.0/timeout.rb:74:in `timeout'
     # /usr/local/lib/python2.7/dist-packages/pact/bin/pact/lib/ruby/lib/ruby/2.2.0/net/http.rb:923:in `connect'
     # /usr/local/lib/python2.7/dist-packages/pact/bin/pact/lib/ruby/lib/ruby/2.2.0/net/http.rb:863:in `do_start'
     # /usr/local/lib/python2.7/dist-packages/pact/bin/pact/lib/ruby/lib/ruby/2.2.0/net/http.rb:858:in `start'
     # /usr/local/lib/python2.7/dist-packages/pact/bin/pact/lib/vendor/ruby/2.2.0/gems/rack-proxy-0.6.1/lib/rack/http_streaming_response.rb:71:in `session'
     # /usr/local/lib/python2.7/dist-packages/pact/bin/pact/lib/vendor/ruby/2.2.0/gems/rack-proxy-0.6.1/lib/rack/http_streaming_response.rb:60:in `response'
     # /usr/local/lib/python2.7/dist-packages/pact/bin/pact/lib/vendor/ruby/2.2.0/gems/rack-proxy-0.6.1/lib/rack/http_streaming_response.rb:29:in `headers'
     # /usr/local/lib/python2.7/dist-packages/pact/bin/pact/lib/vendor/ruby/2.2.0/gems/pact-provider-proxy-2.1.0/vendor/rack-reverse-proxy/lib/rack/reverse_proxy.rb:77:in `proxy'
     # /usr/local/lib/python2.7/dist-packages/pact/bin/pact/lib/vendor/ruby/2.2.0/gems/pact-provider-proxy-2.1.0/vendor/rack-reverse-proxy/lib/rack/reverse_proxy.rb:29:in `call'
     # /usr/local/lib/python2.7/dist-packages/pact/bin/pact/lib/vendor/ruby/2.2.0/gems/rack-test-0.6.3/lib/rack/mock_session.rb:30:in `request'
     # /usr/local/lib/python2.7/dist-packages/pact/bin/pact/lib/vendor/ruby/2.2.0/gems/rack-test-0.6.3/lib/rack/test.rb:244:in `process_request'
     # /usr/local/lib/python2.7/dist-packages/pact/bin/pact/lib/vendor/ruby/2.2.0/gems/rack-test-0.6.3/lib/rack/test.rb:58:in `get'
     # /usr/local/lib/python2.7/dist-packages/pact/bin/pact/lib/vendor/ruby/2.2.0/gems/pact-1.14.0/lib/pact/provider/test_methods.rb:23:in `replay_interaction'
     # /usr/local/lib/python2.7/dist-packages/pact/bin/pact/lib/vendor/ruby/2.2.0/gems/pact-1.14.0/lib/pact/provider/rspec.rb:82:in `block (4 levels) in describe_interaction'
     # /usr/local/lib/python2.7/dist-packages/pact/bin/pact/lib/vendor/ruby/2.2.0/gems/pact-1.14.0/lib/pact/provider/rspec.rb:171:in `run_once'
     # /usr/local/lib/python2.7/dist-packages/pact/bin/pact/lib/vendor/ruby/2.2.0/gems/pact-1.14.0/lib/pact/provider/rspec.rb:79:in `block (3 levels) in describe_interaction'
     # /usr/local/lib/python2.7/dist-packages/pact/bin/pact/lib/vendor/ruby/2.2.0/gems/rspec-core-3.6.0/lib/rspec/core/example.rb:447:in `instance_exec'
     # /usr/local/lib/python2.7/dist-packages/pact/bin/pact/lib/vendor/ruby/2.2.0/gems/rspec-core-3.6.0/lib/rspec/core/example.rb:447:in `instance_exec'
     # /usr/local/lib/python2.7/dist-packages/pact/bin/pact/lib/vendor/ruby/2.2.0/gems/rspec-core-3.6.0/lib/rspec/core/hooks.rb:350:in `run'
     # /usr/local/lib/python2.7/dist-packages/pact/bin/pact/lib/vendor/ruby/2.2.0/gems/rspec-core-3.6.0/lib/rspec/core/hooks.rb:507:in `block in run_owned_hooks_for'
     # /usr/local/lib/python2.7/dist-packages/pact/bin/pact/lib/vendor/ruby/2.2.0/gems/rspec-core-3.6.0/lib/rspec/core/hooks.rb:506:in `each'
     # /usr/local/lib/python2.7/dist-packages/pact/bin/pact/lib/vendor/ruby/2.2.0/gems/rspec-core-3.6.0/lib/rspec/core/hooks.rb:506:in `run_owned_hooks_for'
     # /usr/local/lib/python2.7/dist-packages/pact/bin/pact/lib/vendor/ruby/2.2.0/gems/rspec-core-3.6.0/lib/rspec/core/hooks.rb:593:in `block in run_example_hooks_for'
     # /usr/local/lib/python2.7/dist-packages/pact/bin/pact/lib/vendor/ruby/2.2.0/gems/rspec-core-3.6.0/lib/rspec/core/hooks.rb:592:in `reverse_each'
     # /usr/local/lib/python2.7/dist-packages/pact/bin/pact/lib/vendor/ruby/2.2.0/gems/rspec-core-3.6.0/lib/rspec/core/hooks.rb:592:in `run_example_hooks_for'
     # /usr/local/lib/python2.7/dist-packages/pact/bin/pact/lib/vendor/ruby/2.2.0/gems/rspec-core-3.6.0/lib/rspec/core/hooks.rb:462:in `run'
     # /usr/local/lib/python2.7/dist-packages/pact/bin/pact/lib/vendor/ruby/2.2.0/gems/rspec-core-3.6.0/lib/rspec/core/example.rb:494:in `run_before_example'
     # /usr/local/lib/python2.7/dist-packages/pact/bin/pact/lib/vendor/ruby/2.2.0/gems/rspec-core-3.6.0/lib/rspec/core/example.rb:253:in `block in run'
     # /usr/local/lib/python2.7/dist-packages/pact/bin/pact/lib/vendor/ruby/2.2.0/gems/rspec-core-3.6.0/lib/rspec/core/example.rb:500:in `block in with_around_and_singleton_context_hooks'
     # /usr/local/lib/python2.7/dist-packages/pact/bin/pact/lib/vendor/ruby/2.2.0/gems/rspec-core-3.6.0/lib/rspec/core/example.rb:457:in `block in with_around_example_hooks'
     # /usr/local/lib/python2.7/dist-packages/pact/bin/pact/lib/vendor/ruby/2.2.0/gems/rspec-core-3.6.0/lib/rspec/core/hooks.rb:464:in `block in run'
     # /usr/local/lib/python2.7/dist-packages/pact/bin/pact/lib/vendor/ruby/2.2.0/gems/rspec-core-3.6.0/lib/rspec/core/hooks.rb:602:in `run_around_example_hooks_for'
     # /usr/local/lib/python2.7/dist-packages/pact/bin/pact/lib/vendor/ruby/2.2.0/gems/rspec-core-3.6.0/lib/rspec/core/hooks.rb:464:in `run'
     # /usr/local/lib/python2.7/dist-packages/pact/bin/pact/lib/vendor/ruby/2.2.0/gems/rspec-core-3.6.0/lib/rspec/core/example.rb:457:in `with_around_example_hooks'
     # /usr/local/lib/python2.7/dist-packages/pact/bin/pact/lib/vendor/ruby/2.2.0/gems/rspec-core-3.6.0/lib/rspec/core/example.rb:500:in `with_around_and_singleton_context_hooks'
     # /usr/local/lib/python2.7/dist-packages/pact/bin/pact/lib/vendor/ruby/2.2.0/gems/rspec-core-3.6.0/lib/rspec/core/example.rb:251:in `run'
     # /usr/local/lib/python2.7/dist-packages/pact/bin/pact/lib/vendor/ruby/2.2.0/gems/rspec-core-3.6.0/lib/rspec/core/example_group.rb:627:in `block in run_examples'
     # /usr/local/lib/python2.7/dist-packages/pact/bin/pact/lib/vendor/ruby/2.2.0/gems/rspec-core-3.6.0/lib/rspec/core/example_group.rb:623:in `map'
     # /usr/local/lib/python2.7/dist-packages/pact/bin/pact/lib/vendor/ruby/2.2.0/gems/rspec-core-3.6.0/lib/rspec/core/example_group.rb:623:in `run_examples'
     # /usr/local/lib/python2.7/dist-packages/pact/bin/pact/lib/vendor/ruby/2.2.0/gems/rspec-core-3.6.0/lib/rspec/core/example_group.rb:589:in `run'
     # /usr/local/lib/python2.7/dist-packages/pact/bin/pact/lib/vendor/ruby/2.2.0/gems/rspec-core-3.6.0/lib/rspec/core/example_group.rb:590:in `block in run'
     # /usr/local/lib/python2.7/dist-packages/pact/bin/pact/lib/vendor/ruby/2.2.0/gems/rspec-core-3.6.0/lib/rspec/core/example_group.rb:590:in `map'
     # /usr/local/lib/python2.7/dist-packages/pact/bin/pact/lib/vendor/ruby/2.2.0/gems/rspec-core-3.6.0/lib/rspec/core/example_group.rb:590:in `run'
     # /usr/local/lib/python2.7/dist-packages/pact/bin/pact/lib/vendor/ruby/2.2.0/gems/rspec-core-3.6.0/lib/rspec/core/example_group.rb:590:in `block in run'
     # /usr/local/lib/python2.7/dist-packages/pact/bin/pact/lib/vendor/ruby/2.2.0/gems/rspec-core-3.6.0/lib/rspec/core/example_group.rb:590:in `map'
     # /usr/local/lib/python2.7/dist-packages/pact/bin/pact/lib/vendor/ruby/2.2.0/gems/rspec-core-3.6.0/lib/rspec/core/example_group.rb:590:in `run'
     # /usr/local/lib/python2.7/dist-packages/pact/bin/pact/lib/vendor/ruby/2.2.0/gems/rspec-core-3.6.0/lib/rspec/core/example_group.rb:590:in `block in run'
     # /usr/local/lib/python2.7/dist-packages/pact/bin/pact/lib/vendor/ruby/2.2.0/gems/rspec-core-3.6.0/lib/rspec/core/example_group.rb:590:in `map'
     # /usr/local/lib/python2.7/dist-packages/pact/bin/pact/lib/vendor/ruby/2.2.0/gems/rspec-core-3.6.0/lib/rspec/core/example_group.rb:590:in `run'
     # /usr/local/lib/python2.7/dist-packages/pact/bin/pact/lib/vendor/ruby/2.2.0/gems/rspec-core-3.6.0/lib/rspec/core/example_group.rb:590:in `block in run'
     # /usr/local/lib/python2.7/dist-packages/pact/bin/pact/lib/vendor/ruby/2.2.0/gems/rspec-core-3.6.0/lib/rspec/core/example_group.rb:590:in `map'
     # /usr/local/lib/python2.7/dist-packages/pact/bin/pact/lib/vendor/ruby/2.2.0/gems/rspec-core-3.6.0/lib/rspec/core/example_group.rb:590:in `run'
     # /usr/local/lib/python2.7/dist-packages/pact/bin/pact/lib/vendor/ruby/2.2.0/gems/rspec-core-3.6.0/lib/rspec/core/runner.rb:118:in `block (3 levels) in run_specs'
     # /usr/local/lib/python2.7/dist-packages/pact/bin/pact/lib/vendor/ruby/2.2.0/gems/rspec-core-3.6.0/lib/rspec/core/runner.rb:118:in `map'
     # /usr/local/lib/python2.7/dist-packages/pact/bin/pact/lib/vendor/ruby/2.2.0/gems/rspec-core-3.6.0/lib/rspec/core/runner.rb:118:in `block (2 levels) in run_specs'
     # /usr/local/lib/python2.7/dist-packages/pact/bin/pact/lib/vendor/ruby/2.2.0/gems/rspec-core-3.6.0/lib/rspec/core/configuration.rb:1894:in `with_suite_hooks'
     # /usr/local/lib/python2.7/dist-packages/pact/bin/pact/lib/vendor/ruby/2.2.0/gems/rspec-core-3.6.0/lib/rspec/core/runner.rb:113:in `block in run_specs'
     # /usr/local/lib/python2.7/dist-packages/pact/bin/pact/lib/vendor/ruby/2.2.0/gems/rspec-core-3.6.0/lib/rspec/core/reporter.rb:79:in `report'
     # /usr/local/lib/python2.7/dist-packages/pact/bin/pact/lib/vendor/ruby/2.2.0/gems/rspec-core-3.6.0/lib/rspec/core/runner.rb:112:in `run_specs'
     # /usr/local/lib/python2.7/dist-packages/pact/bin/pact/lib/vendor/ruby/2.2.0/gems/rspec-core-3.6.0/lib/rspec/core/runner.rb:87:in `run'
     # /usr/local/lib/python2.7/dist-packages/pact/bin/pact/lib/vendor/ruby/2.2.0/gems/rspec-core-3.6.0/lib/rspec/core/runner.rb:71:in `run'
     # /usr/local/lib/python2.7/dist-packages/pact/bin/pact/lib/vendor/ruby/2.2.0/gems/pact-1.14.0/lib/pact/provider/pact_spec_runner.rb:94:in `run_specs'
     # /usr/local/lib/python2.7/dist-packages/pact/bin/pact/lib/vendor/ruby/2.2.0/gems/pact-1.14.0/lib/pact/provider/pact_spec_runner.rb:35:in `run'
     # /usr/local/lib/python2.7/dist-packages/pact/bin/pact/lib/vendor/ruby/2.2.0/gems/pact-1.14.0/lib/pact/cli/run_pact_verification.rb:60:in `run_with_pact_uri'
     # /usr/local/lib/python2.7/dist-packages/pact/bin/pact/lib/vendor/ruby/2.2.0/gems/pact-1.14.0/lib/pact/cli/run_pact_verification.rb:48:in `run_specs'
     # /usr/local/lib/python2.7/dist-packages/pact/bin/pact/lib/vendor/ruby/2.2.0/gems/pact-1.14.0/lib/pact/cli/run_pact_verification.rb:22:in `call'
     # /usr/local/lib/python2.7/dist-packages/pact/bin/pact/lib/vendor/ruby/2.2.0/gems/pact-1.14.0/lib/pact/cli/run_pact_verification.rb:14:in `call'
     # /usr/local/lib/python2.7/dist-packages/pact/bin/pact/lib/vendor/ruby/2.2.0/gems/pact-provider-verifier-1.1.3/lib/pact/provider_verifier/app.rb:66:in `block in verify_pacts'
     # /usr/local/lib/python2.7/dist-packages/pact/bin/pact/lib/vendor/ruby/2.2.0/gems/pact-provider-verifier-1.1.3/lib/pact/provider_verifier/app.rb:57:in `collect'
     # /usr/local/lib/python2.7/dist-packages/pact/bin/pact/lib/vendor/ruby/2.2.0/gems/pact-provider-verifier-1.1.3/lib/pact/provider_verifier/app.rb:57:in `verify_pacts'
     # /usr/local/lib/python2.7/dist-packages/pact/bin/pact/lib/vendor/ruby/2.2.0/gems/pact-provider-verifier-1.1.3/lib/pact/provider_verifier/cli.rb:21:in `verify'
     # /usr/local/lib/python2.7/dist-packages/pact/bin/pact/lib/vendor/ruby/2.2.0/gems/thor-0.19.4/lib/thor/command.rb:27:in `run'
     # /usr/local/lib/python2.7/dist-packages/pact/bin/pact/lib/vendor/ruby/2.2.0/gems/thor-0.19.4/lib/thor/invocation.rb:126:in `invoke_command'
     # /usr/local/lib/python2.7/dist-packages/pact/bin/pact/lib/vendor/ruby/2.2.0/gems/thor-0.19.4/lib/thor.rb:369:in `dispatch'
     # /usr/local/lib/python2.7/dist-packages/pact/bin/pact/lib/vendor/ruby/2.2.0/gems/thor-0.19.4/lib/thor/base.rb:444:in `start'
     # /usr/local/lib/python2.7/dist-packages/pact/bin/pact/lib/app/pact-provider-verifier.rb:2:in `<main>'

ewortzman avatar Dec 01 '17 17:12 ewortzman

2 things here.

  1. The latest version of the pact-provider-verifier disables SSL checks

https://github.com/pact-foundation/pact-provider-verifier/blob/master/lib/pact/provider_verifier/app.rb#L78

It looks like you have this version: https://github.com/pact-foundation/pact-provider-verifier/blob/v1.1.3-1/lib/pact/provider_verifier/app.rb#L43

If the latest version of pact-python does not have the latest version of the verifier, please raise an issue to have it updated.

  1. If you're verifying against a service running with SSL, that suggests that it's deployed. You'll find life much easier if you can run the tests against a locally running service. Is that an option?

bethesque avatar Dec 02 '17 23:12 bethesque

pact-python 0.16.0 includes pact-ruby-standalone 1.29.2. Are there any other changes we will need to need to do in pact-python to support these flags?

matthewbalvanz-wf avatar Mar 03 '18 04:03 matthewbalvanz-wf

Disabling SSL checks is done by default, so there is no flag you need to add.

bethesque avatar Mar 04 '18 07:03 bethesque

I'm closing this issue because the answer/solution was provided but if I have made an oversight, please do get back in touch. Thanks

sergeyklay avatar Mar 30 '23 20:03 sergeyklay