summaryrefslogtreecommitdiff
path: root/test/openssl/test_buffering.rb
blob: 49335de8d28af0a70eac11cfc824a5ae56b68603 (plain)
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
require_relative 'utils'
require 'stringio'
require 'minitest/unit'

class OpenSSL::TestBuffering < MiniTest::Unit::TestCase

  class IO
    include OpenSSL::Buffering

    attr_accessor :sync

    def initialize
      @io = StringIO.new

      super

      @sync = false
    end

    def string
      @io.string
    end

    def sysread *a
      @io.sysread *a
    end

    def syswrite *a
      @io.syswrite *a
    end
  end

  def setup
    @io = IO.new
  end

  def test_flush
    @io.write 'a'

    refute @io.sync
    assert_empty @io.string

    assert_equal @io, @io.flush

    refute @io.sync
    assert_equal 'a', @io.string
  end

  def test_flush_error
    @io.write 'a'

    refute @io.sync
    assert_empty @io.string

    def @io.syswrite *a
      raise SystemCallError, 'fail'
    end

    assert_raises SystemCallError do
      @io.flush
    end

    refute @io.sync, 'sync must not change'
  end

end if defined?(OpenSSL)