aruba 0.10.2 → 0.11.0.pre
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
 - data/.travis.yml +6 -5
 - data/Gemfile +0 -4
 - data/History.md +17 -1
 - data/features/api/command/run.feature +101 -1
 - data/features/api/command/send_signal.feature +53 -0
 - data/features/api/command/stop.feature +79 -0
 - data/features/api/text/replace_variables.feature +45 -0
 - data/features/configuration/startup_wait_time.feature +48 -0
 - data/features/step_definitions/hooks.rb +85 -6
 - data/features/steps/{commands → command}/exit_statuses.feature +0 -0
 - data/features/steps/{commands → command}/in_process.feature +174 -0
 - data/features/steps/{commands → command}/run.feature +1 -0
 - data/features/steps/command/send_signal.feature +104 -0
 - data/features/steps/command/stop.feature +313 -0
 - data/features/steps/overview.feature +60 -0
 - data/lib/aruba/announcer.rb +2 -0
 - data/lib/aruba/api/command.rb +24 -9
 - data/lib/aruba/api/text.rb +9 -0
 - data/lib/aruba/command.rb +4 -1
 - data/lib/aruba/config.rb +2 -0
 - data/lib/aruba/cucumber/command.rb +75 -0
 - data/lib/aruba/cucumber/core.rb +0 -24
 - data/lib/aruba/cucumber/hooks.rb +10 -0
 - data/lib/aruba/errors.rb +3 -0
 - data/lib/aruba/matchers/command/have_output.rb +1 -1
 - data/lib/aruba/process_monitor.rb +25 -1
 - data/lib/aruba/processes/basic_process.rb +22 -2
 - data/lib/aruba/processes/debug_process.rb +7 -1
 - data/lib/aruba/processes/in_process.rb +15 -1
 - data/lib/aruba/processes/null_process.rb +26 -0
 - data/lib/aruba/processes/spawn_process.rb +81 -48
 - data/lib/aruba/rspec.rb +6 -0
 - data/lib/aruba/version.rb +1 -1
 - metadata +26 -11
 
| 
         @@ -0,0 +1,60 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            Feature: Overview of steps
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
              Given you're a system administrator
         
     | 
| 
      
 4 
     | 
    
         
            +
              Who would like to use `aruba`
         
     | 
| 
      
 5 
     | 
    
         
            +
              But didn't know which steps are available
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
              Background:
         
     | 
| 
      
 8 
     | 
    
         
            +
                Given I use a fixture named "cli-app"
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
              Scenario: Use information found in repository
         
     | 
| 
      
 11 
     | 
    
         
            +
                Given an executable named "bin/cli" with:
         
     | 
| 
      
 12 
     | 
    
         
            +
                """
         
     | 
| 
      
 13 
     | 
    
         
            +
                #!/bin/bash
         
     | 
| 
      
 14 
     | 
    
         
            +
                git clone https://github.com/cucumber/aruba.git
         
     | 
| 
      
 15 
     | 
    
         
            +
                cd aruba
         
     | 
| 
      
 16 
     | 
    
         
            +
                grep -E "When|Given|Then" lib/aruba/cucumber/*.rb | awk -F ":" '{ $1 = ""; print $0}' |sort
         
     | 
| 
      
 17 
     | 
    
         
            +
                """
         
     | 
| 
      
 18 
     | 
    
         
            +
                And a file named "features/run.feature" with:
         
     | 
| 
      
 19 
     | 
    
         
            +
                """
         
     | 
| 
      
 20 
     | 
    
         
            +
                Feature: Run it
         
     | 
| 
      
 21 
     | 
    
         
            +
                  Scenario: Run command
         
     | 
| 
      
 22 
     | 
    
         
            +
                    When I run `cli`
         
     | 
| 
      
 23 
     | 
    
         
            +
                    Then the output should contain:
         
     | 
| 
      
 24 
     | 
    
         
            +
                    \"\"\"
         
     | 
| 
      
 25 
     | 
    
         
            +
                    Cloning into 'aruba'...
         
     | 
| 
      
 26 
     | 
    
         
            +
                    \"\"\"
         
     | 
| 
      
 27 
     | 
    
         
            +
                    And the output should contain:
         
     | 
| 
      
 28 
     | 
    
         
            +
                    \"\"\"
         
     | 
| 
      
 29 
     | 
    
         
            +
                    Given(/^
         
     | 
| 
      
 30 
     | 
    
         
            +
                    \"\"\"
         
     | 
| 
      
 31 
     | 
    
         
            +
                    And the output should contain:
         
     | 
| 
      
 32 
     | 
    
         
            +
                    \"\"\"
         
     | 
| 
      
 33 
     | 
    
         
            +
                    When(/^
         
     | 
| 
      
 34 
     | 
    
         
            +
                    \"\"\"
         
     | 
| 
      
 35 
     | 
    
         
            +
                    And the output should contain:
         
     | 
| 
      
 36 
     | 
    
         
            +
                    \"\"\"
         
     | 
| 
      
 37 
     | 
    
         
            +
                    Then(/^
         
     | 
| 
      
 38 
     | 
    
         
            +
                    \"\"\"
         
     | 
| 
      
 39 
     | 
    
         
            +
                """
         
     | 
| 
      
 40 
     | 
    
         
            +
                When I run `cucumber`
         
     | 
| 
      
 41 
     | 
    
         
            +
                Then the features should all pass
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
              Scenario: Use cucumber output formatter
         
     | 
| 
      
 44 
     | 
    
         
            +
                Given a file named "features/run.feature" with:
         
     | 
| 
      
 45 
     | 
    
         
            +
                """
         
     | 
| 
      
 46 
     | 
    
         
            +
                Feature: Run it
         
     | 
| 
      
 47 
     | 
    
         
            +
                  Scenario: Run command
         
     | 
| 
      
 48 
     | 
    
         
            +
                    Given a directory named "features"
         
     | 
| 
      
 49 
     | 
    
         
            +
                    And a file named "features/support/env.rb" with:
         
     | 
| 
      
 50 
     | 
    
         
            +
                    \"\"\"
         
     | 
| 
      
 51 
     | 
    
         
            +
                    require 'aruba/cucumber'
         
     | 
| 
      
 52 
     | 
    
         
            +
                    \"\"\"
         
     | 
| 
      
 53 
     | 
    
         
            +
                    When I run `cucumber --format stepdefs`
         
     | 
| 
      
 54 
     | 
    
         
            +
                    Then the output should contain:
         
     | 
| 
      
 55 
     | 
    
         
            +
                    \"\"\"
         
     | 
| 
      
 56 
     | 
    
         
            +
                    NOT MATCHED BY ANY STEPS
         
     | 
| 
      
 57 
     | 
    
         
            +
                    \"\"\"
         
     | 
| 
      
 58 
     | 
    
         
            +
                """
         
     | 
| 
      
 59 
     | 
    
         
            +
                When I run `cucumber`
         
     | 
| 
      
 60 
     | 
    
         
            +
                Then the features should all pass
         
     | 
    
        data/lib/aruba/announcer.rb
    CHANGED
    
    | 
         @@ -84,6 +84,8 @@ module Aruba 
     | 
|
| 
       84 
84 
     | 
    
         
             
                  output_format :modified_environment, proc { |n, v| format('$ export %s=%s', n, Shellwords.escape(v)) }
         
     | 
| 
       85 
85 
     | 
    
         
             
                  output_format :full_environment, proc { |h| Aruba.platform.simple_table(h) }
         
     | 
| 
       86 
86 
     | 
    
         
             
                  output_format :timeout, '# %s-timeout: %s seconds'
         
     | 
| 
      
 87 
     | 
    
         
            +
                  output_format :wait_time, '# %s: %s seconds'
         
     | 
| 
      
 88 
     | 
    
         
            +
                  output_format :stop_signal, proc { |p, s| format('Command will be stopped with `kill -%s %s`', s, p) }
         
     | 
| 
       87 
89 
     | 
    
         
             
                  output_format :stderr, "<<-STDERR\n%s\nSTDERR"
         
     | 
| 
       88 
90 
     | 
    
         
             
                  output_format :stdout, "<<-STDOUT\n%s\nSTDOUT"
         
     | 
| 
       89 
91 
     | 
    
         | 
    
        data/lib/aruba/api/command.rb
    CHANGED
    
    | 
         @@ -122,22 +122,37 @@ module Aruba 
     | 
|
| 
       122 
122 
     | 
    
         
             
                  # @param [Integer] timeout
         
     | 
| 
       123 
123 
     | 
    
         
             
                  #   If the timeout is reached the command will be killed
         
     | 
| 
       124 
124 
     | 
    
         
             
                  #
         
     | 
| 
      
 125 
     | 
    
         
            +
                  # @param [String] stop_signal
         
     | 
| 
      
 126 
     | 
    
         
            +
                  #   Use signal to stop command (Private)
         
     | 
| 
      
 127 
     | 
    
         
            +
                  #
         
     | 
| 
       125 
128 
     | 
    
         
             
                  # @yield [SpawnProcess]
         
     | 
| 
       126 
129 
     | 
    
         
             
                  #   Run block with process
         
     | 
| 
       127 
130 
     | 
    
         
             
                  #
         
     | 
| 
       128 
131 
     | 
    
         
             
                  # rubocop:disable Metrics/MethodLength
         
     | 
| 
       129 
     | 
    
         
            -
                   
     | 
| 
      
 132 
     | 
    
         
            +
                  # rubocop:disable Metrics/CyclomaticComplexity
         
     | 
| 
      
 133 
     | 
    
         
            +
                  def run(cmd, exit_timeout = nil, io_wait_timeout = nil, stop_signal = nil, startup_wait_time = nil)
         
     | 
| 
       130 
134 
     | 
    
         
             
                    exit_timeout ||= aruba.config.exit_timeout
         
     | 
| 
       131 
135 
     | 
    
         
             
                    io_wait_timeout ||= aruba.config.io_wait_timeout
         
     | 
| 
      
 136 
     | 
    
         
            +
                    stop_signal ||= aruba.config.stop_signal
         
     | 
| 
      
 137 
     | 
    
         
            +
                    startup_wait_time ||= aruba.config.startup_wait_time
         
     | 
| 
      
 138 
     | 
    
         
            +
             
     | 
| 
      
 139 
     | 
    
         
            +
                    cmd = replace_variables(cmd)
         
     | 
| 
       132 
140 
     | 
    
         | 
| 
       133 
141 
     | 
    
         
             
                    @commands ||= []
         
     | 
| 
       134 
142 
     | 
    
         
             
                    @commands << cmd
         
     | 
| 
       135 
143 
     | 
    
         | 
| 
      
 144 
     | 
    
         
            +
                    environment       = aruba.environment.to_h
         
     | 
| 
      
 145 
     | 
    
         
            +
                    working_directory = expand_path('.')
         
     | 
| 
      
 146 
     | 
    
         
            +
             
     | 
| 
      
 147 
     | 
    
         
            +
                    announcer.announce(:full_environment, environment)
         
     | 
| 
      
 148 
     | 
    
         
            +
                    announcer.announce(:timeout, 'exit', exit_timeout)
         
     | 
| 
      
 149 
     | 
    
         
            +
                    announcer.announce(:timeout, 'io wait', io_wait_timeout)
         
     | 
| 
      
 150 
     | 
    
         
            +
                    announcer.announce(:wait_time, 'startup wait time', startup_wait_time)
         
     | 
| 
      
 151 
     | 
    
         
            +
             
     | 
| 
      
 152 
     | 
    
         
            +
                    announcer.announce(:directory, working_directory)
         
     | 
| 
       136 
153 
     | 
    
         
             
                    announcer.announce(:command, cmd)
         
     | 
| 
       137 
154 
     | 
    
         | 
| 
       138 
155 
     | 
    
         
             
                    cmd               = Aruba.platform.detect_ruby(cmd)
         
     | 
| 
       139 
     | 
    
         
            -
                    environment       = aruba.environment.to_h
         
     | 
| 
       140 
     | 
    
         
            -
                    working_directory = expand_path('.')
         
     | 
| 
       141 
156 
     | 
    
         | 
| 
       142 
157 
     | 
    
         
             
                    mode = if Aruba.process
         
     | 
| 
       143 
158 
     | 
    
         
             
                             # rubocop:disable Metrics/LineLength
         
     | 
| 
         @@ -157,11 +172,6 @@ module Aruba 
     | 
|
| 
       157 
172 
     | 
    
         
             
                                   aruba.config.main_class
         
     | 
| 
       158 
173 
     | 
    
         
             
                                 end
         
     | 
| 
       159 
174 
     | 
    
         | 
| 
       160 
     | 
    
         
            -
                    announcer.announce(:directory, working_directory)
         
     | 
| 
       161 
     | 
    
         
            -
                    announcer.announce(:timeout, 'exit', exit_timeout)
         
     | 
| 
       162 
     | 
    
         
            -
                    announcer.announce(:timeout, 'io wait', io_wait_timeout)
         
     | 
| 
       163 
     | 
    
         
            -
                    announcer.announce(:full_environment, environment)
         
     | 
| 
       164 
     | 
    
         
            -
             
     | 
| 
       165 
175 
     | 
    
         
             
                    command = Command.new(
         
     | 
| 
       166 
176 
     | 
    
         
             
                      cmd,
         
     | 
| 
       167 
177 
     | 
    
         
             
                      :mode              => mode,
         
     | 
| 
         @@ -169,7 +179,9 @@ module Aruba 
     | 
|
| 
       169 
179 
     | 
    
         
             
                      :io_wait_timeout   => io_wait_timeout,
         
     | 
| 
       170 
180 
     | 
    
         
             
                      :working_directory => working_directory,
         
     | 
| 
       171 
181 
     | 
    
         
             
                      :environment       => environment,
         
     | 
| 
       172 
     | 
    
         
            -
                      :main_class        => main_class
         
     | 
| 
      
 182 
     | 
    
         
            +
                      :main_class        => main_class,
         
     | 
| 
      
 183 
     | 
    
         
            +
                      :stop_signal       => stop_signal,
         
     | 
| 
      
 184 
     | 
    
         
            +
                      :startup_wait_time => startup_wait_time
         
     | 
| 
       173 
185 
     | 
    
         
             
                    )
         
     | 
| 
       174 
186 
     | 
    
         | 
| 
       175 
187 
     | 
    
         
             
                    if aruba.config.before? :cmd
         
     | 
| 
         @@ -184,10 +196,13 @@ module Aruba 
     | 
|
| 
       184 
196 
     | 
    
         
             
                    process_monitor.register_process(cmd, command)
         
     | 
| 
       185 
197 
     | 
    
         
             
                    command.start
         
     | 
| 
       186 
198 
     | 
    
         | 
| 
      
 199 
     | 
    
         
            +
                    announcer.announce(:stop_signal, command.pid, stop_signal) if stop_signal
         
     | 
| 
      
 200 
     | 
    
         
            +
             
     | 
| 
       187 
201 
     | 
    
         
             
                    aruba.config.after(:command, self, command)
         
     | 
| 
       188 
202 
     | 
    
         | 
| 
       189 
203 
     | 
    
         
             
                    block_given? ? yield(command) : command
         
     | 
| 
       190 
204 
     | 
    
         
             
                  end
         
     | 
| 
      
 205 
     | 
    
         
            +
                  # rubocop:enable Metrics/CyclomaticComplexity
         
     | 
| 
       191 
206 
     | 
    
         
             
                  # rubocop:enable Metrics/MethodLength
         
     | 
| 
       192 
207 
     | 
    
         | 
| 
       193 
208 
     | 
    
         
             
                  # Run a command with aruba
         
     | 
    
        data/lib/aruba/api/text.rb
    CHANGED
    
    | 
         @@ -36,6 +36,15 @@ module Aruba 
     | 
|
| 
       36 
36 
     | 
    
         | 
| 
       37 
37 
     | 
    
         
             
                    text.chomp
         
     | 
| 
       38 
38 
     | 
    
         
             
                  end
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
                  # @experimental
         
     | 
| 
      
 41 
     | 
    
         
            +
                  #
         
     | 
| 
      
 42 
     | 
    
         
            +
                  # Replace variables in command string
         
     | 
| 
      
 43 
     | 
    
         
            +
                  def replace_variables(text)
         
     | 
| 
      
 44 
     | 
    
         
            +
                    text = text.gsub(/<pid-last-command-started>/, last_command_started.pid.to_s)
         
     | 
| 
      
 45 
     | 
    
         
            +
             
     | 
| 
      
 46 
     | 
    
         
            +
                    text
         
     | 
| 
      
 47 
     | 
    
         
            +
                  end
         
     | 
| 
       39 
48 
     | 
    
         
             
                end
         
     | 
| 
       40 
49 
     | 
    
         
             
              end
         
     | 
| 
       41 
50 
     | 
    
         
             
            end
         
     | 
    
        data/lib/aruba/command.rb
    CHANGED
    
    | 
         @@ -8,6 +8,7 @@ module Aruba 
     | 
|
| 
       8 
8 
     | 
    
         
             
                  launchers = []
         
     | 
| 
       9 
9 
     | 
    
         
             
                  launchers << Processes::DebugProcess
         
     | 
| 
       10 
10 
     | 
    
         
             
                  launchers << Processes::InProcess
         
     | 
| 
      
 11 
     | 
    
         
            +
                  launchers << Processes::NullProcess
         
     | 
| 
       11 
12 
     | 
    
         
             
                  launchers << Processes::SpawnProcess
         
     | 
| 
       12 
13 
     | 
    
         | 
| 
       13 
14 
     | 
    
         
             
                  launcher = launchers.find { |l| l.match? opts[:mode] }
         
     | 
| 
         @@ -18,7 +19,9 @@ module Aruba 
     | 
|
| 
       18 
19 
     | 
    
         
             
                    opts.fetch(:io_wait_timeout),
         
     | 
| 
       19 
20 
     | 
    
         
             
                    opts.fetch(:working_directory),
         
     | 
| 
       20 
21 
     | 
    
         
             
                    opts.fetch(:environment),
         
     | 
| 
       21 
     | 
    
         
            -
                    opts.fetch(:main_class)
         
     | 
| 
      
 22 
     | 
    
         
            +
                    opts.fetch(:main_class),
         
     | 
| 
      
 23 
     | 
    
         
            +
                    opts.fetch(:stop_signal),
         
     | 
| 
      
 24 
     | 
    
         
            +
                    opts.fetch(:startup_wait_time)
         
     | 
| 
       22 
25 
     | 
    
         
             
                  )
         
     | 
| 
       23 
26 
     | 
    
         
             
                rescue KeyError => e
         
     | 
| 
       24 
27 
     | 
    
         
             
                  raise ArgumentError, e.message
         
     | 
    
        data/lib/aruba/config.rb
    CHANGED
    
    | 
         @@ -29,7 +29,9 @@ module Aruba 
     | 
|
| 
       29 
29 
     | 
    
         
             
                end
         
     | 
| 
       30 
30 
     | 
    
         | 
| 
       31 
31 
     | 
    
         
             
                option_accessor :exit_timeout, :contract => { Num => Num }, :default => 15
         
     | 
| 
      
 32 
     | 
    
         
            +
                option_accessor :stop_signal, :contract => { Maybe[String] => Maybe[String] }, :default => nil
         
     | 
| 
       32 
33 
     | 
    
         
             
                option_accessor :io_wait_timeout, :contract => { Num => Num }, :default => 0.1
         
     | 
| 
      
 34 
     | 
    
         
            +
                option_accessor :startup_wait_time, :contract => { Num => Num }, :default => 0
         
     | 
| 
       33 
35 
     | 
    
         
             
                option_accessor :fixtures_directories, :contract => { Array => ArrayOf[String] }, :default => %w(features/fixtures spec/fixtures test/fixtures fixtures)
         
     | 
| 
       34 
36 
     | 
    
         
             
                option_accessor :command_runtime_environment, :contract => { Hash => Hash }, :default => ENV.to_hash.dup
         
     | 
| 
       35 
37 
     | 
    
         
             
                # rubocop:disable Metrics/LineLength
         
     | 
| 
         @@ -1,3 +1,7 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            if Aruba::VERSION < '1.0.0'
         
     | 
| 
      
 2 
     | 
    
         
            +
              require 'aruba/cucumber/core'
         
     | 
| 
      
 3 
     | 
    
         
            +
            end
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
       1 
5 
     | 
    
         
             
            When(/^I run "(.*)"$/)do |cmd|
         
     | 
| 
       2 
6 
     | 
    
         
             
              warn(%{\e[35m    The /^I run "(.*)"$/ step definition is deprecated. Please use the `backticks` version\e[0m})
         
     | 
| 
       3 
7 
     | 
    
         | 
| 
         @@ -35,6 +39,11 @@ When(/^I run `([^`]*)` interactively$/)do |cmd| 
     | 
|
| 
       35 
39 
     | 
    
         
             
              @interactive = run(cmd)
         
     | 
| 
       36 
40 
     | 
    
         
             
            end
         
     | 
| 
       37 
41 
     | 
    
         | 
| 
      
 42 
     | 
    
         
            +
            # Merge interactive and background after refactoring with event queue
         
     | 
| 
      
 43 
     | 
    
         
            +
            When(/^I run `([^`]*)` in background$/)do |cmd|
         
     | 
| 
      
 44 
     | 
    
         
            +
              run(sanitize_text(cmd))
         
     | 
| 
      
 45 
     | 
    
         
            +
            end
         
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
       38 
47 
     | 
    
         
             
            When(/^I type "([^"]*)"$/) do |input|
         
     | 
| 
       39 
48 
     | 
    
         
             
              type(unescape_text(input))
         
     | 
| 
       40 
49 
     | 
    
         
             
            end
         
     | 
| 
         @@ -49,6 +58,29 @@ When(/^I pipe in (?:a|the) file(?: named)? "([^"]*)"$/) do |file| 
     | 
|
| 
       49 
58 
     | 
    
         
             
              close_input
         
     | 
| 
       50 
59 
     | 
    
         
             
            end
         
     | 
| 
       51 
60 
     | 
    
         | 
| 
      
 61 
     | 
    
         
            +
            When(/^I (terminate|stop) the command (?:"([^"]*)"|(?:started last))$/) do |signal, command|
         
     | 
| 
      
 62 
     | 
    
         
            +
              if command
         
     | 
| 
      
 63 
     | 
    
         
            +
                cmd = all_commands.find { |c| c.commandline == command }
         
     | 
| 
      
 64 
     | 
    
         
            +
                fail ArgumentError, %(No command "#{command}" found) if cmd.nil?
         
     | 
| 
      
 65 
     | 
    
         
            +
             
     | 
| 
      
 66 
     | 
    
         
            +
                if signal == 'terminate'
         
     | 
| 
      
 67 
     | 
    
         
            +
                  # last_command_started.terminate
         
     | 
| 
      
 68 
     | 
    
         
            +
                  process_monitor.terminate_process!(process_monitor.get_process(command))
         
     | 
| 
      
 69 
     | 
    
         
            +
                else
         
     | 
| 
      
 70 
     | 
    
         
            +
                  # last_command_started.stop
         
     | 
| 
      
 71 
     | 
    
         
            +
                  process_monitor.stop_process(process_monitor.get_process(command))
         
     | 
| 
      
 72 
     | 
    
         
            +
                end
         
     | 
| 
      
 73 
     | 
    
         
            +
              else
         
     | 
| 
      
 74 
     | 
    
         
            +
                if signal == 'terminate'
         
     | 
| 
      
 75 
     | 
    
         
            +
                  # last_command_started.terminate
         
     | 
| 
      
 76 
     | 
    
         
            +
                  process_monitor.terminate_process!(last_command_started)
         
     | 
| 
      
 77 
     | 
    
         
            +
                else
         
     | 
| 
      
 78 
     | 
    
         
            +
                  # last_command_started.stop
         
     | 
| 
      
 79 
     | 
    
         
            +
                  process_monitor.stop_process(last_command_started)
         
     | 
| 
      
 80 
     | 
    
         
            +
                end
         
     | 
| 
      
 81 
     | 
    
         
            +
              end
         
     | 
| 
      
 82 
     | 
    
         
            +
            end
         
     | 
| 
      
 83 
     | 
    
         
            +
             
     | 
| 
       52 
84 
     | 
    
         
             
            When(/^I stop the command(?: started last)? if (output|stdout|stderr) contains:$/) do |channel, expected|
         
     | 
| 
       53 
85 
     | 
    
         
             
              fail %(Invalid output channel "#{channel}" chosen. Please choose one of "output, stdout or stderr") unless %w(output stdout stderr).include? channel
         
     | 
| 
       54 
86 
     | 
    
         | 
| 
         @@ -332,3 +364,46 @@ Then(/^(?:the )?(output|stdout|stderr) should( not)? contain all of these lines: 
     | 
|
| 
       332 
364 
     | 
    
         
             
                end
         
     | 
| 
       333 
365 
     | 
    
         
             
              end
         
     | 
| 
       334 
366 
     | 
    
         
             
            end
         
     | 
| 
      
 367 
     | 
    
         
            +
             
     | 
| 
      
 368 
     | 
    
         
            +
            Given(/the default aruba timeout is (\d+) seconds/) do |seconds|
         
     | 
| 
      
 369 
     | 
    
         
            +
              # rubocop:disable Metrics/LineLength
         
     | 
| 
      
 370 
     | 
    
         
            +
              Aruba.platform.deprecated(%{The /^the default aruba timeout is (\d+) seconds/ step definition is deprecated. Please use /^the default aruba exit timeout is (\d+) seconds/ step definition is deprecated.})
         
     | 
| 
      
 371 
     | 
    
         
            +
              # rubocop:enable Metrics/LineLength
         
     | 
| 
      
 372 
     | 
    
         
            +
             
     | 
| 
      
 373 
     | 
    
         
            +
              aruba.config.exit_timeout = seconds.to_i
         
     | 
| 
      
 374 
     | 
    
         
            +
            end
         
     | 
| 
      
 375 
     | 
    
         
            +
             
     | 
| 
      
 376 
     | 
    
         
            +
            Given(/The default aruba timeout is (\d+) seconds/) do |seconds|
         
     | 
| 
      
 377 
     | 
    
         
            +
              # rubocop:disable Metrics/LineLength
         
     | 
| 
      
 378 
     | 
    
         
            +
              Aruba.platform.deprecated(%{The /^The default aruba timeout is (\d+) seconds/ step definition is deprecated. Please use /^the default aruba exit timeout is (\d+) seconds/ step definition is deprecated.})
         
     | 
| 
      
 379 
     | 
    
         
            +
              # rubocop:enable Metrics/LineLength
         
     | 
| 
      
 380 
     | 
    
         
            +
             
     | 
| 
      
 381 
     | 
    
         
            +
              aruba.config.exit_timeout = seconds.to_i
         
     | 
| 
      
 382 
     | 
    
         
            +
            end
         
     | 
| 
      
 383 
     | 
    
         
            +
             
     | 
| 
      
 384 
     | 
    
         
            +
            Given(/^the (?:default )?aruba io wait timeout is (\d+) seconds?$/) do |seconds|
         
     | 
| 
      
 385 
     | 
    
         
            +
              aruba.config.io_wait_timeout = seconds.to_i
         
     | 
| 
      
 386 
     | 
    
         
            +
            end
         
     | 
| 
      
 387 
     | 
    
         
            +
             
     | 
| 
      
 388 
     | 
    
         
            +
            Given(/^the (?:default )?aruba exit timeout is (\d+) seconds?$/) do |seconds|
         
     | 
| 
      
 389 
     | 
    
         
            +
              aruba.config.exit_timeout = seconds.to_i
         
     | 
| 
      
 390 
     | 
    
         
            +
            end
         
     | 
| 
      
 391 
     | 
    
         
            +
             
     | 
| 
      
 392 
     | 
    
         
            +
            Given(/^the (?:default )?aruba stop signal is "([^"]*)"$/) do |signal|
         
     | 
| 
      
 393 
     | 
    
         
            +
              aruba.config.stop_signal = signal
         
     | 
| 
      
 394 
     | 
    
         
            +
            end
         
     | 
| 
      
 395 
     | 
    
         
            +
             
     | 
| 
      
 396 
     | 
    
         
            +
            Given(/^I wait (\d+) seconds? for (?:a|the) command to start up$/) do |seconds|
         
     | 
| 
      
 397 
     | 
    
         
            +
              aruba.config.startup_wait_time = seconds.to_i
         
     | 
| 
      
 398 
     | 
    
         
            +
            end
         
     | 
| 
      
 399 
     | 
    
         
            +
             
     | 
| 
      
 400 
     | 
    
         
            +
            When(/^I send the signal "([^"]*)" to the command (?:"([^"]*)"|(?:started last))$/) do |signal, command|
         
     | 
| 
      
 401 
     | 
    
         
            +
              if command
         
     | 
| 
      
 402 
     | 
    
         
            +
                cmd = all_commands.find { |c| c.commandline == command }
         
     | 
| 
      
 403 
     | 
    
         
            +
                fail ArgumentError, %(No command "#{command}" found) if cmd.nil?
         
     | 
| 
      
 404 
     | 
    
         
            +
             
     | 
| 
      
 405 
     | 
    
         
            +
                cmd.send_signal signal
         
     | 
| 
      
 406 
     | 
    
         
            +
              else
         
     | 
| 
      
 407 
     | 
    
         
            +
                last_command_started.send_signal signal
         
     | 
| 
      
 408 
     | 
    
         
            +
              end
         
     | 
| 
      
 409 
     | 
    
         
            +
            end
         
     | 
    
        data/lib/aruba/cucumber/core.rb
    CHANGED
    
    | 
         @@ -3,27 +3,3 @@ if Aruba::VERSION >= '1.0.0' 
     | 
|
| 
       3 
3 
     | 
    
         
             
                config.working_directory = 'tmp/cucumber'
         
     | 
| 
       4 
4 
     | 
    
         
             
              end
         
     | 
| 
       5 
5 
     | 
    
         
             
            end
         
     | 
| 
       6 
     | 
    
         
            -
             
     | 
| 
       7 
     | 
    
         
            -
            Given(/the default aruba timeout is (\d+) seconds/) do |seconds|
         
     | 
| 
       8 
     | 
    
         
            -
              # rubocop:disable Metrics/LineLength
         
     | 
| 
       9 
     | 
    
         
            -
              Aruba.platform.deprecated(%{The /^the default aruba timeout is (\d+) seconds/ step definition is deprecated. Please use /^the default aruba exit timeout is (\d+) seconds/ step definition is deprecated.})
         
     | 
| 
       10 
     | 
    
         
            -
              # rubocop:enable Metrics/LineLength
         
     | 
| 
       11 
     | 
    
         
            -
             
     | 
| 
       12 
     | 
    
         
            -
              aruba.config.exit_timeout = seconds.to_i
         
     | 
| 
       13 
     | 
    
         
            -
            end
         
     | 
| 
       14 
     | 
    
         
            -
             
     | 
| 
       15 
     | 
    
         
            -
            Given(/The default aruba timeout is (\d+) seconds/) do |seconds|
         
     | 
| 
       16 
     | 
    
         
            -
              # rubocop:disable Metrics/LineLength
         
     | 
| 
       17 
     | 
    
         
            -
              Aruba.platform.deprecated(%{The /^The default aruba timeout is (\d+) seconds/ step definition is deprecated. Please use /^the default aruba exit timeout is (\d+) seconds/ step definition is deprecated.})
         
     | 
| 
       18 
     | 
    
         
            -
              # rubocop:enable Metrics/LineLength
         
     | 
| 
       19 
     | 
    
         
            -
             
     | 
| 
       20 
     | 
    
         
            -
              aruba.config.exit_timeout = seconds.to_i
         
     | 
| 
       21 
     | 
    
         
            -
            end
         
     | 
| 
       22 
     | 
    
         
            -
             
     | 
| 
       23 
     | 
    
         
            -
            Given(/the default aruba io wait timeout is (\d+) seconds/) do |seconds|
         
     | 
| 
       24 
     | 
    
         
            -
              aruba.config.io_wait_timeout = seconds.to_i
         
     | 
| 
       25 
     | 
    
         
            -
            end
         
     | 
| 
       26 
     | 
    
         
            -
             
     | 
| 
       27 
     | 
    
         
            -
            Given(/the default aruba exit timeout is (\d+) seconds/) do |seconds|
         
     | 
| 
       28 
     | 
    
         
            -
              aruba.config.exit_timeout = seconds.to_i
         
     | 
| 
       29 
     | 
    
         
            -
            end
         
     | 
    
        data/lib/aruba/cucumber/hooks.rb
    CHANGED
    
    | 
         @@ -65,6 +65,10 @@ Before('@announce-directory') do 
     | 
|
| 
       65 
65 
     | 
    
         
             
              announcer.activate :directory
         
     | 
| 
       66 
66 
     | 
    
         
             
            end
         
     | 
| 
       67 
67 
     | 
    
         | 
| 
      
 68 
     | 
    
         
            +
            Before('@announce-stop-signal') do
         
     | 
| 
      
 69 
     | 
    
         
            +
              announcer.activate :stop_signal
         
     | 
| 
      
 70 
     | 
    
         
            +
            end
         
     | 
| 
      
 71 
     | 
    
         
            +
             
     | 
| 
       68 
72 
     | 
    
         
             
            Before('@announce-env') do
         
     | 
| 
       69 
73 
     | 
    
         
             
              Aruba.platform.deprecated 'The use of "@announce-env"-hook is deprecated. Please use "@announce-modified-environment"'
         
     | 
| 
       70 
74 
     | 
    
         | 
| 
         @@ -89,6 +93,10 @@ Before('@announce-timeout') do 
     | 
|
| 
       89 
93 
     | 
    
         
             
              announcer.activate :timeout
         
     | 
| 
       90 
94 
     | 
    
         
             
            end
         
     | 
| 
       91 
95 
     | 
    
         | 
| 
      
 96 
     | 
    
         
            +
            Before('@announce-wait-time') do
         
     | 
| 
      
 97 
     | 
    
         
            +
              announcer.activate :wait_time
         
     | 
| 
      
 98 
     | 
    
         
            +
            end
         
     | 
| 
      
 99 
     | 
    
         
            +
             
     | 
| 
       92 
100 
     | 
    
         
             
            Before('@announce') do
         
     | 
| 
       93 
101 
     | 
    
         
             
              announcer.activate :command
         
     | 
| 
       94 
102 
     | 
    
         
             
              announcer.activate :stdout
         
     | 
| 
         @@ -98,6 +106,8 @@ Before('@announce') do 
     | 
|
| 
       98 
106 
     | 
    
         
             
              announcer.activate :full_environment
         
     | 
| 
       99 
107 
     | 
    
         
             
              announcer.activate :environment
         
     | 
| 
       100 
108 
     | 
    
         
             
              announcer.activate :timeout
         
     | 
| 
      
 109 
     | 
    
         
            +
              announcer.activate :wait_time
         
     | 
| 
      
 110 
     | 
    
         
            +
              announcer.activate :stop_signal
         
     | 
| 
       101 
111 
     | 
    
         
             
            end
         
     | 
| 
       102 
112 
     | 
    
         | 
| 
       103 
113 
     | 
    
         
             
            Before('@debug') do
         
     | 
    
        data/lib/aruba/errors.rb
    CHANGED
    
    
| 
         @@ -1,3 +1,5 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'aruba/processes/null_process'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
       1 
3 
     | 
    
         
             
            module Aruba
         
     | 
| 
       2 
4 
     | 
    
         
             
              class ProcessMonitor
         
     | 
| 
       3 
5 
     | 
    
         
             
                private
         
     | 
| 
         @@ -21,6 +23,16 @@ module Aruba 
     | 
|
| 
       21 
23 
     | 
    
         | 
| 
       22 
24 
     | 
    
         
             
                def last_command_stopped
         
     | 
| 
       23 
25 
     | 
    
         
             
                  return @last_command_stopped if @last_command_stopped
         
     | 
| 
      
 26 
     | 
    
         
            +
                  return Command.new('false',
         
     | 
| 
      
 27 
     | 
    
         
            +
                                     :mode              => :null,
         
     | 
| 
      
 28 
     | 
    
         
            +
                                     :exit_timeout      => 0,
         
     | 
| 
      
 29 
     | 
    
         
            +
                                     :io_wait_timeout   => 0,
         
     | 
| 
      
 30 
     | 
    
         
            +
                                     :working_directory => '/tmp',
         
     | 
| 
      
 31 
     | 
    
         
            +
                                     :environment       => {},
         
     | 
| 
      
 32 
     | 
    
         
            +
                                     :main_class        => nil,
         
     | 
| 
      
 33 
     | 
    
         
            +
                                     :stop_signal       => nil,
         
     | 
| 
      
 34 
     | 
    
         
            +
                                     :startup_wait_time => nil
         
     | 
| 
      
 35 
     | 
    
         
            +
                                    ) if all_commands.empty?
         
     | 
| 
       24 
36 
     | 
    
         | 
| 
       25 
37 
     | 
    
         
             
                  all_commands.each { |c| stop_process(c) }
         
     | 
| 
       26 
38 
     | 
    
         | 
| 
         @@ -28,6 +40,17 @@ module Aruba 
     | 
|
| 
       28 
40 
     | 
    
         
             
                end
         
     | 
| 
       29 
41 
     | 
    
         | 
| 
       30 
42 
     | 
    
         
             
                def last_command_started
         
     | 
| 
      
 43 
     | 
    
         
            +
                  return Command.new('false',
         
     | 
| 
      
 44 
     | 
    
         
            +
                                     :mode              => :null,
         
     | 
| 
      
 45 
     | 
    
         
            +
                                     :exit_timeout      => 0,
         
     | 
| 
      
 46 
     | 
    
         
            +
                                     :io_wait_timeout   => 0,
         
     | 
| 
      
 47 
     | 
    
         
            +
                                     :working_directory => '/tmp',
         
     | 
| 
      
 48 
     | 
    
         
            +
                                     :environment       => {},
         
     | 
| 
      
 49 
     | 
    
         
            +
                                     :main_class        => nil,
         
     | 
| 
      
 50 
     | 
    
         
            +
                                     :stop_signal       => nil,
         
     | 
| 
      
 51 
     | 
    
         
            +
                                     :startup_wait_time => nil
         
     | 
| 
      
 52 
     | 
    
         
            +
                                    ) unless processes.last.is_a? Array
         
     | 
| 
      
 53 
     | 
    
         
            +
             
     | 
| 
       31 
54 
     | 
    
         
             
                  processes.last[1]
         
     | 
| 
       32 
55 
     | 
    
         
             
                end
         
     | 
| 
       33 
56 
     | 
    
         | 
| 
         @@ -37,7 +60,8 @@ module Aruba 
     | 
|
| 
       37 
60 
     | 
    
         
             
                end
         
     | 
| 
       38 
61 
     | 
    
         | 
| 
       39 
62 
     | 
    
         
             
                def terminate_process!(process)
         
     | 
| 
       40 
     | 
    
         
            -
                  process 
     | 
| 
      
 63 
     | 
    
         
            +
                  @last_command_stopped = process
         
     | 
| 
      
 64 
     | 
    
         
            +
                  @last_exit_status     = process.terminate
         
     | 
| 
       41 
65 
     | 
    
         
             
                end
         
     | 
| 
       42 
66 
     | 
    
         | 
| 
       43 
67 
     | 
    
         
             
                def stop_processes!
         
     | 
| 
         @@ -3,15 +3,22 @@ require 'shellwords' 
     | 
|
| 
       3 
3 
     | 
    
         | 
| 
       4 
4 
     | 
    
         
             
            module Aruba
         
     | 
| 
       5 
5 
     | 
    
         
             
              module Processes
         
     | 
| 
      
 6 
     | 
    
         
            +
                # Basic Process
         
     | 
| 
      
 7 
     | 
    
         
            +
                #
         
     | 
| 
      
 8 
     | 
    
         
            +
                # `BasicProcess` is not meant for direct use - `BasicProcess.new` - by users.
         
     | 
| 
      
 9 
     | 
    
         
            +
                #
         
     | 
| 
      
 10 
     | 
    
         
            +
                # @private
         
     | 
| 
       6 
11 
     | 
    
         
             
                class BasicProcess
         
     | 
| 
       7 
     | 
    
         
            -
                  attr_reader :exit_status, :environment
         
     | 
| 
      
 12 
     | 
    
         
            +
                  attr_reader :exit_status, :environment, :startup_wait_time
         
     | 
| 
       8 
13 
     | 
    
         | 
| 
       9 
     | 
    
         
            -
                  def initialize(cmd, exit_timeout, io_wait, working_directory, environment = ENV.to_hash.dup, main_class = nil)
         
     | 
| 
      
 14 
     | 
    
         
            +
                  def initialize(cmd, exit_timeout, io_wait, working_directory, environment = ENV.to_hash.dup, main_class = nil, stop_signal = nil, startup_wait_time = 0)
         
     | 
| 
       10 
15 
     | 
    
         
             
                    @cmd               = cmd
         
     | 
| 
       11 
16 
     | 
    
         
             
                    @working_directory = working_directory
         
     | 
| 
       12 
17 
     | 
    
         
             
                    @environment       = environment
         
     | 
| 
       13 
18 
     | 
    
         
             
                    @main_class        = main_class
         
     | 
| 
       14 
19 
     | 
    
         
             
                    @exit_status       = nil
         
     | 
| 
      
 20 
     | 
    
         
            +
                    @stop_signal       = stop_signal
         
     | 
| 
      
 21 
     | 
    
         
            +
                    @startup_wait_time = startup_wait_time
         
     | 
| 
       15 
22 
     | 
    
         | 
| 
       16 
23 
     | 
    
         
             
                    @exit_timeout = exit_timeout
         
     | 
| 
       17 
24 
     | 
    
         
             
                    @io_wait      = io_wait
         
     | 
| 
         @@ -22,6 +29,11 @@ module Aruba 
     | 
|
| 
       22 
29 
     | 
    
         
             
                    @cmd
         
     | 
| 
       23 
30 
     | 
    
         
             
                  end
         
     | 
| 
       24 
31 
     | 
    
         | 
| 
      
 32 
     | 
    
         
            +
                  # Output pid of process
         
     | 
| 
      
 33 
     | 
    
         
            +
                  def pid
         
     | 
| 
      
 34 
     | 
    
         
            +
                    'No implemented'
         
     | 
| 
      
 35 
     | 
    
         
            +
                  end
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
       25 
37 
     | 
    
         
             
                  # Output stderr and stdout
         
     | 
| 
       26 
38 
     | 
    
         
             
                  def output(opts = {})
         
     | 
| 
       27 
39 
     | 
    
         
             
                    stdout(opts) + stderr(opts)
         
     | 
| 
         @@ -47,6 +59,14 @@ module Aruba 
     | 
|
| 
       47 
59 
     | 
    
         
             
                    NotImplementedError
         
     | 
| 
       48 
60 
     | 
    
         
             
                  end
         
     | 
| 
       49 
61 
     | 
    
         | 
| 
      
 62 
     | 
    
         
            +
                  def send_signal(*)
         
     | 
| 
      
 63 
     | 
    
         
            +
                    NotImplementedError
         
     | 
| 
      
 64 
     | 
    
         
            +
                  end
         
     | 
| 
      
 65 
     | 
    
         
            +
             
     | 
| 
      
 66 
     | 
    
         
            +
                  def wait
         
     | 
| 
      
 67 
     | 
    
         
            +
                    NotImplementedError
         
     | 
| 
      
 68 
     | 
    
         
            +
                  end
         
     | 
| 
      
 69 
     | 
    
         
            +
             
     | 
| 
       50 
70 
     | 
    
         
             
                  # Was process already stopped
         
     | 
| 
       51 
71 
     | 
    
         
             
                  def stopped?
         
     | 
| 
       52 
72 
     | 
    
         
             
                    @stopped == true
         
     |