yahns.git  about / heads / tags
sleepy, multi-threaded, non-blocking application server for Ruby
blob ab9a04f7338eb03b77764cfa51638075a3da99bf 2546 bytes (raw)
$ git show v0.0.0:test/helper.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
 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
 
# Copyright (C) 2013, Eric Wong <normalperson@yhbt.net> and all contributors
# License: GPLv3 or later (https://www.gnu.org/licenses/gpl-3.0.txt)
$stdout.sync = $stderr.sync = Thread.abort_on_exception = true
require 'thread'

# Global Test Lock, to protect:
#   Process.wait*, Dir.chdir, ENV, trap, require, etc...
GTL = Mutex.new

# fork-aware coverage data gatherer, see also test/covshow.rb
if ENV["COVERAGE"]
  require "coverage"
  COVMATCH = %r{/lib/yahns\b.*rb\z}
  COVTMP = File.open("coverage.dump", IO::CREAT|IO::RDWR)
  COVTMP.binmode
  COVTMP.sync = true

  def __covmerge
    res = Coverage.result

    # we own this file (at least until somebody tries to use NFS :x)
    COVTMP.flock(File::LOCK_EX)

    COVTMP.rewind
    prev = COVTMP.read
    prev = prev.empty? ? {} : Marshal.load(prev)
    res.each do |filename, counts|
      # filter out stuff that's not in our project
      COVMATCH =~ filename or next

      merge = prev[filename] || []
      merge = merge
      counts.each_with_index do |count, i|
        count or next
        merge[i] = (merge[i] || 0) + count
      end
      prev[filename] = merge
    end
    COVTMP.rewind
    COVTMP.truncate(0)
    COVTMP.write(Marshal.dump(prev))
    COVTMP.flock(File::LOCK_UN)
  end

  Coverage.start
  at_exit { at_exit { __covmerge } }
end

gem 'minitest'
require 'minitest/autorun'
require "tempfile"

Testcase = begin
  Minitest::Test # minitest 5
rescue NameError
  Minitest::Unit::TestCase # minitest 4
end

FIFOS = []
def tmpfifo
  tmp = Tempfile.new(%w(yahns-test .fifo))
  path = tmp.path
  tmp.close!
  assert system(*%W(mkfifo #{path})), "mkfifo #{path}"

  GTL.synchronize do
    if FIFOS.empty?
      at_exit do
        FIFOS.each { |(pid,_path)| File.unlink(_path) if $$ == pid }
      end
    end
    FIFOS << [ $$, path ]
  end
  path
end

require 'tmpdir'
class Dir
  require 'fileutils'
  def Dir.mktmpdir
    begin
      d = "#{Dir.tmpdir}/#$$.#{rand}"
      Dir.mkdir(d)
    rescue Errno::EEXIST
    end while true
    begin
      yield d
    ensure
      FileUtils.remove_entry(d)
    end
  end
end unless Dir.respond_to?(:mktmpdir)

def tmpfile(*args)
  tmp = Tempfile.new(*args)
  tmp.sync = true
  tmp.binmode
  tmp
end

require 'io/wait'
# needed for Rubinius 2.0.0, we only use IO#nread in tests
class IO
  # this ignores buffers
  def nread
    buf = "\0" * 8
    ioctl(0x541B, buf)
    buf.unpack("l_")[0]
  end
end if ! IO.method_defined?(:nread) && RUBY_PLATFORM =~ /linux/

require 'yahns'

# needed for parallel (MT) tests)
require 'yahns/rack'

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