Class: Evilution::Isolation::Fork

Inherits:
Object
  • Object
show all
Defined in:
lib/evilution/isolation/fork.rb

Constant Summary collapse

GRACE_PERIOD =
2
REAP_DEADLINE =
1.0

Instance Method Summary collapse

Constructor Details

#initialize(hooks: nil) ⇒ Fork

Returns a new instance of Fork.



16
17
18
# File 'lib/evilution/isolation/fork.rb', line 16

def initialize(hooks: nil)
  @hooks = hooks
end

Instance Method Details

#call(mutation:, test_command:, timeout:) ⇒ Object



20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/evilution/isolation/fork.rb', line 20

def call(mutation:, test_command:, timeout:)
  pid = nil
  sandbox_dir = Dir.mktmpdir("evilution-run")
  start_time = Process.clock_gettime(Process::CLOCK_MONOTONIC)
  parent_rss = Evilution::Memory.rss_kb
  read_io, write_io = binary_pipe
  pid = fork_child(read_io, write_io, sandbox_dir, mutation, test_command)
  write_io.close
  result = wait_for_result(pid, read_io, timeout)
  duration = Process.clock_gettime(Process::CLOCK_MONOTONIC) - start_time
  build_mutation_result(mutation, result, duration, parent_rss)
ensure
  cleanup_resources(read_io, write_io, pid, sandbox_dir)
end