manticore 0.6.0-java → 0.7.0-java

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.
@@ -1,4 +1,4 @@
1
- require 'spec_helper'
1
+ require "spec_helper"
2
2
 
3
3
  describe Manticore::Cookie do
4
4
  context "created from a Client request" do
@@ -9,28 +9,27 @@ describe Manticore::Cookie do
9
9
  response.cookies["x"].first
10
10
  }
11
11
 
12
- its(:name) { is_expected.to eq "x" }
13
- its(:value) { is_expected.to eq "2" }
14
- its(:path) { is_expected.to eq "/" }
12
+ its(:name) { is_expected.to eq "x" }
13
+ its(:value) { is_expected.to eq "2" }
14
+ its(:path) { is_expected.to eq "/" }
15
15
  its(:domain) { is_expected.to eq "localhost" }
16
16
  end
17
17
 
18
-
19
- let(:opts) {{}}
18
+ let(:opts) { {} }
20
19
  subject {
21
20
  Manticore::Cookie.new({name: "foo", value: "bar"}.merge(opts))
22
21
  }
23
22
 
24
- its(:secure?) { is_expected.to be nil }
23
+ its(:secure?) { is_expected.to be nil }
25
24
  its(:persistent?) { is_expected.to be nil }
26
25
 
27
26
  context "created as secure" do
28
- let(:opts) {{ secure: true }}
27
+ let(:opts) { {secure: true} }
29
28
  its(:secure?) { is_expected.to be true }
30
29
  end
31
30
 
32
31
  context "created as persistent" do
33
- let(:opts) {{ persistent: true }}
32
+ let(:opts) { {persistent: true} }
34
33
  its(:persistent?) { is_expected.to be true }
35
34
  end
36
- end
35
+ end
@@ -1,16 +1,16 @@
1
- require 'spec_helper'
1
+ require "spec_helper"
2
2
 
3
3
  describe Manticore::Facade do
4
4
  context "when extended into an arbitrary class" do
5
5
  let(:extended_class) {
6
- Class.new do
6
+ Class.new do
7
7
  include Manticore::Facade
8
8
  include_http_client
9
9
  end
10
10
  }
11
11
 
12
12
  let(:extended_shared_class) {
13
- Class.new do
13
+ Class.new do
14
14
  include Manticore::Facade
15
15
  include_http_client shared_pool: true
16
16
  end
@@ -23,12 +23,12 @@ describe Manticore::Facade do
23
23
 
24
24
  it "does not use the shared client by default" do
25
25
  expect(extended_class.send(:__manticore_facade).object_id).to_not eq \
26
- Manticore.send(:__manticore_facade).object_id
26
+ Manticore.send(:__manticore_facade).object_id
27
27
  end
28
28
 
29
29
  it "is able to use the shared client" do
30
30
  expect(extended_shared_class.send(:__manticore_facade).object_id).to eq \
31
- Manticore.send(:__manticore_facade).object_id
31
+ Manticore.send(:__manticore_facade).object_id
32
32
  end
33
33
 
34
34
  it "should work with #http" do
@@ -43,4 +43,4 @@ describe Manticore::Facade do
43
43
  expect(result["method"]).to eq "GET"
44
44
  end
45
45
  end
46
- end
46
+ end
@@ -1,15 +1,27 @@
1
- require 'spec_helper'
1
+ require "spec_helper"
2
2
 
3
3
  describe Manticore::Response do
4
4
  let(:client) { Manticore::Client.new }
5
- subject { client.get( local_server ) }
5
+ subject { client.get(local_server) }
6
6
 
7
7
  its(:headers) { is_expected.to be_a Hash }
8
- its(:body) { is_expected.to be_a String }
9
- its(:length) { is_expected.to be_a Fixnum }
8
+ its(:body) { is_expected.to be_a String }
9
+ its(:length) { is_expected.to be_a Fixnum }
10
10
 
11
11
  it "provides response header lookup via #[]" do
12
- expect(subject["Content-Type"]).to eq "text/plain"
12
+ expect(subject["Content-Type"]).to eq "application/json"
13
+ end
14
+
15
+ context "when a response contains repeated headers" do
16
+ subject { client.get(local_server "/repeated_headers") }
17
+
18
+ it "returns an array of values for headers with multiple occurrances" do
19
+ expect(subject.headers["link"]).to eq ["foo", "bar"]
20
+ end
21
+
22
+ it "returns only the first value when using response#[]" do
23
+ expect(subject["Link"]).to eq "foo"
24
+ end
13
25
  end
14
26
 
15
27
  it "reads the body" do
@@ -27,14 +39,14 @@ describe Manticore::Response do
27
39
  context "when the client is invoked with a block" do
28
40
  it "allows reading the body from a block" do
29
41
  response = client.get(local_server) do |response|
30
- expect(response.body).to match 'Manticore'
42
+ expect(response.body).to match "Manticore"
31
43
  end
32
44
 
33
45
  expect(response.body).to match "Manticore"
34
46
  end
35
47
 
36
48
  it "does not read the body implicitly if called with a block" do
37
- response = client.get(local_server) {}
49
+ response = client.get(local_server) { }
38
50
  expect { response.body }.to raise_exception(Manticore::StreamClosedException)
39
51
  end
40
52
  end
@@ -51,9 +63,9 @@ describe Manticore::Response do
51
63
  let(:responses) { {} }
52
64
  let(:response) do
53
65
  client.get(url)
54
- .on_success {|resp| responses[:success] = true }
55
- .on_failure {responses[:failure] = true }
56
- .on_complete {responses[:complete] = true }
66
+ .on_success { |resp| responses[:success] = true }
67
+ .on_failure { responses[:failure] = true }
68
+ .on_complete { responses[:complete] = true }
57
69
  end
58
70
 
59
71
  context "a succeeded request" do
@@ -85,6 +97,5 @@ describe Manticore::Response do
85
97
  expect { response.call }.to change { responses[:complete] }.to true
86
98
  end
87
99
  end
88
-
89
100
  end
90
101
  end
@@ -1,4 +1,4 @@
1
- require 'spec_helper'
1
+ require "spec_helper"
2
2
 
3
3
  describe Manticore::StubbedResponse do
4
4
  subject {
@@ -7,9 +7,9 @@ describe Manticore::StubbedResponse do
7
7
  code: 200,
8
8
  headers: {
9
9
  "Content-Type" => "text/plain",
10
- "Set-Cookie" => ["k=v; path=/; domain=localhost", "k=v; path=/sub; domain=sub.localhost", "k2=v2;2 path=/; domain=localhost"]
10
+ "Set-Cookie" => ["k=v; path=/; domain=localhost", "k=v; path=/sub; domain=sub.localhost", "k2=v2;2 path=/; domain=localhost"],
11
11
  },
12
- cookies: {"test" => Manticore::Cookie.new(name: "test", value: "something", path: "/")}
12
+ cookies: {"test" => Manticore::Cookie.new(name: "test", value: "something", path: "/")},
13
13
  ).call
14
14
  }
15
15
 
@@ -31,7 +31,7 @@ describe Manticore::StubbedResponse do
31
31
 
32
32
  it "calls on_success handlers" do
33
33
  called = false
34
- Manticore::StubbedResponse.stub.on_success {|resp| called = true }.call
34
+ Manticore::StubbedResponse.stub.on_success { |resp| called = true }.call
35
35
  expect(called).to be true
36
36
  end
37
37
 
@@ -43,7 +43,7 @@ describe Manticore::StubbedResponse do
43
43
  end
44
44
 
45
45
  it "passes bodies to blocks for streaming reads" do
46
- total = ""; subject.body {|chunk| total << chunk }
46
+ total = ""; subject.body { |chunk| total << chunk }
47
47
  expect(total).to eq("test body")
48
48
  end
49
49
  end
@@ -1,14 +1,21 @@
1
- require 'rubygems'
2
- require 'bundler/setup'
3
- require 'manticore'
4
- require 'zlib'
5
- require 'json'
6
- require 'rack'
7
- require 'webrick'
8
- require 'webrick/https'
9
- require 'openssl'
10
- require 'rspec/its'
11
- require 'logger'
1
+ # encoding: utf-8
2
+ require "rubygems"
3
+ require "bundler/setup"
4
+ require "simplecov"
5
+
6
+ SimpleCov.start do
7
+ add_filter "spec/"
8
+ end
9
+
10
+ require "manticore"
11
+ require "zlib"
12
+ require "json"
13
+ require "rack"
14
+ require "webrick"
15
+ require "webrick/https"
16
+ require "openssl"
17
+ require "rspec/its"
18
+ require "logger"
12
19
 
13
20
  PORT = 55441
14
21
 
@@ -16,6 +23,9 @@ def local_server(path = "/", port = PORT)
16
23
  URI.join("http://localhost:#{port}", path).to_s
17
24
  end
18
25
 
26
+ Thread.abort_on_exception = true
27
+ Thread.report_on_exception = false if Thread.respond_to?(:report_on_exception)
28
+
19
29
  def read_nonblock(socket)
20
30
  buffer = ""
21
31
  loop {
@@ -32,8 +42,7 @@ end
32
42
  def start_server(port = PORT)
33
43
  @servers ||= {}
34
44
  @servers[port] = Thread.new {
35
- Net::HTTP::Server.run(port: port, log: Logger.new("/dev/null")) do |request, stream|
36
-
45
+ Net::HTTP::Server.run(port: port, log: open("/dev/null", "a")) do |request, stream|
37
46
  query = Rack::Utils.parse_query(request[:uri][:query].to_s)
38
47
  if query["sleep"]
39
48
  sleep(query["sleep"].to_f)
@@ -43,13 +52,13 @@ def start_server(port = PORT)
43
52
  request[:body] = read_nonblock(stream.socket)
44
53
  end
45
54
 
46
- content_type = request[:headers]["X-Content-Type"] || "text/plain"
55
+ content_type = request[:headers]["X-Content-Type"] || "application/json"
47
56
  if request[:uri][:path] == "/auth"
48
57
  if request[:headers]["Authorization"] == "Basic dXNlcjpwYXNz"
49
58
  payload = JSON.dump(request)
50
- [200, {'Content-Type' => content_type, "Content-Length" => payload.length}, [payload]]
59
+ [200, {"Content-Type" => content_type, "Content-Length" => payload.length}, [payload]]
51
60
  else
52
- [401, {'WWW-Authenticate' => 'Basic realm="test"'}, [""]]
61
+ [401, {"WWW-Authenticate" => 'Basic realm="test"'}, [""]]
53
62
  end
54
63
  elsif request[:uri][:path] == "/failearly"
55
64
  # Return an invalid HTTP response
@@ -63,26 +72,38 @@ def start_server(port = PORT)
63
72
  end
64
73
  elsif request[:uri][:path] == "/proxy"
65
74
  payload = JSON.dump(request.merge(server_port: port))
66
- [200, {'Content-Type' => content_type, "Content-Length" => payload.length}, [payload]]
75
+ [200, {"Content-Type" => content_type, "Content-Length" => payload.length}, [payload]]
76
+ elsif request[:uri][:path] == "/json_utf8"
77
+ payload = JSON.dump("first_name" => "Mark", "last_name" => "Töger")
78
+ [200, {"Content-Type" => "application/json", "Content-Length" => payload.length}, [payload]]
79
+ elsif request[:uri][:path] == "/authproxy"
80
+ payload = JSON.dump(request.merge(server_port: port))
81
+ if request[:headers]["Proxy-Authorization"] == "Basic dXNlcjpwYXNz"
82
+ [200, {"Content-Type" => content_type, "Content-Length" => payload.length}, [payload]]
83
+ else
84
+ [407, {"Proxy-Authenticate" => 'Basic realm="localhost'}, [payload]]
85
+ end
67
86
  elsif request[:uri][:path] == "/keepalive"
68
87
  payload = JSON.dump(request.merge(server_port: port))
69
- [200, {'Content-Type' => content_type, "Content-Length" => payload.length, "Keep-Alive" => "timeout=60"}, [payload]]
88
+ [200, {"Content-Type" => content_type, "Content-Length" => payload.length, "Keep-Alive" => "timeout=60"}, [payload]]
89
+ elsif request[:uri][:path] == "/repeated_headers"
90
+ payload = JSON.dump(request.merge(server_port: port))
91
+ [200, {"Link" => ["foo", "bar"]}, [payload]]
70
92
  elsif request[:headers]["X-Redirect"] && request[:uri][:path] != request[:headers]["X-Redirect"]
71
- [301, {"Location" => local_server( request[:headers]["X-Redirect"] )}, [""]]
93
+ [301, {"Location" => local_server(request[:headers]["X-Redirect"])}, [""]]
72
94
  else
73
95
  if request[:headers]["Accept-Encoding"] && request[:headers]["Accept-Encoding"].match("gzip")
74
- out = StringIO.new('', "w")
96
+ out = StringIO.new("", "w")
75
97
  io = Zlib::GzipWriter.new(out, 2)
76
98
 
77
99
  request[:body] = Base64.encode64(request[:body]) if request[:headers]["X-Base64"]
78
-
79
100
  io.write JSON.dump(request)
80
101
  io.close
81
102
  payload = out.string
82
- [200, {'Content-Type' => content_type, 'Content-Encoding' => "gzip", "Content-Length" => payload.length}, [payload]]
103
+ [200, {"Content-Type" => content_type, "Content-Encoding" => "gzip", "Content-Length" => payload.length}, [payload]]
83
104
  else
84
105
  payload = JSON.dump(request)
85
- [200, {'Content-Type' => content_type, "Content-Length" => payload.length}, [payload]]
106
+ [200, {"Content-Type" => content_type, "Content-Length" => payload.length}, [payload]]
86
107
  end
87
108
  end
88
109
  end
@@ -97,9 +118,10 @@ def start_ssl_server(port, options = {})
97
118
  cert_name = [
98
119
  %w[CN localhost],
99
120
  ]
100
- cert = OpenSSL::X509::Certificate.new File.read(File.expand_path('../ssl/host.crt', __FILE__))
121
+ cert_file = options[:cert] || File.expand_path("../ssl/host.crt", __FILE__)
122
+ cert = OpenSSL::X509::Certificate.new File.read(cert_file)
101
123
  cert.version = 0 # HACK: Work around jruby-openssl in jruby-head not setting cert.version
102
- pkey = OpenSSL::PKey::RSA.new File.read(File.expand_path('../ssl/host.key', __FILE__))
124
+ pkey = OpenSSL::PKey::RSA.new File.read(File.expand_path("../ssl/host.key", __FILE__))
103
125
  @servers[port] = Thread.new {
104
126
  server = WEBrick::HTTPServer.new(
105
127
  {
@@ -108,7 +130,7 @@ def start_ssl_server(port, options = {})
108
130
  :SSLCertificate => cert,
109
131
  :SSLPrivateKey => pkey,
110
132
  :AccessLog => [],
111
- :Logger => WEBrick::Log.new("/dev/null")
133
+ :Logger => WEBrick::Log.new("/dev/null"),
112
134
  }.merge(options)
113
135
  )
114
136
  server.mount_proc "/" do |req, res|
@@ -120,7 +142,7 @@ def start_ssl_server(port, options = {})
120
142
  end
121
143
 
122
144
  RSpec.configure do |c|
123
- require 'net/http/server'
145
+ require "net/http/server"
124
146
 
125
147
  c.before(:suite) {
126
148
  @server = {}
@@ -128,9 +150,10 @@ RSpec.configure do |c|
128
150
  start_server 55442
129
151
  start_ssl_server 55444
130
152
  start_ssl_server 55445, :SSLVerifyClient => OpenSSL::SSL::VERIFY_PEER | OpenSSL::SSL::VERIFY_FAIL_IF_NO_PEER_CERT, :SSLCACertificateFile => File.expand_path("../ssl/root-ca.crt", __FILE__)
153
+ start_ssl_server 55446, cert: File.expand_path("../ssl/host-expired.crt", __FILE__)
131
154
 
132
155
  Manticore.disable_httpcomponents_logging!
133
156
  }
134
157
 
135
- c.after(:suite) { stop_servers }
158
+ c.after(:suite) { stop_servers }
136
159
  end
metadata CHANGED
@@ -1,38 +1,38 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: manticore
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.7.0
5
5
  platform: java
6
6
  authors:
7
7
  - Chris Heald
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-04-26 00:00:00.000000000 Z
11
+ date: 2020-09-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  requirement: !ruby/object:Gem::Requirement
15
15
  requirements:
16
- - - "~>"
16
+ - - ">="
17
17
  - !ruby/object:Gem::Version
18
- version: '1.3'
19
- name: bundler
18
+ version: '0'
19
+ name: openssl_pkcs8_pure
20
+ type: :runtime
20
21
  prerelease: false
21
- type: :development
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '1.3'
26
+ version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  requirement: !ruby/object:Gem::Requirement
29
29
  requirements:
30
30
  - - ">="
31
31
  - !ruby/object:Gem::Version
32
32
  version: '0'
33
- name: rake
34
- prerelease: false
33
+ name: bundler
35
34
  type: :development
35
+ prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - ">="
@@ -44,14 +44,28 @@ dependencies:
44
44
  - - ">="
45
45
  - !ruby/object:Gem::Version
46
46
  version: '0'
47
- name: jar-dependencies
48
- prerelease: false
47
+ name: rake
49
48
  type: :development
49
+ prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ requirement: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: 0.4.1
61
+ name: jar-dependencies
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: 0.4.1
55
69
  description: Manticore is an HTTP client built on the Apache HttpCore components
56
70
  email:
57
71
  - cheald@mashable.com
@@ -60,6 +74,7 @@ extensions: []
60
74
  extra_rdoc_files: []
61
75
  files:
62
76
  - ".gitignore"
77
+ - ".gitlab-ci.yml"
63
78
  - ".travis.yml"
64
79
  - APACHE-LICENSE-2.0.txt
65
80
  - CHANGELOG.md
@@ -121,8 +136,7 @@ requirements:
121
136
  - jar commons-logging:commons-logging, '~> 1.2'
122
137
  - jar commons-codec:commons-codec, '~> 1.9'
123
138
  - jar org.apache.httpcomponents:httpcore, '~> 4.4.4'
124
- rubyforge_project:
125
- rubygems_version: 2.4.8
139
+ rubygems_version: 3.0.6
126
140
  signing_key:
127
141
  specification_version: 4
128
142
  summary: Manticore is an HTTP client built on the Apache HttpCore components