httpi 4.0.3 → 4.0.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (52) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +4 -0
  3. data/lib/httpi/version.rb +1 -1
  4. metadata +2 -50
  5. data/.devcontainer/devcontainer.json +0 -22
  6. data/.github/workflows/development.yml +0 -49
  7. data/.gitignore +0 -11
  8. data/.rspec +0 -1
  9. data/Gemfile +0 -22
  10. data/Rakefile +0 -18
  11. data/httpi.gemspec +0 -40
  12. data/spec/fixtures/attachment.gif +0 -0
  13. data/spec/fixtures/client_cert.pem +0 -20
  14. data/spec/fixtures/client_key.pem +0 -27
  15. data/spec/fixtures/xml.gz +0 -0
  16. data/spec/fixtures/xml.xml +0 -10
  17. data/spec/fixtures/xml_dime.dime +0 -0
  18. data/spec/fixtures/xml_dime.xml +0 -1
  19. data/spec/httpi/adapter/base_spec.rb +0 -23
  20. data/spec/httpi/adapter/curb_spec.rb +0 -351
  21. data/spec/httpi/adapter/em_http_spec.rb +0 -180
  22. data/spec/httpi/adapter/excon_spec.rb +0 -34
  23. data/spec/httpi/adapter/http_spec.rb +0 -28
  24. data/spec/httpi/adapter/httpclient_spec.rb +0 -238
  25. data/spec/httpi/adapter/net_http_persistent_spec.rb +0 -46
  26. data/spec/httpi/adapter/net_http_spec.rb +0 -54
  27. data/spec/httpi/adapter/rack_spec.rb +0 -109
  28. data/spec/httpi/adapter_spec.rb +0 -68
  29. data/spec/httpi/auth/config_spec.rb +0 -163
  30. data/spec/httpi/auth/ssl_spec.rb +0 -216
  31. data/spec/httpi/cookie_spec.rb +0 -36
  32. data/spec/httpi/cookie_store_spec.rb +0 -26
  33. data/spec/httpi/error_spec.rb +0 -43
  34. data/spec/httpi/httpi_spec.rb +0 -382
  35. data/spec/httpi/request_spec.rb +0 -290
  36. data/spec/httpi/response_spec.rb +0 -146
  37. data/spec/integration/curb_spec.rb +0 -140
  38. data/spec/integration/em_http_spec.rb +0 -108
  39. data/spec/integration/excon_spec.rb +0 -174
  40. data/spec/integration/fixtures/ca_all.pem +0 -19
  41. data/spec/integration/fixtures/server.cert +0 -19
  42. data/spec/integration/fixtures/server.key +0 -27
  43. data/spec/integration/http_spec.rb +0 -156
  44. data/spec/integration/httpclient_spec.rb +0 -137
  45. data/spec/integration/net_http_persistent_spec.rb +0 -171
  46. data/spec/integration/net_http_spec.rb +0 -282
  47. data/spec/integration/support/application.rb +0 -88
  48. data/spec/integration/support/server.rb +0 -83
  49. data/spec/spec_helper.rb +0 -23
  50. data/spec/support/error_helper.rb +0 -26
  51. data/spec/support/fixture.rb +0 -27
  52. data/spec/support/matchers.rb +0 -19
@@ -1,171 +0,0 @@
1
- require "spec_helper"
2
- require "integration/support/server"
3
- require "net/http/persistent"
4
-
5
- describe HTTPI::Adapter::NetHTTPPersistent do
6
-
7
- subject(:adapter) { :net_http_persistent }
8
-
9
- context "http requests" do
10
- before :all do
11
- @server = IntegrationServer.run
12
- end
13
-
14
- after :all do
15
- @server.stop
16
- end
17
-
18
- it "sends and receives HTTP headers" do
19
- request = HTTPI::Request.new(@server.url + "x-header")
20
- request.headers["X-Header"] = "HTTPI"
21
-
22
- response = HTTPI.get(request, adapter)
23
- expect(response.body).to include("HTTPI")
24
- end
25
-
26
- it "it supports headers with multiple values" do
27
- request = HTTPI::Request.new(@server.url + "cookies")
28
-
29
- response = HTTPI.get(request, adapter)
30
- cookies = ["cookie1=chip1; path=/", "cookie2=chip2; path=/"]
31
- expect(response.headers["Set-Cookie"]).to eq(cookies)
32
- end
33
-
34
- it "it supports read timeout" do
35
- require "net/http/persistent"
36
-
37
- request = HTTPI::Request.new(@server.url + "timeout")
38
- request.read_timeout = 0.5 # seconds
39
-
40
- expect do
41
- HTTPI.get(request, adapter)
42
- end.to raise_exception(Net::ReadTimeout)
43
- end
44
-
45
- it "executes GET requests" do
46
- response = HTTPI.get(@server.url, adapter)
47
- expect(response.body).to eq("get")
48
- expect(response.headers["Content-Type"]).to eq("text/plain")
49
- end
50
-
51
- it "executes POST requests" do
52
- request = HTTPI::Request.new(url: @server.url, body: "<some>xml</some>")
53
-
54
- response = HTTPI.post(request, adapter)
55
- expect(response.body).to eq("post")
56
- expect(response.headers["Content-Type"]).to eq("text/plain")
57
- end
58
-
59
- it "executes HEAD requests" do
60
- response = HTTPI.head(@server.url, adapter)
61
- expect(response.code).to eq(200)
62
- expect(response.headers["Content-Type"]).to eq("text/plain")
63
- end
64
-
65
- it "executes PUT requests" do
66
- response = HTTPI.put(@server.url, "<some>xml</some>", adapter)
67
- expect(response.body).to eq("put")
68
- expect(response.headers["Content-Type"]).to eq("text/plain")
69
- end
70
-
71
- it "executes DELETE requests" do
72
- response = HTTPI.delete(@server.url, adapter)
73
- expect(response.body).to eq("delete")
74
- expect(response.headers["Content-Type"]).to eq("text/plain")
75
- end
76
-
77
- it "supports basic authentication" do
78
- request = HTTPI::Request.new(@server.url + "basic-auth")
79
- request.auth.basic("admin", "secret")
80
-
81
- response = HTTPI.get(request, adapter)
82
- expect(response.body).to eq("basic-auth")
83
- end
84
-
85
- it "does not support ntlm authentication" do
86
- request = HTTPI::Request.new(@server.url + "ntlm-auth")
87
- request.auth.ntlm("tester", "vReqSoafRe5O")
88
-
89
- expect { HTTPI.get(request, adapter) }.
90
- to raise_error(HTTPI::NotSupportedError, /does not support NTLM authentication/)
91
- end
92
-
93
- # it does not support digest authentication
94
-
95
- it "supports chunked response" do
96
- request = HTTPI::Request.new(@server.url)
97
- res = ""
98
- request.on_body do |body|
99
- res += body
100
- end
101
- response = HTTPI.post(request, adapter)
102
- expect(res).to eq("post")
103
- expect(response.body.to_s).to eq("")
104
- end
105
- end
106
-
107
- if RUBY_PLATFORM =~ /java/
108
- pending "Puma Server complains: SSL not supported on JRuby"
109
- else
110
- context "https requests" do
111
- before :all do
112
- @server = IntegrationServer.run(:ssl => true)
113
- end
114
-
115
- after :all do
116
- @server.stop
117
- end
118
-
119
- # does not raise when no certificate was set up
120
- it "works when set up properly" do
121
- request = HTTPI::Request.new(@server.url)
122
- request.auth.ssl.ca_cert_file = IntegrationServer.ssl_ca_file
123
-
124
- response = HTTPI.get(request, adapter)
125
- expect(response.body).to eq("get")
126
- end
127
-
128
- it "works with ciphers" do
129
- request = HTTPI::Request.new(@server.url)
130
- request.auth.ssl.ca_cert_file = IntegrationServer.ssl_ca_file
131
- request.auth.ssl.ciphers = OpenSSL::SSL::SSLContext.new.ciphers
132
-
133
- response = HTTPI.get(request, adapter)
134
- expect(response.body).to eq("get")
135
- end
136
- end
137
- end
138
-
139
- # The built-in Rack IntegrationServer and specs support a basic simulated NTLM exchange
140
- # that does not require anything outside of the normal gem test infrastructure.
141
- # (see spec/httpi/adapter/net_http_spec.rb: it "supports ntlm authentication"
142
- # and spec/integration/support/application.rb: map "/ntlm-auth")
143
- # But since that simulated exchange is based on recorded traffic, you may wish to
144
- # run the following integration test against a real external NTLM server from time to time.
145
- #
146
- # This test must be specially enabled because it requires an external
147
- # Windows 2012 Server configured according to the instructions found here:
148
- # https://github.com/savonrb/httpi/wiki/NTLM-Integration-Test-Plan
149
- #
150
- # Once you have that server running as instructed, you can include this test by setting
151
- # NTLM=external via the command line, e.g.:
152
- # $ NTLM=external bundle exec rspec
153
- #
154
- if ENV["NTLM"]=="external"
155
- context "http request via NTLM" do
156
- it "works with NTLM connections" do
157
- user = "tester"
158
- pass = "vReqSoafRe5O"
159
- request = HTTPI::Request.new("http://ntlmtest/")
160
- request.auth.ntlm(user,pass)
161
- response = HTTPI.get(request, adapter)
162
- expect(response.code).to eq(200)
163
- expect(response.body).to match(/iis-8\.png/)
164
-
165
- puts "EXTERNAL NTLM INTEGRATION TEST, response body:"
166
- puts response.body
167
- end
168
- end
169
- end
170
-
171
- end
@@ -1,282 +0,0 @@
1
- require "spec_helper"
2
- require "integration/support/server"
3
-
4
- describe HTTPI::Adapter::NetHTTP do
5
-
6
- subject(:adapter) { :net_http }
7
-
8
- context "http requests" do
9
- before :all do
10
- @server = IntegrationServer.run
11
- end
12
-
13
- after :all do
14
- @server.stop
15
- end
16
-
17
- context "when socks is specified" do
18
- let(:socks_client) { mock("socks_client") }
19
- let(:request) { HTTPI::Request.new(@server.url) }
20
-
21
- it "uses Net::HTTP.SOCKSProxy as client" do
22
- socks_client.expects(:new).with(URI(@server.url).host, URI(@server.url).port).returns(:socks_client_instance)
23
- Net::HTTP.expects(:SOCKSProxy).with("localhost", 8080).returns socks_client
24
-
25
- request.proxy = "socks://localhost:8080"
26
- adapter = HTTPI::Adapter::NetHTTP.new(request)
27
-
28
- expect(adapter.client).to eq(:socks_client_instance)
29
- end
30
- end
31
-
32
- it "sends and receives HTTP headers" do
33
- request = HTTPI::Request.new(@server.url + "x-header")
34
- request.headers["X-Header"] = "HTTPI"
35
-
36
- response = HTTPI.get(request, adapter)
37
- expect(response.body).to include("HTTPI")
38
- end
39
-
40
- it "it supports headers with multiple values" do
41
- request = HTTPI::Request.new(@server.url + "cookies")
42
-
43
- response = HTTPI.get(request, adapter)
44
- cookies = ["cookie1=chip1; path=/", "cookie2=chip2; path=/"]
45
- expect(response.headers["Set-Cookie"]).to eq(cookies)
46
- end
47
-
48
- it "it supports read timeout" do
49
- require "net/http"
50
-
51
- request = HTTPI::Request.new(@server.url + "timeout")
52
- request.read_timeout = 0.5 # seconds
53
-
54
- expect do
55
- HTTPI.get(request, adapter)
56
- end.to raise_exception(Net::ReadTimeout)
57
- end
58
-
59
- it "executes GET requests" do
60
- response = HTTPI.get(@server.url, adapter)
61
- expect(response.body).to eq("get")
62
- expect(response.headers["Content-Type"]).to eq("text/plain")
63
- end
64
-
65
- it "executes POST requests" do
66
- response = HTTPI.post(@server.url, "<some>xml</some>", adapter)
67
- expect(response.body).to eq("post")
68
- expect(response.headers["Content-Type"]).to eq("text/plain")
69
- end
70
-
71
- it "executes HEAD requests" do
72
- response = HTTPI.head(@server.url, adapter)
73
- expect(response.code).to eq(200)
74
- expect(response.headers["Content-Type"]).to eq("text/plain")
75
- end
76
-
77
- it "executes PUT requests" do
78
- response = HTTPI.put(@server.url, "<some>xml</some>", adapter)
79
- expect(response.body).to eq("put")
80
- expect(response.headers["Content-Type"]).to eq("text/plain")
81
- end
82
-
83
- it "executes DELETE requests" do
84
- response = HTTPI.delete(@server.url, adapter)
85
- expect(response.body).to eq("delete")
86
- expect(response.headers["Content-Type"]).to eq("text/plain")
87
- end
88
-
89
- context "custom methods" do
90
- let(:request) {
91
- HTTPI::Request.new(@server.url).tap do |r|
92
- r.body = request_body if request_body
93
- end
94
- }
95
- let(:request_body) { nil }
96
-
97
- subject(:response) { HTTPI.request(http_method, request, adapter) }
98
-
99
- shared_examples_for "any supported custom method" do
100
- describe '#body' do
101
- subject(:body) {response.body}
102
- it { is_expected.to be == http_method.to_s }
103
- end
104
-
105
- describe '#headers' do
106
- subject(:headers) {response.headers}
107
- it { is_expected.to include('content-type' => "text/plain")}
108
- end
109
- end
110
-
111
- context "PATCH method" do
112
- let(:http_method) { :patch }
113
- let(:request_body) { "<some>xml</some>" }
114
-
115
- it_behaves_like "any supported custom method"
116
- end
117
-
118
- context "UNSUPPORTED method" do
119
- let(:http_method) { :unsupported }
120
-
121
- specify { expect { response }.to raise_error HTTPI::NotSupportedError }
122
- end
123
- end
124
-
125
- it "supports basic authentication" do
126
- request = HTTPI::Request.new(@server.url + "basic-auth")
127
- request.auth.basic("admin", "secret")
128
-
129
- response = HTTPI.get(request, adapter)
130
- expect(response.body).to eq("basic-auth")
131
- end
132
-
133
- it "does not support digest authentication" do
134
- request = HTTPI::Request.new(@server.url + "digest-auth")
135
- request.auth.digest("admin", "secret")
136
-
137
- expect { HTTPI.get(request, adapter) }.
138
- to raise_error(HTTPI::NotSupportedError, /does not support HTTP digest authentication/)
139
- end
140
-
141
- it "supports ntlm authentication" do
142
- request = HTTPI::Request.new(@server.url + "ntlm-auth")
143
- request.auth.ntlm("tester", "vReqSoafRe5O")
144
-
145
- response = HTTPI.get(request, adapter)
146
- expect(response.body).to eq("ntlm-auth")
147
- end
148
-
149
- it "does not support ntlm authentication when Net::NTLM is not available" do
150
- Net.expects(:const_defined?).with(:NTLM).returns false
151
-
152
- request = HTTPI::Request.new(@server.url + "ntlm-auth")
153
- request.auth.ntlm("testing", "failures")
154
-
155
- expect { HTTPI.get(request, adapter) }.
156
- to raise_error(HTTPI::NotSupportedError, /Net::NTLM is not available/)
157
- end
158
-
159
- it "does not require ntlm when ntlm authenication is not requested" do
160
- HTTPI::Adapter::NetHTTP.any_instance.stubs(:check_net_ntlm_version!).raises(RuntimeError)
161
- request = HTTPI::Request.new(@server.url)
162
- expect(request.auth.ntlm?).to be false
163
-
164
- # make sure a request doesn't call ntlm check if we don't ask for it.
165
- expect { HTTPI.get(request, adapter) }.not_to raise_error
166
- HTTPI::Adapter::NetHTTP.any_instance.unstub(:check_net_ntlm_version!)
167
- end
168
-
169
- it "does check ntlm when ntlm authentication is requested" do
170
- request = HTTPI::Request.new(@server.url + "ntlm-auth")
171
- request.auth.ntlm("tester", "vReqSoafRe5O")
172
-
173
- expect { HTTPI.get(request, adapter) }.not_to raise_error
174
-
175
- # the check should also verify that the version of ntlm is supported and still fail if it isn't
176
- HTTPI::Adapter::NetHTTP.any_instance.stubs(:ntlm_version).returns("0.1.1")
177
-
178
- request = HTTPI::Request.new(@server.url + "ntlm-auth")
179
- request.auth.ntlm("tester", "vReqSoafRe5O")
180
-
181
- expect { HTTPI.get(request, adapter) }.to raise_error(ArgumentError, /Invalid version/)
182
-
183
- HTTPI::Adapter::NetHTTP.any_instance.unstub(:ntlm_version)
184
- end
185
-
186
- it "does not crash when authenticate header is missing (on second request)" do
187
- request = HTTPI::Request.new(@server.url + "ntlm-auth")
188
- request.auth.ntlm("tester", "vReqSoafRe5O")
189
-
190
- expect { HTTPI.get(request, adapter) }.
191
- to_not raise_error
192
-
193
- expect { HTTPI.get(request, adapter) }.
194
- to_not raise_error
195
- end
196
-
197
- it "supports chunked response" do
198
- request = HTTPI::Request.new(@server.url)
199
- res = ""
200
- request.on_body do |body|
201
- res += body
202
- end
203
- response = HTTPI.post(request, adapter)
204
- expect(res).to eq("post")
205
- expect(response.body.to_s).to eq("")
206
- end
207
- end
208
-
209
- if RUBY_PLATFORM =~ /java/
210
- pending "Puma Server complains: SSL not supported on JRuby"
211
- else
212
- context "https requests" do
213
- before :all do
214
- @server = IntegrationServer.run(:ssl => true)
215
- end
216
- after :all do
217
- @server.stop
218
- end
219
-
220
- # does not raise when no certificate was set up
221
- it "works when set up properly" do
222
- request = HTTPI::Request.new(@server.url)
223
- request.auth.ssl.ca_cert_file = IntegrationServer.ssl_ca_file
224
-
225
- response = HTTPI.get(request, adapter)
226
- expect(response.body).to eq("get")
227
- end
228
-
229
- it "works with min_version/max_version" do
230
- request = HTTPI::Request.new(@server.url)
231
- request.auth.ssl.ca_cert_file = IntegrationServer.ssl_ca_file
232
- request.auth.ssl.min_version = :TLS1_2
233
- request.auth.ssl.max_version = :TLS1_2
234
-
235
- response = HTTPI.get(request, adapter)
236
- expect(response.body).to eq("get")
237
- end
238
-
239
- it "works with ciphers" do
240
- request = HTTPI::Request.new(@server.url)
241
- request.auth.ssl.ca_cert_file = IntegrationServer.ssl_ca_file
242
- request.auth.ssl.ciphers = OpenSSL::SSL::SSLContext.new.ciphers
243
-
244
- response = HTTPI.get(request, adapter)
245
- expect(response.body).to eq("get")
246
- end
247
- end
248
- end
249
-
250
- # The built-in Rack IntegrationServer and specs support a basic simulated NTLM exchange
251
- # that does not require anything outside of the normal gem test infrastructure.
252
- # (see spec/httpi/adapter/net_http_spec.rb: it "supports ntlm authentication"
253
- # and spec/integration/support/application.rb: map "/ntlm-auth")
254
- # But since that simulated exchange is based on recorded traffic, you may wish to
255
- # run the following integration test against a real external NTLM server from time to time.
256
- #
257
- # This test must be specially enabled because it requires an external
258
- # Windows 2012 Server configured according to the instructions found here:
259
- # https://github.com/savonrb/httpi/wiki/NTLM-Integration-Test-Plan
260
- #
261
- # Once you have that server running as instructed, you can include this test by setting
262
- # NTLM=external via the command line, e.g.:
263
- # $ NTLM=external bundle exec rspec
264
- #
265
- if ENV["NTLM"]=="external"
266
- context "http request via NTLM" do
267
- it "works with NTLM connections" do
268
- user = "tester"
269
- pass = "vReqSoafRe5O"
270
- request = HTTPI::Request.new("http://ntlmtest/")
271
- request.auth.ntlm(user,pass)
272
- response = HTTPI.get(request, adapter)
273
- expect(response.code).to eq(200)
274
- expect(response.body).to match(/iis-8\.png/)
275
-
276
- puts "EXTERNAL NTLM INTEGRATION TEST, response body:"
277
- puts response.body
278
- end
279
- end
280
- end
281
-
282
- end
@@ -1,88 +0,0 @@
1
- require 'rack'
2
- require "rack/builder"
3
-
4
- class IntegrationServer
5
-
6
- def self.respond_with(body)
7
- [200, { "Content-Type" => "text/plain", "Content-Length" => body.size.to_s }, [body]]
8
- end
9
-
10
- Application = Rack::Builder.new do
11
-
12
- map "/" do
13
- run lambda { |env|
14
- IntegrationServer.respond_with env["REQUEST_METHOD"].downcase
15
- }
16
- end
17
-
18
- map "/timeout" do
19
- run lambda { |env|
20
- sleep 2
21
- IntegrationServer.respond_with "done"
22
- }
23
- end
24
-
25
- map "/x-header" do
26
- run lambda { |env|
27
- IntegrationServer.respond_with env["HTTP_X_HEADER"]
28
- }
29
- end
30
-
31
- map "/cookies" do
32
- run lambda { |env|
33
- status, headers, body = IntegrationServer.respond_with("Many Cookies")
34
- response = Rack::Response.new(body, status, headers)
35
-
36
- response.set_cookie("cookie1", {:value => "chip1", :path => "/"})
37
- response.set_cookie("cookie2", {:value => "chip2", :path => "/"})
38
- response.finish
39
- }
40
- end
41
-
42
- map "/basic-auth" do
43
- use Rack::Auth::Basic, "basic-realm" do |username, password|
44
- username == "admin" && password == "secret"
45
- end
46
-
47
- run lambda { |env|
48
- IntegrationServer.respond_with "basic-auth"
49
- }
50
- end
51
-
52
- map "/ntlm-auth" do
53
- run lambda { |env|
54
- resp = [401, {"WWW-Authenticate" => "NTLM\r\nNegotiate"}, []]
55
- # head request 1: challenge & response (from actual server)
56
- if env["HTTP_AUTHORIZATION"] =~ /(NTLM|Negotiate) TlRMTVNTUAABAAAAB4IIAA/
57
- resp = [401, {
58
- "Content-Type" => "text/html; charset=us-ascii",
59
- "Server" => "Microsoft-HTTPAPI/2.0",
60
- "WWW-Authenticate" => "#{$1} TlRMTVNTUAACAAAAEAAQADgAAAAFgooCj/AvDazHhQsAAAAAAAAAAGAAYABIAAAABgLwIwAAAA9OAFQATABNAFQARQBTAFQAAgAQAE4AVABMAE0AVABFAFMAVAABABAATgBUAEwATQBUAEUAUwBUAAQAEABuAHQAbABtAHQAZQBzAHQAAwAQAG4AdABsAG0AdABlAHMAdAAHAAgAfzQp037nzQEAAAAA",
61
- "Date" => "Mon, 31 Dec 2012 17:46:55 GMT",
62
- "Content-Length" => "341"
63
- }, []]
64
- elsif env["HTTP_AUTHORIZATION"] =~ /(NTLM|Negotiate) (.+)/
65
- # request 2: serve content
66
- resp = IntegrationServer.respond_with "ntlm-auth"
67
- else
68
- resp = [401, {
69
- "Content-Type" => "text/html; charset=us-ascii",
70
- "WWW-Authenticate" => "NTLM\r\nNegotiate",
71
- "Server" => "Microsoft-HTTPAPI/2.0",
72
- "Date" => "Mon, 31 Dec 2012 17:46:55 GMT",
73
- "Content-Length" => "341"
74
- }, []]
75
- end
76
- resp
77
- }
78
- end
79
-
80
- map "/digest-auth" do
81
- # Rack::Auth::Digest is removed in Rack 3.1
82
- run lambda { |env|
83
- IntegrationServer.respond_with "digest-auth"
84
- }
85
- end
86
-
87
- end
88
- end
@@ -1,83 +0,0 @@
1
- require "puma"
2
- require "puma/minissl"
3
-
4
- require "integration/support/application"
5
-
6
- class IntegrationServer
7
- def self.run(options = {})
8
- server = new(options)
9
- server.run
10
- server
11
- end
12
-
13
- def self.ssl_ca_file; integration_fixture("ca_all.pem") end
14
- def self.ssl_key_file; integration_fixture("server.key") end
15
- def self.ssl_cert_file; integration_fixture("server.cert") end
16
-
17
- def self.integration_fixture(file)
18
- file = File.expand_path("../../fixtures/#{file}", __FILE__)
19
- raise "No such file '#{file}'" unless File.exist? file
20
- file
21
- end
22
-
23
- def initialize(options = {})
24
- @app = Application
25
- @host = options.fetch(:host, "localhost")
26
- @port = options.fetch(:port, 17172)
27
- @ssl = options.fetch(:ssl, false)
28
-
29
- @server = Puma::Server.new(app, events)
30
-
31
- if ssl?
32
- add_ssl_listener
33
- else
34
- add_tcp_listener
35
- end
36
- end
37
-
38
- attr_reader :app, :host, :port, :server
39
-
40
- def url(path = nil)
41
- protocol = ssl? ? "https" : "http"
42
- File.join "#{protocol}://#{host}:#{port}/", path.to_s
43
- end
44
-
45
- def ssl?
46
- @ssl
47
- end
48
-
49
- def run
50
- server.run
51
- end
52
-
53
- def stop
54
- server.stop(true)
55
- end
56
-
57
- private
58
-
59
- def events
60
- Puma::Events.new
61
- end
62
-
63
- def add_tcp_listener
64
- server.add_tcp_listener(host, port)
65
- rescue Errno::EADDRINUSE
66
- raise "Panther is already running at #{url}"
67
- end
68
-
69
- def add_ssl_listener
70
- server.add_ssl_listener(host, port, ssl_context)
71
- end
72
-
73
- def ssl_context
74
- context = Puma::MiniSSL::Context.new
75
-
76
- context.key = IntegrationServer.ssl_key_file
77
- context.cert = IntegrationServer.ssl_cert_file
78
- context.verify_mode = Puma::MiniSSL::VERIFY_NONE
79
-
80
- context
81
- end
82
-
83
- end
data/spec/spec_helper.rb DELETED
@@ -1,23 +0,0 @@
1
- require 'bundler'
2
- Bundler.setup(:default, :development)
3
-
4
- unless RUBY_PLATFORM =~ /java/
5
- require 'simplecov'
6
-
7
- SimpleCov.start do
8
- add_filter 'spec'
9
- end
10
- end
11
-
12
- require 'httpi'
13
- require 'rspec'
14
-
15
- RSpec.configure do |config|
16
- config.mock_with :mocha
17
- config.order = 'random'
18
- end
19
-
20
- HTTPI.log = false
21
-
22
- require 'support/fixture'
23
- require 'support/matchers'
@@ -1,26 +0,0 @@
1
- module ErrorHelper
2
-
3
- class Expectation
4
-
5
- def initialize(error, spec)
6
- @error = error
7
- @spec = spec
8
- end
9
-
10
- def to(tag_error)
11
- @spec.expect(@error).to @spec.be_a(tag_error)
12
- end
13
-
14
- end
15
-
16
- def expect_error(error_to_raise, message)
17
- fake_error(error_to_raise, message)
18
- rescue => error
19
- Expectation.new(error, self)
20
- end
21
-
22
- def be_tagged_with(tag_error)
23
- tag_error
24
- end
25
-
26
- end
@@ -1,27 +0,0 @@
1
- class Fixture
2
- class << self
3
-
4
- def xml
5
- @xml ||= load :xml
6
- end
7
-
8
- def xml_dime
9
- @xml_dime ||= load :xml_dime
10
- end
11
-
12
- def gzip
13
- @gzip ||= load :xml, :gz
14
- end
15
-
16
- def dime
17
- @dime ||= load :xml_dime, :dime
18
- end
19
-
20
- private
21
-
22
- def load(fixture, type = :xml)
23
- File.read File.expand_path("../../fixtures/#{fixture}.#{type}", __FILE__)
24
- end
25
-
26
- end
27
- end