aruba 0.11.0.pre → 0.11.0.pre2
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/Gemfile +1 -1
- data/History.md +21 -1
- data/aruba.gemspec +1 -0
- data/features/api/command/find_command.feature +83 -0
- data/features/api/command/last_command_started.feature +50 -0
- data/features/api/command/last_command_stopped.feature +89 -0
- data/features/api/command/run.feature +259 -0
- data/features/api/command/stop.feature +53 -1
- data/features/api/text/replace_variables.feature +1 -1
- data/features/getting_started/run_commands.feature +177 -0
- data/features/matchers/file/be_existing_executable.feature +87 -0
- data/features/{integration/rspec/getting_started.feature → rspec/integration.feature} +31 -0
- data/fixtures/getting-started-app/Gemfile +1 -1
- data/lib/aruba.rb +0 -19
- data/lib/aruba/api.rb +2 -0
- data/lib/aruba/api/command.rb +103 -44
- data/lib/aruba/api/core.rb +13 -8
- data/lib/aruba/api/deprecated.rb +26 -4
- data/lib/aruba/api/environment.rb +21 -13
- data/lib/aruba/api/filesystem.rb +13 -0
- data/lib/aruba/api/rvm.rb +5 -0
- data/lib/aruba/api/text.rb +7 -1
- data/lib/aruba/aruba_path.rb +6 -0
- data/lib/aruba/basic_configuration.rb +35 -3
- data/lib/aruba/basic_configuration/option.rb +7 -0
- data/lib/aruba/cli.rb +4 -0
- data/lib/aruba/command.rb +47 -1
- data/lib/aruba/config.rb +15 -2
- data/lib/aruba/config_wrapper.rb +49 -8
- data/lib/aruba/console.rb +4 -1
- data/lib/aruba/console/help.rb +2 -0
- data/lib/aruba/contracts/absolute_path.rb +7 -0
- data/lib/aruba/contracts/enum.rb +5 -0
- data/lib/aruba/contracts/is_power_of_two.rb +9 -2
- data/lib/aruba/contracts/relative_path.rb +7 -0
- data/lib/aruba/cucumber/command.rb +6 -9
- data/lib/aruba/cucumber/file.rb +1 -1
- data/lib/aruba/cucumber/hooks.rb +36 -29
- data/lib/aruba/errors.rb +16 -1
- data/lib/aruba/events.rb +39 -0
- data/lib/aruba/extensions/string/strip.rb +1 -0
- data/lib/aruba/file_size.rb +11 -0
- data/lib/aruba/hooks.rb +2 -0
- data/lib/aruba/in_config_wrapper.rb +24 -0
- data/lib/aruba/in_process.rb +2 -0
- data/lib/aruba/initializer.rb +37 -0
- data/lib/aruba/matchers/base/base_matcher.rb +2 -0
- data/lib/aruba/matchers/base/object_formatter.rb +4 -0
- data/lib/aruba/matchers/collection/all.rb +2 -0
- data/lib/aruba/matchers/collection/include_an_object.rb +2 -0
- data/lib/aruba/matchers/command/have_exit_status.rb +1 -1
- data/lib/aruba/matchers/command/have_finished_in_time.rb +1 -10
- data/lib/aruba/matchers/command/have_output.rb +1 -10
- data/lib/aruba/matchers/command/have_output_on_stderr.rb +1 -10
- data/lib/aruba/matchers/command/have_output_on_stdout.rb +1 -10
- data/lib/aruba/matchers/file/be_an_existing_executable.rb +37 -0
- data/lib/aruba/platform.rb +4 -0
- data/lib/aruba/platforms/announcer.rb +225 -0
- data/lib/aruba/platforms/aruba_file_creator.rb +4 -0
- data/lib/aruba/platforms/aruba_fixed_size_file_creator.rb +4 -0
- data/lib/aruba/{aruba_logger.rb → platforms/aruba_logger.rb} +4 -0
- data/lib/aruba/platforms/command_monitor.rb +229 -0
- data/lib/aruba/platforms/determine_disk_usage.rb +5 -0
- data/lib/aruba/platforms/determine_file_size.rb +9 -0
- data/lib/aruba/platforms/disk_usage_calculator.rb +9 -0
- data/lib/aruba/platforms/local_environment.rb +12 -0
- data/lib/aruba/platforms/simple_table.rb +11 -0
- data/lib/aruba/platforms/unix_command_string.rb +3 -0
- data/lib/aruba/platforms/unix_environment_variables.rb +3 -0
- data/lib/aruba/platforms/unix_platform.rb +20 -2
- data/lib/aruba/platforms/unix_which.rb +6 -2
- data/lib/aruba/platforms/windows_command_string.rb +7 -0
- data/lib/aruba/platforms/windows_environment_variables.rb +2 -0
- data/lib/aruba/platforms/windows_platform.rb +3 -0
- data/lib/aruba/platforms/windows_which.rb +6 -2
- data/lib/aruba/processes/basic_process.rb +20 -5
- data/lib/aruba/processes/debug_process.rb +3 -1
- data/lib/aruba/processes/in_process.rb +18 -2
- data/lib/aruba/processes/spawn_process.rb +14 -13
- data/lib/aruba/rspec.rb +34 -23
- data/lib/aruba/runtime.rb +65 -6
- data/lib/aruba/setup.rb +87 -0
- data/lib/aruba/version.rb +1 -1
- data/spec/aruba/api_spec.rb +13 -36
- data/spec/aruba/{config_wrapper_spec.rb → in_config_wrapper_spec.rb} +1 -1
- data/spec/aruba/spawn_process_spec.rb +9 -14
- data/spec/support/configs/pry.rb +3 -0
- data/spec/support/shared_contexts/aruba.rb +1 -0
- metadata +40 -14
- data/features/getting_started/supported_programming_languages.feature +0 -89
- data/lib/aruba/announcer.rb +0 -219
- data/lib/aruba/matchers/rspec.rb +0 -0
- data/lib/aruba/process_monitor.rb +0 -201
- data/lib/aruba/processes/null_process.rb +0 -26
@@ -3,11 +3,63 @@ Feature: Stop command
|
|
3
3
|
To stop commands via API you can do the following:
|
4
4
|
|
5
5
|
- `last_command_started.stop`
|
6
|
-
- `
|
6
|
+
- `find_command('command').stop`
|
7
|
+
|
8
|
+
But normally there's no need to stop a command manually. All matchers
|
9
|
+
handling commands make sure, that they stop ALL command before check actual
|
10
|
+
against expected.
|
7
11
|
|
8
12
|
Background:
|
9
13
|
Given I use a fixture named "cli-app"
|
10
14
|
|
15
|
+
Scenario: Stop command started last
|
16
|
+
Given an executable named "bin/cli" with:
|
17
|
+
"""bash
|
18
|
+
#!/bin/bash
|
19
|
+
function term {
|
20
|
+
exit 0
|
21
|
+
}
|
22
|
+
|
23
|
+
trap term TERM
|
24
|
+
while [ true ]; do sleep 1; done
|
25
|
+
"""
|
26
|
+
And a file named "spec/run_spec.rb" with:
|
27
|
+
"""ruby
|
28
|
+
require 'spec_helper'
|
29
|
+
|
30
|
+
RSpec.describe 'Run command', :type => :aruba do
|
31
|
+
before(:each) { run('cli') }
|
32
|
+
before(:each) { last_command_started.stop }
|
33
|
+
it { expect(last_command_started).to be_successfully_executed }
|
34
|
+
end
|
35
|
+
"""
|
36
|
+
When I run `rspec`
|
37
|
+
Then the specs should all pass
|
38
|
+
|
39
|
+
Scenario: Find and stop command
|
40
|
+
Given an executable named "bin/cli" with:
|
41
|
+
"""bash
|
42
|
+
#!/bin/bash
|
43
|
+
function term {
|
44
|
+
exit 0
|
45
|
+
}
|
46
|
+
|
47
|
+
trap term TERM
|
48
|
+
while [ true ]; do sleep 1; done
|
49
|
+
"""
|
50
|
+
And a file named "spec/run_spec.rb" with:
|
51
|
+
"""ruby
|
52
|
+
require 'spec_helper'
|
53
|
+
|
54
|
+
RSpec.describe 'Run command', :type => :aruba do
|
55
|
+
before(:each) { run('cli') }
|
56
|
+
before(:each) { find_command('cli').stop }
|
57
|
+
it { expect(last_command_started).to be_successfully_executed }
|
58
|
+
end
|
59
|
+
"""
|
60
|
+
When I run `rspec`
|
61
|
+
Then the specs should all pass
|
62
|
+
|
11
63
|
Scenario: Stop successful command with configured signal
|
12
64
|
Given an executable named "bin/cli" with:
|
13
65
|
"""bash
|
@@ -37,7 +37,7 @@ Feature: Replace variables
|
|
37
37
|
require 'spec_helper'
|
38
38
|
|
39
39
|
RSpec.describe 'Run command', :type => :aruba do
|
40
|
-
it { expect
|
40
|
+
it { expect { replace_variables('<pid-last-command-started>') }.to raise_error Aruba::NoCommandHasBeenStartedError }
|
41
41
|
end
|
42
42
|
"""
|
43
43
|
When I run `rspec`
|
@@ -0,0 +1,177 @@
|
|
1
|
+
Feature: Run commands with Aruba
|
2
|
+
|
3
|
+
As long as you've got the neccessary programs, libraries, runtime
|
4
|
+
environments, interpreters installed, it doesn't matter in which programming
|
5
|
+
language your commandline application is implemented. You can even use POSIX
|
6
|
+
standard tools like "printf".
|
7
|
+
|
8
|
+
Below you find some examples of the "Hello, Aruba!"-application implemented
|
9
|
+
with different programming languages and a single example for a POSIX
|
10
|
+
standard tool. This is NOT an exclusive list. Every commandline application
|
11
|
+
should run with `aruba`.
|
12
|
+
|
13
|
+
Background:
|
14
|
+
Given I use a fixture named "getting-started-app"
|
15
|
+
And a file named "features/hello_aruba.feature" with:
|
16
|
+
"""
|
17
|
+
Feature: Getting Started With Aruba
|
18
|
+
Scenario: First Run of Command
|
19
|
+
Given I successfully run `cli`
|
20
|
+
Then the output should contain:
|
21
|
+
\"\"\"
|
22
|
+
Hello, Aruba!
|
23
|
+
\"\"\"
|
24
|
+
"""
|
25
|
+
|
26
|
+
Scenario: Bash Program
|
27
|
+
Given an executable named "bin/cli" with:
|
28
|
+
"""bash
|
29
|
+
#!/usr/bin/env bash
|
30
|
+
|
31
|
+
echo "Hello, Aruba!"
|
32
|
+
"""
|
33
|
+
When I successfully run `cucumber`
|
34
|
+
Then the features should all pass
|
35
|
+
|
36
|
+
Scenario: Bash Program run via bash
|
37
|
+
Given a file named "features/hello_aruba.feature" with:
|
38
|
+
"""
|
39
|
+
Feature: Getting Started With Aruba
|
40
|
+
Scenario: First Run of Command
|
41
|
+
Given a file named "cli.sh" with:
|
42
|
+
\"\"\"
|
43
|
+
echo "Hello, Aruba!"
|
44
|
+
\"\"\"
|
45
|
+
When I successfully run `bash ./cli.sh`
|
46
|
+
Then the output should contain:
|
47
|
+
\"\"\"
|
48
|
+
Hello, Aruba!
|
49
|
+
\"\"\"
|
50
|
+
"""
|
51
|
+
When I successfully run `cucumber`
|
52
|
+
Then the features should all pass
|
53
|
+
|
54
|
+
Scenario: Ruby Program
|
55
|
+
Given an executable named "bin/cli" with:
|
56
|
+
"""ruby
|
57
|
+
#!/usr/bin/env ruby
|
58
|
+
|
59
|
+
puts "Hello, Aruba!"
|
60
|
+
"""
|
61
|
+
When I successfully run `cucumber`
|
62
|
+
Then the features should all pass
|
63
|
+
|
64
|
+
Scenario: Ruby Program via "ruby"
|
65
|
+
Given a file named "features/hello_aruba.feature" with:
|
66
|
+
"""
|
67
|
+
Feature: Getting Started With Aruba
|
68
|
+
Scenario: First Run of Command
|
69
|
+
Given a file named "cli.rb" with:
|
70
|
+
\"\"\"
|
71
|
+
puts "Hello, Aruba!"
|
72
|
+
\"\"\"
|
73
|
+
When I successfully run `ruby ./cli.rb`
|
74
|
+
Then the output should contain:
|
75
|
+
\"\"\"
|
76
|
+
Hello, Aruba!
|
77
|
+
\"\"\"
|
78
|
+
"""
|
79
|
+
When I successfully run `cucumber`
|
80
|
+
Then the features should all pass
|
81
|
+
|
82
|
+
Scenario: Python Program
|
83
|
+
Given an executable named "bin/cli" with:
|
84
|
+
"""python
|
85
|
+
#!/usr/bin/env python
|
86
|
+
|
87
|
+
print("Hello, Aruba!")
|
88
|
+
"""
|
89
|
+
When I successfully run `cucumber`
|
90
|
+
Then the features should all pass
|
91
|
+
|
92
|
+
Scenario: Python Program via "python"
|
93
|
+
Given a file named "features/hello_aruba.feature" with:
|
94
|
+
"""
|
95
|
+
Feature: Getting Started With Aruba
|
96
|
+
Scenario: First Run of Command
|
97
|
+
Given a file named "cli.py" with:
|
98
|
+
\"\"\"
|
99
|
+
print("Hello, Aruba!")
|
100
|
+
\"\"\"
|
101
|
+
When I successfully run `python ./cli.py`
|
102
|
+
Then the output should contain:
|
103
|
+
\"\"\"
|
104
|
+
Hello, Aruba!
|
105
|
+
\"\"\"
|
106
|
+
"""
|
107
|
+
When I successfully run `cucumber`
|
108
|
+
Then the features should all pass
|
109
|
+
|
110
|
+
Scenario: Perl Program
|
111
|
+
Given an executable named "bin/cli" with:
|
112
|
+
"""perl
|
113
|
+
#!/usr/bin/env perl
|
114
|
+
|
115
|
+
print "Hello, Aruba!\n";
|
116
|
+
"""
|
117
|
+
When I successfully run `cucumber`
|
118
|
+
Then the features should all pass
|
119
|
+
|
120
|
+
Scenario: Perl Program via "perl"
|
121
|
+
Given a file named "features/hello_aruba.feature" with:
|
122
|
+
"""
|
123
|
+
Feature: Getting Started With Aruba
|
124
|
+
Scenario: First Run of Command
|
125
|
+
Given a file named "cli.pl" with:
|
126
|
+
\"\"\"perl
|
127
|
+
print "Hello, Aruba!\n";
|
128
|
+
\"\"\"
|
129
|
+
When I successfully run `perl ./cli.pl`
|
130
|
+
Then the output should contain:
|
131
|
+
\"\"\"
|
132
|
+
Hello, Aruba!
|
133
|
+
\"\"\"
|
134
|
+
"""
|
135
|
+
When I successfully run `cucumber`
|
136
|
+
Then the features should all pass
|
137
|
+
|
138
|
+
Scenario: Java Program
|
139
|
+
|
140
|
+
It's even possible to compile and run Java programs with Aruba.
|
141
|
+
|
142
|
+
Given a file named "features/hello_aruba.feature" with:
|
143
|
+
"""cucumber
|
144
|
+
Feature: Getting Started With Aruba
|
145
|
+
Scenario: First Run of Command
|
146
|
+
Given a file named "tmp/HelloArubaApp.java" with:
|
147
|
+
\"\"\"
|
148
|
+
class HelloArubaApp {
|
149
|
+
public static void main(String[] args) {
|
150
|
+
System.out.println("Hello, Aruba!");
|
151
|
+
}
|
152
|
+
}
|
153
|
+
\"\"\"
|
154
|
+
And I successfully run `javac tmp/HelloArubaApp.java`
|
155
|
+
And I cd to "tmp/"
|
156
|
+
And I successfully run `java HelloArubaApp`
|
157
|
+
Then the output should contain:
|
158
|
+
\"\"\"
|
159
|
+
Hello, Aruba!
|
160
|
+
\"\"\"
|
161
|
+
"""
|
162
|
+
When I successfully run `cucumber`
|
163
|
+
Then the features should all pass
|
164
|
+
|
165
|
+
Scenario: POSIX standard tools
|
166
|
+
Given a file named "features/hello_aruba.feature" with:
|
167
|
+
"""
|
168
|
+
Feature: Getting Started With Aruba
|
169
|
+
Scenario: First Run of Command
|
170
|
+
Given I successfully run `printf "%s" "Hello, Aruba!"`
|
171
|
+
Then the output should contain:
|
172
|
+
\"\"\"
|
173
|
+
Hello, Aruba!
|
174
|
+
\"\"\"
|
175
|
+
"""
|
176
|
+
When I successfully run `cucumber`
|
177
|
+
Then the features should all pass
|
@@ -0,0 +1,87 @@
|
|
1
|
+
Feature: Check if path exists and is an executable file
|
2
|
+
|
3
|
+
If you need to check if a given path exists and is a file, you can use the
|
4
|
+
`be_an_existing_executable`-matcher.
|
5
|
+
|
6
|
+
```ruby
|
7
|
+
require 'spec_helper'
|
8
|
+
|
9
|
+
RSpec.describe 'Check if file exists and is an executable file', :type => :aruba do
|
10
|
+
let(:file) { 'file.txt' }
|
11
|
+
before(:each) { touch(file) }
|
12
|
+
|
13
|
+
it { expect(file).to be_an_existing_executable }
|
14
|
+
end
|
15
|
+
```
|
16
|
+
|
17
|
+
Background:
|
18
|
+
Given I use a fixture named "cli-app"
|
19
|
+
|
20
|
+
Scenario: Expect single existing executable file
|
21
|
+
Given a file named "spec/existing_executable_spec.rb" with:
|
22
|
+
"""
|
23
|
+
require 'spec_helper'
|
24
|
+
|
25
|
+
RSpec.describe 'Check if file exists and is an executable file', :type => :aruba do
|
26
|
+
let(:file) { 'file.txt' }
|
27
|
+
before(:each) { touch(file) }
|
28
|
+
before(:each) { chmod(0755, file) }
|
29
|
+
|
30
|
+
it { expect(file).to be_an_existing_executable }
|
31
|
+
end
|
32
|
+
"""
|
33
|
+
When I run `rspec`
|
34
|
+
Then the specs should all pass
|
35
|
+
|
36
|
+
Scenario: Expect single non-existing executable file
|
37
|
+
Given a file named "spec/existing_executable_spec.rb" with:
|
38
|
+
"""
|
39
|
+
require 'spec_helper'
|
40
|
+
|
41
|
+
RSpec.describe 'Check if file exists and is an executable file', :type => :aruba do
|
42
|
+
let(:file) { 'file.txt' }
|
43
|
+
it { expect(file).not_to be_an_existing_executable }
|
44
|
+
end
|
45
|
+
"""
|
46
|
+
When I run `rspec`
|
47
|
+
Then the specs should all pass
|
48
|
+
|
49
|
+
Scenario: Expect multiple existing executable files
|
50
|
+
Given a file named "spec/existing_executable_spec.rb" with:
|
51
|
+
"""
|
52
|
+
require 'spec_helper'
|
53
|
+
|
54
|
+
RSpec.describe 'Check if file exists and is an executable file', :type => :aruba do
|
55
|
+
let(:files) { %w(file1.txt file2.txt) }
|
56
|
+
|
57
|
+
before :each do
|
58
|
+
files.each do |f|
|
59
|
+
touch(f)
|
60
|
+
chmod(0755, f)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
it { expect(files).to all be_an_existing_executable }
|
65
|
+
end
|
66
|
+
"""
|
67
|
+
When I run `rspec`
|
68
|
+
Then the specs should all pass
|
69
|
+
|
70
|
+
Scenario: Expect a least one existing executable file
|
71
|
+
Given a file named "spec/existing_executable_spec.rb" with:
|
72
|
+
"""
|
73
|
+
require 'spec_helper'
|
74
|
+
|
75
|
+
RSpec.describe 'Check if file exists and is an executable file', :type => :aruba do
|
76
|
+
let(:files) { %w(file1.txt file2.txt) }
|
77
|
+
|
78
|
+
before :each do
|
79
|
+
touch(files.first)
|
80
|
+
chmod(0755, files.first)
|
81
|
+
end
|
82
|
+
|
83
|
+
it { expect(files).to include an_existing_executable }
|
84
|
+
end
|
85
|
+
"""
|
86
|
+
When I run `rspec`
|
87
|
+
Then the specs should all pass
|
@@ -117,6 +117,35 @@ Feature: Getting started with RSpec and aruba
|
|
117
117
|
When I run `rspec`
|
118
118
|
Then the specs should all pass
|
119
119
|
|
120
|
+
Scenario: Setup aruba before use any of it's methods
|
121
|
+
|
122
|
+
From 1.0.0 it will be required, that you setup aruba before you use it.
|
123
|
+
|
124
|
+
Given a file named "spec/spec_helper.rb" with:
|
125
|
+
"""
|
126
|
+
require 'aruba/api'
|
127
|
+
|
128
|
+
RSpec.configure do |config|
|
129
|
+
config.include Aruba::Api
|
130
|
+
end
|
131
|
+
"""
|
132
|
+
And a file named "spec/getting_started_spec.rb" with:
|
133
|
+
"""
|
134
|
+
require 'spec_helper'
|
135
|
+
|
136
|
+
RSpec.describe 'Custom Integration of aruba' do
|
137
|
+
let(:file) { 'file.txt' }
|
138
|
+
|
139
|
+
before(:each) { setup_aruba }
|
140
|
+
|
141
|
+
it { expect(true).to be true }
|
142
|
+
end
|
143
|
+
"""
|
144
|
+
And an empty file named "tmp/aruba/garbage.txt"
|
145
|
+
When I run `rspec`
|
146
|
+
Then the specs should all pass
|
147
|
+
And the file "tmp/aruba/garbage.txt" should not exist anymore
|
148
|
+
|
120
149
|
Scenario: Fail-safe use if "setup_aruba" is not used
|
121
150
|
|
122
151
|
If you forgot to run `setup_aruba` before the first method of aruba is
|
@@ -125,6 +154,8 @@ Feature: Getting started with RSpec and aruba
|
|
125
154
|
Make sure that you run `setup_aruba` before any method of aruba is used. At
|
126
155
|
best before each and every test.
|
127
156
|
|
157
|
+
This will be not supported anymore from 1.0.0 on.
|
158
|
+
|
128
159
|
Given a file named "spec/spec_helper.rb" with:
|
129
160
|
"""
|
130
161
|
require 'aruba/api'
|
data/lib/aruba.rb
CHANGED
@@ -1,20 +1 @@
|
|
1
|
-
# require 'contracts'
|
2
|
-
|
3
|
-
# require 'fileutils'
|
4
|
-
# require 'rbconfig'
|
5
|
-
# require 'ostruct'
|
6
|
-
# require 'pathname'
|
7
|
-
|
8
|
-
# require 'aruba/hooks'
|
9
|
-
# require 'aruba/basic_configuration'
|
10
|
-
# require 'aruba/config_wrapper'
|
11
|
-
# require 'aruba/config'
|
12
|
-
|
13
|
-
# require 'aruba/announcer'
|
14
|
-
# require 'aruba/process_monitor'
|
15
|
-
# require 'aruba/runtime'
|
16
|
-
|
17
|
-
# require 'aruba/platform'
|
18
|
-
# require 'aruba/spawn_process'
|
19
|
-
|
20
1
|
require 'aruba/api'
|
data/lib/aruba/api.rb
CHANGED
data/lib/aruba/api/command.rb
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
require 'pathname'
|
2
2
|
|
3
3
|
require 'aruba/platform'
|
4
|
-
require 'aruba/process_monitor'
|
5
4
|
require 'aruba/command'
|
6
5
|
|
7
6
|
# require 'win32/file' if File::ALT_SEPARATOR
|
8
7
|
|
8
|
+
# Aruba
|
9
9
|
module Aruba
|
10
10
|
class << self
|
11
11
|
# @deprecated
|
@@ -16,8 +16,11 @@ module Aruba
|
|
16
16
|
# self.process = Aruba::Processes::SpawnProcess
|
17
17
|
end
|
18
18
|
|
19
|
+
# Aruba
|
19
20
|
module Aruba
|
21
|
+
# Api
|
20
22
|
module Api
|
23
|
+
# Command module
|
21
24
|
module Commands
|
22
25
|
# Resolve path for command using the PATH-environment variable
|
23
26
|
#
|
@@ -53,31 +56,17 @@ module Aruba
|
|
53
56
|
# @return [Array]
|
54
57
|
# List of commands
|
55
58
|
def all_commands
|
56
|
-
|
57
|
-
end
|
58
|
-
|
59
|
-
# @private
|
60
|
-
def process_monitor
|
61
|
-
return @process_monitor if defined? @process_monitor
|
62
|
-
|
63
|
-
@process_monitor = ProcessMonitor.new(announcer)
|
64
|
-
|
65
|
-
@process_monitor
|
66
|
-
end
|
67
|
-
|
68
|
-
# @private
|
69
|
-
def processes
|
70
|
-
process_monitor.send(:processes)
|
59
|
+
aruba.command_monitor.registered_commands
|
71
60
|
end
|
72
61
|
|
73
62
|
# Last command started
|
74
63
|
def last_command_started
|
75
|
-
|
64
|
+
aruba.command_monitor.last_command_started
|
76
65
|
end
|
77
66
|
|
78
67
|
# Last command stopped
|
79
68
|
def last_command_stopped
|
80
|
-
|
69
|
+
aruba.command_monitor.last_command_stopped
|
81
70
|
end
|
82
71
|
|
83
72
|
# Stop all commands
|
@@ -92,7 +81,7 @@ module Aruba
|
|
92
81
|
all_commands
|
93
82
|
end
|
94
83
|
|
95
|
-
cmds.each
|
84
|
+
cmds.each(&:stop)
|
96
85
|
|
97
86
|
self
|
98
87
|
end
|
@@ -114,27 +103,61 @@ module Aruba
|
|
114
103
|
self
|
115
104
|
end
|
116
105
|
|
106
|
+
# Find a started command
|
107
|
+
#
|
108
|
+
# @param [String, Command] commandline
|
109
|
+
# The commandline
|
110
|
+
def find_command(commandline)
|
111
|
+
aruba.command_monitor.find(commandline)
|
112
|
+
end
|
113
|
+
|
117
114
|
# Run given command and stop it if timeout is reached
|
118
115
|
#
|
119
116
|
# @param [String] cmd
|
120
117
|
# The command which should be executed
|
121
118
|
#
|
122
|
-
# @param [
|
119
|
+
# @param [Hash] opts
|
120
|
+
# Options
|
121
|
+
#
|
122
|
+
# @option [Integer] exit_timeout
|
123
123
|
# If the timeout is reached the command will be killed
|
124
124
|
#
|
125
|
-
# @
|
126
|
-
#
|
125
|
+
# @option [Integer] io_wait_timeout
|
126
|
+
# Wait for IO to finish
|
127
|
+
#
|
128
|
+
# @option [Integer] startup_wait_time
|
129
|
+
# Wait for a command to start
|
130
|
+
#
|
131
|
+
# @option [String] stop_signal
|
132
|
+
# Use signal to stop command
|
127
133
|
#
|
128
134
|
# @yield [SpawnProcess]
|
129
135
|
# Run block with process
|
130
136
|
#
|
131
137
|
# rubocop:disable Metrics/MethodLength
|
132
138
|
# rubocop:disable Metrics/CyclomaticComplexity
|
133
|
-
def run(
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
139
|
+
def run(*args)
|
140
|
+
fail ArgumentError, 'Please pass at least a command as first argument.' if args.size < 1
|
141
|
+
|
142
|
+
cmd = args.shift
|
143
|
+
|
144
|
+
if args.last.is_a? Hash
|
145
|
+
opts = args.pop
|
146
|
+
|
147
|
+
exit_timeout = opts.fetch(:exit_timeout, aruba.config.exit_timeout)
|
148
|
+
io_wait_timeout = opts.fetch(:io_wait_timeout, aruba.config.io_wait_timeout)
|
149
|
+
stop_signal = opts.fetch(:stop_signal, aruba.config.stop_signal)
|
150
|
+
startup_wait_time = opts.fetch(:startup_wait_time, aruba.config.startup_wait_time)
|
151
|
+
else
|
152
|
+
if args.size > 1
|
153
|
+
Aruba.platform.deprecated("Please pass options to `#run` as named parameters/hash and don\'t use the old style, e.g. `#run('cmd', :exit_timeout => 5)`.")
|
154
|
+
end
|
155
|
+
|
156
|
+
exit_timeout = args[0] || aruba.config.exit_timeout
|
157
|
+
io_wait_timeout = args[1] || aruba.config.io_wait_timeout
|
158
|
+
stop_signal = args[2] || aruba.config.stop_signal
|
159
|
+
startup_wait_time = args[3] || aruba.config.startup_wait_time
|
160
|
+
end
|
138
161
|
|
139
162
|
cmd = replace_variables(cmd)
|
140
163
|
|
@@ -143,16 +166,17 @@ module Aruba
|
|
143
166
|
|
144
167
|
environment = aruba.environment.to_h
|
145
168
|
working_directory = expand_path('.')
|
169
|
+
event_bus = aruba.event_bus
|
146
170
|
|
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)
|
171
|
+
aruba.announcer.announce(:full_environment, environment)
|
172
|
+
aruba.announcer.announce(:timeout, 'exit', exit_timeout)
|
173
|
+
aruba.announcer.announce(:timeout, 'io wait', io_wait_timeout)
|
174
|
+
aruba.announcer.announce(:wait_time, 'startup wait time', startup_wait_time)
|
151
175
|
|
152
|
-
announcer.announce(:directory, working_directory)
|
153
|
-
announcer.announce(:command, cmd)
|
176
|
+
aruba.announcer.announce(:directory, working_directory)
|
177
|
+
aruba.announcer.announce(:command, cmd)
|
154
178
|
|
155
|
-
cmd
|
179
|
+
cmd = Aruba.platform.detect_ruby(cmd)
|
156
180
|
|
157
181
|
mode = if Aruba.process
|
158
182
|
# rubocop:disable Metrics/LineLength
|
@@ -181,7 +205,8 @@ module Aruba
|
|
181
205
|
:environment => environment,
|
182
206
|
:main_class => main_class,
|
183
207
|
:stop_signal => stop_signal,
|
184
|
-
:startup_wait_time => startup_wait_time
|
208
|
+
:startup_wait_time => startup_wait_time,
|
209
|
+
:event_bus => event_bus
|
185
210
|
)
|
186
211
|
|
187
212
|
if aruba.config.before? :cmd
|
@@ -192,11 +217,9 @@ module Aruba
|
|
192
217
|
end
|
193
218
|
|
194
219
|
aruba.config.before(:command, self, command)
|
195
|
-
|
196
|
-
process_monitor.register_process(cmd, command)
|
197
220
|
command.start
|
198
221
|
|
199
|
-
announcer.announce(:stop_signal, command.pid, stop_signal) if stop_signal
|
222
|
+
aruba.announcer.announce(:stop_signal, command.pid, stop_signal) if stop_signal
|
200
223
|
|
201
224
|
aruba.config.after(:command, self, command)
|
202
225
|
|
@@ -213,22 +236,58 @@ module Aruba
|
|
213
236
|
# @param [String] cmd
|
214
237
|
# The command to be executed
|
215
238
|
#
|
216
|
-
# @param [
|
239
|
+
# @param [Hash] options
|
240
|
+
# Options for aruba
|
241
|
+
#
|
242
|
+
# @option [TrueClass,FalseClass] fail_on_error
|
217
243
|
# Should aruba fail on error?
|
218
244
|
#
|
219
|
-
# @
|
245
|
+
# @option [Integer] exit_timeout
|
220
246
|
# Timeout for execution
|
221
|
-
|
222
|
-
|
223
|
-
|
247
|
+
#
|
248
|
+
# @option [Integer] io_wait_timeout
|
249
|
+
# Timeout for IO - STDERR, STDOUT
|
250
|
+
#
|
251
|
+
# rubocop:disable Metrics/CyclomaticComplexity
|
252
|
+
# rubocop:disable Metrics/MethodLength
|
253
|
+
def run_simple(*args)
|
254
|
+
fail ArgumentError, 'Please pass at least a command as first argument.' if args.size < 1
|
255
|
+
|
256
|
+
cmd = args.shift
|
257
|
+
|
258
|
+
if args.last.is_a? Hash
|
259
|
+
opts = args.pop
|
260
|
+
|
261
|
+
fail_on_error = opts.fetch(:fail_on_error, false) || false
|
262
|
+
exit_timeout = opts.fetch(:exit_timeout, aruba.config.exit_timeout) || aruba.config.exit_timeout
|
263
|
+
io_wait_timeout = opts.fetch(:io_wait_timeout, aruba.config.io_wait_timeout) || aruba.config.io_wait_timeout
|
264
|
+
else
|
265
|
+
if args.size > 1
|
266
|
+
# rubocop:disable Metrics/LineLength
|
267
|
+
Aruba.platform.deprecated("Please pass options to `#run_simple` as named parameters/hash and don\'t use the old style with positional parameters, NEW: e.g. `#run_simple('cmd', :exit_timeout => 5)`.")
|
268
|
+
# rubocop:enable Metrics/LineLength
|
269
|
+
end
|
270
|
+
|
271
|
+
fail_on_error = args[0] || true
|
272
|
+
exit_timeout = args[1] || aruba.config.exit_timeout
|
273
|
+
io_wait_timeout = args[2] || aruba.config.io_wait_timeout
|
274
|
+
end
|
275
|
+
|
276
|
+
command = run(cmd, :exit_timeout => exit_timeout, :io_wait_timeout => io_wait_timeout)
|
277
|
+
command.stop
|
224
278
|
|
225
|
-
|
279
|
+
if Aruba::VERSION < '1'
|
280
|
+
@last_exit_status = command.exit_status
|
281
|
+
@timed_out = command.timed_out?
|
282
|
+
end
|
226
283
|
|
227
284
|
if fail_on_error
|
228
285
|
expect(command).to have_finished_in_time
|
229
286
|
expect(command).to be_successfully_executed
|
230
287
|
end
|
231
288
|
end
|
289
|
+
# rubocop:enable Metrics/CyclomaticComplexity
|
290
|
+
# rubocop:enable Metrics/MethodLength
|
232
291
|
|
233
292
|
# Provide data to command via stdin
|
234
293
|
#
|