unicorn Ruby/Rack server user+dev discussion/patches/pulls/bugs/help
 help / color / mirror / code / Atom feed
blob 4a820ea26abf14d36e70bdfa2f48effd5d59b5fc 3796 bytes (raw)

  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
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
 
# -*- encoding: binary -*-

require './test/test_helper'
require 'tempfile'

class TestUtil < Test::Unit::TestCase

  EXPECT_FLAGS = File::WRONLY | File::APPEND
  def test_reopen_logs_noop
    tmp = Tempfile.new('')
    fp = File.open(tmp.path, 'ab')
    fp.sync = true
    ext = fp.external_encoding rescue nil
    int = fp.internal_encoding rescue nil
    before = fp.stat.inspect
    Unicorn::Util.reopen_logs
    assert_equal before, File.stat(fp.path).inspect
    assert_equal ext, (fp.external_encoding rescue nil)
    assert_equal int, (fp.internal_encoding rescue nil)
    assert_equal(EXPECT_FLAGS, EXPECT_FLAGS & fp.fcntl(Fcntl::F_GETFL))
    tmp.close!
    fp.close
  end

  def test_reopen_logs_renamed
    tmp = Tempfile.new('')
    tmp_path = tmp.path.freeze
    fp = File.open(tmp_path, 'ab')
    fp.sync = true

    ext = fp.external_encoding rescue nil
    int = fp.internal_encoding rescue nil
    before = fp.stat.inspect
    to = Tempfile.new('')
    File.rename(tmp_path, to.path)
    assert ! File.exist?(tmp_path)
    Unicorn::Util.reopen_logs
    assert_equal tmp_path, tmp.path
    assert File.exist?(tmp_path)
    assert before != File.stat(tmp_path).inspect
    assert_equal fp.stat.inspect, File.stat(tmp_path).inspect
    assert_equal ext, (fp.external_encoding rescue nil)
    assert_equal int, (fp.internal_encoding rescue nil)
    assert_equal(EXPECT_FLAGS, EXPECT_FLAGS & fp.fcntl(Fcntl::F_GETFL))
    assert fp.sync
    tmp.close!
    to.close!
    fp.close
  end

  def test_reopen_logs_renamed_with_encoding
    tmp = Tempfile.new('')
    tmp_path = tmp.path.dup.freeze
    Encoding.list.each { |encoding|
      File.open(tmp_path, "a:#{encoding.to_s}") { |fp|
        fp.sync = true
        assert_equal encoding, fp.external_encoding
        assert_nil fp.internal_encoding
        File.unlink(tmp_path)
        assert ! File.exist?(tmp_path)
        Unicorn::Util.reopen_logs
        assert_equal tmp_path, fp.path
        assert File.exist?(tmp_path)
        assert_equal fp.stat.inspect, File.stat(tmp_path).inspect
        assert_equal encoding, fp.external_encoding
        assert_nil fp.internal_encoding
        assert_equal(EXPECT_FLAGS, EXPECT_FLAGS & fp.fcntl(Fcntl::F_GETFL))
        assert fp.sync
      }
    }
    tmp.close!
  end

  def test_reopen_logs_renamed_with_internal_encoding
    tmp = Tempfile.new('')
    tmp_path = tmp.path.dup.freeze
    Encoding.list.each { |ext|
      Encoding.list.each { |int|
        next if ext == int
        File.open(tmp_path, "a:#{ext.to_s}:#{int.to_s}") { |fp|
          fp.sync = true
          assert_equal ext, fp.external_encoding

          if ext != Encoding::BINARY
            assert_equal int, fp.internal_encoding
          end

          File.unlink(tmp_path)
          assert ! File.exist?(tmp_path)
          Unicorn::Util.reopen_logs
          assert_equal tmp_path, fp.path
          assert File.exist?(tmp_path)
          assert_equal fp.stat.inspect, File.stat(tmp_path).inspect
          assert_equal ext, fp.external_encoding
          if ext != Encoding::BINARY
            assert_equal int, fp.internal_encoding
          end
          assert_equal(EXPECT_FLAGS, EXPECT_FLAGS & fp.fcntl(Fcntl::F_GETFL))
          assert fp.sync
        }
      }
    }
    tmp.close!
  end

  def test_pipe
    r, w = Unicorn.pipe
    assert r
    assert w

    return if RUBY_PLATFORM !~ /linux/

    begin
      f_getpipe_sz = 1032
      IO.pipe do |a, b|
        a_sz = a.fcntl(f_getpipe_sz)
        b.fcntl(f_getpipe_sz)
        assert_kind_of Integer, a_sz
        r_sz = r.fcntl(f_getpipe_sz)
        assert_equal Raindrops::PAGE_SIZE, r_sz
        assert_operator a_sz, :>=, r_sz
      end
    rescue Errno::EINVAL
      # Linux <= 2.6.34
    end
  ensure
    w.close
    r.close
  end
end

debug log:

solving 4a820ea ...
found 4a820ea in https://yhbt.net/unicorn.git

Code repositories for project(s) associated with this public inbox

	https://yhbt.net/unicorn.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).