sleepy_penguin.git  about / heads / tags
Linux I/O events for Ruby
blob 7fafef363a99dd51e1aff90e3455aa69b5f6558e 903 bytes (raw)
$ git show pu:test/test_sendfile.rb	# shows this blob on the CLI

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
 
# -*- encoding: binary -*-
require_relative 'helper'
require 'tempfile'
require 'socket'

class TestSendfile < Test::Unit::TestCase
  def test_linux_sendfile
    rd, wr = UNIXSocket.pair
    size = 5
    src = Tempfile.new('ruby_sf_src')
    assert_equal 0, SleepyPenguin.linux_sendfile(wr, src, size)
    str = 'abcde'.freeze
    assert_equal str.bytesize, src.syswrite(str)
    assert_equal 0, SleepyPenguin.linux_sendfile(wr, src, size)
    src.sysseek(0, IO::SEEK_SET)
    assert_equal str.bytesize,
                 SleepyPenguin.linux_sendfile(wr, src, size, offset: 0)
    assert_equal str, rd.read(size)
    assert_equal 0, src.sysseek(0, IO::SEEK_CUR), 'handle offset not changed'
    assert_equal 3, SleepyPenguin.linux_sendfile(wr, src, 3)
    assert_equal 3, src.sysseek(0, IO::SEEK_CUR), 'handle offset changed'
  ensure
    [ rd, wr ].compact.each(&:close)
    src.close! if src
  end
end

git clone https://yhbt.net/sleepy_penguin.git