Class: Evilution::Isolation::Fork
- Inherits:
-
Object
- Object
- Evilution::Isolation::Fork
- Defined in:
- lib/evilution/isolation/fork.rb
Constant Summary collapse
- GRACE_PERIOD =
2
Instance Method Summary collapse
- #call(mutation:, test_command:, timeout:) ⇒ Object
-
#initialize(hooks: nil) ⇒ Fork
constructor
A new instance of Fork.
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 |