Class: Hydra::Runner
- Inherits:
-
Object
- Object
- Hydra::Runner
- Includes:
- Messages::Runner
- Defined in:
- lib/hydra/runner.rb
Overview
Hydra class responsible for running test files.
The Runner is never run directly by a user. Runners are created by a Worker to run test files.
The general convention is to have one Runner for each logical processor of a machine.
Constant Summary collapse
- DEFAULT_LOG_FILE =
'hydra-runner.log'
Instance Method Summary collapse
- #format_exception(ex) ⇒ Object
-
#initialize(opts = {}) ⇒ Runner
constructor
Boot up a runner.
- #reg_trap_sighup ⇒ Object
-
#run_file(file) ⇒ Object
Run a test file and report the results.
- #runner_begin ⇒ Object
- #runner_end ⇒ Object
-
#stop ⇒ Object
Stop running.
Constructor Details
#initialize(opts = {}) ⇒ Runner
Boot up a runner. It takes an IO object (generally a pipe from its parent) to send it messages on which files to execute.
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/hydra/runner.rb', line 21 def initialize(opts = {}) redirect_output( opts.fetch( :runner_log_file ) { DEFAULT_LOG_FILE } ) reg_trap_sighup @io = opts.fetch(:io) { raise "No IO Object" } @verbose = opts.fetch(:verbose) { false } @event_listeners = Array( opts.fetch( :runner_listeners ) { nil } ) @options = opts.fetch(:options) { "" } @directory = get_directory $stdout.sync = true runner_begin trace 'Booted. Sending Request for file' @io.write RequestFile.new begin rescue => ex trace ex.to_s raise ex end end |
Instance Method Details
#format_exception(ex) ⇒ Object
90 91 92 |
# File 'lib/hydra/runner.rb', line 90 def format_exception(ex) "#{ex.class.name}: #{ex.}\n #{ex.backtrace.join("\n ")}" end |
#reg_trap_sighup ⇒ Object
44 45 46 47 48 49 50 51 |
# File 'lib/hydra/runner.rb', line 44 def reg_trap_sighup for sign in [:SIGHUP, :INT] trap sign do stop end end @runner_began = true end |
#run_file(file) ⇒ Object
Run a test file and report the results
59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
# File 'lib/hydra/runner.rb', line 59 def run_file(file) trace "Running file: #{file}" output = "" if file =~ /_spec.rb$/i output = run_rspec_file(file) elsif file =~ /.feature$/i output = run_cucumber_file(file) elsif file =~ /.js$/i or file =~ /.json$/i output = run_javascript_file(file) else output = run_test_unit_file(file) end output = "." if output == "" @io.write Results.new(:output => output, :file => file) return output end |
#runner_begin ⇒ Object
53 54 55 56 |
# File 'lib/hydra/runner.rb', line 53 def runner_begin trace "Firing runner_begin event" @event_listeners.each {|l| l.runner_begin( self ) } end |
#runner_end ⇒ Object
85 86 87 88 |
# File 'lib/hydra/runner.rb', line 85 def runner_end trace "Ending runner #{self.inspect}" @event_listeners.each {|l| l.runner_end( self ) } end |
#stop ⇒ Object
Stop running
80 81 82 83 |
# File 'lib/hydra/runner.rb', line 80 def stop runner_end if @runner_began @runner_began = @running = false end |