celluloid-io 0.17.1 → 0.17.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,4 +1,4 @@
1
- require 'socket'
1
+ require "socket"
2
2
 
3
3
  module Celluloid
4
4
  module IO
@@ -10,7 +10,7 @@ module Celluloid
10
10
 
11
11
  # Open a UNIX connection.
12
12
  def self.open(socket_path, &block)
13
- self.new(socket_path, &block)
13
+ new(socket_path, &block)
14
14
  end
15
15
 
16
16
  # Convert a Ruby UNIXSocket into a Celluloid::IO::UNIXSocket
@@ -31,9 +31,9 @@ module Celluloid
31
31
 
32
32
  # FIXME: not doing non-blocking connect
33
33
  @socket = if block
34
- ::UNIXSocket.open(socket_path, &block)
35
- else
36
- ::UNIXSocket.new(socket_path)
34
+ ::UNIXSocket.open(socket_path, &block)
35
+ else
36
+ ::UNIXSocket.new(socket_path)
37
37
  end
38
38
  end
39
39
 
@@ -1,5 +1,5 @@
1
1
  module Celluloid
2
2
  module IO
3
- VERSION = "0.17.1"
3
+ VERSION = "0.17.2"
4
4
  end
5
5
  end
@@ -1,5 +1,5 @@
1
- require 'spec_helper'
1
+ require "spec_helper"
2
2
 
3
- describe Celluloid::IO do
3
+ RSpec.describe Celluloid::IO, library: :IO do
4
4
  it_behaves_like "a Celluloid Actor", Celluloid::IO
5
5
  end
@@ -1,18 +1,18 @@
1
- require 'spec_helper'
1
+ require "spec_helper"
2
2
 
3
- describe Celluloid::IO::DNSResolver do
4
- describe '#resolve' do
5
- it 'resolves hostnames statically from hosts file without nameservers' do
3
+ RSpec.describe Celluloid::IO::DNSResolver, library: :IO do
4
+ context '#resolve' do
5
+ it "resolves hostnames statically from hosts file without nameservers" do
6
6
  # /etc/resolv.conf doesn't exist on Mac OSX when no networking is
7
7
  # disabled, thus .nameservers would return nil
8
8
  expect(Celluloid::IO::DNSResolver).to receive(:nameservers).at_most(:once) { nil }
9
9
  resolver = Celluloid::IO::DNSResolver.new
10
- expect(resolver.resolve('localhost')).to eq Resolv::IPv4.create("127.0.0.1")
10
+ expect(resolver.resolve("localhost")).to eq(Resolv::IPv4.create("127.0.0.1")).or eq(Resolv::IPv6.create("::1"))
11
11
  end
12
12
 
13
- it 'resolves hostnames' do
13
+ it "resolves hostnames" do
14
14
  resolver = Celluloid::IO::DNSResolver.new
15
- expect(resolver.resolve('localhost')).to eq Resolv::IPv4.create("127.0.0.1")
15
+ expect(resolver.resolve("localhost")).to eq(Resolv::IPv4.create("127.0.0.1")).or eq(Resolv::IPv6.create("::1"))
16
16
  end
17
17
 
18
18
  it "resolves domain names" do
@@ -26,7 +26,7 @@ describe Celluloid::IO::DNSResolver do
26
26
  resolver = Celluloid::IO::DNSResolver.new
27
27
  results = resolver.resolve("www.google.com")
28
28
  if results.is_a?(Array)
29
- results.all? {|i| expect(i).to be_an_instance_of(Resolv::IPv4) }
29
+ results.all? { |i| expect(i).to be_an_instance_of(Resolv::IPv4) }
30
30
  else
31
31
  expect(results).to be_an_instance_of(Resolv::IPv4)
32
32
  end
@@ -34,7 +34,7 @@ describe Celluloid::IO::DNSResolver do
34
34
  # single entry.
35
35
  results = resolver.resolve("www.yahoo.com")
36
36
  if results.is_a?(Array)
37
- results.all? {|i| expect(i).to be_an_instance_of(Resolv::IPv4) }
37
+ results.all? { |i| expect(i).to be_an_instance_of(Resolv::IPv4) }
38
38
  else
39
39
  expect(results).to be_an_instance_of(Resolv::IPv4)
40
40
  end
@@ -1,5 +1,5 @@
1
- require 'spec_helper'
1
+ require "spec_helper"
2
2
 
3
- describe Celluloid::IO::Mailbox do
3
+ RSpec.describe Celluloid::IO::Mailbox, library: :IO do
4
4
  it_behaves_like "a Celluloid Mailbox"
5
5
  end
@@ -1,19 +1,19 @@
1
- require 'spec_helper'
1
+ require "spec_helper"
2
2
 
3
- describe Celluloid::IO::Reactor do
3
+ RSpec.describe Celluloid::IO::Reactor, library: :IO do
4
4
  let(:payload) { "balls" }
5
5
  let(:example_port) { assign_port }
6
-
6
+
7
7
  it "shouldn't crash" do
8
8
  server = ::TCPServer.new example_addr, example_port
9
-
9
+
10
10
  thread = Thread.new { server.accept }
11
-
11
+
12
12
  socket = within_io_actor { Celluloid::IO::TCPSocket.new example_addr, example_port }
13
13
  peer = thread.value
14
14
  peer_thread = Thread.new { loop { peer << payload } }
15
15
  handle = false
16
-
16
+
17
17
  # Main server body:
18
18
  within_io_actor do
19
19
  begin
@@ -29,9 +29,9 @@ describe Celluloid::IO::Reactor do
29
29
  handle = true
30
30
  end
31
31
  end
32
-
32
+
33
33
  expect(handle).to be_truthy
34
-
34
+
35
35
  server.close
36
36
  peer.close
37
37
  socket.close
@@ -1,6 +1,6 @@
1
- require 'spec_helper'
1
+ require "spec_helper"
2
2
 
3
- describe Celluloid::IO::SSLServer do
3
+ RSpec.describe Celluloid::IO::SSLServer, library: :IO do
4
4
  let(:client_cert) { OpenSSL::X509::Certificate.new fixture_dir.join("client.crt").read }
5
5
  let(:client_key) { OpenSSL::PKey::RSA.new fixture_dir.join("client.key").read }
6
6
  let(:client_context) do
@@ -9,7 +9,7 @@ describe Celluloid::IO::SSLServer do
9
9
  context.key = client_key
10
10
  end
11
11
  end
12
-
12
+
13
13
  let(:example_port) { assign_port }
14
14
  let(:server_cert) { OpenSSL::X509::Certificate.new fixture_dir.join("server.crt").read }
15
15
  let(:server_key) { OpenSSL::PKey::RSA.new fixture_dir.join("server.key").read }
@@ -21,7 +21,7 @@ describe Celluloid::IO::SSLServer do
21
21
  end
22
22
 
23
23
  describe "#accept" do
24
- let(:payload) { 'ohai' }
24
+ let(:payload) { "ohai" }
25
25
 
26
26
  context "inside Celluloid::IO" do
27
27
  it "should be evented" do
@@ -89,4 +89,3 @@ describe Celluloid::IO::SSLServer do
89
89
  end
90
90
  end
91
91
  end
92
-
@@ -1,9 +1,9 @@
1
- require 'spec_helper'
2
- require 'openssl'
1
+ require "spec_helper"
2
+ require "openssl"
3
3
 
4
- describe Celluloid::IO::SSLSocket do
5
- let(:request) { 'ping' }
6
- let(:response) { 'pong' }
4
+ RSpec.describe Celluloid::IO::SSLSocket, library: :IO do
5
+ let(:request) { "ping" }
6
+ let(:response) { "pong" }
7
7
 
8
8
  let(:example_port) { assign_port }
9
9
  let(:client_cert) { OpenSSL::X509::Certificate.new fixture_dir.join("client.crt").read }
@@ -15,28 +15,28 @@ describe Celluloid::IO::SSLSocket do
15
15
  end
16
16
  end
17
17
 
18
- after(:each) {
18
+ after(:each) do
19
19
  client.close rescue nil
20
20
  server.close rescue nil
21
- }
21
+ end
22
22
 
23
23
  let(:client) do
24
24
  attempts = 0
25
25
  socket = begin
26
- Timeout.timeout(MAX_TIME) {
27
- begin
28
- TCPSocket.new example_addr, example_port
29
- rescue Errno::ECONNREFUSED
30
- raise if attempts >= MAX_ATTEMPTS
31
- attempts += 1
32
- # HAX: sometimes this fails to connect? o_O
33
- # ... This can often fail 20 times in a row ... so yeah
34
- # This is quite likely due to the Thread.pass style spinlocks for startup
35
- # Seems gimpy, but sleep and retry
36
- sleep 0.0126
37
- retry
26
+ Timeout.timeout(Specs::MAX_EXECUTION) do
27
+ begin
28
+ TCPSocket.new example_addr, example_port
29
+ rescue Errno::ECONNREFUSED
30
+ raise if attempts >= Specs::MAX_ATTEMPTS
31
+ attempts += 1
32
+ # HAX: sometimes this fails to connect? o_O
33
+ # ... This can often fail 20 times in a row ... so yeah
34
+ # This is quite likely due to the Thread.pass style spinlocks for startup
35
+ # Seems gimpy, but sleep and retry
36
+ sleep 0.0126
37
+ retry
38
+ end
38
39
  end
39
- }
40
40
  rescue => ex
41
41
  attempted = "Tried #{attempts} times to instantiate socket."
42
42
  raise ex.class.new(attempted)
@@ -77,7 +77,7 @@ describe Celluloid::IO::SSLSocket do
77
77
  context "duck typing ::SSLSocket" do
78
78
  it "responds to #peeraddr" do
79
79
  with_ssl_sockets do |ssl_client, ssl_peer|
80
- expect{ ssl_client.peeraddr }.to_not raise_error
80
+ expect { ssl_client.peeraddr }.to_not raise_error
81
81
  end
82
82
  end
83
83
  end
@@ -96,7 +96,7 @@ describe Celluloid::IO::SSLSocket do
96
96
  end
97
97
 
98
98
  it "starts SSL on a connected TCP socket" do
99
- if RUBY_PLATFORM == 'java'
99
+ if RUBY_PLATFORM == "java"
100
100
  pending "JRuby support"
101
101
  fail "Bypassing potential deadlock."
102
102
  end
@@ -136,7 +136,7 @@ describe Celluloid::IO::SSLSocket do
136
136
  end
137
137
 
138
138
  it "starts SSL on a connected TCP socket" do
139
- if RUBY_PLATFORM == 'java'
139
+ if RUBY_PLATFORM == "java"
140
140
  pending "JRuby support"
141
141
  fail "Bypassing potential deadlock."
142
142
  end
@@ -164,7 +164,7 @@ describe Celluloid::IO::SSLSocket do
164
164
 
165
165
  it "knows its cert" do
166
166
  # FIXME: seems bad? o_O
167
- pending "wtf is wrong with this on JRuby" if RUBY_PLATFORM == 'java'
167
+ pending "wtf is wrong with this on JRuby" if RUBY_PLATFORM == "java"
168
168
  with_ssl_sockets do |ssl_client|
169
169
  expect(ssl_client.cert.to_der).to eq(client_cert.to_der)
170
170
  end
@@ -192,7 +192,7 @@ describe Celluloid::IO::SSLSocket do
192
192
 
193
193
  it "knows its client_ca" do
194
194
  # jruby-openssl does not implement this method
195
- pending "jruby-openssl support" if RUBY_PLATFORM == 'java'
195
+ pending "jruby-openssl support" if RUBY_PLATFORM == "java"
196
196
 
197
197
  with_ssl_sockets do |ssl_client|
198
198
  expect(ssl_client.client_ca).to eq(ssl_client.to_io.client_ca)
@@ -201,7 +201,7 @@ describe Celluloid::IO::SSLSocket do
201
201
 
202
202
  it "verifies peer certificates" do
203
203
  # FIXME: JRuby seems to be giving the wrong result here o_O
204
- pending "jruby-openssl support" if RUBY_PLATFORM == 'java'
204
+ pending "jruby-openssl support" if RUBY_PLATFORM == "java"
205
205
 
206
206
  with_ssl_sockets do |ssl_client, ssl_peer|
207
207
  expect(ssl_client.verify_result).to eq(OpenSSL::X509::V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT)
@@ -1,8 +1,8 @@
1
- require 'spec_helper'
1
+ require "spec_helper"
2
2
 
3
- describe Celluloid::IO::TCPServer do
4
- describe "#accept" do
5
- let(:payload) { 'ohai' }
3
+ RSpec.describe Celluloid::IO::TCPServer, library: :IO do
4
+ context "#accept" do
5
+ let(:payload) { "ohai" }
6
6
  let(:example_port) { assign_port }
7
7
 
8
8
  it "can be initialized without a host" do
@@ -1,11 +1,11 @@
1
- require 'spec_helper'
1
+ require "spec_helper"
2
2
 
3
- describe Celluloid::IO::TCPSocket do
4
- let(:payload) { 'ohai' }
3
+ RSpec.describe Celluloid::IO::TCPSocket, library: :IO do
4
+ let(:payload) { "ohai" }
5
5
  let(:example_port) { assign_port }
6
+ let(:logger) { Specs::FakeLogger.current }
6
7
 
7
8
  context "inside Celluloid::IO" do
8
-
9
9
  describe ".open" do
10
10
  it "returns the open socket" do
11
11
  server = ::TCPServer.new example_addr, example_port
@@ -22,10 +22,10 @@ describe Celluloid::IO::TCPSocket do
22
22
  it "returns the block evaluation" do
23
23
  server = ::TCPServer.new example_addr, example_port
24
24
  thread = Thread.new { server.accept }
25
-
25
+
26
26
  value = within_io_actor { Celluloid::IO::TCPSocket.open(example_addr, example_port) { true } }
27
27
  expect(value).to be_truthy
28
-
28
+
29
29
  server.close
30
30
  thread.terminate
31
31
  end
@@ -102,44 +102,47 @@ describe Celluloid::IO::TCPSocket do
102
102
  end
103
103
 
104
104
  it "raises Errno::ECONNREFUSED when the connection is refused" do
105
- expect {
105
+ allow(logger).to receive(:crash).with("Actor crashed!", Errno::ECONNREFUSED)
106
+ expect do
106
107
  within_io_actor { ::TCPSocket.new(example_addr, example_port) }
107
- }.to raise_error(Errno::ECONNREFUSED)
108
+ end.to raise_error(Errno::ECONNREFUSED)
108
109
  end
109
110
 
110
- context 'eof?' do
111
+ context "eof?" do
111
112
  it "blocks actor then returns by close" do
112
113
  with_connected_sockets(example_port) do |subject, peer|
113
114
  started_at = Time.now
114
- Thread.new{ sleep 0.5; peer.close; }
115
+ Thread.new { sleep 0.5; peer.close; }
115
116
  within_io_actor { subject.eof? }
116
117
  expect(Time.now - started_at).to be > 0.5
117
118
  end
118
119
  end
119
-
120
+
120
121
  it "blocks until gets the next byte" do
122
+ allow(logger).to receive(:crash).with("Actor crashed!", Celluloid::TaskTimeout)
121
123
  with_connected_sockets(example_port) do |subject, peer|
122
124
  peer << 0x00
123
125
  peer.flush
124
- expect {
125
- within_io_actor {
126
+ expect do
127
+ within_io_actor do
126
128
  subject.read(1)
127
- Celluloid.timeout(0.5) {
129
+ Celluloid.timeout(0.5) do
128
130
  expect(subject.eof?).to be_falsey
129
- }
130
- }
131
- }.to raise_error(Celluloid::TaskTimeout)
131
+ end
132
+ end
133
+ end.to raise_error(Celluloid::TaskTimeout)
132
134
  end
133
135
  end
134
136
  end
135
137
 
136
138
  context "readpartial" do
137
139
  it "raises EOFError when reading from a closed socket" do
140
+ allow(logger).to receive(:crash).with("Actor crashed!", EOFError)
138
141
  with_connected_sockets(example_port) do |subject, peer|
139
142
  peer.close
140
- expect {
143
+ expect do
141
144
  within_io_actor { subject.readpartial(payload.size) }
142
- }.to raise_error(EOFError)
145
+ end.to raise_error(EOFError)
143
146
  end
144
147
  end
145
148
 
@@ -147,7 +150,8 @@ describe Celluloid::IO::TCPSocket do
147
150
  pending "not implemented"
148
151
 
149
152
  with_connected_sockets(example_port) do |subject, peer|
150
- actor = ExampleActor.new
153
+ actor = with_wrapper_actor
154
+ allow(logger).to receive(:crash).with("Actor crashed!", IOError)
151
155
  begin
152
156
  read_future = actor.future.wrap do
153
157
  subject.readpartial(payload.size)
@@ -164,7 +168,8 @@ describe Celluloid::IO::TCPSocket do
164
168
  it "raises IOError when partial reading from a socket the peer closed" do
165
169
  pending "async block running on receiver"
166
170
  with_connected_sockets(example_port) do |subject, peer|
167
- actor = ExampleActor.new
171
+ actor = with_wrapper_actor
172
+ allow(logger).to receive(:crash).with("Actor crashed!", IOError)
168
173
  begin
169
174
  actor.async.wrap { sleep 0.01; peer.close }
170
175
  expect do
@@ -1,7 +1,7 @@
1
- require 'spec_helper'
1
+ require "spec_helper"
2
2
 
3
- describe Celluloid::IO::UDPSocket do
4
- let(:payload) { 'ohai' }
3
+ RSpec.describe Celluloid::IO::UDPSocket, library: :IO do
4
+ let(:payload) { "ohai" }
5
5
  let(:example_port) { assign_port }
6
6
  subject do
7
7
  Celluloid::IO::UDPSocket.new.tap do |sock|
@@ -1,11 +1,10 @@
1
- require 'spec_helper'
1
+ require "spec_helper"
2
2
 
3
- describe Celluloid::IO::UNIXServer do
3
+ RSpec.describe Celluloid::IO::UNIXServer, library: :IO do
4
4
  let(:example_port) { assign_port }
5
5
 
6
6
  describe "#accept" do
7
-
8
- let(:payload) { 'ohai' }
7
+ let(:payload) { "ohai" }
9
8
 
10
9
  context "inside Celluloid::IO" do
11
10
  it "should be evented" do
@@ -15,7 +14,7 @@ describe Celluloid::IO::UNIXServer do
15
14
  end
16
15
 
17
16
  it "accepts a connection and returns a Celluloid::IO::UNIXSocket" do
18
- pending if RUBY_PLATFORM == 'java'
17
+ pending if RUBY_PLATFORM == "java"
19
18
  with_unix_server do |subject|
20
19
  thread = Thread.new { UNIXSocket.new(example_unix_sock) }
21
20
  peer = within_io_actor { subject.accept }
@@ -30,9 +29,9 @@ describe Celluloid::IO::UNIXServer do
30
29
  it "raises if server already up" do
31
30
  with_unix_server do |subject|
32
31
  within_io_actor do
33
- expect {
32
+ expect do
34
33
  Celluloid::IO::UNIXServer.open(example_unix_sock)
35
- }.to raise_error(Errno::EADDRINUSE)
34
+ end.to raise_error(Errno::EADDRINUSE)
36
35
  end
37
36
  end
38
37
  end
@@ -58,12 +57,11 @@ describe Celluloid::IO::UNIXServer do
58
57
 
59
58
  it "raises if server already up" do
60
59
  with_unix_server do |subject|
61
- expect {
60
+ expect do
62
61
  Celluloid::IO::UNIXServer.open(example_unix_sock)
63
- }.to raise_error(Errno::EADDRINUSE)
62
+ end.to raise_error(Errno::EADDRINUSE)
64
63
  end
65
64
  end
66
-
67
65
  end
68
66
  end
69
67
  end