derfred-httpstub 0.1.2 → 0.2.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.
Files changed (3) hide show
  1. data/lib/httpstub.rb +27 -18
  2. data/lib/httpstubserver.rb +13 -7
  3. metadata +1 -1
data/lib/httpstub.rb CHANGED
@@ -1,12 +1,13 @@
1
1
  require 'webrick'
2
+ require 'webrick/https'
2
3
  require File.expand_path(File.dirname(__FILE__) + "/webrick_monkey_patch")
3
4
  require File.expand_path(File.dirname(__FILE__) + "/httpstubservlet")
4
5
  require File.expand_path(File.dirname(__FILE__) + "/httpstubserver")
5
6
 
6
7
  class HTTPStub
7
8
 
8
- @@root_server = nil
9
- @@thread = nil
9
+ @@server_list = {}
10
+ @@thread_group = nil
10
11
  @@disable_logging = true
11
12
 
12
13
  def self.disable_logging=(value)
@@ -18,30 +19,38 @@ class HTTPStub
18
19
  end
19
20
 
20
21
 
21
- def self.listen_on(ports)
22
+ def self.listen_on(urls)
22
23
  stop_server
23
24
 
24
- unless @@root_server
25
- @@root_server = WEBrick::HTTPServer.new :Port => 10000, :DoNotListen => true
26
- [ports].flatten.each do |port|
27
- @@root_server.virtual_host HTTPStubServer.new(port)
28
- @@root_server.listen "0.0.0.0", port
25
+ unless @@thread_group
26
+ @@thread_group = ThreadGroup.new
27
+ [urls].flatten.each do |url|
28
+ @@thread_group.add build_server(url)
29
29
  end
30
- @@thread = Thread.new(@@root_server) { |server| server.start }
31
30
  end
32
31
  end
33
32
 
34
- def self.initialize_server(port)
35
- @@root_server.server_for_port(port)
33
+ def self.build_server(url)
34
+ uri = URI.parse(url)
35
+ server = HTTPStubServer.new(uri.port, uri.scheme == "https")
36
+ @@server_list[uri.port] = server
37
+
38
+ Thread.start do
39
+ #server.listen "0.0.0.0", uri.port
40
+ server.start
41
+ end
36
42
  end
37
43
 
38
44
  def self.stop_server
39
- if @@thread
40
- @@root_server.virtual_hosts.each { |h| h.servlet.clear_responses }
41
- @@root_server.shutdown
42
- @@thread.join
43
- @@thread = nil
44
- @@root_server = nil
45
+ if @@thread_group
46
+ @@server_list.values.each do |server|
47
+ server.servlet.clear_responses
48
+ server.shutdown
49
+ end
50
+
51
+ @@thread_group.list.each { |th| th.join }
52
+ @@thread_group = nil
53
+ @@server_list.clear
45
54
  end
46
55
  end
47
56
 
@@ -65,7 +74,7 @@ class HTTPStub
65
74
 
66
75
  def self.stub(method, url, metadata, body)
67
76
  parsed_url = URI.parse(url)
68
- server = initialize_server parsed_url.port
77
+ server = @@server_list[parsed_url.port]
69
78
  path = if parsed_url.query.nil? or parsed_url.query == ""
70
79
  parsed_url.path
71
80
  else
@@ -4,19 +4,25 @@ class HTTPStubServer < WEBrick::HTTPServer
4
4
 
5
5
  attr_reader :servlet
6
6
 
7
- def initialize(port)
8
- options = { :Port => port, :DoNotListen => true, :BindAddress => nil, :ServerName => nil, :ServerAlias => nil }
9
- options.merge!(:AccessLog => []) if HTTPStub.disable_logging?
7
+ def initialize(port, use_ssl)
8
+ options = { :Port => port, :BindAddress => nil, :ServerName => nil, :ServerAlias => nil }
9
+ options.merge!(:AccessLog => [], :Logger => WEBrick::BasicLog.new([])) if HTTPStub.disable_logging?
10
+ options.merge!(ssl_options) if use_ssl
10
11
  super options
11
12
  @servlet = HTTPStubServlet.get_instance self, port
12
13
  end
13
14
 
14
- def hier
15
- puts "hier"
16
- end
17
-
18
15
  def service(req, res)
19
16
  @servlet.service(req, res)
20
17
  end
21
18
 
19
+ private
20
+ def ssl_options
21
+ {
22
+ :SSLEnable => true,
23
+ :SSLVerifyClient => OpenSSL::SSL::VERIFY_NONE,
24
+ :SSLCertName => [ [ "CN", "localhost" ] ]
25
+ }
26
+ end
27
+
22
28
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: derfred-httpstub
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Frederik Fix