aruba 0.11.0.pre → 0.11.0.pre2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
#
|