beaker 5.6.0 → 5.8.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/dependabot.yml +14 -14
- data/.github/workflows/release.yml +2 -2
- data/.github/workflows/test.yml +4 -3
- data/.rubocop_todo.yml +58 -5
- data/CHANGELOG.md +22 -0
- data/acceptance/tests/base/dsl/helpers/host_helpers/on_test.rb +1 -1
- data/acceptance/tests/base/dsl/platform_tag_confiner_test.rb +2 -2
- data/beaker.gemspec +1 -1
- data/docs/concepts/argument_processing_and_precedence.md +1 -1
- data/lib/beaker/host/unix/file.rb +1 -1
- data/lib/beaker/host_prebuilt_steps.rb +4 -7
- data/lib/beaker/options/command_line_parser.rb +1 -1
- data/lib/beaker/platform.rb +2 -1
- data/lib/beaker/shared/host_manager.rb +4 -4
- data/lib/beaker/ssh_connection.rb +2 -2
- data/lib/beaker/version.rb +1 -1
- data/spec/beaker/cli_spec.rb +11 -11
- data/spec/beaker/command_spec.rb +10 -10
- data/spec/beaker/dsl/helpers/host_helpers_spec.rb +11 -11
- data/spec/beaker/dsl/roles_spec.rb +15 -15
- data/spec/beaker/dsl/structure_spec.rb +3 -3
- data/spec/beaker/host/pswindows/exec_spec.rb +3 -3
- data/spec/beaker/host/unix/exec_spec.rb +3 -3
- data/spec/beaker/host/unix/file_spec.rb +8 -0
- data/spec/beaker/host/unix/pkg_spec.rb +10 -10
- data/spec/beaker/host_spec.rb +6 -6
- data/spec/beaker/logger_spec.rb +7 -7
- data/spec/beaker/options/hosts_file_parser_spec.rb +1 -1
- data/spec/beaker/options/parser_spec.rb +40 -40
- data/spec/beaker/platform_spec.rb +5 -0
- data/spec/beaker/shared/host_manager_spec.rb +1 -1
- data/spec/beaker/shared/semvar_spec.rb +1 -1
- data/spec/beaker/subcommand/subcommand_util_spec.rb +5 -5
- data/spec/beaker/test_suite_spec.rb +12 -12
- metadata +5 -5
@@ -21,13 +21,13 @@ describe ClassMixedWithDSLRoles do
|
|
21
21
|
it 'returns an array of hosts that are agents' do
|
22
22
|
@hosts = [agent1, agent2, master]
|
23
23
|
expect(subject).to receive(:hosts).and_return(hosts)
|
24
|
-
expect(subject.agents).to
|
24
|
+
expect(subject.agents).to eq [agent1, agent2, master]
|
25
25
|
end
|
26
26
|
|
27
27
|
it 'and an empty array when none match' do
|
28
28
|
@hosts = [db, custom]
|
29
29
|
expect(subject).to receive(:hosts).and_return(hosts)
|
30
|
-
expect(subject.agents).to
|
30
|
+
expect(subject.agents).to eq []
|
31
31
|
end
|
32
32
|
end
|
33
33
|
|
@@ -35,7 +35,7 @@ describe ClassMixedWithDSLRoles do
|
|
35
35
|
it 'returns the master if there is one' do
|
36
36
|
@hosts = [master, agent1]
|
37
37
|
expect(subject).to receive(:hosts).and_return(hosts)
|
38
|
-
expect(subject.master).to
|
38
|
+
expect(subject.master).to eq master
|
39
39
|
end
|
40
40
|
|
41
41
|
it 'raises an error if there is more than one master' do
|
@@ -56,7 +56,7 @@ describe ClassMixedWithDSLRoles do
|
|
56
56
|
it 'returns the dashboard if there is one' do
|
57
57
|
@hosts = [a_and_dash, agent1]
|
58
58
|
expect(subject).to receive(:hosts).and_return(hosts)
|
59
|
-
expect(subject.dashboard).to
|
59
|
+
expect(subject.dashboard).to eq a_and_dash
|
60
60
|
end
|
61
61
|
|
62
62
|
it 'raises an error if there is more than one dashboard' do
|
@@ -83,7 +83,7 @@ describe ClassMixedWithDSLRoles do
|
|
83
83
|
it 'returns the database if there is one' do
|
84
84
|
@hosts = [db, agent1]
|
85
85
|
expect(subject).to receive(:hosts).and_return(hosts)
|
86
|
-
expect(subject.database).to
|
86
|
+
expect(subject.database).to eq db
|
87
87
|
end
|
88
88
|
|
89
89
|
it 'raises an error if there is more than one database' do
|
@@ -108,25 +108,25 @@ describe ClassMixedWithDSLRoles do
|
|
108
108
|
|
109
109
|
describe '#not_controller' do
|
110
110
|
it 'returns true when a host does not have the roles master/database/dashboard' do
|
111
|
-
expect(subject.not_controller(agent1)).to
|
111
|
+
expect(subject.not_controller(agent1)).to eq true
|
112
112
|
end
|
113
113
|
|
114
114
|
it 'returns false when a host has one of the roles master/database/dashboard' do
|
115
|
-
expect(subject.not_controller(a_and_dash)).to
|
115
|
+
expect(subject.not_controller(a_and_dash)).to eq false
|
116
116
|
end
|
117
117
|
end
|
118
118
|
|
119
119
|
describe '#agent_only' do
|
120
120
|
it 'returns true when a host has the single role agent' do
|
121
|
-
expect(subject.agent_only(agent1)).to
|
121
|
+
expect(subject.agent_only(agent1)).to eq true
|
122
122
|
end
|
123
123
|
|
124
124
|
it 'returns false when a host has more than a single role' do
|
125
|
-
expect(subject.agent_only(a_and_dash)).to
|
125
|
+
expect(subject.agent_only(a_and_dash)).to eq false
|
126
126
|
end
|
127
127
|
|
128
128
|
it 'returns false when a host has the role master' do
|
129
|
-
expect(subject.agent_only(master)).to
|
129
|
+
expect(subject.agent_only(master)).to eq false
|
130
130
|
end
|
131
131
|
end
|
132
132
|
|
@@ -328,7 +328,7 @@ describe ClassMixedWithDSLRoles do
|
|
328
328
|
it 'returns the default host when one is specified' do
|
329
329
|
@hosts = [db, agent1, agent2, default, master]
|
330
330
|
expect(subject).to receive(:hosts).once.and_return(hosts)
|
331
|
-
expect(subject.default).to
|
331
|
+
expect(subject.default).to eq default
|
332
332
|
end
|
333
333
|
|
334
334
|
it 'raises an error if there is more than one default' do
|
@@ -377,7 +377,7 @@ describe ClassMixedWithDSLRoles do
|
|
377
377
|
test_role = "custom_role"
|
378
378
|
subject.add_role_def(test_role)
|
379
379
|
expect(subject).to respond_to test_role
|
380
|
-
expect(subject.send(test_role)).to
|
380
|
+
expect(subject.send(test_role)).to eq @hosts[2]
|
381
381
|
subject.class.send(:undef_method, test_role)
|
382
382
|
end
|
383
383
|
|
@@ -387,7 +387,7 @@ describe ClassMixedWithDSLRoles do
|
|
387
387
|
test_role = "custom_role"
|
388
388
|
subject.add_role_def(test_role)
|
389
389
|
expect(subject).to respond_to test_role
|
390
|
-
expect(subject.send(test_role)).to
|
390
|
+
expect(subject.send(test_role)).to eq [@hosts[2], @hosts[3]]
|
391
391
|
subject.class.send(:undef_method, test_role)
|
392
392
|
end
|
393
393
|
end
|
@@ -397,8 +397,8 @@ describe ClassMixedWithDSLRoles do
|
|
397
397
|
@hosts = [agent1, agent2]
|
398
398
|
# expect( subject ).to receive( :hosts ).and_return( hosts )
|
399
399
|
expect(subject).to receive(:hosts).twice.and_return(hosts)
|
400
|
-
expect(subject.any_hosts_as?("agent")).to
|
401
|
-
expect(subject.any_hosts_as?("custom_role")).to
|
400
|
+
expect(subject.any_hosts_as?("agent")).to eq true
|
401
|
+
expect(subject.any_hosts_as?("custom_role")).to eq false
|
402
402
|
end
|
403
403
|
end
|
404
404
|
end
|
@@ -370,13 +370,13 @@ describe ClassMixedWithDSLStructure do
|
|
370
370
|
it 'returns an empty array if there are no applicable hosts' do
|
371
371
|
hosts = [{ 'thing' => 'foo' }, { 'thing' => 'bar' }]
|
372
372
|
|
373
|
-
expect(subject.select_hosts({ 'thing' => 'nope' }, hosts)).to
|
373
|
+
expect(subject.select_hosts({ 'thing' => 'nope' }, hosts)).to eq []
|
374
374
|
end
|
375
375
|
|
376
376
|
it 'selects hosts that match a list of criteria' do
|
377
377
|
hosts = [{ 'thing' => 'foo' }, { 'thing' => 'bar' }, { 'thing' => 'baz' }]
|
378
378
|
|
379
|
-
expect(subject.select_hosts({ :thing => %w[foo baz] }, hosts)).to
|
379
|
+
expect(subject.select_hosts({ :thing => %w[foo baz] }, hosts)).to eq [{ 'thing' => 'foo' }, { 'thing' => 'baz' }]
|
380
380
|
end
|
381
381
|
|
382
382
|
it 'selects hosts when a passed block returns true' do
|
@@ -396,7 +396,7 @@ describe ClassMixedWithDSLStructure do
|
|
396
396
|
selected_hosts = subject.select_hosts 'platform' => 'solaris' do |host|
|
397
397
|
subject.on(host, '/sbin/zonename').stdout.include?(':global')
|
398
398
|
end
|
399
|
-
expect(selected_hosts).to
|
399
|
+
expect(selected_hosts).to eq [host1]
|
400
400
|
end
|
401
401
|
end
|
402
402
|
end
|
@@ -85,17 +85,17 @@ module Beaker
|
|
85
85
|
let(:host) { { 'pathseparator' => ':' } }
|
86
86
|
|
87
87
|
it 'returns a blank string if theres no env' do
|
88
|
-
expect(instance.environment_string({})).to
|
88
|
+
expect(instance.environment_string({})).to eq ''
|
89
89
|
end
|
90
90
|
|
91
91
|
it 'takes an env hash with var_name/value pairs' do
|
92
92
|
expect(instance.environment_string({ :HOME => '/', :http_proxy => 'http://foo' }))
|
93
|
-
.to
|
93
|
+
.to eq 'set "HOME=/" && set "http_proxy=http://foo" && set "HTTP_PROXY=http://foo" && '
|
94
94
|
end
|
95
95
|
|
96
96
|
it 'takes an env hash with var_name/value[Array] pairs' do
|
97
97
|
expect(instance.environment_string({ :LD_PATH => ['/', '/tmp'] }))
|
98
|
-
.to
|
98
|
+
.to eq "set \"LD_PATH=/:/tmp\" && "
|
99
99
|
end
|
100
100
|
end
|
101
101
|
|
@@ -62,17 +62,17 @@ module Beaker
|
|
62
62
|
|
63
63
|
it 'returns a blank string if theres no env' do
|
64
64
|
expect(instance).not_to receive(:is_powershell?)
|
65
|
-
expect(instance.environment_string({})).to
|
65
|
+
expect(instance.environment_string({})).to eq ''
|
66
66
|
end
|
67
67
|
|
68
68
|
it 'takes an env hash with var_name/value pairs' do
|
69
69
|
expect(instance.environment_string({ :HOME => '/', :http_proxy => 'http://foo' }))
|
70
|
-
.to
|
70
|
+
.to eq 'env HOME="/" http_proxy="http://foo" HTTP_PROXY="http://foo"'
|
71
71
|
end
|
72
72
|
|
73
73
|
it 'takes an env hash with var_name/value[Array] pairs' do
|
74
74
|
expect(instance.environment_string({ :LD_PATH => ['/', '/tmp'] }))
|
75
|
-
.to
|
75
|
+
.to eq "env LD_PATH=\"/:/tmp\""
|
76
76
|
end
|
77
77
|
end
|
78
78
|
|
@@ -133,6 +133,14 @@ module Beaker
|
|
133
133
|
expect(filename).to be === correct
|
134
134
|
end
|
135
135
|
|
136
|
+
it 'builds the filename correctly for amazon-based platforms' do
|
137
|
+
@platform = 'amazon-2023-x86_64'
|
138
|
+
allow(instance).to receive(:is_pe?).and_return(true)
|
139
|
+
filename = instance.repo_filename('pkg_name', 'pkg_version')
|
140
|
+
correct = 'pl-pkg_name-pkg_version-amazon-2023-x86_64.repo'
|
141
|
+
expect(filename).to be === correct
|
142
|
+
end
|
143
|
+
|
136
144
|
it 'builds the filename correctly for debian-based platforms' do
|
137
145
|
@platform = 'debian-8-x86_64'
|
138
146
|
filename = instance.repo_filename('pkg_name', 'pkg_version10')
|
@@ -171,7 +171,7 @@ module Beaker
|
|
171
171
|
pkg = 'pkg'
|
172
172
|
expect(Beaker::Command).to receive(:new).with("apt-get install --force-yes -y #{pkg}", [], { :prepend_cmds => nil, :cmdexe => false }).and_return('')
|
173
173
|
expect(instance).to receive(:exec).with('', {}).and_return(generate_result("hello", { :exit_code => 0 }))
|
174
|
-
expect(instance.install_package(pkg)).to
|
174
|
+
expect(instance.install_package(pkg)).to eq "hello"
|
175
175
|
end
|
176
176
|
end
|
177
177
|
|
@@ -180,7 +180,7 @@ module Beaker
|
|
180
180
|
pkg = 'fedora_package'
|
181
181
|
expect(Beaker::Command).to receive(:new).with("dnf -y install #{pkg}", [], { :prepend_cmds => nil, :cmdexe => false }).and_return('')
|
182
182
|
expect(instance).to receive(:exec).with('', {}).and_return(generate_result("hello", { :exit_code => 0 }))
|
183
|
-
expect(instance.install_package(pkg)).to
|
183
|
+
expect(instance.install_package(pkg)).to eq "hello"
|
184
184
|
end
|
185
185
|
|
186
186
|
it "uses dnf on amazon-2023" do
|
@@ -188,7 +188,7 @@ module Beaker
|
|
188
188
|
pkg = 'amazon_package'
|
189
189
|
expect(Beaker::Command).to receive(:new).with("dnf -y install #{pkg}", [], { :prepend_cmds => nil, :cmdexe => false }).and_return('')
|
190
190
|
expect(instance).to receive(:exec).with('', {}).and_return(generate_result("hello", { :exit_code => 0 }))
|
191
|
-
expect(instance.install_package(pkg)).to
|
191
|
+
expect(instance.install_package(pkg)).to eq "hello"
|
192
192
|
end
|
193
193
|
|
194
194
|
it "uses pacman on archlinux" do
|
@@ -196,7 +196,7 @@ module Beaker
|
|
196
196
|
pkg = 'archlinux_package'
|
197
197
|
expect(Beaker::Command).to receive(:new).with("pacman -S --noconfirm #{pkg}", [], { :prepend_cmds => nil, :cmdexe => false }).and_return('')
|
198
198
|
expect(instance).to receive(:exec).with('', {}).and_return(generate_result("hello", { :exit_code => 0 }))
|
199
|
-
expect(instance.install_package(pkg)).to
|
199
|
+
expect(instance.install_package(pkg)).to eq "hello"
|
200
200
|
end
|
201
201
|
end
|
202
202
|
|
@@ -206,7 +206,7 @@ module Beaker
|
|
206
206
|
@opts = { 'platform' => platform }
|
207
207
|
expect(Beaker::Command).to receive(:new).with("apt-get purge -y pkg", [], { :prepend_cmds => nil, :cmdexe => false }).and_return('')
|
208
208
|
expect(instance).to receive(:exec).with('', {}).and_return(generate_result("hello", { :exit_code => 0 }))
|
209
|
-
expect(instance.uninstall_package('pkg')).to
|
209
|
+
expect(instance.uninstall_package('pkg')).to eq "hello"
|
210
210
|
end
|
211
211
|
|
212
212
|
it "uses dnf on fedora" do
|
@@ -214,7 +214,7 @@ module Beaker
|
|
214
214
|
pkg = 'fedora_package'
|
215
215
|
expect(Beaker::Command).to receive(:new).with("dnf -y remove #{pkg}", [], { :prepend_cmds => nil, :cmdexe => false }).and_return('')
|
216
216
|
expect(instance).to receive(:exec).with('', {}).and_return(generate_result("hello", { :exit_code => 0 }))
|
217
|
-
expect(instance.uninstall_package(pkg)).to
|
217
|
+
expect(instance.uninstall_package(pkg)).to eq "hello"
|
218
218
|
end
|
219
219
|
end
|
220
220
|
end
|
@@ -225,7 +225,7 @@ module Beaker
|
|
225
225
|
@opts = { 'platform' => platform }
|
226
226
|
expect(Beaker::Command).to receive(:new).with("apt-get install -o Dpkg::Options::='--force-confold' -y --force-yes pkg", [], { :prepend_cmds => nil, :cmdexe => false }).and_return('')
|
227
227
|
expect(instance).to receive(:exec).with('', {}).and_return(generate_result("hello", { :exit_code => 0 }))
|
228
|
-
expect(instance.upgrade_package('pkg')).to
|
228
|
+
expect(instance.upgrade_package('pkg')).to eq "hello"
|
229
229
|
end
|
230
230
|
end
|
231
231
|
end
|
@@ -236,7 +236,7 @@ module Beaker
|
|
236
236
|
pkg = 'redhat_package'
|
237
237
|
expect(Beaker::Command).to receive(:new).with("rpm -Uvh #{pkg} ", [], { :prepend_cmds => nil, :cmdexe => false }).and_return('')
|
238
238
|
expect(instance).to receive(:exec).with('', {}).and_return(generate_result("hello", { :exit_code => 0 }))
|
239
|
-
expect(instance.install_package_with_rpm(pkg)).to
|
239
|
+
expect(instance.install_package_with_rpm(pkg)).to eq "hello"
|
240
240
|
end
|
241
241
|
|
242
242
|
it "accepts a package and additional options" do
|
@@ -245,7 +245,7 @@ module Beaker
|
|
245
245
|
cmdline_args = '--foo'
|
246
246
|
expect(Beaker::Command).to receive(:new).with("rpm #{cmdline_args} -Uvh #{pkg} ", [], { :prepend_cmds => nil, :cmdexe => false }).and_return('')
|
247
247
|
expect(instance).to receive(:exec).with('', {}).and_return(generate_result("hello", { :exit_code => 0 }))
|
248
|
-
expect(instance.install_package_with_rpm(pkg, cmdline_args)).to
|
248
|
+
expect(instance.install_package_with_rpm(pkg, cmdline_args)).to eq "hello"
|
249
249
|
end
|
250
250
|
end
|
251
251
|
|
@@ -255,7 +255,7 @@ module Beaker
|
|
255
255
|
'https://myproxy.com:3128',
|
256
256
|
'http://myproxy.com:3128',].each do |url|
|
257
257
|
it "correctly extracts rpm proxy options for #{url}" do
|
258
|
-
expect(instance.extract_rpm_proxy_options(url)).to
|
258
|
+
expect(instance.extract_rpm_proxy_options(url)).to eq '--httpproxy myproxy.com --httpport 3128'
|
259
259
|
end
|
260
260
|
end
|
261
261
|
|
data/spec/beaker/host_spec.rb
CHANGED
@@ -256,7 +256,7 @@ module Beaker
|
|
256
256
|
allow(host).to receive(:exec).and_return(result)
|
257
257
|
|
258
258
|
expect(Beaker::Command).to receive(:new).with("mkdir -p \"test/test/test\"")
|
259
|
-
expect(host.mkdir_p('test/test/test')).to
|
259
|
+
expect(host.mkdir_p('test/test/test')).to eq true
|
260
260
|
end
|
261
261
|
|
262
262
|
it "does the right thing on a bash host, identified as is_cygwin=nil" do
|
@@ -267,7 +267,7 @@ module Beaker
|
|
267
267
|
allow(host).to receive(:exec).and_return(result)
|
268
268
|
|
269
269
|
expect(Beaker::Command).to receive(:new).with("mkdir -p \"test/test/test\"")
|
270
|
-
expect(host.mkdir_p('test/test/test')).to
|
270
|
+
expect(host.mkdir_p('test/test/test')).to eq true
|
271
271
|
end
|
272
272
|
|
273
273
|
it "does the right thing on a non-bash host, identified as is_cygwin=false (powershell)" do
|
@@ -284,26 +284,26 @@ module Beaker
|
|
284
284
|
"-NoProfile",
|
285
285
|
"-NonInteractive",
|
286
286
|
"-Command New-Item -Path 'test\\test\\test' -ItemType 'directory'",])
|
287
|
-
expect(host.mkdir_p('test/test/test')).to
|
287
|
+
expect(host.mkdir_p('test/test/test')).to eq true
|
288
288
|
end
|
289
289
|
end
|
290
290
|
|
291
291
|
describe "#touch" do
|
292
292
|
it "generates the right absolute command for a windows host" do
|
293
293
|
@platform = 'windows'
|
294
|
-
expect(host.touch('touched_file')).to
|
294
|
+
expect(host.touch('touched_file')).to eq "c:\\\\windows\\\\system32\\\\cmd.exe /c echo. 2> touched_file"
|
295
295
|
end
|
296
296
|
|
297
297
|
%w[centos redhat].each do |platform|
|
298
298
|
it "generates the right absolute command for a #{platform} host" do
|
299
299
|
@platform = platform
|
300
|
-
expect(host.touch('touched_file')).to
|
300
|
+
expect(host.touch('touched_file')).to eq "/bin/touch touched_file"
|
301
301
|
end
|
302
302
|
end
|
303
303
|
|
304
304
|
it "generates the right absolute command for an osx host" do
|
305
305
|
@platform = 'osx'
|
306
|
-
expect(host.touch('touched_file')).to
|
306
|
+
expect(host.touch('touched_file')).to eq "/usr/bin/touch touched_file"
|
307
307
|
end
|
308
308
|
end
|
309
309
|
|
data/spec/beaker/logger_spec.rb
CHANGED
@@ -205,11 +205,11 @@ module Beaker
|
|
205
205
|
let(:logger) { described_class.new(my_io, :quiet => true, :log_colors => log_colors) }
|
206
206
|
|
207
207
|
it 'overrides the specified log colors' do
|
208
|
-
expect(logger.log_colors[:error]).to
|
208
|
+
expect(logger.log_colors[:error]).to eq Beaker::Logger::BLACK
|
209
209
|
end
|
210
210
|
|
211
211
|
it 'leaves other colors as the default' do
|
212
|
-
expect(logger.log_colors[:warn]).to
|
212
|
+
expect(logger.log_colors[:warn]).to eq Beaker::Logger::BRIGHT_RED
|
213
213
|
end
|
214
214
|
end
|
215
215
|
|
@@ -220,11 +220,11 @@ module Beaker
|
|
220
220
|
|
221
221
|
context 'when using the default log colors' do
|
222
222
|
it 'overrides notify with NORMAL' do
|
223
|
-
expect(logger.log_colors[:notify]).to
|
223
|
+
expect(logger.log_colors[:notify]).to eq Beaker::Logger::NORMAL
|
224
224
|
end
|
225
225
|
|
226
226
|
it 'overrides info with NORMAL' do
|
227
|
-
expect(logger.log_colors[:info]).to
|
227
|
+
expect(logger.log_colors[:info]).to eq Beaker::Logger::NORMAL
|
228
228
|
end
|
229
229
|
end
|
230
230
|
|
@@ -238,15 +238,15 @@ module Beaker
|
|
238
238
|
let(:logger) { described_class.new(my_io, :quiet => true, :log_colors => log_colors) }
|
239
239
|
|
240
240
|
it 'overrides the specified log colors' do
|
241
|
-
expect(logger.log_colors[:error]).to
|
241
|
+
expect(logger.log_colors[:error]).to eq Beaker::Logger::BLACK
|
242
242
|
end
|
243
243
|
|
244
244
|
it 'does not override notify with NORMAL' do
|
245
|
-
expect(logger.log_colors[:notify]).not_to
|
245
|
+
expect(logger.log_colors[:notify]).not_to eq Beaker::Logger::NORMAL
|
246
246
|
end
|
247
247
|
|
248
248
|
it 'does not override info with NORMAL' do
|
249
|
-
expect(logger.log_colors[:notify]).not_to
|
249
|
+
expect(logger.log_colors[:notify]).not_to eq Beaker::Logger::NORMAL
|
250
250
|
end
|
251
251
|
end
|
252
252
|
end
|
@@ -66,7 +66,7 @@ module Beaker
|
|
66
66
|
end
|
67
67
|
|
68
68
|
describe '#parse_hosts_string' do
|
69
|
-
it '
|
69
|
+
it 'returns a #new_host_options hash if given no arguments' do
|
70
70
|
host_options = parser.parse_hosts_string
|
71
71
|
expect(host_options).to be === parser.new_host_options
|
72
72
|
end
|
@@ -127,10 +127,10 @@ module Beaker
|
|
127
127
|
my_args = ['--log-level', 'debug', '-h', hosts_path]
|
128
128
|
|
129
129
|
expect(parser.parse_args(my_args)[:command_line]).to include(my_args.join(' '))
|
130
|
-
expect(parser.attribution[:command_line]).to
|
131
|
-
expect(parser.attribution[:hosts_file]).to
|
132
|
-
expect(parser.attribution[:log_level]).to
|
133
|
-
expect(parser.attribution[:pe_dir]).to
|
130
|
+
expect(parser.attribution[:command_line]).to eq 'cmd'
|
131
|
+
expect(parser.attribution[:hosts_file]).to eq 'cmd'
|
132
|
+
expect(parser.attribution[:log_level]).to eq 'cmd'
|
133
|
+
expect(parser.attribution[:pe_dir]).to eq 'preset'
|
134
134
|
end
|
135
135
|
|
136
136
|
describe 'does prioritization correctly' do
|
@@ -205,8 +205,8 @@ module Beaker
|
|
205
205
|
|
206
206
|
opts = parser.parse_args([])
|
207
207
|
attribution = parser.attribution
|
208
|
-
expect(opts[:level]).to
|
209
|
-
expect(attribution[:level]).to
|
208
|
+
expect(opts[:level]).to eq 'lowest'
|
209
|
+
expect(attribution[:level]).to eq 'preset'
|
210
210
|
end
|
211
211
|
|
212
212
|
it 'project options should have seventh priority' do
|
@@ -215,10 +215,10 @@ module Beaker
|
|
215
215
|
|
216
216
|
opts = parser.parse_args([])
|
217
217
|
attribution = parser.attribution
|
218
|
-
expect(opts[:ssh][:auth_methods]).to
|
219
|
-
expect(attribution[:ssh][:auth_methods]).to
|
220
|
-
expect(opts[:level]).to
|
221
|
-
expect(attribution[:level]).to
|
218
|
+
expect(opts[:ssh][:auth_methods]).to eq 'auth_project_123'
|
219
|
+
expect(attribution[:ssh][:auth_methods]).to eq 'project'
|
220
|
+
expect(opts[:level]).to eq 'seventh'
|
221
|
+
expect(attribution[:level]).to eq 'project'
|
222
222
|
end
|
223
223
|
|
224
224
|
it 'home directory options should have sixth priority' do
|
@@ -227,10 +227,10 @@ module Beaker
|
|
227
227
|
|
228
228
|
opts = parser.parse_args([])
|
229
229
|
attribution = parser.attribution
|
230
|
-
expect(opts[:ssh][:auth_methods]).to
|
231
|
-
expect(attribution[:ssh][:auth_methods]).to
|
232
|
-
expect(opts[:level]).to
|
233
|
-
expect(attribution[:level]).to
|
230
|
+
expect(opts[:ssh][:auth_methods]).to eq 'auth_home_123'
|
231
|
+
expect(attribution[:ssh][:auth_methods]).to eq 'homedir'
|
232
|
+
expect(opts[:level]).to eq 'sixth'
|
233
|
+
expect(attribution[:level]).to eq 'homedir'
|
234
234
|
end
|
235
235
|
|
236
236
|
it 'subcommand_options should have fifth priority' do
|
@@ -239,8 +239,8 @@ module Beaker
|
|
239
239
|
|
240
240
|
opts = parser.parse_args([])
|
241
241
|
attribution = parser.attribution
|
242
|
-
expect(opts[:level]).to
|
243
|
-
expect(attribution[:level]).to
|
242
|
+
expect(opts[:level]).to eq 'fifth'
|
243
|
+
expect(attribution[:level]).to eq 'subcommand'
|
244
244
|
end
|
245
245
|
|
246
246
|
it 'options file has fourth priority' do
|
@@ -250,16 +250,16 @@ module Beaker
|
|
250
250
|
opts = parser.parse_args([])
|
251
251
|
attribution = parser.attribution
|
252
252
|
expect(attribution[:ssh]).to be_a(Hash)
|
253
|
-
expect(attribution[:ssh][:auth_methods]).to
|
254
|
-
expect(attribution[:ssh][:user_known_hosts_file]).to
|
255
|
-
expect(attribution[:ssh][:config]).to
|
256
|
-
expect(attribution[:ssh][:verify_host_key]).to
|
257
|
-
expect(attribution[:ssh][:port]).to
|
258
|
-
expect(attribution[:ssh][:forward_agent]).to
|
259
|
-
expect(attribution[:ssh][:keys]).to
|
260
|
-
expect(attribution[:ssh][:keepalive]).to
|
261
|
-
expect(opts[:level]).to
|
262
|
-
expect(attribution[:level]).to
|
253
|
+
expect(attribution[:ssh][:auth_methods]).to eq 'options_file'
|
254
|
+
expect(attribution[:ssh][:user_known_hosts_file]).to eq 'options_file'
|
255
|
+
expect(attribution[:ssh][:config]).to eq 'preset'
|
256
|
+
expect(attribution[:ssh][:verify_host_key]).to eq 'preset'
|
257
|
+
expect(attribution[:ssh][:port]).to eq 'preset'
|
258
|
+
expect(attribution[:ssh][:forward_agent]).to eq 'preset'
|
259
|
+
expect(attribution[:ssh][:keys]).to eq 'preset'
|
260
|
+
expect(attribution[:ssh][:keepalive]).to eq 'preset'
|
261
|
+
expect(opts[:level]).to eq 'fourth'
|
262
|
+
expect(attribution[:level]).to eq 'options_file'
|
263
263
|
end
|
264
264
|
|
265
265
|
it 'host file CONFIG section has third priority' do
|
@@ -268,8 +268,8 @@ module Beaker
|
|
268
268
|
|
269
269
|
opts = parser.parse_args([])
|
270
270
|
attribution = parser.attribution
|
271
|
-
expect(opts[:level]).to
|
272
|
-
expect(attribution[:level]).to
|
271
|
+
expect(opts[:level]).to eq 'third'
|
272
|
+
expect(attribution[:level]).to eq 'host_file'
|
273
273
|
end
|
274
274
|
|
275
275
|
it 'command line arguments have second priority' do
|
@@ -278,8 +278,8 @@ module Beaker
|
|
278
278
|
|
279
279
|
opts = parser.parse_args([])
|
280
280
|
attribution = parser.attribution
|
281
|
-
expect(opts[:level]).to
|
282
|
-
expect(attribution[:level]).to
|
281
|
+
expect(opts[:level]).to eq 'second'
|
282
|
+
expect(attribution[:level]).to eq 'cmd'
|
283
283
|
end
|
284
284
|
|
285
285
|
it 'env vars have highest priority' do
|
@@ -287,8 +287,8 @@ module Beaker
|
|
287
287
|
|
288
288
|
opts = parser.parse_args([])
|
289
289
|
attribution = parser.attribution
|
290
|
-
expect(opts[:level]).to
|
291
|
-
expect(attribution[:level]).to
|
290
|
+
expect(opts[:level]).to eq 'highest'
|
291
|
+
expect(attribution[:level]).to eq 'env'
|
292
292
|
end
|
293
293
|
|
294
294
|
it "loads the options file from a project file" do
|
@@ -325,12 +325,12 @@ module Beaker
|
|
325
325
|
args = ["-h", hosts_path, "--log-level", log_level, "--type", type, "--install", "PUPPET/1.0,HIERA/hello"]
|
326
326
|
output = parser.parse_args(args)
|
327
327
|
attribution = parser.attribution
|
328
|
-
expect(output[:hosts_file]).to
|
329
|
-
expect(attribution[:hosts_file]).to
|
330
|
-
expect(output[:jenkins_build_url]).to
|
331
|
-
expect(attribution[:jenkins_build_url]).to
|
328
|
+
expect(output[:hosts_file]).to eq hosts_path
|
329
|
+
expect(attribution[:hosts_file]).to eq 'cmd'
|
330
|
+
expect(output[:jenkins_build_url]).to eq build_url
|
331
|
+
expect(attribution[:jenkins_build_url]).to eq 'env'
|
332
332
|
expect(output[:install]).to include('git://github.com/puppetlabs/hiera.git#hello')
|
333
|
-
expect(attribution[:install]).to
|
333
|
+
expect(attribution[:install]).to eq 'runtime'
|
334
334
|
|
335
335
|
ENV["BUILD_URL"] = old_build_url
|
336
336
|
end
|
@@ -567,20 +567,20 @@ module Beaker
|
|
567
567
|
hosts['HOSTS'][:master][:ssh] = { :user => 'hello' }
|
568
568
|
parser.instance_variable_set(:@options, hosts)
|
569
569
|
parser.normalize_args
|
570
|
-
expect(hosts['HOSTS'][:master][:user]).to
|
570
|
+
expect(hosts['HOSTS'][:master][:user]).to eq 'hello'
|
571
571
|
end
|
572
572
|
|
573
573
|
it 'uses default user if there is an ssh hash, but no ssh[:user]' do
|
574
574
|
hosts['HOSTS'][:master][:ssh] = { :hello => 'hello' }
|
575
575
|
parser.instance_variable_set(:@options, hosts)
|
576
576
|
parser.normalize_args
|
577
|
-
expect(hosts['HOSTS'][:master][:user]).to
|
577
|
+
expect(hosts['HOSTS'][:master][:user]).to eq 'root'
|
578
578
|
end
|
579
579
|
|
580
580
|
it 'uses default user if no ssh hash' do
|
581
581
|
parser.instance_variable_set(:@options, hosts)
|
582
582
|
parser.normalize_args
|
583
|
-
expect(hosts['HOSTS'][:master][:user]).to
|
583
|
+
expect(hosts['HOSTS'][:master][:user]).to eq 'root'
|
584
584
|
end
|
585
585
|
end
|
586
586
|
end
|
@@ -88,6 +88,11 @@ module Beaker
|
|
88
88
|
expect(platform.with_version_codename).to be === 'debian-squeeze-xxx'
|
89
89
|
end
|
90
90
|
|
91
|
+
it "can convert ubuntu-2404-xxx to ubuntu-noble-xxx" do
|
92
|
+
@name = 'ubuntu-2404-xxx'
|
93
|
+
expect(platform.with_version_codename).to be === 'ubuntu-noble-xxx'
|
94
|
+
end
|
95
|
+
|
91
96
|
it "can convert ubuntu-2204-xxx to ubuntu-jammy-xxx" do
|
92
97
|
@name = 'ubuntu-2204-xxx'
|
93
98
|
expect(platform.with_version_codename).to be === 'ubuntu-jammy-xxx'
|
@@ -57,23 +57,23 @@ module Beaker
|
|
57
57
|
|
58
58
|
describe 'execute_subcommand' do
|
59
59
|
it "determines if we should execute the init subcommand" do
|
60
|
-
expect(subject.execute_subcommand?("init")).to
|
60
|
+
expect(subject.execute_subcommand?("init")).to eq true
|
61
61
|
end
|
62
62
|
|
63
63
|
it "does not attempt to execute intialize as a subcommand" do
|
64
|
-
expect(subject.execute_subcommand?("initialize")).to
|
64
|
+
expect(subject.execute_subcommand?("initialize")).to eq false
|
65
65
|
end
|
66
66
|
|
67
67
|
it "determines if we should execute the help subcommand" do
|
68
|
-
expect(subject.execute_subcommand?("help")).to
|
68
|
+
expect(subject.execute_subcommand?("help")).to eq true
|
69
69
|
end
|
70
70
|
|
71
71
|
it "determines if we should execute the provision subcommand" do
|
72
|
-
expect(subject.execute_subcommand?("provision")).to
|
72
|
+
expect(subject.execute_subcommand?("provision")).to eq true
|
73
73
|
end
|
74
74
|
|
75
75
|
it "determines that a subcommand should not be executed" do
|
76
|
-
expect(subject.execute_subcommand?("notasubcommand")).to
|
76
|
+
expect(subject.execute_subcommand?("notasubcommand")).to eq false
|
77
77
|
end
|
78
78
|
end
|
79
79
|
|