2017-01-11 09:48:51 -05:00
|
|
|
# frozen_string_literal: true
|
2012-11-06 00:30:17 -05:00
|
|
|
require "test/unit"
|
|
|
|
require "net/protocol"
|
|
|
|
require "stringio"
|
|
|
|
|
|
|
|
class TestProtocol < Test::Unit::TestCase
|
2014-05-23 08:36:30 -04:00
|
|
|
def test_should_properly_dot_stuff_period_with_no_endline
|
|
|
|
bug9627 = '[ruby-core:61441] [Bug #9627]'
|
2017-01-14 04:38:56 -05:00
|
|
|
sio = StringIO.new("".dup)
|
2014-05-23 08:36:30 -04:00
|
|
|
imio = Net::InternetMessageIO.new(sio)
|
|
|
|
email = "To: bob@aol.com\nlook, a period with no endline\n."
|
|
|
|
imio.write_message(email)
|
|
|
|
assert_equal("To: bob@aol.com\r\nlook, a period with no endline\r\n..\r\n.\r\n", sio.string, bug9627)
|
|
|
|
end
|
|
|
|
|
2012-11-06 00:30:17 -05:00
|
|
|
def test_each_crlf_line
|
|
|
|
assert_output('', '') do
|
2017-01-14 04:38:56 -05:00
|
|
|
sio = StringIO.new("".dup)
|
2012-11-08 05:04:24 -05:00
|
|
|
imio = Net::InternetMessageIO.new(sio)
|
|
|
|
assert_equal(23, imio.write_message("\u3042\r\u3044\n\u3046\r\n\u3048"))
|
|
|
|
assert_equal("\u3042\r\n\u3044\r\n\u3046\r\n\u3048\r\n.\r\n", sio.string)
|
|
|
|
|
2017-01-14 04:38:56 -05:00
|
|
|
sio = StringIO.new("".dup)
|
2012-11-08 05:04:24 -05:00
|
|
|
imio = Net::InternetMessageIO.new(sio)
|
|
|
|
assert_equal(8, imio.write_message("\u3042\r"))
|
|
|
|
assert_equal("\u3042\r\n.\r\n", sio.string)
|
2012-11-06 00:30:17 -05:00
|
|
|
end
|
|
|
|
end
|
2018-06-06 04:03:47 -04:00
|
|
|
|
2019-06-29 04:52:57 -04:00
|
|
|
def create_mockio(capacity: 100, max: nil)
|
2018-06-06 04:03:47 -04:00
|
|
|
mockio = Object.new
|
|
|
|
mockio.instance_variable_set(:@str, +'')
|
2018-12-26 23:49:12 -05:00
|
|
|
mockio.instance_variable_set(:@capacity, capacity)
|
2019-06-29 04:52:57 -04:00
|
|
|
mockio.instance_variable_set(:@max, max)
|
2018-06-06 04:03:47 -04:00
|
|
|
def mockio.string; @str; end
|
|
|
|
def mockio.to_io; self; end
|
|
|
|
def mockio.wait_writable(sec); sleep sec; false; end
|
|
|
|
def mockio.write_nonblock(*strs, exception: true)
|
|
|
|
if @capacity <= @str.bytesize
|
|
|
|
if exception
|
|
|
|
raise Net::WaitWritable
|
|
|
|
else
|
|
|
|
return :wait_writable
|
|
|
|
end
|
|
|
|
end
|
|
|
|
len = 0
|
2019-06-29 04:52:57 -04:00
|
|
|
max = @max ? [@capacity, @str.bytesize + @max].min : @capacity
|
2018-06-06 04:03:47 -04:00
|
|
|
strs.each do |str|
|
|
|
|
len1 = @str.bytesize
|
2019-06-29 04:52:57 -04:00
|
|
|
break if max <= len1
|
|
|
|
@str << str.byteslice(0, max - @str.bytesize)
|
2018-06-06 04:03:47 -04:00
|
|
|
len2 = @str.bytesize
|
|
|
|
len += len2 - len1
|
|
|
|
end
|
|
|
|
len
|
|
|
|
end
|
|
|
|
mockio
|
|
|
|
end
|
|
|
|
|
2018-12-26 23:49:12 -05:00
|
|
|
def test_write0_multibyte
|
2019-06-29 04:52:57 -04:00
|
|
|
mockio = create_mockio(max: 1)
|
2018-12-26 23:49:12 -05:00
|
|
|
io = Net::BufferedIO.new(mockio)
|
|
|
|
assert_equal(3, io.write("\u3042"))
|
|
|
|
end
|
|
|
|
|
2018-06-06 04:03:47 -04:00
|
|
|
def test_write0_timeout
|
|
|
|
mockio = create_mockio
|
|
|
|
io = Net::BufferedIO.new(mockio)
|
|
|
|
io.write_timeout = 0.1
|
|
|
|
assert_raise(Net::WriteTimeout){ io.write("a"*1000) }
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_write0_success
|
|
|
|
mockio = create_mockio
|
|
|
|
io = Net::BufferedIO.new(mockio)
|
|
|
|
io.write_timeout = 0.1
|
|
|
|
len = io.write("a"*10)
|
|
|
|
assert_equal "a"*10, mockio.string
|
|
|
|
assert_equal 10, len
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_write0_success2
|
|
|
|
mockio = create_mockio
|
|
|
|
io = Net::BufferedIO.new(mockio)
|
|
|
|
io.write_timeout = 0.1
|
|
|
|
len = io.write("a"*100)
|
|
|
|
assert_equal "a"*100, mockio.string
|
|
|
|
assert_equal 100, len
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_write0_success_multi1
|
|
|
|
mockio = create_mockio
|
|
|
|
io = Net::BufferedIO.new(mockio)
|
|
|
|
io.write_timeout = 0.1
|
|
|
|
len = io.write("a"*50, "a"*49)
|
|
|
|
assert_equal "a"*99, mockio.string
|
|
|
|
assert_equal 99, len
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_write0_success_multi2
|
|
|
|
mockio = create_mockio
|
|
|
|
io = Net::BufferedIO.new(mockio)
|
|
|
|
io.write_timeout = 0.1
|
|
|
|
len = io.write("a"*50, "a"*50)
|
|
|
|
assert_equal "a"*100, mockio.string
|
|
|
|
assert_equal 100, len
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_write0_timeout_multi1
|
|
|
|
mockio = create_mockio
|
|
|
|
io = Net::BufferedIO.new(mockio)
|
|
|
|
io.write_timeout = 0.1
|
|
|
|
assert_raise(Net::WriteTimeout){ io.write("a"*50,"a"*51) }
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_write0_timeout_multi2
|
|
|
|
mockio = create_mockio
|
|
|
|
io = Net::BufferedIO.new(mockio)
|
|
|
|
io.write_timeout = 0.1
|
|
|
|
assert_raise(Net::WriteTimeout){ io.write("a"*50,"a"*50,"a") }
|
|
|
|
end
|
2012-11-06 00:30:17 -05:00
|
|
|
end
|