pact-mock_service 0.2.3 → 0.2.4

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.
Files changed (33) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +8 -0
  3. data/lib/pact/consumer/app_manager.rb +23 -35
  4. data/lib/pact/consumer/mock_service/app.rb +11 -75
  5. data/lib/pact/consumer/mock_service/error_handler.rb +28 -0
  6. data/lib/pact/consumer/mock_service/index_get.rb +22 -0
  7. data/lib/pact/consumer/mock_service/interaction_delete.rb +3 -3
  8. data/lib/pact/consumer/mock_service/interaction_post.rb +2 -2
  9. data/lib/pact/consumer/mock_service/log_get.rb +2 -2
  10. data/lib/pact/consumer/mock_service/missing_interactions_get.rb +2 -3
  11. data/lib/pact/consumer/mock_service/mock_service_administration_endpoint.rb +11 -13
  12. data/lib/pact/consumer/mock_service/pact_post.rb +2 -2
  13. data/lib/pact/consumer/mock_service/request_handlers.rb +41 -0
  14. data/lib/pact/consumer/mock_service/verification_get.rb +2 -2
  15. data/lib/pact/consumer/mock_service.rb +41 -0
  16. data/lib/pact/consumer/server.rb +28 -7
  17. data/lib/pact/mock_service/cli/pidfile.rb +97 -0
  18. data/lib/pact/mock_service/cli.rb +109 -59
  19. data/lib/pact/mock_service/control_server/app.rb +42 -0
  20. data/lib/pact/mock_service/control_server/delegator.rb +55 -0
  21. data/lib/pact/mock_service/control_server/index.rb +25 -0
  22. data/lib/pact/mock_service/control_server/mock_service_creator.rb +34 -0
  23. data/lib/pact/mock_service/control_server/mock_services.rb +26 -0
  24. data/lib/pact/mock_service/control_server/require_pacticipant_headers.rb +20 -0
  25. data/lib/pact/mock_service/control_server/run.rb +68 -0
  26. data/lib/pact/mock_service/run.rb +81 -0
  27. data/lib/pact/mock_service/server/restart.rb +20 -0
  28. data/lib/pact/mock_service/server/spawn.rb +37 -0
  29. data/lib/pact/mock_service/server/wait_for_server_up.rb +35 -0
  30. data/lib/pact/mock_service/spawn.rb +68 -0
  31. data/lib/pact/mock_service/version.rb +1 -1
  32. metadata +18 -3
  33. data/lib/pact/consumer/mock_service/web_request_administration.rb +0 -27
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 22b2ac0e4b25a237d1b534c112e0dae09fbf268f
4
- data.tar.gz: 2d3d54b21a35501ea75660f2007a17a8be8c12f7
3
+ metadata.gz: ebcb0082a273a588dcca76818918e469ad66fad1
4
+ data.tar.gz: 0555f3c7bc6f652577e3efb3f96967fd203437f5
5
5
  SHA512:
6
- metadata.gz: 535ec260ca77b6b4e02f7f35959695a0991c5ec62b16c7a9b16411b77665fcbda76873daf20146ff809dc10e2d1ffeb0741570b75a17fd9bcae783f3d521cd56
7
- data.tar.gz: 42f362f541e289fe68358cedcb39573c144131615f7b0f78470276fc32c7d39d541c15a534af93289dcd51489a3093bd0e7d97ff6303ea3537a45289a71781bb
6
+ metadata.gz: ca2923d11a5d07fec5906ef98eb2300048d23247fff17efcbc99ea4c1706aec9f9116c346debaf8fdcbb19725ce36f5ce7719a4181764b71402d4d7298cb1155
7
+ data.tar.gz: 368e8f6e568cbf212f5c6e64009b9cd0caa7832979025091ccd7676853aa4e413b1631a8ec92805b58cf59d0881a9c0a9f844ac368771d0449ebbd76073880e7
data/CHANGELOG.md CHANGED
@@ -2,6 +2,14 @@ Do this to generate your change history
2
2
 
3
3
  git log --pretty=format:' * %h - %s (%an, %ad)'
4
4
 
5
+ ### 0.2.4 (24 Jan 2015)
6
+
7
+ * b14050e - Add --ssl option for control server (Beth, Sat Jan 24 22:14:14 2015 +1100)
8
+ * a9821fd - Add --cors option to control command (Beth, Sat Jan 24 21:51:40 2015 +1100)
9
+ * 16d62c8 - Added endpoint to check if server is up and running without causing an error (Beth, Thu Jan 8 14:33:26 2015 +1100)
10
+ * f93ff1f - Added restart for control and mock service (Beth, Thu Jan 8 14:02:19 2015 +1100)
11
+ * 54b2cb8 - Added control server to allow mock servers to be dynamically set up (Beth, Wed Jan 7 08:24:19 2015 +1100)
12
+
5
13
  ### 0.2.3 (21 Jan 2015)
6
14
 
7
15
  * 560671e - Add support for using Pact::Terms in the path (Beth, Wed Jan 21 07:42:10 2015 +1100)
@@ -6,7 +6,8 @@ require 'find_a_port'
6
6
  require 'pact/logging'
7
7
  require 'pact/consumer/server'
8
8
  require 'singleton'
9
- require 'pact/consumer/mock_service/app'
9
+ require 'pact/consumer/mock_service'
10
+ require 'find_a_port'
10
11
 
11
12
  module Pact
12
13
  module Consumer
@@ -37,15 +38,6 @@ module Pact
37
38
  port
38
39
  end
39
40
 
40
- def existing_app_on_port port
41
- app_registration = @app_registrations.find { |app_registration| app_registration.port == port }
42
- app_registration ? app_registration.app : nil
43
- end
44
-
45
- def app_registered_on?(port)
46
- app_registrations.any? { |app_registration| app_registration.port == port }
47
- end
48
-
49
41
  def ports_of_mock_services
50
42
  app_registrations.find_all(&:is_a_mock_service?).collect(&:port)
51
43
  end
@@ -65,8 +57,21 @@ module Pact
65
57
  @apps_spawned = true
66
58
  end
67
59
 
60
+ def app_registered_on?(port)
61
+ app_registrations.any? { |app_registration| app_registration.port == port }
62
+ end
63
+
68
64
  private
69
65
 
66
+ def existing_app_on_port port
67
+ app_registration = registration_on_port port
68
+ app_registration ? app_registration.app : nil
69
+ end
70
+
71
+ def registration_on_port port
72
+ @app_registrations.find { |app_registration| app_registration.port == port }
73
+ end
74
+
70
75
  def pact_dir
71
76
  Pact.configuration.pact_dir
72
77
  end
@@ -106,22 +111,17 @@ module Pact
106
111
  include Pact::Logging
107
112
  attr_accessor :port
108
113
  attr_accessor :app
109
- attr_accessor :pid
110
114
 
111
115
  def initialize opts
112
116
  @max_wait = 10
113
117
  @port = opts[:port]
114
- @pid = opts[:pid]
115
118
  @app = opts[:app]
119
+ @spawned = false
116
120
  end
117
121
 
118
122
  def kill
119
- # TODO: need to work out how to kill
120
- # logger.info "Killing #{self}"
121
- # Process.kill(9, pid)
122
- # Process.wait(pid)
123
- # self.pid = nil
124
- self.pid = nil
123
+ logger.debug "Supposed to be stopping"
124
+ @spawned = false
125
125
  end
126
126
 
127
127
  def not_spawned?
@@ -129,7 +129,7 @@ module Pact
129
129
  end
130
130
 
131
131
  def spawned?
132
- self.pid != nil
132
+ @spawned
133
133
  end
134
134
 
135
135
  def is_a_mock_service?
@@ -137,27 +137,15 @@ module Pact
137
137
  end
138
138
 
139
139
  def to_s
140
- "#{app} on port #{port}" + (@pid ? " with pid #{pid}" : "")
140
+ "#{app} on port #{port}"
141
141
  end
142
142
 
143
143
  def spawn
144
144
  logger.info "Starting app #{self}..."
145
- Pact::Server.new(app, port).boot
146
- self.pid = 'unknown'
147
- logger.info "Started with pid #{pid}"
148
- end
149
-
150
- def wait_until
151
- waited = 0
152
- wait_time = 0.1
153
- while waited < @max_wait do
154
- break if yield
155
- sleep wait_time
156
- waited += wait_time
157
- raise "Waited longer than #{@max_wait} seconds" if waited >= @max_wait
158
- end
145
+ @server = Pact::Server.new(app, port).boot
146
+ @spawned = true
147
+ logger.info "Started on port #{port}"
159
148
  end
160
-
161
149
  end
162
150
  end
163
151
  end
@@ -2,46 +2,17 @@ require 'rack'
2
2
  require 'uri'
3
3
  require 'json'
4
4
  require 'logger'
5
- require 'pact/consumer/request'
6
- require 'pact/consumer/mock_service/expected_interactions'
7
- require 'pact/consumer/mock_service/actual_interactions'
8
- require 'pact/consumer/mock_service/verified_interactions'
9
- require 'pact/consumer/mock_service/interaction_delete'
10
- require 'pact/consumer/mock_service/interaction_post'
11
- require 'pact/consumer/mock_service/interaction_replay'
12
- require 'pact/consumer/mock_service/missing_interactions_get'
13
- require 'pact/consumer/mock_service/verification_get'
14
- require 'pact/consumer/mock_service/log_get'
15
- require 'pact/consumer/mock_service/pact_post'
16
- require 'pact/consumer/mock_service/options'
17
5
  require 'pact/consumer/mock_service/cors_origin_header_middleware'
18
- require 'pact/support'
6
+ require 'pact/consumer/mock_service/request_handlers'
19
7
 
20
8
  module Pact
21
9
  module Consumer
22
-
23
10
  class MockService
24
-
25
- def initialize options = {}
26
- inner_app = InnerApp.new(options)
27
- @app = CorsOriginHeaderMiddleware.new(inner_app, options[:cors_enabled])
28
- end
29
-
30
- def call env
31
- @app.call env
32
- end
33
-
34
- def shutdown
35
- @app.shutdown
36
- end
37
-
38
- class InnerApp
11
+ class App
39
12
 
40
13
  def initialize options = {}
41
- log_description = configure_logger options
42
-
43
14
  @name = options.fetch(:name, "MockService")
44
- pact_dir = options[:pact_dir]
15
+ @logger = options.fetch(:logger)
45
16
  expected_interactions = ExpectedInteractions.new
46
17
  actual_interactions = ActualInteractions.new
47
18
  verified_interactions = VerifiedInteractions.new
@@ -52,33 +23,11 @@ module Pact
52
23
  interactions: verified_interactions
53
24
  }
54
25
 
55
- @handlers = [
56
- Options.new(@name, @logger, options[:cors_enabled]),
57
- MissingInteractionsGet.new(@name, @logger, expected_interactions, actual_interactions),
58
- VerificationGet.new(@name, @logger, expected_interactions, actual_interactions, log_description),
59
- InteractionPost.new(@name, @logger, expected_interactions, verified_interactions),
60
- InteractionDelete.new(@name, @logger, expected_interactions, actual_interactions),
61
- LogGet.new(@name, @logger),
62
- PactPost.new(@name, @logger, verified_interactions, pact_dir, options[:consumer_contract_details]),
63
- InteractionReplay.new(@name, @logger, expected_interactions, actual_interactions, verified_interactions, options[:cors_enabled])
64
- ]
26
+ @request_handlers = Pact::Consumer::MockService::RequestHandlers.new(@name, @logger, expected_interactions, actual_interactions, verified_interactions, options)
65
27
  end
66
28
 
67
29
  def call env
68
- response = []
69
- begin
70
- relevant_handler = @handlers.detect { |handler| handler.match? env }
71
- response = relevant_handler.respond(env)
72
- rescue StandardError => e
73
- @logger.error "Error ocurred in mock service: #{e.class} - #{e.message}"
74
- @logger.error e.backtrace.join("\n")
75
- response = [500, {'Content-Type' => 'application/json'}, [{message: e.message, backtrace: e.backtrace}.to_json]]
76
- rescue Exception => e
77
- @logger.error "Exception ocurred in mock service: #{e.class} - #{e.message}"
78
- @logger.error e.backtrace.join("\n")
79
- raise e
80
- end
81
- response
30
+ @request_handlers.call(env)
82
31
  end
83
32
 
84
33
  def shutdown
@@ -92,30 +41,17 @@ module Pact
92
41
  consumer_contract_writer.write if consumer_contract_writer.can_write?
93
42
  end
94
43
 
95
- def configure_logger options
96
- options = {log_file: $stdout}.merge options
97
- log_stream = options[:log_file]
98
- @logger = Logger.new log_stream
99
- @logger.formatter = options[:log_formatter] if options[:log_formatter]
100
- @logger.level = Pact.configuration.logger.level
101
-
102
- if log_stream.is_a? File
103
- File.absolute_path(log_stream).gsub(Dir.pwd + "/", '')
104
- else
105
- "standard out/err"
106
- end
107
- end
108
-
109
44
  def to_s
110
45
  "#{@name} #{super.to_s}"
111
46
  end
112
47
 
113
- class StdoutLogger
114
- def info message
115
- $stdout.puts "\n#{message}"
116
- end
117
- end
48
+ end
118
49
 
50
+ # Can't write to a file in a TRAP, might deadlock
51
+ class StdoutLogger
52
+ def info message
53
+ $stdout.puts "\n#{message}"
54
+ end
119
55
  end
120
56
  end
121
57
  end
@@ -0,0 +1,28 @@
1
+ module Pact
2
+ module Consumer
3
+ class MockService
4
+ class ErrorHandler
5
+
6
+ def initialize app, logger
7
+ @app = app
8
+ @logger = logger
9
+ end
10
+
11
+ def call env
12
+ begin
13
+ @app.call(env)
14
+ rescue StandardError => e
15
+ message = "Error ocurred in mock service: #{e.class} - #{e.message}"
16
+ @logger.error message
17
+ @logger.error e.backtrace.join("\n")
18
+ [500, {'Content-Type' => 'application/json'}, [{message: message, backtrace: e.backtrace}.to_json]]
19
+ end
20
+ end
21
+
22
+ def shutdown
23
+ @app.shutdown
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,22 @@
1
+ require 'pact/consumer/mock_service/rack_request_helper'
2
+ require 'pact/consumer/mock_service/mock_service_administration_endpoint'
3
+
4
+ module Pact
5
+ module Consumer
6
+
7
+ class IndexGet < MockServiceAdministrationEndpoint
8
+
9
+ def request_path
10
+ ''
11
+ end
12
+
13
+ def request_method
14
+ 'GET'
15
+ end
16
+
17
+ def respond env
18
+ [200, {'Content-Type' => 'text/plain'}, ['Mock service running']]
19
+ end
20
+ end
21
+ end
22
+ end
@@ -1,10 +1,10 @@
1
1
  require 'pact/consumer/mock_service/rack_request_helper'
2
- require 'pact/consumer/mock_service/web_request_administration'
2
+ require 'pact/consumer/mock_service/mock_service_administration_endpoint'
3
3
 
4
4
  module Pact
5
5
  module Consumer
6
6
 
7
- class InteractionDelete < WebRequestAdministration
7
+ class InteractionDelete < MockServiceAdministrationEndpoint
8
8
 
9
9
  include RackRequestHelper
10
10
 
@@ -36,4 +36,4 @@ module Pact
36
36
  end
37
37
  end
38
38
  end
39
- end
39
+ end
@@ -1,10 +1,10 @@
1
- require 'pact/consumer/mock_service/web_request_administration'
1
+ require 'pact/consumer/mock_service/mock_service_administration_endpoint'
2
2
  require 'pact/mock_service/interaction_decorator'
3
3
  require 'pact/shared/json_differ'
4
4
 
5
5
  module Pact
6
6
  module Consumer
7
- class InteractionPost < WebRequestAdministration
7
+ class InteractionPost < MockServiceAdministrationEndpoint
8
8
 
9
9
  def initialize name, logger, expected_interactions, verified_interactions
10
10
  super name, logger
@@ -1,8 +1,8 @@
1
- require 'pact/consumer/mock_service/web_request_administration'
1
+ require 'pact/consumer/mock_service/mock_service_administration_endpoint'
2
2
 
3
3
  module Pact
4
4
  module Consumer
5
- class LogGet < WebRequestAdministration
5
+ class LogGet < MockServiceAdministrationEndpoint
6
6
 
7
7
  include RackRequestHelper
8
8
 
@@ -1,10 +1,10 @@
1
- require 'pact/consumer/mock_service/web_request_administration'
1
+ require 'pact/consumer/mock_service/mock_service_administration_endpoint'
2
2
  require 'pact/consumer/mock_service/verification'
3
3
 
4
4
  module Pact
5
5
  module Consumer
6
6
 
7
- class MissingInteractionsGet < WebRequestAdministration
7
+ class MissingInteractionsGet < MockServiceAdministrationEndpoint
8
8
  include RackRequestHelper
9
9
 
10
10
  def initialize name, logger, expected_interactions, actual_interactions
@@ -27,7 +27,6 @@ module Pact
27
27
  logger.info "Number of missing interactions for mock \"#{name}\" = #{number_of_missing_interactions}"
28
28
  [200, {}, [{size: number_of_missing_interactions}.to_json]]
29
29
  end
30
-
31
30
  end
32
31
  end
33
32
  end
@@ -13,29 +13,27 @@ module Pact
13
13
  end
14
14
 
15
15
  def match? env
16
- (request_header_match? env) && (request_path_match? env) && (request_method_match? env)
16
+ has_mock_service_header?(env) && path_matches?(env) && method_matches?(env)
17
17
  end
18
18
 
19
- def request_path
20
- raise NotImplementedError
19
+ def has_mock_service_header? env
20
+ env['HTTP_X_PACT_MOCK_SERVICE']
21
21
  end
22
22
 
23
- def request_method
24
- raise NotImplementedError
23
+ def path_matches? env
24
+ env['PATH_INFO'].chomp("/") == request_path
25
25
  end
26
26
 
27
- private
28
-
29
- def request_header_match? env
30
- raise NotImplementedError
27
+ def method_matches? env
28
+ env['REQUEST_METHOD'] == request_method
31
29
  end
32
30
 
33
- def request_path_match? env
34
- env['PATH_INFO'] == request_path
31
+ def request_path
32
+ raise NotImplementedError
35
33
  end
36
34
 
37
- def request_method_match? env
38
- env['REQUEST_METHOD'] == request_method
35
+ def request_method
36
+ raise NotImplementedError
39
37
  end
40
38
  end
41
39
  end
@@ -1,9 +1,9 @@
1
+ require 'pact/consumer/mock_service/mock_service_administration_endpoint'
1
2
  require 'pact/consumer_contract/consumer_contract_writer'
2
- require 'pact/consumer/mock_service/web_request_administration'
3
3
 
4
4
  module Pact
5
5
  module Consumer
6
- class PactPost < WebRequestAdministration
6
+ class PactPost < MockServiceAdministrationEndpoint
7
7
 
8
8
  attr_accessor :consumer_contract, :verified_interactions, :default_options
9
9
 
@@ -0,0 +1,41 @@
1
+ require 'pact/consumer/mock_service/expected_interactions'
2
+ require 'pact/consumer/mock_service/actual_interactions'
3
+ require 'pact/consumer/mock_service/verified_interactions'
4
+ require 'pact/consumer/mock_service/interaction_delete'
5
+ require 'pact/consumer/mock_service/interaction_post'
6
+ require 'pact/consumer/mock_service/interaction_replay'
7
+ require 'pact/consumer/mock_service/missing_interactions_get'
8
+ require 'pact/consumer/mock_service/verification_get'
9
+ require 'pact/consumer/mock_service/log_get'
10
+ require 'pact/consumer/mock_service/pact_post'
11
+ require 'pact/consumer/mock_service/index_get'
12
+ require 'pact/consumer/mock_service/options'
13
+ require 'pact/consumer/request'
14
+ require 'pact/support'
15
+
16
+ module Pact
17
+ module Consumer
18
+ class MockService
19
+ class RequestHandlers
20
+ def initialize name, logger, expected_interactions, actual_interactions, verified_interactions, options
21
+ @handlers = [
22
+ Options.new(name, logger, options[:cors_enabled]),
23
+ MissingInteractionsGet.new(name, logger, expected_interactions, actual_interactions),
24
+ VerificationGet.new(name, logger, expected_interactions, actual_interactions, options[:log_description]),
25
+ InteractionPost.new(name, logger, expected_interactions, verified_interactions),
26
+ InteractionDelete.new(name, logger, expected_interactions, actual_interactions),
27
+ LogGet.new(name, logger),
28
+ PactPost.new(name, logger, verified_interactions, options[:pact_dir], options[:consumer_contract_details]),
29
+ IndexGet.new(name, logger),
30
+ InteractionReplay.new(name, logger, expected_interactions, actual_interactions, verified_interactions, options[:cors_enabled])
31
+ ]
32
+ end
33
+
34
+ def call env
35
+ relevant_handler = @handlers.detect { |handler| handler.match? env }
36
+ response = relevant_handler.respond(env)
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
@@ -1,8 +1,8 @@
1
- require 'pact/consumer/mock_service/web_request_administration'
1
+ require 'pact/consumer/mock_service/mock_service_administration_endpoint'
2
2
 
3
3
  module Pact
4
4
  module Consumer
5
- class VerificationGet < WebRequestAdministration
5
+ class VerificationGet < MockServiceAdministrationEndpoint
6
6
 
7
7
  include RackRequestHelper
8
8
 
@@ -1,2 +1,43 @@
1
1
  require 'pact/consumer/mock_service/app'
2
+ require 'pact/consumer/mock_service/error_handler'
2
3
 
4
+ module Pact
5
+ module Consumer
6
+
7
+ class MockService
8
+
9
+ def initialize options = {}
10
+ logger, log_description = configure_logger(options)
11
+ app_options = options.merge(logger: logger, log_description: log_description)
12
+ @app = Rack::Builder.app do
13
+ use ErrorHandler, logger
14
+ use CorsOriginHeaderMiddleware, options[:cors_enabled]
15
+ run App.new(app_options)
16
+ end
17
+ end
18
+
19
+ def call env
20
+ @app.call env
21
+ end
22
+
23
+ def shutdown
24
+ @app.shutdown
25
+ end
26
+
27
+ def configure_logger options
28
+ options = {log_file: $stdout}.merge options
29
+ log_stream = options[:log_file]
30
+ logger = Logger.new log_stream
31
+ logger.formatter = options[:log_formatter] if options[:log_formatter]
32
+ logger.level = Pact.configuration.logger.level
33
+
34
+ log_description = if log_stream.is_a? File
35
+ File.absolute_path(log_stream).gsub(Dir.pwd + "/", '')
36
+ else
37
+ "standard out/err"
38
+ end
39
+ return logger, log_description
40
+ end
41
+ end
42
+ end
43
+ end
@@ -32,13 +32,14 @@ module Pact
32
32
  end
33
33
  end
34
34
 
35
- attr_reader :app, :port
35
+ attr_reader :app, :port, :options
36
36
 
37
- def initialize(app, port)
37
+ def initialize(app, port, options = {})
38
38
  @app = app
39
39
  @middleware = Middleware.new(@app)
40
- @server_thread = nil # supress warnings
40
+ @server_thread = nil
41
41
  @port = port
42
+ @options = options
42
43
  end
43
44
 
44
45
  def reset_error!
@@ -55,9 +56,7 @@ module Pact
55
56
 
56
57
  def responsive?
57
58
  return false if @server_thread && @server_thread.join(0)
58
-
59
- res = Net::HTTP.start(host, @port) { |http| http.get('/__identify__') }
60
-
59
+ res = get_identity
61
60
  if res.is_a?(Net::HTTPSuccess) or res.is_a?(Net::HTTPRedirection)
62
61
  return res.body == @app.object_id.to_s
63
62
  end
@@ -69,7 +68,29 @@ module Pact
69
68
 
70
69
  def run_default_server(app, port)
71
70
  require 'rack/handler/webrick'
72
- Rack::Handler::WEBrick.run(app, :Port => port, :AccessLog => [], :Logger => WEBrick::Log::new(nil, 0))
71
+ Rack::Handler::WEBrick.run(app, webrick_opts)
72
+ end
73
+
74
+ def get_identity
75
+ http = Net::HTTP.new host, @port
76
+ if options[:ssl]
77
+ http.use_ssl = true
78
+ http.verify_mode = OpenSSL::SSL::VERIFY_NONE
79
+ end
80
+ http.get('/__identify__')
81
+ end
82
+
83
+ def webrick_opts
84
+ opts = {:Port => port, :AccessLog => [], :Logger => WEBrick::Log::new(nil, 0)}
85
+ opts.merge!(ssl_opts) if options[:ssl]
86
+ opts
87
+ end
88
+
89
+ def ssl_opts
90
+ {
91
+ :SSLEnable => true,
92
+ :SSLCertName => [ %w[CN localhost] ]
93
+ }
73
94
  end
74
95
 
75
96
  def boot