polyphony 0.62 → 0.63
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/CHANGELOG.md +5 -0
- data/Gemfile.lock +1 -1
- data/Rakefile +1 -1
- data/lib/polyphony/extensions/io.rb +5 -1
- data/lib/polyphony/extensions/openssl.rb +14 -0
- data/lib/polyphony/extensions/socket.rb +51 -0
- data/lib/polyphony/version.rb +1 -1
- data/test/test_backend.rb +26 -0
- data/test/test_io.rb +20 -0
- data/test/test_socket.rb +39 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b2c69a05b391ebc688550a3894e56362de6603d04e807cad3072dfdffe966787
|
4
|
+
data.tar.gz: c09da8e0cb9e04eb4ea964e81cdd75a735f9e2f08f882ddaec8f2bee4be5661b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cbd89d448e06cc80a105ab763b21b62054eb7ee4a21b8b115954765e80170d55a99b4a314695554493d81cbd73f87941846521a4b0dcac9d1653bcb8a51497f6
|
7
|
+
data.tar.gz: 6fc94352edc156fb963a4f74180208353ecd8cae82ffef1c6ac02b6413870ba028a5cea547dcdebb5bb3998b73a5529de209c035ae32ec7d4500678b3a7f7b65
|
data/CHANGELOG.md
CHANGED
data/Gemfile.lock
CHANGED
data/Rakefile
CHANGED
@@ -108,7 +108,11 @@ class ::IO
|
|
108
108
|
end
|
109
109
|
|
110
110
|
alias_method :orig_read, :read
|
111
|
-
def read(len = nil)
|
111
|
+
def read(len = nil, buf = nil, buf_pos = 0)
|
112
|
+
if buf
|
113
|
+
return Polyphony.backend_read(self, buf, len, true, buf_pos)
|
114
|
+
end
|
115
|
+
|
112
116
|
@read_buffer ||= +''
|
113
117
|
result = Polyphony.backend_read(self, @read_buffer, len, true, -1)
|
114
118
|
return nil unless result
|
@@ -64,6 +64,20 @@ class ::OpenSSL::SSL::SSLSocket
|
|
64
64
|
# @sync = osync
|
65
65
|
end
|
66
66
|
|
67
|
+
alias_method :orig_read, :read
|
68
|
+
def read(maxlen = nil, buf = nil, buf_pos = 0)
|
69
|
+
return readpartial(maxlen, buf, buf_pos) if buf
|
70
|
+
|
71
|
+
buf = +''
|
72
|
+
return readpartial(maxlen, buf) if maxlen
|
73
|
+
|
74
|
+
while true
|
75
|
+
readpartial(4096, buf, -1)
|
76
|
+
end
|
77
|
+
rescue EOFError
|
78
|
+
buf
|
79
|
+
end
|
80
|
+
|
67
81
|
def readpartial(maxlen, buf = +'', buffer_pos = 0)
|
68
82
|
if buffer_pos != 0
|
69
83
|
if (result = sysread(maxlen, +''))
|
@@ -22,6 +22,23 @@ class ::Socket
|
|
22
22
|
Polyphony.backend_connect(self, addr.ip_address, addr.ip_port)
|
23
23
|
end
|
24
24
|
|
25
|
+
alias_method :orig_read, :read
|
26
|
+
def read(maxlen = nil, buf = nil, buf_pos = 0)
|
27
|
+
return Polyphony.backend_recv(self, buf, maxlen, buf_pos) if buf
|
28
|
+
return Polyphony.backend_recv(self, buf || +'', maxlen, 0) if maxlen
|
29
|
+
|
30
|
+
buf = +''
|
31
|
+
len = buf.bytesize
|
32
|
+
while true
|
33
|
+
Polyphony.backend_recv(self, buf, maxlen || 4096, -1)
|
34
|
+
new_len = buf.bytesize
|
35
|
+
break if new_len == len
|
36
|
+
|
37
|
+
len = new_len
|
38
|
+
end
|
39
|
+
buf
|
40
|
+
end
|
41
|
+
|
25
42
|
def recv(maxlen, flags = 0, outbuf = nil)
|
26
43
|
Polyphony.backend_recv(self, outbuf || +'', maxlen, 0)
|
27
44
|
end
|
@@ -140,6 +157,23 @@ class ::TCPSocket
|
|
140
157
|
setsockopt(::Socket::SOL_SOCKET, ::Socket::SO_REUSEPORT, 1)
|
141
158
|
end
|
142
159
|
|
160
|
+
alias_method :orig_read, :read
|
161
|
+
def read(maxlen = nil, buf = nil, buf_pos = 0)
|
162
|
+
return Polyphony.backend_recv(self, buf, maxlen, buf_pos) if buf
|
163
|
+
return Polyphony.backend_recv(self, buf || +'', maxlen, 0) if maxlen
|
164
|
+
|
165
|
+
buf = +''
|
166
|
+
len = buf.bytesize
|
167
|
+
while true
|
168
|
+
Polyphony.backend_recv(self, buf, maxlen || 4096, -1)
|
169
|
+
new_len = buf.bytesize
|
170
|
+
break if new_len == len
|
171
|
+
|
172
|
+
len = new_len
|
173
|
+
end
|
174
|
+
buf
|
175
|
+
end
|
176
|
+
|
143
177
|
def recv(maxlen, flags = 0, outbuf = nil)
|
144
178
|
Polyphony.backend_recv(self, outbuf || +'', maxlen, 0)
|
145
179
|
end
|
@@ -217,6 +251,23 @@ class ::UNIXServer
|
|
217
251
|
end
|
218
252
|
|
219
253
|
class ::UNIXSocket
|
254
|
+
alias_method :orig_read, :read
|
255
|
+
def read(maxlen = nil, buf = nil, buf_pos = 0)
|
256
|
+
return Polyphony.backend_recv(self, buf, maxlen, buf_pos) if buf
|
257
|
+
return Polyphony.backend_recv(self, buf || +'', maxlen, 0) if maxlen
|
258
|
+
|
259
|
+
buf = +''
|
260
|
+
len = buf.bytesize
|
261
|
+
while true
|
262
|
+
Polyphony.backend_recv(self, buf, maxlen || 4096, -1)
|
263
|
+
new_len = buf.bytesize
|
264
|
+
break if new_len == len
|
265
|
+
|
266
|
+
len = new_len
|
267
|
+
end
|
268
|
+
buf
|
269
|
+
end
|
270
|
+
|
220
271
|
def recv(maxlen, flags = 0, outbuf = nil)
|
221
272
|
Polyphony.backend_recv(self, outbuf || +'', maxlen, 0)
|
222
273
|
end
|
data/lib/polyphony/version.rb
CHANGED
data/test/test_backend.rb
CHANGED
@@ -98,6 +98,32 @@ class BackendTest < MiniTest::Test
|
|
98
98
|
assert_equal return_value, buf
|
99
99
|
end
|
100
100
|
|
101
|
+
def test_read_concat_big
|
102
|
+
i, o = IO.pipe
|
103
|
+
|
104
|
+
body = " " * 4000
|
105
|
+
|
106
|
+
data = "post /?q=time&blah=blah HTTP/1\r\nHost: dev.realiteq.net\r\n\r\n" +
|
107
|
+
"get /?q=time HTTP/1.1\r\nContent-Length: #{body.bytesize}\r\n\r\n#{body}" +
|
108
|
+
"get /?q=time HTTP/1.1\r\nCookie: foo\r\nCookie: bar\r\n\r\n"
|
109
|
+
|
110
|
+
o << data
|
111
|
+
o.close
|
112
|
+
|
113
|
+
buf = +''
|
114
|
+
|
115
|
+
@backend.read(i, buf, 4096, false, -1)
|
116
|
+
assert_equal 4096, buf.bytesize
|
117
|
+
|
118
|
+
@backend.read(i, buf, 1, false, -1)
|
119
|
+
assert_equal 4097, buf.bytesize
|
120
|
+
|
121
|
+
@backend.read(i, buf, 4096, false, -1)
|
122
|
+
|
123
|
+
assert_equal data.bytesize, buf.bytesize
|
124
|
+
assert_equal data, buf
|
125
|
+
end
|
126
|
+
|
101
127
|
def test_waitpid
|
102
128
|
pid = fork do
|
103
129
|
@backend.post_fork
|
data/test/test_io.rb
CHANGED
@@ -73,6 +73,26 @@ class IOTest < MiniTest::Test
|
|
73
73
|
assert_equal [:wait_readable, 'foo'], results
|
74
74
|
end
|
75
75
|
|
76
|
+
def test_read
|
77
|
+
i, o = IO.pipe
|
78
|
+
|
79
|
+
o << 'hi'
|
80
|
+
assert_equal 'hi', i.read(2)
|
81
|
+
|
82
|
+
o << 'foobarbaz'
|
83
|
+
assert_equal 'foo', i.read(3)
|
84
|
+
assert_equal 'bar', i.read(3)
|
85
|
+
|
86
|
+
buf = +'abc'
|
87
|
+
assert_equal 'baz', i.read(3, buf)
|
88
|
+
assert_equal 'baz', buf
|
89
|
+
|
90
|
+
buf = +'def'
|
91
|
+
o << 'foobar'
|
92
|
+
assert_equal 'deffoobar', i.read(6, buf, -1)
|
93
|
+
assert_equal 'deffoobar', buf
|
94
|
+
end
|
95
|
+
|
76
96
|
def test_readpartial
|
77
97
|
i, o = IO.pipe
|
78
98
|
|
data/test/test_socket.rb
CHANGED
@@ -12,7 +12,6 @@ class SocketTest < MiniTest::Test
|
|
12
12
|
def test_tcp
|
13
13
|
port = rand(1234..5678)
|
14
14
|
server = TCPServer.new('127.0.0.1', port)
|
15
|
-
|
16
15
|
server_fiber = spin do
|
17
16
|
while (socket = server.accept)
|
18
17
|
spin do
|
@@ -34,6 +33,45 @@ class SocketTest < MiniTest::Test
|
|
34
33
|
server&.close
|
35
34
|
end
|
36
35
|
|
36
|
+
def test_read
|
37
|
+
port = rand(1234..5678)
|
38
|
+
server = TCPServer.new('127.0.0.1', port)
|
39
|
+
server_fiber = spin do
|
40
|
+
while (socket = server.accept)
|
41
|
+
spin do
|
42
|
+
while (data = socket.read(8192))
|
43
|
+
socket << data
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
snooze
|
50
|
+
client = TCPSocket.new('127.0.0.1', port)
|
51
|
+
|
52
|
+
client << 'hi'
|
53
|
+
assert_equal 'hi', client.read(2)
|
54
|
+
|
55
|
+
client << 'foobarbaz'
|
56
|
+
assert_equal 'foo', client.read(3)
|
57
|
+
assert_equal 'bar', client.read(3)
|
58
|
+
|
59
|
+
buf = +'abc'
|
60
|
+
assert_equal 'baz', client.read(3, buf)
|
61
|
+
assert_equal 'baz', buf
|
62
|
+
|
63
|
+
buf = +'def'
|
64
|
+
client << 'foobar'
|
65
|
+
assert_equal 'deffoobar', client.read(6, buf, -1)
|
66
|
+
assert_equal 'deffoobar', buf
|
67
|
+
|
68
|
+
client.close
|
69
|
+
ensure
|
70
|
+
server_fiber&.stop
|
71
|
+
server_fiber&.await
|
72
|
+
server&.close
|
73
|
+
end
|
74
|
+
|
37
75
|
# sending multiple strings at once
|
38
76
|
def test_sendv
|
39
77
|
port = rand(1234..5678)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: polyphony
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: '0.
|
4
|
+
version: '0.63'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sharon Rosner
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-07-
|
11
|
+
date: 2021-07-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake-compiler
|