pact 1.67.5 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +8 -0
- data/lib/pact/configuration.rb +21 -0
- data/lib/pact/consumer/grpc_interaction_builder.rb +192 -0
- data/lib/pact/consumer/http_interaction_builder.rb +160 -0
- data/lib/pact/consumer/interaction_contents.rb +60 -0
- data/lib/pact/consumer/message_interaction_builder.rb +286 -0
- data/lib/pact/consumer/mock_server.rb +106 -0
- data/lib/pact/consumer/pact_config/base.rb +22 -0
- data/lib/pact/consumer/pact_config/grpc.rb +24 -0
- data/lib/pact/consumer/pact_config/http.rb +53 -0
- data/lib/pact/consumer/pact_config/message.rb +15 -0
- data/lib/pact/consumer/pact_config/plugin_async_message.rb +24 -0
- data/lib/pact/consumer/pact_config/plugin_http.rb +24 -0
- data/lib/pact/consumer/pact_config/plugin_sync_message.rb +24 -0
- data/lib/pact/consumer/pact_config.rb +28 -0
- data/lib/pact/consumer/plugin_async_message_interaction_builder.rb +169 -0
- data/lib/pact/consumer/plugin_http_interaction_builder.rb +199 -0
- data/lib/pact/consumer/plugin_sync_message_interaction_builder.rb +178 -0
- data/lib/pact/consumer.rb +6 -7
- data/lib/pact/generators/base.rb +285 -0
- data/lib/pact/generators.rb +47 -0
- data/lib/pact/matchers/base.rb +72 -0
- data/lib/pact/matchers/v1/equality.rb +17 -0
- data/lib/pact/matchers/v2/regex.rb +26 -0
- data/lib/pact/matchers/v2/type.rb +18 -0
- data/lib/pact/matchers/v3/boolean.rb +18 -0
- data/lib/pact/matchers/v3/content_type.rb +30 -0
- data/lib/pact/matchers/v3/date.rb +22 -0
- data/lib/pact/matchers/v3/date_time.rb +22 -0
- data/lib/pact/matchers/v3/decimal.rb +18 -0
- data/lib/pact/matchers/v3/each.rb +46 -0
- data/lib/pact/matchers/v3/include.rb +18 -0
- data/lib/pact/matchers/v3/integer.rb +18 -0
- data/lib/pact/matchers/v3/null.rb +13 -0
- data/lib/pact/matchers/v3/number.rb +18 -0
- data/lib/pact/matchers/v3/semver.rb +22 -0
- data/lib/pact/matchers/v3/time.rb +22 -0
- data/lib/pact/matchers/v3/values.rb +13 -0
- data/lib/pact/matchers/v4/each_key.rb +34 -0
- data/lib/pact/matchers/v4/each_key_value.rb +38 -0
- data/lib/pact/matchers/v4/each_value.rb +40 -0
- data/lib/pact/matchers/v4/not_empty.rb +22 -0
- data/lib/pact/matchers/v4/status_code.rb +15 -0
- data/lib/pact/matchers.rb +108 -0
- data/lib/pact/native/blocking_verifier.rb +15 -0
- data/lib/pact/native/logger.rb +24 -0
- data/lib/pact/provider/async_message_verifier.rb +29 -0
- data/lib/pact/provider/base_verifier.rb +259 -0
- data/lib/pact/provider/grpc_verifier.rb +40 -0
- data/lib/pact/provider/gruf_server.rb +73 -0
- data/lib/pact/provider/http_server.rb +77 -0
- data/lib/pact/provider/http_verifier.rb +45 -0
- data/lib/pact/provider/message_provider_servlet.rb +77 -0
- data/lib/pact/provider/mixed_verifier.rb +21 -0
- data/lib/pact/provider/pact_broker_proxy.rb +62 -0
- data/lib/pact/provider/pact_broker_proxy_runner.rb +78 -0
- data/lib/pact/provider/pact_config/async.rb +28 -0
- data/lib/pact/provider/pact_config/base.rb +101 -0
- data/lib/pact/provider/pact_config/grpc.rb +24 -0
- data/lib/pact/provider/pact_config/http.rb +25 -0
- data/lib/pact/provider/pact_config/mixed.rb +38 -0
- data/lib/pact/provider/pact_config.rb +24 -0
- data/lib/pact/provider/provider_server_runner.rb +90 -0
- data/lib/pact/provider/provider_state_configuration.rb +32 -0
- data/lib/pact/provider/provider_state_servlet.rb +84 -0
- data/lib/pact/provider.rb +6 -3
- data/lib/pact/railtie.rb +11 -0
- data/lib/pact/{v2/rspec → rspec}/support/pact_consumer_helpers.rb +8 -8
- data/lib/pact/{v2/rspec → rspec}/support/pact_provider_helpers.rb +25 -24
- data/lib/pact/{v2/rspec.rb → rspec.rb} +6 -5
- data/lib/pact/tasks/pact.rake +13 -0
- data/lib/pact/version.rb +1 -1
- data/lib/pact.rb +46 -11
- data/pact.gemspec +42 -65
- metadata +145 -404
- data/lib/pact/cli/generate_pact_docs.rb +0 -4
- data/lib/pact/cli/run_pact_verification.rb +0 -99
- data/lib/pact/cli/spec_criteria.rb +0 -26
- data/lib/pact/cli.rb +0 -45
- data/lib/pact/consumer/configuration/configuration_extensions.rb +0 -90
- data/lib/pact/consumer/configuration/dsl.rb +0 -11
- data/lib/pact/consumer/configuration/mock_service.rb +0 -112
- data/lib/pact/consumer/configuration/service_consumer.rb +0 -51
- data/lib/pact/consumer/configuration/service_provider.rb +0 -40
- data/lib/pact/consumer/configuration.rb +0 -10
- data/lib/pact/consumer/consumer_contract_builder.rb +0 -82
- data/lib/pact/consumer/consumer_contract_builders.rb +0 -10
- data/lib/pact/consumer/interaction_builder.rb +0 -45
- data/lib/pact/consumer/rspec.rb +0 -35
- data/lib/pact/consumer/spec_hooks.rb +0 -40
- data/lib/pact/consumer/world.rb +0 -37
- data/lib/pact/doc/README.md +0 -13
- data/lib/pact/doc/doc_file.rb +0 -40
- data/lib/pact/doc/generate.rb +0 -11
- data/lib/pact/doc/generator.rb +0 -82
- data/lib/pact/doc/interaction_view_model.rb +0 -124
- data/lib/pact/doc/markdown/consumer_contract_renderer.rb +0 -68
- data/lib/pact/doc/markdown/generator.rb +0 -26
- data/lib/pact/doc/markdown/index_renderer.rb +0 -43
- data/lib/pact/doc/markdown/interaction.erb +0 -14
- data/lib/pact/doc/markdown/interaction_renderer.rb +0 -43
- data/lib/pact/doc/sort_interactions.rb +0 -16
- data/lib/pact/hal/authorization_header_redactor.rb +0 -32
- data/lib/pact/hal/entity.rb +0 -110
- data/lib/pact/hal/http_client.rb +0 -146
- data/lib/pact/hal/link.rb +0 -112
- data/lib/pact/hal/non_json_entity.rb +0 -28
- data/lib/pact/hash_refinements.rb +0 -17
- data/lib/pact/pact_broker/fetch_pact_uris_for_verification.rb +0 -112
- data/lib/pact/pact_broker/fetch_pacts.rb +0 -103
- data/lib/pact/pact_broker/notices.rb +0 -34
- data/lib/pact/pact_broker/pact_selection_description.rb +0 -66
- data/lib/pact/pact_broker.rb +0 -25
- data/lib/pact/project_root.rb +0 -7
- data/lib/pact/provider/configuration/configuration_extension.rb +0 -69
- data/lib/pact/provider/configuration/dsl.rb +0 -18
- data/lib/pact/provider/configuration/message_provider_dsl.rb +0 -63
- data/lib/pact/provider/configuration/pact_verification.rb +0 -48
- data/lib/pact/provider/configuration/pact_verification_from_broker.rb +0 -126
- data/lib/pact/provider/configuration/service_provider_config.rb +0 -32
- data/lib/pact/provider/configuration/service_provider_dsl.rb +0 -107
- data/lib/pact/provider/configuration.rb +0 -7
- data/lib/pact/provider/context.rb +0 -0
- data/lib/pact/provider/help/console_text.rb +0 -76
- data/lib/pact/provider/help/content.rb +0 -38
- data/lib/pact/provider/help/pact_diff.rb +0 -43
- data/lib/pact/provider/help/prompt_text.rb +0 -49
- data/lib/pact/provider/help/write.rb +0 -56
- data/lib/pact/provider/matchers/messages.rb +0 -66
- data/lib/pact/provider/pact_helper_locator.rb +0 -24
- data/lib/pact/provider/pact_source.rb +0 -40
- data/lib/pact/provider/pact_spec_runner.rb +0 -188
- data/lib/pact/provider/pact_uri.rb +0 -55
- data/lib/pact/provider/pact_verification.rb +0 -17
- data/lib/pact/provider/print_missing_provider_states.rb +0 -35
- data/lib/pact/provider/request.rb +0 -90
- data/lib/pact/provider/rspec/backtrace_formatter.rb +0 -43
- data/lib/pact/provider/rspec/calculate_exit_code.rb +0 -18
- data/lib/pact/provider/rspec/custom_options_file +0 -0
- data/lib/pact/provider/rspec/formatter_rspec_2.rb +0 -76
- data/lib/pact/provider/rspec/formatter_rspec_3.rb +0 -195
- data/lib/pact/provider/rspec/json_formatter.rb +0 -100
- data/lib/pact/provider/rspec/matchers.rb +0 -80
- data/lib/pact/provider/rspec/pact_broker_formatter.rb +0 -76
- data/lib/pact/provider/rspec.rb +0 -234
- data/lib/pact/provider/state/provider_state.rb +0 -180
- data/lib/pact/provider/state/provider_state_configured_modules.rb +0 -15
- data/lib/pact/provider/state/provider_state_manager.rb +0 -42
- data/lib/pact/provider/state/provider_state_proxy.rb +0 -39
- data/lib/pact/provider/state/set_up.rb +0 -13
- data/lib/pact/provider/state/tear_down.rb +0 -13
- data/lib/pact/provider/test_methods.rb +0 -77
- data/lib/pact/provider/verification_report.rb +0 -36
- data/lib/pact/provider/verification_results/create.rb +0 -88
- data/lib/pact/provider/verification_results/publish.rb +0 -143
- data/lib/pact/provider/verification_results/publish_all.rb +0 -50
- data/lib/pact/provider/verification_results/verification_result.rb +0 -40
- data/lib/pact/provider/world.rb +0 -50
- data/lib/pact/retry.rb +0 -37
- data/lib/pact/tasks/task_helper.rb +0 -62
- data/lib/pact/tasks/verification_task.rb +0 -95
- data/lib/pact/tasks.rb +0 -2
- data/lib/pact/templates/help.erb +0 -22
- data/lib/pact/templates/provider_state.erb +0 -14
- data/lib/pact/utils/metrics.rb +0 -100
- data/lib/pact/utils/string.rb +0 -35
- data/lib/pact/v2/configuration.rb +0 -23
- data/lib/pact/v2/consumer/grpc_interaction_builder.rb +0 -194
- data/lib/pact/v2/consumer/http_interaction_builder.rb +0 -162
- data/lib/pact/v2/consumer/interaction_contents.rb +0 -62
- data/lib/pact/v2/consumer/message_interaction_builder.rb +0 -288
- data/lib/pact/v2/consumer/mock_server.rb +0 -108
- data/lib/pact/v2/consumer/pact_config/base.rb +0 -24
- data/lib/pact/v2/consumer/pact_config/grpc.rb +0 -26
- data/lib/pact/v2/consumer/pact_config/http.rb +0 -55
- data/lib/pact/v2/consumer/pact_config/message.rb +0 -17
- data/lib/pact/v2/consumer/pact_config/plugin_async_message.rb +0 -26
- data/lib/pact/v2/consumer/pact_config/plugin_http.rb +0 -26
- data/lib/pact/v2/consumer/pact_config/plugin_sync_message.rb +0 -26
- data/lib/pact/v2/consumer/pact_config.rb +0 -30
- data/lib/pact/v2/consumer/plugin_async_message_interaction_builder.rb +0 -171
- data/lib/pact/v2/consumer/plugin_http_interaction_builder.rb +0 -201
- data/lib/pact/v2/consumer/plugin_sync_message_interaction_builder.rb +0 -180
- data/lib/pact/v2/consumer.rb +0 -8
- data/lib/pact/v2/generators/base.rb +0 -287
- data/lib/pact/v2/generators.rb +0 -49
- data/lib/pact/v2/matchers/base.rb +0 -74
- data/lib/pact/v2/matchers/v1/equality.rb +0 -19
- data/lib/pact/v2/matchers/v2/regex.rb +0 -19
- data/lib/pact/v2/matchers/v2/type.rb +0 -17
- data/lib/pact/v2/matchers/v3/boolean.rb +0 -17
- data/lib/pact/v2/matchers/v3/content_type.rb +0 -32
- data/lib/pact/v2/matchers/v3/date.rb +0 -18
- data/lib/pact/v2/matchers/v3/date_time.rb +0 -18
- data/lib/pact/v2/matchers/v3/decimal.rb +0 -17
- data/lib/pact/v2/matchers/v3/each.rb +0 -42
- data/lib/pact/v2/matchers/v3/include.rb +0 -17
- data/lib/pact/v2/matchers/v3/integer.rb +0 -17
- data/lib/pact/v2/matchers/v3/null.rb +0 -16
- data/lib/pact/v2/matchers/v3/number.rb +0 -17
- data/lib/pact/v2/matchers/v3/semver.rb +0 -23
- data/lib/pact/v2/matchers/v3/time.rb +0 -18
- data/lib/pact/v2/matchers/v3/values.rb +0 -16
- data/lib/pact/v2/matchers/v4/each_key.rb +0 -26
- data/lib/pact/v2/matchers/v4/each_key_value.rb +0 -32
- data/lib/pact/v2/matchers/v4/each_value.rb +0 -33
- data/lib/pact/v2/matchers/v4/not_empty.rb +0 -24
- data/lib/pact/v2/matchers/v4/status_code.rb +0 -17
- data/lib/pact/v2/matchers.rb +0 -110
- data/lib/pact/v2/native/blocking_verifier.rb +0 -17
- data/lib/pact/v2/native/logger.rb +0 -25
- data/lib/pact/v2/provider/async_message_verifier.rb +0 -28
- data/lib/pact/v2/provider/base_verifier.rb +0 -242
- data/lib/pact/v2/provider/grpc_verifier.rb +0 -38
- data/lib/pact/v2/provider/gruf_server.rb +0 -75
- data/lib/pact/v2/provider/http_server.rb +0 -79
- data/lib/pact/v2/provider/http_verifier.rb +0 -43
- data/lib/pact/v2/provider/message_provider_servlet.rb +0 -79
- data/lib/pact/v2/provider/mixed_verifier.rb +0 -22
- data/lib/pact/v2/provider/pact_broker_proxy.rb +0 -66
- data/lib/pact/v2/provider/pact_broker_proxy_runner.rb +0 -80
- data/lib/pact/v2/provider/pact_config/async.rb +0 -29
- data/lib/pact/v2/provider/pact_config/base.rb +0 -103
- data/lib/pact/v2/provider/pact_config/grpc.rb +0 -26
- data/lib/pact/v2/provider/pact_config/http.rb +0 -27
- data/lib/pact/v2/provider/pact_config/mixed.rb +0 -40
- data/lib/pact/v2/provider/pact_config.rb +0 -26
- data/lib/pact/v2/provider/provider_server_runner.rb +0 -92
- data/lib/pact/v2/provider/provider_state_configuration.rb +0 -32
- data/lib/pact/v2/provider/provider_state_servlet.rb +0 -86
- data/lib/pact/v2/provider.rb +0 -8
- data/lib/pact/v2/railtie.rb +0 -13
- data/lib/pact/v2/tasks/pact.rake +0 -13
- data/lib/pact/v2.rb +0 -71
- data/lib/tasks/pact.rake +0 -34
- /data/lib/pact/{v2/rspec → rspec}/support/pact_message_helpers.rb +0 -0
- /data/lib/pact/{v2/rspec → rspec}/support/waterdrop/pact_waterdrop_client.rb +0 -0
- /data/lib/pact/{v2/rspec → rspec}/support/webmock/webmock_helpers.rb +0 -0
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Pact
|
|
4
|
-
module V2
|
|
5
|
-
module Provider
|
|
6
|
-
# inspired by Gruf::Cli::Executor
|
|
7
|
-
class GrufServer
|
|
8
|
-
SERVER_STOP_TIMEOUT_SEC = 15
|
|
9
|
-
|
|
10
|
-
def initialize(options = {})
|
|
11
|
-
@options = options
|
|
12
|
-
|
|
13
|
-
setup!
|
|
14
|
-
|
|
15
|
-
@server_pid = nil
|
|
16
|
-
|
|
17
|
-
@services = @options[:services].is_a?(Array) ? @options[:services] : []
|
|
18
|
-
@logger = @options[:logger] || ::Logger.new($stdout)
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
def start
|
|
22
|
-
raise "server already running, stop server before starting new one" if @thread
|
|
23
|
-
|
|
24
|
-
@logger.info("[gruf] starting standalone server with options: #{@options}")
|
|
25
|
-
|
|
26
|
-
@server = Gruf::Server.new(Gruf.server_options)
|
|
27
|
-
@services.each { |s| @server.add_service(s) } if @services.any?
|
|
28
|
-
@thread = Thread.new do
|
|
29
|
-
@logger.debug "[gruf] starting grpc server"
|
|
30
|
-
@server.start!
|
|
31
|
-
end
|
|
32
|
-
@server.server.wait_till_running(10)
|
|
33
|
-
|
|
34
|
-
@logger.info("[gruf] standalone server started")
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
def stop
|
|
38
|
-
@logger.info("[gruf] stopping standalone server")
|
|
39
|
-
|
|
40
|
-
@server&.server&.stop
|
|
41
|
-
@thread&.join(SERVER_STOP_TIMEOUT_SEC)
|
|
42
|
-
@thread&.kill
|
|
43
|
-
|
|
44
|
-
@logger.info("[gruf] standalone server stopped")
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
##
|
|
48
|
-
# Run the server
|
|
49
|
-
#
|
|
50
|
-
def run
|
|
51
|
-
start
|
|
52
|
-
|
|
53
|
-
yield
|
|
54
|
-
rescue => e
|
|
55
|
-
@logger.fatal("FATAL ERROR: #{e.message} #{e.backtrace.join("\n")}")
|
|
56
|
-
raise
|
|
57
|
-
ensure
|
|
58
|
-
stop
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
private
|
|
62
|
-
|
|
63
|
-
def setup!
|
|
64
|
-
Gruf.server_binding_url = @options[:host] if @options[:host]
|
|
65
|
-
if @options[:suppress_default_interceptors]
|
|
66
|
-
Gruf.interceptors.remove(Gruf::Interceptors::ActiveRecord::ConnectionReset)
|
|
67
|
-
Gruf.interceptors.remove(Gruf::Interceptors::Instrumentation::OutputMetadataTimer)
|
|
68
|
-
end
|
|
69
|
-
Gruf.backtrace_on_error = true if @options[:backtrace_on_error]
|
|
70
|
-
Gruf.health_check_enabled = true if @options[:health_check]
|
|
71
|
-
end
|
|
72
|
-
end
|
|
73
|
-
end
|
|
74
|
-
end
|
|
75
|
-
end
|
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Pact
|
|
4
|
-
module V2
|
|
5
|
-
module Provider
|
|
6
|
-
# inspired by Gruf::Cli::Executor
|
|
7
|
-
class HttpServer
|
|
8
|
-
SERVER_STOP_TIMEOUT_SEC = 15
|
|
9
|
-
|
|
10
|
-
def initialize(options = {})
|
|
11
|
-
@options = options
|
|
12
|
-
|
|
13
|
-
@server_pid = nil
|
|
14
|
-
|
|
15
|
-
@host = @options[:host] || "localhost"
|
|
16
|
-
@logger = @options[:logger] || ::Logger.new($stdout)
|
|
17
|
-
# allow any rack based app to be passed in, otherwise
|
|
18
|
-
# we will load a Rails.application
|
|
19
|
-
# allows for backwards compat with pact-ruby v1
|
|
20
|
-
@app = @options[:app] || nil
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
def start
|
|
24
|
-
raise "server already running, stop server before starting new one" if @thread
|
|
25
|
-
|
|
26
|
-
@logger.info("[webrick] starting server with options: #{@options}")
|
|
27
|
-
|
|
28
|
-
@thread = Thread.new do
|
|
29
|
-
@logger.debug "[webrick] starting http server"
|
|
30
|
-
|
|
31
|
-
# TODO: load from config.ru, if not rails and no app provided?
|
|
32
|
-
# Rack 2/3 compatibility
|
|
33
|
-
begin
|
|
34
|
-
require 'rack/handler/webrick'
|
|
35
|
-
handler = ::Rack::Handler::WEBrick
|
|
36
|
-
rescue LoadError
|
|
37
|
-
require 'rackup/handler/webrick'
|
|
38
|
-
handler = Class.new(Rackup::Handler::WEBrick)
|
|
39
|
-
end
|
|
40
|
-
handler.run(@app || (defined?(Rails) ? Rails.application : nil),
|
|
41
|
-
Host: @options[:host],
|
|
42
|
-
Port: @options[:port],
|
|
43
|
-
Logger: @logger,
|
|
44
|
-
StartCallback: -> { @started = true }) do |server|
|
|
45
|
-
@server = server
|
|
46
|
-
end
|
|
47
|
-
end
|
|
48
|
-
sleep 0.001 until @started
|
|
49
|
-
|
|
50
|
-
@logger.info("[webrick] server started")
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
def stop
|
|
54
|
-
@logger.info("[webrick] stopping server")
|
|
55
|
-
|
|
56
|
-
@server&.shutdown
|
|
57
|
-
@thread&.join(SERVER_STOP_TIMEOUT_SEC)
|
|
58
|
-
@thread&.kill
|
|
59
|
-
|
|
60
|
-
@logger.info("[webrick] server stopped")
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
##
|
|
64
|
-
# Run the server
|
|
65
|
-
#
|
|
66
|
-
def run
|
|
67
|
-
start
|
|
68
|
-
|
|
69
|
-
yield
|
|
70
|
-
rescue => e
|
|
71
|
-
@logger.fatal("FATAL ERROR: #{e.message} #{e.backtrace.join("\n")}")
|
|
72
|
-
raise
|
|
73
|
-
ensure
|
|
74
|
-
stop
|
|
75
|
-
end
|
|
76
|
-
end
|
|
77
|
-
end
|
|
78
|
-
end
|
|
79
|
-
end
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require "pact/ffi/verifier"
|
|
4
|
-
require "pact/v2/native/logger"
|
|
5
|
-
|
|
6
|
-
module Pact
|
|
7
|
-
module V2
|
|
8
|
-
module Provider
|
|
9
|
-
class HttpVerifier < BaseVerifier
|
|
10
|
-
PROVIDER_TRANSPORT_TYPE = "http"
|
|
11
|
-
|
|
12
|
-
def initialize(pact_config, mixed_config = nil)
|
|
13
|
-
super
|
|
14
|
-
|
|
15
|
-
raise ArgumentError, "pact_config must be an instance of Pact::V2::Provider::PactConfig::Http" unless pact_config.is_a?(::Pact::V2::Provider::PactConfig::Http)
|
|
16
|
-
@http_server = HttpServer.new(host: "127.0.0.1", port: @pact_config.http_port, app: @pact_config.app, logger: @pact_config.logger)
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
private
|
|
20
|
-
|
|
21
|
-
def set_provider_info(pact_handle)
|
|
22
|
-
PactFfi::Verifier.set_provider_info(pact_handle, @pact_config.provider_name, "", "", @pact_config.http_port, "")
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
def add_provider_transport(pact_handle)
|
|
26
|
-
# The http transport is already added when the `set_provider_info` method is called,
|
|
27
|
-
# so we don't need to explicitly add the transport here
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
def start_servers!
|
|
32
|
-
super
|
|
33
|
-
@http_server.start
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
def stop_servers
|
|
37
|
-
super
|
|
38
|
-
@http_server.stop
|
|
39
|
-
end
|
|
40
|
-
end
|
|
41
|
-
end
|
|
42
|
-
end
|
|
43
|
-
end
|
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require "webrick"
|
|
4
|
-
|
|
5
|
-
module Pact
|
|
6
|
-
module V2
|
|
7
|
-
module Provider
|
|
8
|
-
class MessageProviderServlet < WEBrick::HTTPServlet::ProcHandler
|
|
9
|
-
attr_reader :logger
|
|
10
|
-
|
|
11
|
-
CONTENT_TYPE_JSON = "application/json"
|
|
12
|
-
CONTENT_TYPE_PROTO = "application/protobuf"
|
|
13
|
-
METADATA_HEADER = "pact-message-metadata"
|
|
14
|
-
|
|
15
|
-
def initialize(logger: nil)
|
|
16
|
-
super(build_proc)
|
|
17
|
-
|
|
18
|
-
@message_handlers = {}
|
|
19
|
-
|
|
20
|
-
@logger = logger || Logger.new($stdout)
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
def add_message_handler(name, &block)
|
|
24
|
-
raise "message handler for #{name} already configured" if @message_handlers[name].present?
|
|
25
|
-
|
|
26
|
-
@message_handlers[name] = {proc: block}
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
private
|
|
30
|
-
|
|
31
|
-
def build_proc
|
|
32
|
-
proc do |request, response|
|
|
33
|
-
# {"description":"message: ","providerStates":[{"name":"pet exists","params":{"pet_id":1}}]}
|
|
34
|
-
data = JSON.parse(request.body)
|
|
35
|
-
|
|
36
|
-
description = data["description"]
|
|
37
|
-
provider_states = data["providerStates"]
|
|
38
|
-
|
|
39
|
-
body, metadata = handle(description, provider_states)
|
|
40
|
-
|
|
41
|
-
response.status = 200
|
|
42
|
-
if body.is_a?(String)
|
|
43
|
-
# protobuf-serialized body
|
|
44
|
-
response.body = body
|
|
45
|
-
response.content_type = metadata[:content_type] || CONTENT_TYPE_PROTO
|
|
46
|
-
else
|
|
47
|
-
response.body = body.to_json
|
|
48
|
-
response.content_type = CONTENT_TYPE_JSON
|
|
49
|
-
end
|
|
50
|
-
response[METADATA_HEADER] = Base64.urlsafe_encode64(metadata.to_json)
|
|
51
|
-
rescue JSON::ParserError => ex
|
|
52
|
-
logger.error("cannot parse request: #{ex.message}")
|
|
53
|
-
response.status = 500
|
|
54
|
-
rescue => ex
|
|
55
|
-
logger.error("cannot handle message request: #{ex.message}")
|
|
56
|
-
response.status = 500
|
|
57
|
-
end
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
def handle(description, provider_states)
|
|
61
|
-
handler = find_handler_for(description)
|
|
62
|
-
return {}, {} unless handler
|
|
63
|
-
|
|
64
|
-
body, metadata = handler[:proc].call(provider_states&.first || {})
|
|
65
|
-
unless metadata[:content_type]
|
|
66
|
-
# try to find content-type in provider states
|
|
67
|
-
content_type = provider_states&.filter_map { |state| state.dig("params", "contentType") }&.first
|
|
68
|
-
metadata[:content_type] = content_type if content_type
|
|
69
|
-
end
|
|
70
|
-
[body, metadata]
|
|
71
|
-
end
|
|
72
|
-
|
|
73
|
-
def find_handler_for(description)
|
|
74
|
-
@message_handlers[description]
|
|
75
|
-
end
|
|
76
|
-
end
|
|
77
|
-
end
|
|
78
|
-
end
|
|
79
|
-
end
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
# # frozen_string_literal: true
|
|
2
|
-
module Pact
|
|
3
|
-
module V2
|
|
4
|
-
module Provider
|
|
5
|
-
# MixedVerifier coordinates verification for all present configs (async, grpc, http)
|
|
6
|
-
class MixedVerifier
|
|
7
|
-
attr_reader :mixed_config, :verifiers
|
|
8
|
-
|
|
9
|
-
def initialize(mixed_config)
|
|
10
|
-
unless mixed_config.is_a?(::Pact::V2::Provider::PactConfig::Mixed)
|
|
11
|
-
raise ArgumentError, "mixed_config must be a PactConfig::Mixed"
|
|
12
|
-
end
|
|
13
|
-
@mixed_config = mixed_config
|
|
14
|
-
@verifiers = []
|
|
15
|
-
@verifiers << AsyncMessageVerifier.new(mixed_config.async_config) if mixed_config.async_config
|
|
16
|
-
@verifiers << GrpcVerifier.new(mixed_config.grpc_config) if mixed_config.grpc_config
|
|
17
|
-
@verifiers << HttpVerifier.new(mixed_config.http_config) if mixed_config.http_config
|
|
18
|
-
end
|
|
19
|
-
end
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
end
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require "rack-proxy"
|
|
4
|
-
|
|
5
|
-
module Pact
|
|
6
|
-
module V2
|
|
7
|
-
module Provider
|
|
8
|
-
class PactBrokerProxy < Rack::Proxy
|
|
9
|
-
attr_reader :backend_uri, :path, :logger
|
|
10
|
-
|
|
11
|
-
# e.g. /pacts/provider/paas-stand-seeker/consumer/paas-stand-placer/pact-version/2967a9343bd8fdd28a286c4b8322380020618892/metadata/c1tdW2VdPXByb2R1Y3Rpb24mc1tdW2N2XT03MzIy
|
|
12
|
-
PACT_FILE_REQUEST_PATH_REGEX = %r{/pacts/provider/.+?/consumer/.+?/pact-version/.+}.freeze
|
|
13
|
-
|
|
14
|
-
def initialize(app = nil, opts = {})
|
|
15
|
-
super
|
|
16
|
-
@backend_uri = URI(opts[:backend])
|
|
17
|
-
@path = nil
|
|
18
|
-
@logger = opts[:logger] || Logger.new($stdout)
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
def perform_request(env)
|
|
22
|
-
request = Rack::Request.new(env)
|
|
23
|
-
env["rack.timeout"] ||= ENV.fetch("PACT_BROKER_REQUEST_TIMEOUT", 5).to_i
|
|
24
|
-
@path = request.path
|
|
25
|
-
|
|
26
|
-
super
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
def rewrite_env(env)
|
|
30
|
-
env["HTTP_HOST"] = backend_uri.host
|
|
31
|
-
env
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
def rewrite_response(triplet)
|
|
35
|
-
status, headers, body = triplet
|
|
36
|
-
|
|
37
|
-
if status == "200" && PACT_FILE_REQUEST_PATH_REGEX.match?(path)
|
|
38
|
-
patched_body = patch_response(body.first)
|
|
39
|
-
|
|
40
|
-
# we need to recalculate content length
|
|
41
|
-
headers[Rack::CONTENT_LENGTH] = patched_body.bytesize.to_s
|
|
42
|
-
|
|
43
|
-
return [status, headers, [patched_body]]
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
triplet
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
private
|
|
50
|
-
|
|
51
|
-
def patch_response(raw_body)
|
|
52
|
-
parsed_body = JSON.parse(raw_body)
|
|
53
|
-
|
|
54
|
-
return body if parsed_body["consumer"].blank? || parsed_body["provider"].blank?
|
|
55
|
-
return body if parsed_body["interactions"].blank?
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
JSON.generate(parsed_body)
|
|
59
|
-
rescue JSON::ParserError => ex
|
|
60
|
-
logger.error("cannot parse broker response: #{ex.message}")
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
end
|
|
64
|
-
end
|
|
65
|
-
end
|
|
66
|
-
end
|
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require "webrick"
|
|
4
|
-
|
|
5
|
-
module Pact
|
|
6
|
-
module V2
|
|
7
|
-
module Provider
|
|
8
|
-
class PactBrokerProxyRunner
|
|
9
|
-
attr_reader :logger
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
def initialize(pact_broker_host:, port: 9002, host: "127.0.0.1", pact_broker_user: nil, pact_broker_password: nil, pact_broker_token: nil, logger: nil)
|
|
13
|
-
@host = host
|
|
14
|
-
@port = port
|
|
15
|
-
@pact_broker_host = pact_broker_host
|
|
16
|
-
@pact_broker_user = pact_broker_user
|
|
17
|
-
@pact_broker_password = pact_broker_password
|
|
18
|
-
@pact_broker_token = pact_broker_token
|
|
19
|
-
@logger = logger || Logger.new($stdout)
|
|
20
|
-
|
|
21
|
-
@thread = nil
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
def proxy_url
|
|
25
|
-
"http://#{@host}:#{@port}"
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
def start
|
|
29
|
-
raise "server already running, stop server before starting new one" if @thread
|
|
30
|
-
# Rack 2/3 compatibility
|
|
31
|
-
begin
|
|
32
|
-
require 'rack/handler/webrick'
|
|
33
|
-
handler = ::Rack::Handler::WEBrick
|
|
34
|
-
rescue LoadError
|
|
35
|
-
require 'rackup/handler/webrick'
|
|
36
|
-
handler = Class.new(Rackup::Handler::WEBrick)
|
|
37
|
-
end
|
|
38
|
-
@server = WEBrick::HTTPServer.new(
|
|
39
|
-
{ BindAddress: @host, Port: @port, Logger: @logger, AccessLog: [] },
|
|
40
|
-
WEBrick::Config::HTTP
|
|
41
|
-
)
|
|
42
|
-
@server.mount("/", handler, PactBrokerProxy.new(
|
|
43
|
-
nil,
|
|
44
|
-
backend: @pact_broker_host,
|
|
45
|
-
streaming: false,
|
|
46
|
-
username: @pact_broker_user || nil,
|
|
47
|
-
password: @pact_broker_password || nil,
|
|
48
|
-
token: @pact_broker_token || nil,
|
|
49
|
-
logger: @logger
|
|
50
|
-
))
|
|
51
|
-
|
|
52
|
-
@thread = Thread.new do
|
|
53
|
-
@logger.debug "starting pact broker proxy server"
|
|
54
|
-
@server.start
|
|
55
|
-
end
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
def stop
|
|
59
|
-
@logger.info("stopping pact broker proxy server")
|
|
60
|
-
|
|
61
|
-
@server&.shutdown
|
|
62
|
-
@thread&.join
|
|
63
|
-
|
|
64
|
-
@logger.info("pact broker proxy server stopped")
|
|
65
|
-
end
|
|
66
|
-
|
|
67
|
-
def run
|
|
68
|
-
start
|
|
69
|
-
|
|
70
|
-
yield
|
|
71
|
-
rescue => e
|
|
72
|
-
logger.fatal("FATAL ERROR: #{e.message} #{e.backtrace.join("\n")}")
|
|
73
|
-
raise
|
|
74
|
-
ensure
|
|
75
|
-
stop
|
|
76
|
-
end
|
|
77
|
-
end
|
|
78
|
-
end
|
|
79
|
-
end
|
|
80
|
-
end
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require_relative "base"
|
|
4
|
-
|
|
5
|
-
module Pact
|
|
6
|
-
module V2
|
|
7
|
-
module Provider
|
|
8
|
-
module PactConfig
|
|
9
|
-
class Async < Base
|
|
10
|
-
def initialize(provider_name:, opts: {})
|
|
11
|
-
super
|
|
12
|
-
handlers = opts[:message_handlers] || {}
|
|
13
|
-
handlers.each do |name, block|
|
|
14
|
-
new_message_handler(name, &block)
|
|
15
|
-
end
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
def new_message_handler(name, opts: {}, &block)
|
|
19
|
-
provider_setup_server.add_message_handler(name, &block)
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
def new_verifier(config = nil)
|
|
23
|
-
AsyncMessageVerifier.new(self, config)
|
|
24
|
-
end
|
|
25
|
-
end
|
|
26
|
-
end
|
|
27
|
-
end
|
|
28
|
-
end
|
|
29
|
-
end
|
|
@@ -1,103 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Pact
|
|
4
|
-
module V2
|
|
5
|
-
module Provider
|
|
6
|
-
module PactConfig
|
|
7
|
-
class Base
|
|
8
|
-
attr_reader :provider_name, :provider_version, :log_level, :provider_setup_server, :provider_setup_port, :pact_proxy_port,
|
|
9
|
-
:consumer_branch, :consumer_version, :consumer_name, :broker_url, :broker_username, :broker_password, :verify_only, :pact_dir,
|
|
10
|
-
:pact_uri, :provider_version_branch, :provider_version_tags, :consumer_version_selectors, :enable_pending, :include_wip_pacts_since,
|
|
11
|
-
:fail_if_no_pacts_found, :provider_build_uri, :broker_token, :consumer_version_tags, :publish_verification_results, :logger
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
def initialize(provider_name:, opts: {})
|
|
15
|
-
@provider_name = provider_name
|
|
16
|
-
@log_level = opts[:log_level] || :info
|
|
17
|
-
@pact_dir = opts[:pact_dir] || nil
|
|
18
|
-
@logger = opts[:logger] || nil
|
|
19
|
-
@provider_setup_port = opts[:provider_setup_port] || 9001
|
|
20
|
-
@pact_proxy_port = opts[:pact_proxy_port] || 9002
|
|
21
|
-
@pact_uri = ENV.fetch("PACT_URL", nil) || opts.fetch(:pact_uri, nil)
|
|
22
|
-
@publish_verification_results = ENV.fetch("PACT_PUBLISH_VERIFICATION_RESULTS", nil) == "true" || opts.fetch(:publish_verification_results, false)
|
|
23
|
-
@provider_version = ENV.fetch("PACT_PROVIDER_VERSION", nil) || opts.fetch(:provider_version, nil)
|
|
24
|
-
@provider_build_uri = ENV.fetch("PACT_PROVIDER_BUILD_URL", nil) || opts.fetch(:provider_build_uri, nil)
|
|
25
|
-
@provider_version_branch = ENV.fetch("PACT_PROVIDER_BRANCH", nil) || opts.fetch(:provider_version_branch, nil)
|
|
26
|
-
@provider_version_tags = ENV.fetch("PACT_PROVIDER_VERSION_TAGS", nil) || opts.fetch(:provider_version_tags, [])
|
|
27
|
-
@consumer_version_tags = ENV.fetch("PACT_CONSUMER_VERSION_TAGS", nil) || opts.fetch(:consumer_version_tags, [])
|
|
28
|
-
@consumer_version_selectors = ENV.fetch("PACT_CONSUMER_VERSION_SELECTORS", nil) || opts.fetch(:consumer_version_selectors, nil)
|
|
29
|
-
@enable_pending = ENV.fetch("PACT_VERIFIER_ENABLE_PENDING", nil) == "true" || opts.fetch(:enable_pending, false)
|
|
30
|
-
@include_wip_pacts_since = ENV.fetch("PACT_INCLUDE_WIP_PACTS_SINCE", nil) || opts.fetch(:include_wip_pacts_since, nil)
|
|
31
|
-
@fail_if_no_pacts_found = ENV.fetch("PACT_FAIL_IF_NO_PACTS_FOUND", nil) == "true" || opts.fetch(:fail_if_no_pacts_found, true)
|
|
32
|
-
@consumer_branch = ENV.fetch("PACT_CONSUMER_BRANCH", nil) || opts.fetch(:consumer_branch, nil)
|
|
33
|
-
@consumer_version = ENV.fetch("PACT_CONSUMER_VERSION", nil) || opts.fetch(:consumer_version, nil)
|
|
34
|
-
@consumer_name = opts[:consumer_name]
|
|
35
|
-
@broker_url = ENV.fetch("PACT_BROKER_BASE_URL", nil) || opts.fetch(:broker_url, nil)
|
|
36
|
-
@broker_username = ENV.fetch("PACT_BROKER_USERNAME", nil) || opts.fetch(:broker_username, nil)
|
|
37
|
-
@broker_password = ENV.fetch("PACT_BROKER_PASSWORD", nil) || opts.fetch(:broker_password, nil)
|
|
38
|
-
@broker_token = ENV.fetch("PACT_BROKER_TOKEN", nil) || opts.fetch(:broker_token, nil)
|
|
39
|
-
@verify_only = [ENV.fetch("PACT_CONSUMER_FULL_NAME", nil)].compact || opts.fetch(:verify_only, [])
|
|
40
|
-
|
|
41
|
-
@provider_setup_server = opts[:provider_setup_server] || ProviderServerRunner.new(port: @provider_setup_port, logger: @logger)
|
|
42
|
-
if @broker_url.present?
|
|
43
|
-
@pact_proxy_server = PactBrokerProxyRunner.new(
|
|
44
|
-
port: @pact_proxy_port,
|
|
45
|
-
pact_broker_host: @broker_url,
|
|
46
|
-
pact_broker_user: @broker_username,
|
|
47
|
-
pact_broker_password: @broker_password,
|
|
48
|
-
pact_broker_token: @broker_token,
|
|
49
|
-
logger: @logger
|
|
50
|
-
)
|
|
51
|
-
end
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
def start_servers
|
|
56
|
-
@provider_setup_server.start
|
|
57
|
-
@pact_proxy_server&.start
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
def stop_servers
|
|
61
|
-
@provider_setup_server.stop
|
|
62
|
-
@pact_proxy_server&.stop
|
|
63
|
-
end
|
|
64
|
-
|
|
65
|
-
def provider_setup_url
|
|
66
|
-
@provider_setup_server.state_setup_url
|
|
67
|
-
end
|
|
68
|
-
|
|
69
|
-
def message_setup_url # rubocop:disable Rails/Delegate
|
|
70
|
-
@provider_setup_server.message_setup_url
|
|
71
|
-
end
|
|
72
|
-
|
|
73
|
-
def pact_broker_proxy_url
|
|
74
|
-
@pact_proxy_server&.proxy_url
|
|
75
|
-
end
|
|
76
|
-
|
|
77
|
-
def new_provider_state(name, opts: {}, &block)
|
|
78
|
-
config = ProviderStateConfiguration.new(name, opts: opts)
|
|
79
|
-
config.instance_eval(&block)
|
|
80
|
-
config.validate!
|
|
81
|
-
|
|
82
|
-
use_hooks = !opts[:skip_hooks]
|
|
83
|
-
|
|
84
|
-
@provider_setup_server.add_setup_state(name, use_hooks, &config.setup_proc) if config.setup_proc
|
|
85
|
-
@provider_setup_server.add_teardown_state(name, use_hooks, &config.teardown_proc) if config.teardown_proc
|
|
86
|
-
end
|
|
87
|
-
|
|
88
|
-
def before_setup(&block)
|
|
89
|
-
@provider_setup_server.set_before_setup_hook(&block)
|
|
90
|
-
end
|
|
91
|
-
|
|
92
|
-
def after_teardown(&block)
|
|
93
|
-
@provider_setup_server.set_after_teardown_hook(&block)
|
|
94
|
-
end
|
|
95
|
-
|
|
96
|
-
def new_verifier
|
|
97
|
-
raise Pact::V2::ImplementationRequired, "#new_verifier should be implemented"
|
|
98
|
-
end
|
|
99
|
-
end
|
|
100
|
-
end
|
|
101
|
-
end
|
|
102
|
-
end
|
|
103
|
-
end
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require_relative "base"
|
|
4
|
-
|
|
5
|
-
module Pact
|
|
6
|
-
module V2
|
|
7
|
-
module Provider
|
|
8
|
-
module PactConfig
|
|
9
|
-
class Grpc < Base
|
|
10
|
-
attr_reader :grpc_port, :grpc_services, :grpc_server
|
|
11
|
-
|
|
12
|
-
def initialize(provider_name:, opts: {})
|
|
13
|
-
super
|
|
14
|
-
|
|
15
|
-
@grpc_port = opts[:grpc_port] || 0
|
|
16
|
-
@grpc_services = opts[:grpc_services] || []
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
def new_verifier(config = nil)
|
|
20
|
-
GrpcVerifier.new(self, config)
|
|
21
|
-
end
|
|
22
|
-
end
|
|
23
|
-
end
|
|
24
|
-
end
|
|
25
|
-
end
|
|
26
|
-
end
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require_relative "base"
|
|
4
|
-
|
|
5
|
-
module Pact
|
|
6
|
-
module V2
|
|
7
|
-
module Provider
|
|
8
|
-
module PactConfig
|
|
9
|
-
class Http < Base
|
|
10
|
-
attr_reader :http_port
|
|
11
|
-
attr_reader :app
|
|
12
|
-
|
|
13
|
-
def initialize(provider_name:, opts: {})
|
|
14
|
-
super
|
|
15
|
-
|
|
16
|
-
@http_port = opts[:http_port] || 0
|
|
17
|
-
@app = opts[:app] || nil
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
def new_verifier(config = nil)
|
|
21
|
-
HttpVerifier.new(self, config)
|
|
22
|
-
end
|
|
23
|
-
end
|
|
24
|
-
end
|
|
25
|
-
end
|
|
26
|
-
end
|
|
27
|
-
end
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
# # frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Pact
|
|
4
|
-
module V2
|
|
5
|
-
module Provider
|
|
6
|
-
module PactConfig
|
|
7
|
-
# Mixed config allows composing one of each: async, grpc, http
|
|
8
|
-
class Mixed < Base
|
|
9
|
-
attr_reader :async_config, :grpc_config, :http_config
|
|
10
|
-
|
|
11
|
-
def initialize(provider_name:, opts: {})
|
|
12
|
-
super
|
|
13
|
-
@provider_setup_server = ProviderServerRunner.new(port: @provider_setup_port, logger: @logger)
|
|
14
|
-
if @broker_url.present?
|
|
15
|
-
@pact_proxy_server = PactBrokerProxyRunner.new(
|
|
16
|
-
port: @pact_proxy_port,
|
|
17
|
-
pact_broker_host: @broker_url,
|
|
18
|
-
pact_broker_user: @broker_username,
|
|
19
|
-
pact_broker_password: @broker_password,
|
|
20
|
-
pact_broker_token: @broker_token,
|
|
21
|
-
logger: @logger
|
|
22
|
-
)
|
|
23
|
-
end
|
|
24
|
-
@http_config = opts[:http] ? Http.new(provider_name: provider_name, opts: opts[:http].merge(provider_setup_server: provider_setup_server, pact_proxy_server: @pact_proxy_server)) : nil
|
|
25
|
-
@grpc_config = opts[:grpc] ? Grpc.new(provider_name: provider_name, opts: opts[:grpc].merge(provider_setup_server: provider_setup_server, pact_proxy_server: @pact_proxy_server)) : nil
|
|
26
|
-
@async_config = opts[:async] ? Async.new(provider_name: provider_name, opts: opts[:async].merge(provider_setup_server: provider_setup_server, pact_proxy_server: @pact_proxy_server)) : nil
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
def configs
|
|
30
|
-
[@async_config, @grpc_config, @http_config].compact
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
def start_servers
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
end
|
|
37
|
-
end
|
|
38
|
-
end
|
|
39
|
-
end
|
|
40
|
-
end
|