net_tcp_client 2.2.0 → 2.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +20 -20
- data/Rakefile +7 -7
- data/lib/net/tcp_client/address.rb +11 -6
- data/lib/net/tcp_client/exceptions.rb +3 -3
- data/lib/net/tcp_client/policy/base.rb +0 -1
- data/lib/net/tcp_client/policy/custom.rb +5 -3
- data/lib/net/tcp_client/policy/ordered.rb +1 -2
- data/lib/net/tcp_client/policy/random.rb +1 -2
- data/lib/net/tcp_client/tcp_client.rb +103 -93
- data/lib/net/tcp_client/version.rb +2 -2
- data/lib/net/tcp_client.rb +10 -10
- data/lib/net_tcp_client.rb +1 -1
- metadata +11 -37
- data/test/address_test.rb +0 -91
- data/test/policy/custom_policy_test.rb +0 -42
- data/test/policy/ordered_policy_test.rb +0 -36
- data/test/policy/random_policy_test.rb +0 -45
- data/test/simple_tcp_server.rb +0 -160
- data/test/ssl_files/ca.key +0 -27
- data/test/ssl_files/ca.pem +0 -19
- data/test/ssl_files/localhost-server-key.pem +0 -27
- data/test/ssl_files/localhost-server.pem +0 -19
- data/test/ssl_files/no-sni-key.pem +0 -27
- data/test/ssl_files/no-sni.pem +0 -20
- data/test/tcp_client_test.rb +0 -257
- data/test/test_helper.rb +0 -18
data/test/address_test.rb
DELETED
@@ -1,91 +0,0 @@
|
|
1
|
-
require_relative 'test_helper'
|
2
|
-
require 'ipaddr'
|
3
|
-
|
4
|
-
class Net::TCPClient::AddressTest < Minitest::Test
|
5
|
-
describe Net::TCPClient::Address do
|
6
|
-
describe '.ip_addresses' do
|
7
|
-
it 'returns the ip addresses for a known DNS' do
|
8
|
-
ips = Net::TCPClient::Address.ip_addresses('google.com')
|
9
|
-
assert ips.count > 0
|
10
|
-
ips.each do |ip|
|
11
|
-
# Validate IP Addresses
|
12
|
-
IPAddr.new(ip)
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
it 'returns an ip address' do
|
17
|
-
ips = Net::TCPClient::Address.ip_addresses('127.0.0.1')
|
18
|
-
assert_equal 1, ips.count
|
19
|
-
assert_equal '127.0.0.1', ips.first
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
describe '.addresses' do
|
24
|
-
it 'returns one address for a known DNS' do
|
25
|
-
addresses = Net::TCPClient::Address.addresses('localhost', 80)
|
26
|
-
assert_equal 1, addresses.count, addresses.ai
|
27
|
-
address = addresses.first
|
28
|
-
assert_equal 80, address.port
|
29
|
-
assert_equal '127.0.0.1', address.ip_address
|
30
|
-
assert_equal 'localhost', address.host_name
|
31
|
-
end
|
32
|
-
|
33
|
-
it 'returns addresses for a DNS with mutiple IPs' do
|
34
|
-
addresses = Net::TCPClient::Address.addresses('google.com', 80)
|
35
|
-
assert addresses.count > 0
|
36
|
-
addresses.each do |address|
|
37
|
-
# Validate IP Addresses
|
38
|
-
IPAddr.new(address.ip_address)
|
39
|
-
assert_equal 80, address.port
|
40
|
-
assert_equal 'google.com', address.host_name
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
it 'returns an ip address' do
|
45
|
-
addresses = Net::TCPClient::Address.addresses('127.0.0.1', 80)
|
46
|
-
assert_equal 1, addresses.count
|
47
|
-
address = addresses.first
|
48
|
-
assert_equal 80, address.port
|
49
|
-
assert_equal '127.0.0.1', address.ip_address
|
50
|
-
assert_equal '127.0.0.1', address.host_name
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
describe '.addresses_for_server_name' do
|
55
|
-
it 'returns addresses for server name' do
|
56
|
-
addresses = Net::TCPClient::Address.addresses_for_server_name('localhost:80')
|
57
|
-
assert_equal 1, addresses.count, addresses.ai
|
58
|
-
address = addresses.first
|
59
|
-
assert_equal 80, address.port
|
60
|
-
assert_equal '127.0.0.1', address.ip_address
|
61
|
-
assert_equal 'localhost', address.host_name
|
62
|
-
end
|
63
|
-
|
64
|
-
it 'returns an ip address' do
|
65
|
-
addresses = Net::TCPClient::Address.addresses_for_server_name('127.0.0.1:80')
|
66
|
-
assert_equal 1, addresses.count
|
67
|
-
address = addresses.first
|
68
|
-
assert_equal 80, address.port
|
69
|
-
assert_equal '127.0.0.1', address.ip_address
|
70
|
-
assert_equal '127.0.0.1', address.host_name
|
71
|
-
end
|
72
|
-
end
|
73
|
-
|
74
|
-
describe '.new' do
|
75
|
-
it 'creates an address' do
|
76
|
-
address = Net::TCPClient::Address.new('host_name', 'ip_address', '2000')
|
77
|
-
assert_equal 'host_name', address.host_name
|
78
|
-
assert_equal 'ip_address', address.ip_address
|
79
|
-
assert_equal 2000, address.port
|
80
|
-
end
|
81
|
-
end
|
82
|
-
|
83
|
-
describe '#to_s' do
|
84
|
-
it 'returns a string of the address' do
|
85
|
-
address = Net::TCPClient::Address.new('host_name', 'ip_address', '2000')
|
86
|
-
assert_equal 'host_name[ip_address]:2000', address.to_s
|
87
|
-
end
|
88
|
-
end
|
89
|
-
|
90
|
-
end
|
91
|
-
end
|
@@ -1,42 +0,0 @@
|
|
1
|
-
require_relative '../test_helper'
|
2
|
-
class Net::TCPClient::Policy::CustomTest < Minitest::Test
|
3
|
-
describe Net::TCPClient::Policy::Custom do
|
4
|
-
describe '#each' do
|
5
|
-
before do
|
6
|
-
@proc = -> addresses, count do
|
7
|
-
addresses[count - 1]
|
8
|
-
end
|
9
|
-
end
|
10
|
-
|
11
|
-
it 'must return one server, once' do
|
12
|
-
servers = ['localhost:80']
|
13
|
-
policy = Net::TCPClient::Policy::Custom.new(servers, @proc)
|
14
|
-
collected = []
|
15
|
-
policy.each { |address| collected << address }
|
16
|
-
assert_equal 1, collected.size
|
17
|
-
address = collected.first
|
18
|
-
assert_equal 80, address.port
|
19
|
-
assert_equal 'localhost', address.host_name
|
20
|
-
assert_equal '127.0.0.1', address.ip_address
|
21
|
-
end
|
22
|
-
|
23
|
-
it 'must return the servers in the supplied order' do
|
24
|
-
servers = %w(localhost:80 127.0.0.1:2000 lvh.me:2100)
|
25
|
-
policy = Net::TCPClient::Policy::Custom.new(servers, @proc)
|
26
|
-
names = []
|
27
|
-
policy.each { |address| names << address.host_name }
|
28
|
-
assert_equal %w(localhost 127.0.0.1 lvh.me), names
|
29
|
-
end
|
30
|
-
|
31
|
-
it 'must handle an empty list of servers' do
|
32
|
-
servers = []
|
33
|
-
policy = Net::TCPClient::Policy::Custom.new(servers, @proc)
|
34
|
-
names = []
|
35
|
-
policy.each { |address| names << address.host_name }
|
36
|
-
assert_equal [], names
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
@@ -1,36 +0,0 @@
|
|
1
|
-
require_relative '../test_helper'
|
2
|
-
class Net::TCPClient::Policy::OrderedTest < Minitest::Test
|
3
|
-
describe Net::TCPClient::Policy::Ordered do
|
4
|
-
describe '#each' do
|
5
|
-
it 'must return one server, once' do
|
6
|
-
servers = ['localhost:80']
|
7
|
-
policy = Net::TCPClient::Policy::Ordered.new(servers)
|
8
|
-
collected = []
|
9
|
-
policy.each { |address| collected << address }
|
10
|
-
assert_equal 1, collected.size
|
11
|
-
address = collected.first
|
12
|
-
assert_equal 80, address.port
|
13
|
-
assert_equal 'localhost', address.host_name
|
14
|
-
assert_equal '127.0.0.1', address.ip_address
|
15
|
-
end
|
16
|
-
|
17
|
-
it 'must return the servers in the supplied order' do
|
18
|
-
servers = %w(localhost:80 127.0.0.1:2000 lvh.me:2100)
|
19
|
-
policy = Net::TCPClient::Policy::Ordered.new(servers)
|
20
|
-
names = []
|
21
|
-
policy.each { |address| names << address.host_name }
|
22
|
-
assert_equal %w(localhost 127.0.0.1 lvh.me), names
|
23
|
-
end
|
24
|
-
|
25
|
-
it 'must handle an empty list of servers' do
|
26
|
-
servers = []
|
27
|
-
policy = Net::TCPClient::Policy::Ordered.new(servers)
|
28
|
-
names = []
|
29
|
-
policy.each { |address| names << address.host_name }
|
30
|
-
assert_equal [], names
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
@@ -1,45 +0,0 @@
|
|
1
|
-
require_relative '../test_helper'
|
2
|
-
class Net::TCPClient::Policy::RandomTest < Minitest::Test
|
3
|
-
describe Net::TCPClient::Policy::Random do
|
4
|
-
describe '#each' do
|
5
|
-
it 'must return one server, once' do
|
6
|
-
servers = ['localhost:80']
|
7
|
-
policy = Net::TCPClient::Policy::Random.new(servers)
|
8
|
-
collected = []
|
9
|
-
policy.each { |address| collected << address }
|
10
|
-
assert_equal 1, collected.size
|
11
|
-
address = collected.first
|
12
|
-
assert_equal 80, address.port
|
13
|
-
assert_equal 'localhost', address.host_name
|
14
|
-
assert_equal '127.0.0.1', address.ip_address
|
15
|
-
end
|
16
|
-
|
17
|
-
it 'must return the servers in random order' do
|
18
|
-
servers = %w(localhost:80 127.0.0.1:2000 lvh.me:2100)
|
19
|
-
policy = Net::TCPClient::Policy::Random.new(servers)
|
20
|
-
|
21
|
-
names = []
|
22
|
-
# It is possible the random order is the supplied order.
|
23
|
-
# Keep retrying until the order is different.
|
24
|
-
3.times do
|
25
|
-
policy.each { |address| names << address.host_name }
|
26
|
-
break if names != %w(localhost 127.0.0.1 lvh.me)
|
27
|
-
names = []
|
28
|
-
end
|
29
|
-
|
30
|
-
refute_equal %w(localhost 127.0.0.1 lvh.me), names
|
31
|
-
assert_equal %w(localhost 127.0.0.1 lvh.me).sort, names.sort
|
32
|
-
end
|
33
|
-
|
34
|
-
it 'must handle an empty list of servers' do
|
35
|
-
servers = []
|
36
|
-
policy = Net::TCPClient::Policy::Random.new(servers)
|
37
|
-
names = []
|
38
|
-
policy.each { |address| names << address.host_name }
|
39
|
-
assert_equal [], names
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
data/test/simple_tcp_server.rb
DELETED
@@ -1,160 +0,0 @@
|
|
1
|
-
require 'socket'
|
2
|
-
require 'openssl'
|
3
|
-
require 'bson'
|
4
|
-
require 'semantic_logger'
|
5
|
-
|
6
|
-
# Read the bson document, returning nil if the IO is closed
|
7
|
-
# before receiving any data or a complete BSON document
|
8
|
-
def read_bson_document(io)
|
9
|
-
bytebuf = BSON::ByteBuffer.new
|
10
|
-
# Read 4 byte size of following BSON document
|
11
|
-
bytes = io.read(4)
|
12
|
-
return unless bytes
|
13
|
-
# Read BSON document
|
14
|
-
sz = bytes.unpack("V")[0]
|
15
|
-
bytebuf.put_bytes(bytes)
|
16
|
-
bytes = io.read(sz - 4)
|
17
|
-
return unless bytes
|
18
|
-
bytebuf.put_bytes(bytes)
|
19
|
-
return Hash.from_bson(bytebuf)
|
20
|
-
end
|
21
|
-
|
22
|
-
def ssl_file_path(name)
|
23
|
-
File.join(File.dirname(__FILE__), 'ssl_files', name)
|
24
|
-
end
|
25
|
-
|
26
|
-
# Simple single threaded server for testing purposes using a local socket
|
27
|
-
# Sends and receives BSON Messages
|
28
|
-
class SimpleTCPServer
|
29
|
-
include SemanticLogger::Loggable
|
30
|
-
attr_accessor :thread, :server
|
31
|
-
attr_reader :port, :name, :ssl
|
32
|
-
|
33
|
-
def initialize(options = {})
|
34
|
-
@port = (options[:port] || 2000).to_i
|
35
|
-
@name = options[:name] || 'tcp'
|
36
|
-
@ssl = options[:ssl] || false
|
37
|
-
start
|
38
|
-
end
|
39
|
-
|
40
|
-
def start
|
41
|
-
tcp_server = TCPServer.open(port)
|
42
|
-
|
43
|
-
if ssl
|
44
|
-
context = OpenSSL::SSL::SSLContext.new.tap do |context|
|
45
|
-
context.set_params(ssl)
|
46
|
-
context.servername_cb = proc {|socket, name|
|
47
|
-
if name == 'localhost'
|
48
|
-
OpenSSL::SSL::SSLContext.new.tap do |new_context|
|
49
|
-
new_context.cert = OpenSSL::X509::Certificate.new(File.open(ssl_file_path('localhost-server.pem')))
|
50
|
-
new_context.key = OpenSSL::PKey::RSA.new(File.open(ssl_file_path('localhost-server-key.pem')))
|
51
|
-
new_context.ca_file = ssl_file_path('ca.pem')
|
52
|
-
end
|
53
|
-
else
|
54
|
-
OpenSSL::SSL::SSLContext.new.tap do |new_context|
|
55
|
-
new_context.cert = OpenSSL::X509::Certificate.new(File.open(ssl_file_path('no-sni.pem')))
|
56
|
-
new_context.key = OpenSSL::PKey::RSA.new(File.open(ssl_file_path('no-sni-key.pem')))
|
57
|
-
new_context.ca_file = ssl_file_path('ca.pem')
|
58
|
-
end
|
59
|
-
end
|
60
|
-
}
|
61
|
-
end
|
62
|
-
tcp_server = OpenSSL::SSL::SSLServer.new(tcp_server, context)
|
63
|
-
end
|
64
|
-
|
65
|
-
self.server = tcp_server
|
66
|
-
self.thread = Thread.new do
|
67
|
-
begin
|
68
|
-
loop do
|
69
|
-
logger.debug 'Waiting for a client to connect'
|
70
|
-
|
71
|
-
# Wait for a client to connect
|
72
|
-
on_request(server.accept)
|
73
|
-
end
|
74
|
-
rescue IOError, Errno::EBADF => exc
|
75
|
-
logger.info('Thread terminated', exc)
|
76
|
-
end
|
77
|
-
end
|
78
|
-
end
|
79
|
-
|
80
|
-
def stop
|
81
|
-
if thread
|
82
|
-
thread.kill
|
83
|
-
thread.join
|
84
|
-
self.thread = nil
|
85
|
-
end
|
86
|
-
begin
|
87
|
-
server.close if server
|
88
|
-
rescue IOError
|
89
|
-
end
|
90
|
-
end
|
91
|
-
|
92
|
-
# Called for each message received from the client
|
93
|
-
# Returns a Hash that is sent back to the caller
|
94
|
-
def on_message(message)
|
95
|
-
case message['action']
|
96
|
-
when 'test1'
|
97
|
-
{'result' => 'test1'}
|
98
|
-
when 'servername'
|
99
|
-
{'result' => @name}
|
100
|
-
when 'sleep'
|
101
|
-
sleep message['duration'] || 1
|
102
|
-
{'result' => 'sleep'}
|
103
|
-
when 'fail'
|
104
|
-
if message['attempt'].to_i >= 2
|
105
|
-
{'result' => 'fail'}
|
106
|
-
else
|
107
|
-
nil
|
108
|
-
end
|
109
|
-
else
|
110
|
-
{'result' => "Unknown action: #{message['action']}"}
|
111
|
-
end
|
112
|
-
end
|
113
|
-
|
114
|
-
# Called for each client connection
|
115
|
-
# In a real server each request would be handled in a separate thread
|
116
|
-
def on_request(client)
|
117
|
-
logger.debug 'Client connected, waiting for data from client'
|
118
|
-
|
119
|
-
while (request = read_bson_document(client)) do
|
120
|
-
logger.debug 'Received request', request
|
121
|
-
break unless request
|
122
|
-
|
123
|
-
if reply = on_message(request)
|
124
|
-
logger.debug 'Sending Reply'
|
125
|
-
logger.trace 'Reply', reply
|
126
|
-
client.print(reply.to_bson)
|
127
|
-
else
|
128
|
-
logger.debug 'Closing client since no reply is being sent back'
|
129
|
-
server.close
|
130
|
-
client.close
|
131
|
-
logger.debug 'Server closed'
|
132
|
-
start
|
133
|
-
logger.debug 'Server Restarted'
|
134
|
-
break
|
135
|
-
end
|
136
|
-
end
|
137
|
-
# Disconnect from the client
|
138
|
-
client.close
|
139
|
-
logger.debug 'Disconnected from the client'
|
140
|
-
end
|
141
|
-
|
142
|
-
end
|
143
|
-
|
144
|
-
if $0 == __FILE__
|
145
|
-
SemanticLogger.default_level = :trace
|
146
|
-
SemanticLogger.add_appender(STDOUT)
|
147
|
-
server = SimpleTCPServer.new(port: 2000)
|
148
|
-
|
149
|
-
# For SSL:
|
150
|
-
# server = SimpleTCPServer.new(
|
151
|
-
# port: 2000,
|
152
|
-
# ssl: {
|
153
|
-
# cert: ssl_file_path('localhost-server.pem'),
|
154
|
-
# key: ssl_file_path('localhost-server-key.pem'),
|
155
|
-
# ca_file: ssl_file_path('ca.pem')
|
156
|
-
# }
|
157
|
-
# )
|
158
|
-
|
159
|
-
server.thread.join
|
160
|
-
end
|
data/test/ssl_files/ca.key
DELETED
@@ -1,27 +0,0 @@
|
|
1
|
-
-----BEGIN RSA PRIVATE KEY-----
|
2
|
-
MIIEowIBAAKCAQEA2kw7kGhFXbi4KG4L7G5m0cUbbGYK98Y7A2v1h6HMM57qdN1+
|
3
|
-
obz3RzFJRWV2xmzQ6uNBdJU8tkVDnvNOAwusHkTVMwUpgV+TK94U93NtVMl1Q9ah
|
4
|
-
sGEe2s+JzMucHnGwLMDKKp9C8n3ILcpVaviQUgOqqc1JbO3IcaRUgm7RbN5BStrX
|
5
|
-
9IPe5N06VLhOjdoKjb1MtZ6HfP6y3oAo1WnkY/BI7Vs7T52sqlWPtLYvUEq91riy
|
6
|
-
ZUgdlcSi4vEGuT/r7IU52xtnjrPxfqcrZJHULjyylCRqrXCUU61umEIksQWtHYEH
|
7
|
-
Q2j+lvI+fX+m4g1bwCmZyyX9wJr3a7db6+9XgwIDAQABAoIBAG1KW0vaGFhqwbBk
|
8
|
-
IA4X29xL7YXgtL8F/MeixkNIav6xIjquJdb9z2NSNpfKy6NeGV5vtnaSvNmYZdlv
|
9
|
-
gHAf6OUimwa3H+eInRsKTb7xiBw53D7BdyPiC9uKqjfg/GF1k7lkMBMUtyTGenEK
|
10
|
-
aqdqmH6nHUtz3r3tcjwLBNBkgO8ajgy+Tld9XBmgbUYMJCYblS/1ZVl1dh4L9qOi
|
11
|
-
yjHhTZ87X+0pVujWzspw/lgt00S+AIBMWLkYhSaW11LgXsR7837ps9F62fNHfArY
|
12
|
-
0Zad7LtzjSNqJJ/lNYxyip3fo3UcrpCuhuIKOudNC1FGgmUdKQlMpOBT1E71yvEX
|
13
|
-
W9BWA8ECgYEA8+nR7cGo9kDu72CgxGSwmU8DFhPD1ArzdUBElhaWd2vA4lsjlLNv
|
14
|
-
0lS0UVLDb6Nd3fWZxJEftp89xx/j1PcPVlMPcg3/yrOrfx7K6o7cz3Ji49j+6kgo
|
15
|
-
eZ6fhnGtNQ0oZ8BHyNp59lVmFJpZJPOAmMGk6YqzcIa3LX87IK5aE6ECgYEA5R12
|
16
|
-
5xRPxDQyxiXCBn7lLZZfmnScR0NewjB/lDz8DFGVX/9adMaQLgsCvg62XxA+99B6
|
17
|
-
0upQeQI+8BjJAWC74tfIcpFgVuhFIVhrB//tzvUp/J3MzB3EdgsO1bXyQ6AmPX8j
|
18
|
-
qod6i4BlJ8E6P/V3U+Tr7TgF+G5L+x4w7rnl2KMCgYBCyIqKJrQ0eKLzN+nM3CTe
|
19
|
-
VRvrN44uyLDQMcCVt6mLGR2+3GVpmZfMZxTYD2kjb/+LfmuTvoiIYCFyG/Etple0
|
20
|
-
sxlPiTW4MmmKbMvyXRtoUVFyQT/KtecfJadYEFf0Zp3himwdOnSaVdeVXI176JAV
|
21
|
-
Qy/8IdXvwXL2KhfuYs6XAQKBgQDQg2w/CaE+szKyWpKmTr5MKtp/OzkvMgT/Phwd
|
22
|
-
0RKiM216nG66cCuve53XUpRvF932sunVIiJyvrSA1k24z0yvOirW+a9v6JthqZJf
|
23
|
-
CXBoNX8sxIAqE71EoPOzU49UNGAY/6h5/ips40EsWRKmOsOKuoBst9vXKKpFtEhc
|
24
|
-
OxsPeQKBgBqkylA/tOaiWivaL9JTEgPkqOBu1GsuPihT7UnCqVCrRmWysrXXjbUp
|
25
|
-
C+AlxkRmKIgHhGPyCdVxWW7RB8JZ1mHbuxeRU5Es9v/yLLRyEuCgPuFx3Odi7sLv
|
26
|
-
SGHEzK5lu4MlZIkonsEJwti/FFguGQpktrH8ltpE7wdw7Ik+zb4z
|
27
|
-
-----END RSA PRIVATE KEY-----
|
data/test/ssl_files/ca.pem
DELETED
@@ -1,19 +0,0 @@
|
|
1
|
-
-----BEGIN CERTIFICATE-----
|
2
|
-
MIIDFjCCAf4CCQD/szfmoKirZDANBgkqhkiG9w0BAQsFADBMMQswCQYDVQQGEwJV
|
3
|
-
UzERMA8GA1UECAwITmVicmFza2ExDjAMBgNVBAcMBU9tYWhhMRowGAYDVQQKDBFu
|
4
|
-
ZXRfdGNwX2NsaWVudF9jYTAgFw0xOTAxMDkxNTE4NDRaGA8yMTE4MTIxNjE1MTg0
|
5
|
-
NFowTDELMAkGA1UEBhMCVVMxETAPBgNVBAgMCE5lYnJhc2thMQ4wDAYDVQQHDAVP
|
6
|
-
bWFoYTEaMBgGA1UECgwRbmV0X3RjcF9jbGllbnRfY2EwggEiMA0GCSqGSIb3DQEB
|
7
|
-
AQUAA4IBDwAwggEKAoIBAQDaTDuQaEVduLgobgvsbmbRxRtsZgr3xjsDa/WHocwz
|
8
|
-
nup03X6hvPdHMUlFZXbGbNDq40F0lTy2RUOe804DC6weRNUzBSmBX5Mr3hT3c21U
|
9
|
-
yXVD1qGwYR7az4nMy5wecbAswMoqn0LyfcgtylVq+JBSA6qpzUls7chxpFSCbtFs
|
10
|
-
3kFK2tf0g97k3TpUuE6N2gqNvUy1nod8/rLegCjVaeRj8EjtWztPnayqVY+0ti9Q
|
11
|
-
Sr3WuLJlSB2VxKLi8Qa5P+vshTnbG2eOs/F+pytkkdQuPLKUJGqtcJRTrW6YQiSx
|
12
|
-
Ba0dgQdDaP6W8j59f6biDVvAKZnLJf3Amvdrt1vr71eDAgMBAAEwDQYJKoZIhvcN
|
13
|
-
AQELBQADggEBAHSf+IOhDgw64nUuXZYVIK4TQDzqIpnZ8+djkvfqck+WcQmXQ5Vj
|
14
|
-
G4/8kXgghpA3N63XARb0QOpHk4yvPZKCx+k4xCUbbsvZClAS0ZMQlHpJKLF0xSiA
|
15
|
-
J9KaOj7HR5044To/McIHllQ812miWqmLtq6eaCxxzNILjzs1fVh4OXHM1ZbCyJGt
|
16
|
-
8ekvy1GFNoJFaNvcUvPLFi+PmfArpooVRhON1aeMgk8+pgOJNCakKv7/+QFKPxPC
|
17
|
-
dWBVr/roSf9w1UbVEGNTUCbBjHVhlyeRRtMtzIfPfo8O/85Ie+P3JPEfS9hYmdb4
|
18
|
-
At7Gd0dMDALWDPxf6OIxT/LU4ryuf0SDmJE=
|
19
|
-
-----END CERTIFICATE-----
|
@@ -1,27 +0,0 @@
|
|
1
|
-
-----BEGIN RSA PRIVATE KEY-----
|
2
|
-
MIIEogIBAAKCAQEAryTR52Sowr8yOY1uBgav9VrXF6bXblh4K+aIo+LZk6qjCccv
|
3
|
-
d/Z8+nx4HER7I3ZqKnEJVDFwgJTIMIrK6mnrP15B8k4aT/N5mWdJzy3BbhV6pa57
|
4
|
-
IaZerJUaFZYrwL0fSJX8o4iJ5z7WTPkp8J+QHqsyHwdi42gcBW4eHNvPc469dszB
|
5
|
-
UXdV5IWy0kRw/KYEAqz57d/UQ07kZNi8d/eowc20+CNYNL1Yudbh9zENxa90cVxr
|
6
|
-
ImQ6mAaWP8X8jYbTbYyshzrhp453N3lGyt9YrZ347IYIdyRQiD57ZEvd+/RsSUsN
|
7
|
-
D17cKoqxu1mjL9CZV8Mc6AP5LkaAJeNhyzOqEQIDAQABAoIBAFyGeRVjCfyIAUKC
|
8
|
-
QsOQONjHeqYWD+1Nc37NtRXPO95U4PjDb4JSh0fVBab5Tow3fHKbcLA3xhVHhFKQ
|
9
|
-
oA4ikpLReslFFYVzPKQb+tQmee9sDXUFririt1U5F6SbxtV1k9dG1UaXVTMC8TeM
|
10
|
-
0ek6gmqRSlM2FbnJQDRmLiZUwU1sFVUdpqojxHR+QpIdntPIeW2+Cu/bF8y+ApKt
|
11
|
-
7MqvsLEfCCWdo5f5+ALqz1lW90eJHc0KxCogSRsTGt00rJd8ddrgtyiNyWi8NJQg
|
12
|
-
pRC5e+N7/m3miVyAuMz5FUUGy92LAO7PqWJOCT8P51ktwL2Hc/HXoQvbgWnDey1N
|
13
|
-
9HL5zYECgYEA1A828fPhiRqsDuXOZOYRfXPDa3jcvV0IeBw9e0cLOT4CS9bKrri/
|
14
|
-
gR5XHAsPoIlAFrgdjPuDLubVb+PaIk0rrZLSjkqxymoz5t/wVmwKcRO7xh1/wYRv
|
15
|
-
dMfIZA0huubt//b+QiOtPdC3BfrphdJZWRQAvQcKt1phfclaIsmM2pkCgYEA029m
|
16
|
-
oxOB58KoYzFMlrQFe/9wt2RNE+na8mDxvY5aNrE2INrpTB0sHWbNaN+WeK2yEPER
|
17
|
-
MVCIy3x0lbozNR/Mm8QrsR5+VwhPoCXtC/wdpMuWf3UH2aPiYcP3i8haiFH52X1u
|
18
|
-
2UAyyGLHsHnYZvyKvvJDoeH5paOmCKQDqlU7rjkCgYANWOvPbNdMRuZ/hY1pImYF
|
19
|
-
bGznbdMPBDUNQlHIWZ9mOfXxChL1zmEXYm5/MF8Kbrke9PW/MvF92T+j7EaFlC/k
|
20
|
-
m/IuzJrGL8sWhA/fkKtTlLdj7+Vjq89MHWsKiR0PY4ulacl1JkO4OVPbx4A9UREY
|
21
|
-
nz6wpynQgprSTQMkX2VDOQKBgHELvvSyGWKw0Rc35Jsu5T/G850aI5viDQ5KhvWy
|
22
|
-
hsl3NlmaseHgNxYBQRIxeWJMfEhSm76iMIGbqTnktDxTJDKkUDgC9cnSx7/4hyVB
|
23
|
-
Rxg1QeIj0G6tEPz0qgYyuTTpn4yJZBsEGCLLrbjNbMajgAtXvJFxIOlO9hbomo0X
|
24
|
-
xTEBAoGARjhBRElqj2VRse+eD8+xCVaBm6i+Gvo66626RLNnLF8GtZrX6othpw8x
|
25
|
-
m9LyZ8ybLfzvyGwg3uqsaCOtP9J9f8Ln2cm+AViqw/75A6n2f/F9UucmZfzvEamZ
|
26
|
-
9dc7dN3FfR/1OWc9389Mx8in/+6QLGOaQwUu2uAsSjhRwbcTq/o=
|
27
|
-
-----END RSA PRIVATE KEY-----
|
@@ -1,19 +0,0 @@
|
|
1
|
-
-----BEGIN CERTIFICATE-----
|
2
|
-
MIIDJzCCAg8CCQDRgr9ZEAyEkTANBgkqhkiG9w0BAQUFADBMMQswCQYDVQQGEwJV
|
3
|
-
UzERMA8GA1UECAwITmVicmFza2ExDjAMBgNVBAcMBU9tYWhhMRowGAYDVQQKDBFu
|
4
|
-
ZXRfdGNwX2NsaWVudF9jYTAgFw0xOTAxMDkxNTE5NTRaGA8yMTE4MTIxNjE1MTk1
|
5
|
-
NFowXTELMAkGA1UEBhMCVVMxETAPBgNVBAgMCE5lYnJhc2thMQ4wDAYDVQQHDAVP
|
6
|
-
bWFoYTEXMBUGA1UECgwObmV0X3RjcF9jbGllbnQxEjAQBgNVBAMMCWxvY2FsaG9z
|
7
|
-
dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAK8k0edkqMK/MjmNbgYG
|
8
|
-
r/Va1xem125YeCvmiKPi2ZOqownHL3f2fPp8eBxEeyN2aipxCVQxcICUyDCKyupp
|
9
|
-
6z9eQfJOGk/zeZlnSc8twW4VeqWueyGmXqyVGhWWK8C9H0iV/KOIiec+1kz5KfCf
|
10
|
-
kB6rMh8HYuNoHAVuHhzbz3OOvXbMwVF3VeSFstJEcPymBAKs+e3f1ENO5GTYvHf3
|
11
|
-
qMHNtPgjWDS9WLnW4fcxDcWvdHFcayJkOpgGlj/F/I2G022MrIc64aeOdzd5Rsrf
|
12
|
-
WK2d+OyGCHckUIg+e2RL3fv0bElLDQ9e3CqKsbtZoy/QmVfDHOgD+S5GgCXjYcsz
|
13
|
-
qhECAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAT8ZE0WCAhkbwKt4csU8eTRaY3iXn
|
14
|
-
bEDGaO+q+bVw4KpjmTdf6oIStmrA0v9vxUjB5Ghc8N7F1yQ0mSQ6IgtysFVG3zEp
|
15
|
-
EUOwNY4EndOxNsTVhKzN/4GIoMNoogjptevkFMWkVMGOA0a1IqbT6Rga/GbGPF+6
|
16
|
-
16mgoLz8VfbOYn4SytifFR+8EGbeZxKSRtJFUtYg6sX4q9voQGAhfQXXiDDSXxnl
|
17
|
-
qug3RxueccvPHvJj3Yn6GyLqVjYyRC9xxildEtKyO932x3wdW/LSnXh8MsfP/EYt
|
18
|
-
hcDi0ydRutNYCAW+8ZisZdUnDADlA5PelacsaQTe8m3Nn97b+ASYnwyMSw==
|
19
|
-
-----END CERTIFICATE-----
|
@@ -1,27 +0,0 @@
|
|
1
|
-
-----BEGIN RSA PRIVATE KEY-----
|
2
|
-
MIIEpQIBAAKCAQEAyLStTQ8EAeW+VtFFWLGjsTU5ChcjRnc1xlD91evX8Rvc5ZsS
|
3
|
-
xkbW9zLv30jRjljSmpGZIQR/KRSKLbLfCDfcCCjybOZbu6oTqKFRJ0gb6qKcwIOE
|
4
|
-
+ZaP6uulfbDnZiOoYIKALtBkXbepi36V6xBYfMcS+mpnRP0YHmxshX3iPH107YWE
|
5
|
-
2qev+2tRY4Do899d00+bKFThD4tI3rEvmVJKcer87xx9EyC8WLJhWud2+t2J1gea
|
6
|
-
ZdpJVNzz3c0ex5vHT1pp6nK+B+H6DuIqT+MyOFuln++q5u6AEOu08tp2sPgTwXtx
|
7
|
-
powwauq7FVWAhZSjrlr6VMzMNfLAEBYE6bFA9QIDAQABAoIBAQC1bv8qpeRNgs4p
|
8
|
-
1UwG/a6oRyClCn2M+b7W4+hTNbwj7bgmp6S1MNyq4pUNF9q3/3uC1xPCUTpSfIrc
|
9
|
-
/NG5sCVsCvf7kdJjN0BGNG4UQI9b8Fwbe8j9hynah+M2WHEWWC2h8NbHewL/5UOT
|
10
|
-
In+L217ijWOOlBl+t/zRo9oGYuHdI0JWKfJca99/Jcqrjhrj1pdViDszbiBjwOLV
|
11
|
-
0qXnhgDEXnjWSXYVNar0lSgh8Rb8wGsgrypyfoXg832oN3C26pugugH/SR7d6oaD
|
12
|
-
OY0ySPfsIZi/V2iRkxIJtp6yECf3J4lNBrG2STjcHhZck+HuB/vz5Yk1qQqcfO6X
|
13
|
-
ObuYrbKBAoGBAOiw+615kwEFWEuCAtWgZzUMrWViO45HbmLGePOBY/nVX/3kAKrb
|
14
|
-
yhjYgMlzH3ITQUkTNdOYtZ0ZudkIfTITJ+bZK2EhXVgTd7Qi5YsI+fyUqfNf2nWK
|
15
|
-
mvRtKl12uN5Y7OtVeHrkrrrlN+a1aki+cdH2qSD3MwrtKs+JfKLff9QtAoGBANzP
|
16
|
-
eOrmgdFcjFoaJcak0iVNG8kke8stUzrc9lAiUbvZ7F8kQ9DW0rkYuoAbzV+SLQcu
|
17
|
-
hrbFf9RQ4AM5VSP4awQjv0Lj5UTgYF4GrHjsauKeEfMY96txmuW5C/3T1mYitLdl
|
18
|
-
fs/76S5+oj46/VI2/iIOYxiqLaO9EqEwgP/sQDTpAoGAUHyvgZDU7Xx4zx14d4ZV
|
19
|
-
TL9G1xPEf/FrWFVIjwoJl+hbnMmaBX+jBzcUTRo6HU5Vvb4cV0WyRFYat9y82W5Q
|
20
|
-
1gP2glF1JTsOo8uSVKZVOi3+H0XfndrEwJlmFxAy4A4oXTqiQvgJDHKvBGlqCyF8
|
21
|
-
42CLnfCDwlrI/SKUbw4Z/D0CgYEAoTVb22uU5axCz9l9MOzOe+sy2QQo2SprNHNz
|
22
|
-
5QdZUuOEfeW1GThtujNCnhsuMpM/Cpo+Qhwo+nJdSh1Geq94Ohp7HbPShBmoYZ1P
|
23
|
-
uC0qz+6FvkzBLUsQwpz6E0PgqMq305lnHyOUl5xeiT56CdcabPTCBpTgI0X73vDR
|
24
|
-
jYcHTVkCgYEA1Uj47vC8jV1mBtzIKFfvo4W1tkAm1aSDOApzg0N7JEjvgHbeBqM6
|
25
|
-
i8dkJ3PgcqxIQ1np+0QTDVjbLgNqCsribJ/djbPDhH/LW9vPP5uUwm10qa7UOJ09
|
26
|
-
Jrc3b7r+ZQHPjr7upj5fUK1Xcs0oY7yHMuc8oLDNcdDIYqxP/RzjcOY=
|
27
|
-
-----END RSA PRIVATE KEY-----
|
data/test/ssl_files/no-sni.pem
DELETED
@@ -1,20 +0,0 @@
|
|
1
|
-
-----BEGIN CERTIFICATE-----
|
2
|
-
MIIDQTCCAikCCQDRgr9ZEAyEkjANBgkqhkiG9w0BAQUFADBMMQswCQYDVQQGEwJV
|
3
|
-
UzERMA8GA1UECAwITmVicmFza2ExDjAMBgNVBAcMBU9tYWhhMRowGAYDVQQKDBFu
|
4
|
-
ZXRfdGNwX2NsaWVudF9jYTAgFw0xOTAxMDkxNTIwMDhaGA8yMTE4MTIxNjE1MjAw
|
5
|
-
OFowdzELMAkGA1UEBhMCVVMxETAPBgNVBAgMCE5lYnJhc2thMQ4wDAYDVQQHDAVP
|
6
|
-
bWFoYTEXMBUGA1UECgwObmV0X3RjcF9jbGllbnQxLDAqBgNVBAMMI25vLWhvc3Ru
|
7
|
-
YW1lLXdhcy1naXZlbi1mb3Itc25pbmkuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOC
|
8
|
-
AQ8AMIIBCgKCAQEAyLStTQ8EAeW+VtFFWLGjsTU5ChcjRnc1xlD91evX8Rvc5ZsS
|
9
|
-
xkbW9zLv30jRjljSmpGZIQR/KRSKLbLfCDfcCCjybOZbu6oTqKFRJ0gb6qKcwIOE
|
10
|
-
+ZaP6uulfbDnZiOoYIKALtBkXbepi36V6xBYfMcS+mpnRP0YHmxshX3iPH107YWE
|
11
|
-
2qev+2tRY4Do899d00+bKFThD4tI3rEvmVJKcer87xx9EyC8WLJhWud2+t2J1gea
|
12
|
-
ZdpJVNzz3c0ex5vHT1pp6nK+B+H6DuIqT+MyOFuln++q5u6AEOu08tp2sPgTwXtx
|
13
|
-
powwauq7FVWAhZSjrlr6VMzMNfLAEBYE6bFA9QIDAQABMA0GCSqGSIb3DQEBBQUA
|
14
|
-
A4IBAQB6hpp37TLk0+Pd9+gP/OE/7s9AEfcFSelTJZguDaDO/LqHxEXbokOKcQi5
|
15
|
-
g0vGxc/XK7RYdw+eEXzbXazQUTPQ6JAfpH0bVXfTvaFKMefHdcnB0NySnnHl2BfQ
|
16
|
-
5cFjqHQwBV6jVIH0q125rC3F1aczDo5kyLk3UyMenY8zoZt8baacChvSqUXDBiSn
|
17
|
-
/04Pof//O3ky2B3DYyunQJZ1mQNs+FJdO5609BmlPvaoZfiFbMxGQcmV4D+0mQm+
|
18
|
-
CzxWZ4p8gDPDIO4mzVvDMbrRksg1CdG6WakuX1Vy94pX4JNiJ7e47lvuoWIL6DFp
|
19
|
-
5mWIV72Ra4bU5ybNGZlrxLg/6ueD
|
20
|
-
-----END CERTIFICATE-----
|