Class: Evilution::Isolation::Fork

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

Constant Summary collapse

GRACE_PERIOD =
2

Instance Method Summary collapse

Constructor Details

#initialize(hooks: nil) ⇒ Fork

Returns a new instance of Fork.



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

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

Instance Method Details

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



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

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