Class: Pact::Provider::ProviderServerRunner

Inherits:
Object
  • Object
show all
Defined in:
lib/pact/provider/provider_server_runner.rb

Constant Summary collapse

SETUP_PROVIDER_STATE_PATH =
"/setup-provider"
VERIFY_MESSAGE_PATH =
"/verify-message"

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(port: 9001, host: "127.0.0.1", logger: nil) ⇒ ProviderServerRunner

Returns a new instance of ProviderServerRunner.



13
14
15
16
17
18
19
20
21
22
23
# File 'lib/pact/provider/provider_server_runner.rb', line 13

def initialize(port: 9001, host: "127.0.0.1", logger: nil)
  @host = host
  @port = port
  @provider_setup_states = {}
  @provider_teardown_states = {}
  @logger = logger || Logger.new($stdout)

  @state_servlet = ProviderStateServlet.new(logger: @logger)
  @message_servlet = MessageProviderServlet.new(logger: @logger)
  @thread = nil
end

Instance Attribute Details

#loggerObject (readonly)

Returns the value of attribute logger.



8
9
10
# File 'lib/pact/provider/provider_server_runner.rb', line 8

def logger
  @logger
end

Instance Method Details

#add_message_handler(state_name, &block) ⇒ Object



69
70
71
# File 'lib/pact/provider/provider_server_runner.rb', line 69

def add_message_handler(state_name, &block)
  @message_servlet.add_message_handler(state_name, &block)
end

#add_setup_state(state_name, use_before_setup_hook = true, &block) ⇒ Object



73
74
75
# File 'lib/pact/provider/provider_server_runner.rb', line 73

def add_setup_state(state_name, use_before_setup_hook = true, &block)
  @state_servlet.add_setup_state(state_name, use_before_setup_hook, &block)
end

#add_teardown_state(state_name, use_after_teardown_hook = true, &block) ⇒ Object



77
78
79
# File 'lib/pact/provider/provider_server_runner.rb', line 77

def add_teardown_state(state_name, use_after_teardown_hook = true, &block)
  @state_servlet.add_teardown_state(state_name, use_after_teardown_hook, &block)
end

#message_setup_urlObject



29
30
31
# File 'lib/pact/provider/provider_server_runner.rb', line 29

def message_setup_url
  "http://#{@host}:#{@port}#{VERIFY_MESSAGE_PATH}"
end

#runObject



58
59
60
61
62
63
64
65
66
67
# File 'lib/pact/provider/provider_server_runner.rb', line 58

def run
  start

  yield
rescue => e
  logger.fatal("FATAL ERROR: #{e.message} #{e.backtrace.join("\n")}")
  raise
ensure
  stop
end

#set_after_teardown_hook(&block) ⇒ Object



85
86
87
# File 'lib/pact/provider/provider_server_runner.rb', line 85

def set_after_teardown_hook(&block)
  @state_servlet.after_teardown(&block)
end

#set_before_setup_hook(&block) ⇒ Object



81
82
83
# File 'lib/pact/provider/provider_server_runner.rb', line 81

def set_before_setup_hook(&block)
  @state_servlet.before_setup(&block)
end

#startObject



33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/pact/provider/provider_server_runner.rb', line 33

def start
  raise "server already running, stop server before starting new one" if @thread

    @server = WEBrick::HTTPServer.new(
    { BindAddress: @host, Port: @port, Logger: @logger, AccessLog: [] },
    WEBrick::Config::HTTP
    )
  @server.mount(SETUP_PROVIDER_STATE_PATH, @state_servlet)
  @server.mount(VERIFY_MESSAGE_PATH, @message_servlet)

  @thread = Thread.new do
    @logger.debug "starting provider setup server"
    @server.start
  end
end

#state_setup_urlObject



25
26
27
# File 'lib/pact/provider/provider_server_runner.rb', line 25

def state_setup_url
  "http://#{@host}:#{@port}#{SETUP_PROVIDER_STATE_PATH}"
end

#stopObject



49
50
51
52
53
54
55
56
# File 'lib/pact/provider/provider_server_runner.rb', line 49

def stop
  @logger.info("stopping provider setup server")

  @server&.shutdown
  @thread&.join

  @logger.info("provider setup server stopped")
end