Skip to content

Commit 81c79a2

Browse files
authored
Merge pull request puppetlabs#83 from donoghuc/BOLT-1103
(BOLT-1103) Unify output of task implementations
2 parents 1a755f0 + 2ccf072 commit 81c79a2

File tree

9 files changed

+306
-117
lines changed

9 files changed

+306
-117
lines changed

.sync.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ Gemfile:
4242
- mingw
4343
- x64_mingw
4444
- gem: bolt
45-
version: '~> 1.3'
45+
version: '~> 1.15'
4646
condition: ENV['GEM_BOLT']
4747

4848
Rakefile:

Gemfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ end
3232
group :system_tests do
3333
gem "puppet-module-posix-system-r#{minor_version}", require: false, platforms: [:ruby]
3434
gem "puppet-module-win-system-r#{minor_version}", require: false, platforms: [:mswin, :mingw, :x64_mingw]
35-
gem "bolt", '~> 1.3', require: false if ENV['GEM_BOLT']
35+
gem "bolt", "~> 1.15", require: false if ENV['GEM_BOLT']
3636
end
3737

3838
puppet_version = ENV['PUPPET_GEM_VERSION']

spec/acceptance/init_spec.rb

Lines changed: 44 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -5,86 +5,95 @@
55
include Beaker::TaskHelper::Inventory
66
include BoltSpec::Run
77

8+
def bolt_config
9+
{ 'modulepath' => RSpec.configuration.module_path }
10+
end
11+
12+
let(:bolt_inventory) { hosts_to_inventory.merge('features' => ['puppet-agent']) }
13+
814
package_to_use = ''
915
before(:all) do
16+
options = { inventory: hosts_to_inventory.merge('features' => ['puppet-agent']) }
1017
if os[:family] != 'windows'
1118
if os[:family] == 'redhat' && os[:release].to_i < 6
12-
task_run('service', 'action' => 'stop', 'name' => 'syslog')
19+
params = { 'action' => 'stop', 'name' => 'syslog' }
20+
run_task('service', 'default', params, options)
1321
end
1422
package_to_use = 'rsyslog'
1523
apply_manifest_on(default, "package { \"#{package_to_use}\": ensure => present, }")
1624
else
1725
package_to_use = 'W32Time'
18-
task_run('service', 'action' => 'start', 'name' => package_to_use)
26+
params = { 'action' => 'start', 'name' => package_to_use }
27+
run_task('service', 'default', params, options)
1928
end
2029
end
2130

2231
describe 'enable action' do
2332
it 'enable/status a service' do
24-
result = task_run('service', 'action' => 'enable', 'name' => package_to_use)
25-
expect(result[0]['status']).to eq('success')
26-
expect(result[0]['result']['status']).to match(%r{in_sync|enabled})
33+
result = run_task('service', 'default', 'action' => 'enable', 'name' => package_to_use)
34+
expect(result[0]).to include('status' => 'success')
35+
expect(result[0]['result']).to include('status' => %r{in_sync|enabled})
2736

28-
result = task_run('service', 'action' => 'status', 'name' => package_to_use)
29-
expect(result[0]['status']).to eq('success')
30-
expect(result[0]['result']['enabled']).to eq('true')
37+
result = run_task('service', 'default', 'action' => 'status', 'name' => package_to_use)
38+
expect(result[0]).to include('status' => 'success')
39+
expect(result[0]['result']).to include('enabled' => 'true')
3140
end
3241
end
3342

3443
describe 'restart action' do
3544
it 'restart/status a service' do
36-
result = task_run('service', 'action' => 'restart', 'name' => package_to_use)
37-
expect(result[0]['status']).to eq('success')
38-
expect(result[0]['result']['status']).to eq('restarted')
45+
result = run_task('service', 'default', 'action' => 'restart', 'name' => package_to_use)
46+
expect(result[0]).to include('status' => 'success')
47+
expect(result[0]['result']).to include('status' => 'restarted')
3948

40-
result = task_run('service', 'action' => 'status', 'name' => package_to_use)
41-
expect(result[0]['status']).to eq('success')
42-
expect(result[0]['result']['status']).to eq('running')
43-
expect(result[0]['result']['enabled']).to eq('true')
49+
result = run_task('service', 'default', 'action' => 'status', 'name' => package_to_use)
50+
expect(result[0]).to include('status' => 'success')
51+
expect(result[0]['result']).to include('status' => 'running')
52+
expect(result[0]['result']).to include('enabled' => 'true')
4453
end
4554
end
4655

4756
describe 'stop action' do
4857
it 'stop/status a service' do
49-
result = task_run('service', 'action' => 'stop', 'name' => package_to_use)
50-
expect(result[0]['status']).to eq('success')
51-
expect(result[0]['result']['status']).to match(%r{in_sync|stopped})
58+
result = run_task('service', 'default', 'action' => 'stop', 'name' => package_to_use)
59+
expect(result[0]).to include('status' => 'success')
60+
expect(result[0]['result']).to include('status' => %r{in_sync|stopped})
5261

5362
# Debian can give incorrect status
5463
unless ['debian', 'ubuntu'].include?(os[:family])
55-
result = task_run('service', 'action' => 'status', 'name' => package_to_use)
56-
expect(result[0]['status']).to eq('success')
57-
expect(result[0]['result']['status']).to eq('stopped')
58-
expect(result[0]['result']['enabled']).to eq('true')
64+
result = run_task('service', 'default', 'action' => 'status', 'name' => package_to_use)
65+
expect(result[0]).to include('status' => 'success')
66+
expect(result[0]['result']).to include('status' => 'stopped')
67+
expect(result[0]['result']).to include('enabled' => 'true')
5968
end
6069
end
6170
end
6271

6372
describe 'start action' do
6473
it 'start/status a service' do
65-
result = task_run('service', 'action' => 'start', 'name' => package_to_use)
66-
expect(result[0]['status']).to eq('success')
67-
expect(result[0]['result']['status']).to match(%r{in_sync|started})
74+
result = run_task('service', 'default', 'action' => 'start', 'name' => package_to_use)
75+
expect(result[0]).to include('status' => 'success')
76+
expect(result[0]['result']).to include('status' => %r{in_sync|started})
6877

6978
# Debian can give incorrect status
7079
if os[:family] != 'debian'
71-
result = task_run('service', 'action' => 'status', 'name' => package_to_use)
72-
expect(result[0]['status']).to eq('success')
73-
expect(result[0]['result']['status']).to eq('running')
74-
expect(result[0]['result']['enabled']).to eq('true')
80+
result = run_task('service', 'default', 'action' => 'status', 'name' => package_to_use)
81+
expect(result[0]).to include('status' => 'success')
82+
expect(result[0]['result']).to include('status' => 'running')
83+
expect(result[0]['result']).to include('enabled' => 'true')
7584
end
7685
end
7786
end
7887

7988
describe 'disable action' do
8089
it 'disable/status a service' do
81-
result = task_run('service', 'action' => 'disable', 'name' => package_to_use)
82-
expect(result[0]['status']).to eq('success')
83-
expect(result[0]['result']['status']).to eq('disabled')
90+
result = run_task('service', 'default', 'action' => 'disable', 'name' => package_to_use)
91+
expect(result[0]).to include('status' => 'success')
92+
expect(result[0]['result']).to include('status' => 'disabled')
8493

85-
result = task_run('service', 'action' => 'status', 'name' => package_to_use)
86-
expect(result[0]['status']).to eq('success')
87-
expect(result[0]['result']['enabled']).to eq('false')
94+
result = run_task('service', 'default', 'action' => 'status', 'name' => package_to_use)
95+
expect(result[0]).to include('status' => 'success')
96+
expect(result[0]['result']).to include('enabled' => 'false')
8897
end
8998
end
9099
end

spec/acceptance/linux_spec.rb

Lines changed: 42 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,35 +5,67 @@
55
include Beaker::TaskHelper::Inventory
66
include BoltSpec::Run
77

8+
def bolt_config
9+
{ 'modulepath' => RSpec.configuration.module_path }
10+
end
11+
12+
let(:bolt_inventory) { hosts_to_inventory.merge('features' => ['puppet-agent']) }
13+
814
package_to_use = 'rsyslog'
915
before(:all) do
1016
if os[:family] == 'redhat' && os[:release].to_i < 6
11-
task_run('service::linux', 'action' => 'stop', 'name' => 'syslog')
17+
options = { inventory: hosts_to_inventory.merge('features' => ['puppet-agent']) }
18+
params = { 'action' => 'stop', 'name' => 'syslog' }
19+
run_task('service::linux', 'default', params, options)
1220
end
1321
apply_manifest_on(default, "package { \"#{package_to_use}\": ensure => present, }")
1422
end
1523

1624
describe 'stop action' do
1725
it "stop #{package_to_use}" do
18-
result = task_run('service::linux', 'action' => 'stop', 'name' => package_to_use)
19-
expect(result[0]['status']).to eq('success')
20-
expect(result[0]['result']['status']).to match(%r{stop})
26+
result = run_task('service::linux', 'default', 'action' => 'stop', 'name' => package_to_use)
27+
expect(result[0]).to include('status' => 'success')
28+
expect(result[0]['result']).to include('status' => %r{ActiveState=inactive|stop})
2129
end
2230
end
2331

2432
describe 'start action' do
2533
it "start #{package_to_use}" do
26-
result = task_run('service::linux', 'action' => 'start', 'name' => package_to_use)
27-
expect(result[0]['status']).to eq('success')
28-
expect(result[0]['result']['status']).to match(%r{start})
34+
result = run_task('service::linux', 'default', 'action' => 'start', 'name' => package_to_use)
35+
expect(result[0]).to include('status' => 'success')
36+
expect(result[0]['result']).to include('status' => %r{ActiveState=active|running})
2937
end
3038
end
3139

3240
describe 'restart action' do
3341
it "restart #{package_to_use}" do
34-
result = task_run('service::linux', 'action' => 'restart', 'name' => package_to_use)
35-
expect(result[0]['status']).to eq('success')
36-
expect(result[0]['result']['status']).to match(%r{restart})
42+
result = run_task('service::linux', 'default', 'action' => 'restart', 'name' => package_to_use)
43+
expect(result[0]).to include('status' => 'success')
44+
expect(result[0]['result']).to include('status' => %r{ActiveState=active|running})
45+
end
46+
end
47+
48+
context 'when puppet-agent feature not available on target' do
49+
let(:bolt_inventory) { hosts_to_inventory }
50+
51+
it 'enable action fails' do
52+
params = { 'action' => 'enable', 'name' => package_to_use }
53+
result = run_task('service', 'default', params)
54+
expect(result[0]).to include('status' => 'failure')
55+
expect(result[0]['result']).to include('status' => 'failure')
56+
expect(result[0]['result']['_error']).to include('msg' => %r{'enable' action not supported})
57+
expect(result[0]['result']['_error']).to include('kind' => 'bash-error')
58+
expect(result[0]['result']['_error']).to include('details')
59+
end
60+
61+
it 'disable action fails' do
62+
params = { 'action' => 'disable', 'name' => package_to_use }
63+
result = run_task('service', 'default', params)
64+
expect(result[0]).to include('status' => 'failure')
65+
expect(result[0]['result']).to include('status' => 'failure')
66+
expect(result[0]['result']['_error']).to include('msg' => %r{'disable' action not supported})
67+
expect(result[0]['result']['_error']).to include('kind' => 'bash-error')
68+
expect(result[0]['result']['_error']).to include('details')
3769
end
3870
end
3971
end

spec/acceptance/windows_spec.rb

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
# run a test task
2+
require 'spec_helper_acceptance'
3+
4+
describe 'windows service task', if: os[:family] == 'windows' do
5+
include Beaker::TaskHelper::Inventory
6+
include BoltSpec::Run
7+
8+
def bolt_config
9+
{ 'modulepath' => RSpec.configuration.module_path }
10+
end
11+
12+
let(:bolt_inventory) { hosts_to_inventory.merge('features' => ['puppet-agent']) }
13+
14+
package_to_use = 'Spooler'
15+
16+
describe 'stop action' do
17+
it "stop #{package_to_use}" do
18+
result = run_task('service::windows', 'default', 'action' => 'stop', 'name' => package_to_use)
19+
expect(result[0]).to include('status' => 'success')
20+
expect(result[0]['result']).to include('status' => 'Stopped')
21+
end
22+
end
23+
24+
describe 'start action' do
25+
it "start #{package_to_use}" do
26+
result = run_task('service::windows', 'default', 'action' => 'start', 'name' => package_to_use)
27+
expect(result[0]).to include('status' => 'success')
28+
expect(result[0]['result']).to include('status' => 'Started')
29+
end
30+
end
31+
32+
describe 'restart action' do
33+
it "restart #{package_to_use}" do
34+
result = run_task('service::windows', 'default', 'action' => 'restart', 'name' => package_to_use)
35+
expect(result[0]).to include('status' => 'success')
36+
expect(result[0]['result']).to include('status' => 'Restarted')
37+
end
38+
end
39+
40+
describe 'status action' do
41+
it "status #{package_to_use}" do
42+
result = run_task('service::windows', 'default', 'action' => 'status', 'name' => package_to_use)
43+
expect(result[0]).to include('status' => 'success')
44+
expect(result[0]['result']).to include('status' => 'Started')
45+
expect(result[0]['result']).to include('enabled')
46+
end
47+
end
48+
49+
context 'when puppet-agent feature not available on target' do
50+
let(:bolt_inventory) { hosts_to_inventory }
51+
52+
it 'enable action fails' do
53+
params = { 'action' => 'enable', 'name' => package_to_use }
54+
result = run_task('service', 'default', params)
55+
expect(result[0]).to include('status' => 'failure')
56+
expect(result[0]['result']).to include('status' => 'failure')
57+
expect(result[0]['result']['_error']).to include('msg' => %r{'enable' action not supported})
58+
expect(result[0]['result']['_error']).to include('kind' => 'powershell_error')
59+
expect(result[0]['result']['_error']).to include('details')
60+
end
61+
62+
it 'disable action fails' do
63+
params = { 'action' => 'disable', 'name' => package_to_use }
64+
result = run_task('service', 'default', params)
65+
expect(result[0]).to include('status' => 'failure')
66+
expect(result[0]['result']).to include('status' => 'failure')
67+
expect(result[0]['result']['_error']).to include('msg' => %r{'disable' action not supported})
68+
expect(result[0]['result']['_error']).to include('kind' => 'powershell_error')
69+
expect(result[0]['result']['_error']).to include('details')
70+
end
71+
end
72+
end

spec/spec_helper_acceptance.rb

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,6 @@
1313
install_module_on(hosts)
1414
install_module_dependencies_on(hosts)
1515

16-
# Bolt helper task
17-
def task_run(task_name, params)
18-
module_path = RSpec.configuration.module_path
19-
config = { 'modulepath' => module_path }
20-
inventory = hosts_to_inventory.merge('features' => ['puppet-agent'])
21-
run_task(task_name, 'default', params, config: config, inventory: inventory)
22-
end
23-
2416
RSpec.configure do |c|
2517
# Readable test descriptions
2618
c.formatter = :documentation

tasks/linux.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
{
2-
"description": "Manage the state of services (without a puppet agent)",
2+
"description": "Manage and inspect the state of services (without a puppet agent)",
33
"private": true,
44
"input_method": "environment",
55
"parameters": {
66
"action": {
7-
"description": "The operation (start, stop) to perform on the service",
8-
"type": "Enum[start, stop, restart]"
7+
"description": "The operation (start, stop, restart, status) to perform on the service.",
8+
"type": "Enum[start, stop, restart, status]"
99
},
1010
"name": {
1111
"description": "The name of the service to operate on.",

0 commit comments

Comments
 (0)