net_tcp_client 2.0.0 → 2.0.1
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.
- checksums.yaml +4 -4
- data/lib/net/tcp_client/policy/custom.rb +5 -5
- data/lib/net/tcp_client/tcp_client.rb +3 -2
- data/lib/net/tcp_client/version.rb +1 -1
- data/test/tcp_client_test.rb +8 -6
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 729fc42e6f4a4480a26a68bbe970d6e7c79c4690
|
4
|
+
data.tar.gz: 6b9184a059415db496de138d6f54952deb916f91
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6adaab1f407ef8fd782bb72d0c8fc8dcf42b3de34ae5b5d6b09e4000479ea89a394e8912f24f7c682af3b0493d6f417a557377e53c78ba539516ea0ea648a394
|
7
|
+
data.tar.gz: b597c576047fa6b7478c89aae82ee10ba0893dc49d3651548a57978f4e7236343eaaddcfeccc7e05b4113c9e77b65f2df0ac05babca3f54362051c75326141c2
|
@@ -3,13 +3,13 @@ module Net
|
|
3
3
|
module Policy
|
4
4
|
# Policy for connecting to servers in the order specified
|
5
5
|
class Custom < Base
|
6
|
-
def initialize(server_names,
|
6
|
+
def initialize(server_names, block)
|
7
7
|
super(server_names)
|
8
|
-
@
|
8
|
+
@block = block
|
9
9
|
end
|
10
10
|
|
11
11
|
# Calls the block once for each server, with the addresses in the order returned
|
12
|
-
# by the supplied
|
12
|
+
# by the supplied block.
|
13
13
|
# The block must return a Net::TCPClient::Address instance,
|
14
14
|
# or nil to stop trying to connect to servers
|
15
15
|
#
|
@@ -18,7 +18,7 @@ module Net
|
|
18
18
|
#
|
19
19
|
# Example:
|
20
20
|
# # Returns addresses in random order but without checking if a host name has been used before
|
21
|
-
# policy.
|
21
|
+
# policy.each do |addresses, count|
|
22
22
|
# # Return nil after the last address has been tried so that retry logic can take over
|
23
23
|
# if count <= address.size
|
24
24
|
# addresses.sample
|
@@ -26,7 +26,7 @@ module Net
|
|
26
26
|
# end
|
27
27
|
def each(&block)
|
28
28
|
count = 1
|
29
|
-
while address = @
|
29
|
+
while address = @block.call(addresses, count)
|
30
30
|
raise(ArgumentError, 'Proc must return Net::TCPClient::Address, or nil') unless address.is_a?(Net::TCPClient::Address) || address.nil?
|
31
31
|
block.call(address)
|
32
32
|
count += 1
|
@@ -59,7 +59,8 @@ module Net
|
|
59
59
|
Errno::EPIPE,
|
60
60
|
Errno::ETIMEDOUT,
|
61
61
|
EOFError,
|
62
|
-
Net::TCPClient::ConnectionTimeout
|
62
|
+
Net::TCPClient::ConnectionTimeout,
|
63
|
+
IOError
|
63
64
|
]
|
64
65
|
|
65
66
|
# Return the array of errors that will result in an automatic connection retry
|
@@ -569,7 +570,7 @@ module Net
|
|
569
570
|
end
|
570
571
|
unless buffered
|
571
572
|
socket.sync = true
|
572
|
-
socket.setsockopt(IPPROTO_TCP, TCP_NODELAY, 1)
|
573
|
+
socket.setsockopt(Socket::IPPROTO_TCP, Socket::TCP_NODELAY, 1)
|
573
574
|
end
|
574
575
|
|
575
576
|
socket_connect(socket, address, connect_timeout)
|
data/test/tcp_client_test.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'socket'
|
2
2
|
require_relative 'test_helper'
|
3
3
|
require_relative 'simple_tcp_server'
|
4
|
+
require 'securerandom'
|
4
5
|
|
5
6
|
# Unit Test for Net::TCPClient
|
6
7
|
class TCPClientTest < Minitest::Test
|
@@ -40,7 +41,8 @@ class TCPClientTest < Minitest::Test
|
|
40
41
|
|
41
42
|
describe 'with server' do
|
42
43
|
before do
|
43
|
-
|
44
|
+
@port = 2000 + SecureRandom.random_number(1000)
|
45
|
+
options = {port: @port}
|
44
46
|
if with_ssl
|
45
47
|
options[:ssl] = {
|
46
48
|
cert: OpenSSL::X509::Certificate.new(File.open(ssl_file_path('localhost-server.pem'))),
|
@@ -60,7 +62,7 @@ class TCPClientTest < Minitest::Test
|
|
60
62
|
raise exc
|
61
63
|
end
|
62
64
|
|
63
|
-
@server_name =
|
65
|
+
@server_name = "localhost:#{@port}"
|
64
66
|
end
|
65
67
|
|
66
68
|
after do
|
@@ -87,7 +89,7 @@ class TCPClientTest < Minitest::Test
|
|
87
89
|
end
|
88
90
|
assert_equal false, @client.close_on_error
|
89
91
|
assert @client.alive?, 'The client connection is not alive after the read timed out with close_on_error: false'
|
90
|
-
assert_equal "Timed out after #{@read_timeout} seconds trying to read from localhost[127.0.0.1]
|
92
|
+
assert_equal "Timed out after #{@read_timeout} seconds trying to read from localhost[127.0.0.1]:#{@port}", exception.message
|
91
93
|
reply = read_bson_document(@client)
|
92
94
|
assert_equal 'sleep', reply['result']
|
93
95
|
@client.close
|
@@ -116,7 +118,7 @@ class TCPClientTest < Minitest::Test
|
|
116
118
|
socket.user_data = {sequence: 1}
|
117
119
|
end
|
118
120
|
)
|
119
|
-
assert_equal
|
121
|
+
assert_equal "localhost[127.0.0.1]:#{@port}", @client.address.to_s
|
120
122
|
assert_equal 1, @client.user_data[:sequence]
|
121
123
|
|
122
124
|
request = {'action' => 'test1'}
|
@@ -132,7 +134,7 @@ class TCPClientTest < Minitest::Test
|
|
132
134
|
servers: ['localhost:1999', @server_name],
|
133
135
|
read_timeout: 3
|
134
136
|
)
|
135
|
-
assert_equal
|
137
|
+
assert_equal "localhost[127.0.0.1]:#{@port}", @client.address.to_s
|
136
138
|
|
137
139
|
request = {'action' => 'test1'}
|
138
140
|
@client.write(BSON.serialize(request))
|
@@ -201,7 +203,7 @@ class TCPClientTest < Minitest::Test
|
|
201
203
|
# Due to close_on_error: true, a timeout will close the connection
|
202
204
|
# to prevent use of a socket connection in an inconsistent state
|
203
205
|
assert_equal false, @client.alive?
|
204
|
-
assert_equal "Timed out after #{@read_timeout} seconds trying to read from localhost[127.0.0.1]
|
206
|
+
assert_equal "Timed out after #{@read_timeout} seconds trying to read from localhost[127.0.0.1]:#{@port}", exception.message
|
205
207
|
end
|
206
208
|
end
|
207
209
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: net_tcp_client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Reid Morrison
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-04
|
11
|
+
date: 2016-06-04 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Net::TCPClient implements resilience features that many developers wish
|
14
14
|
was already included in the standard Ruby libraries.
|