Class: CC::Analyzer::RaisingContainerListener

Inherits:
ContainerListener show all
Defined in:
lib/cc/analyzer/raising_container_listener.rb

Instance Method Summary collapse

Methods inherited from ContainerListener

#started

Constructor Details

#initialize(failure_ex, timeout_ex = nil, maximum_output_ex = nil) ⇒ RaisingContainerListener

Returns a new instance of RaisingContainerListener.



4
5
6
7
8
# File 'lib/cc/analyzer/raising_container_listener.rb', line 4

def initialize(failure_ex, timeout_ex = nil, maximum_output_ex = nil)
  @failure_ex = failure_ex
  @timeout_ex = timeout_ex || failure_ex
  @maximum_output_ex = maximum_output_ex || failure_ex
end

Instance Method Details

#finished(engine, _details, result) ⇒ Object



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/cc/analyzer/raising_container_listener.rb', line 10

def finished(engine, _details, result)
  if result.timed_out?
    message = "engine #{engine.name} ran for #{result.duration / 1000}"
    message << " seconds and was killed"
    raise timeout_ex.new(message, engine.name)
  elsif result.maximum_output_exceeded?
    message = "engine #{engine.name} produced too much output"
    message << " (#{result.output_byte_count} bytes)"
    raise maximum_output_ex.new(message, engine.name)
  elsif result.exit_status.nonzero?
    message = "engine #{engine.name} failed"
    message << " with status #{result.exit_status}"
    message << " and stderr \n#{result.stderr}"
    raise failure_ex.new(message, engine.name)
  end
end