beaker 3.29.0 → 3.30.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/CHANGELOG.md +15 -1
- data/acceptance/lib/beaker/acceptance/install_utils.rb +1 -1
- data/beaker.gemspec +1 -0
- data/lib/beaker/cli.rb +1 -2
- data/lib/beaker/dsl/structure.rb +6 -6
- data/lib/beaker/host.rb +3 -3
- data/lib/beaker/host/unix/exec.rb +2 -2
- data/lib/beaker/host/unix/pkg.rb +3 -3
- data/lib/beaker/host_prebuilt_steps.rb +5 -5
- data/lib/beaker/logger.rb +11 -0
- data/lib/beaker/options/parser.rb +16 -8
- data/lib/beaker/perf.rb +3 -3
- data/lib/beaker/platform.rb +1 -1
- data/lib/beaker/version.rb +1 -1
- data/spec/beaker/cli_spec.rb +22 -1
- data/spec/beaker/dsl/structure_spec.rb +7 -10
- data/spec/beaker/host_prebuilt_steps_spec.rb +1 -1
- data/spec/beaker/host_spec.rb +1 -2
- data/spec/beaker/logger_spec.rb +53 -43
- data/spec/beaker/options/parser_spec.rb +44 -3
- data/spec/helpers.rb +0 -1
- metadata +16 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
ZjllZDM3MjczNGU1ODhiOGM2M2ZhZTIwMTVjNjQ1MzYzNWRlMTQ2YQ==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
ZmE2ZDVjMDYxNjBhYzYzMTE1OWNjNDJkMTM1ZGU2YjBhNzNkZDA4MA==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
MTNiY2RiNDA4ZGJmMmExOGNlNzIyZGYzMDUzMTk3Yjc5NmFhZTM2NjNhZWRi
|
10
|
+
MDE3MWYxZDgxODlkN2VkOGIxNDA0N2Q0ZmY1MGNhNjdiZTRiZTQxYzIzYjNj
|
11
|
+
ODNhYjcyZmE0M2ZhMjNjZDZjODU1OWM3YjRiNzY5NWU4NDYzYWQ=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
YTQxOGZmNWNjOTJhOWY2ODQ4ZWNiMWRmMzg2MGE3ODI2M2U1M2JjNjU3MDBj
|
14
|
+
MmY3NTRkZjE1MWYzODIyOTc5OGNmMzNlZjVjYjQ5ZmNmZDdjZGM1NDM4Nzg0
|
15
|
+
MzllZDNjMzZmYmZkZWVkOGI3ODRjYWQzY2ExMjA0OTNlNjY1ZGY=
|
data/CHANGELOG.md
CHANGED
@@ -11,7 +11,21 @@ Tracking in this Changelog began for this project in version 3.25.0.
|
|
11
11
|
If you're looking for changes from before this, refer to the project's
|
12
12
|
git logs & PR history.
|
13
13
|
|
14
|
-
# [Unreleased](https://github.com/puppetlabs/beaker/compare/3.
|
14
|
+
# [Unreleased](https://github.com/puppetlabs/beaker/compare/3.30.0...master)
|
15
|
+
|
16
|
+
# [3.30.0](https://github.com/puppetlabs/beaker/compare/3.29.0...3.30.0) - 2018-01-10
|
17
|
+
|
18
|
+
### Changed
|
19
|
+
|
20
|
+
- Use `host.hostname` when combining options host_hash with host instance options
|
21
|
+
|
22
|
+
### Removed
|
23
|
+
|
24
|
+
- `amazon` as a platform value
|
25
|
+
|
26
|
+
### Added
|
27
|
+
|
28
|
+
- Load project options from .beaker.yml
|
15
29
|
|
16
30
|
# [3.29.0](https://github.com/puppetlabs/beaker/compare/3.28.0...3.29.0) - 2017-11-16
|
17
31
|
|
data/beaker.gemspec
CHANGED
@@ -55,6 +55,7 @@ Gem::Specification.new do |s|
|
|
55
55
|
# Optional provisioner specific support
|
56
56
|
s.add_runtime_dependency 'beaker-docker', '~> 0.1'
|
57
57
|
s.add_runtime_dependency 'beaker-aws', '~> 0.1'
|
58
|
+
s.add_runtime_dependency 'beaker-abs', '~> 0.4'
|
58
59
|
s.add_runtime_dependency 'beaker-vmpooler', '~> 1.0'
|
59
60
|
s.add_runtime_dependency 'beaker-google', '~> 0.1'
|
60
61
|
s.add_runtime_dependency 'beaker-vagrant', '~> 0.1'
|
data/lib/beaker/cli.rb
CHANGED
@@ -41,7 +41,6 @@ module Beaker
|
|
41
41
|
return self
|
42
42
|
end
|
43
43
|
|
44
|
-
|
45
44
|
#add additional paths to the LOAD_PATH
|
46
45
|
if not @options[:load_path].empty?
|
47
46
|
@options[:load_path].each do |path|
|
@@ -257,7 +256,7 @@ module Beaker
|
|
257
256
|
file_host_hash = h.merge(file_host_hash)
|
258
257
|
@hosts.each do |host|
|
259
258
|
if host_name.to_s == host.name.to_s
|
260
|
-
newly_keyed_hosts_entries[host.
|
259
|
+
newly_keyed_hosts_entries[host.hostname] = file_host_hash.merge(host.host_hash)
|
261
260
|
break
|
262
261
|
end
|
263
262
|
end
|
data/lib/beaker/dsl/structure.rb
CHANGED
@@ -39,9 +39,10 @@ module Beaker
|
|
39
39
|
logger.notify "\n* #{step_name}\n"
|
40
40
|
set_current_step_name(step_name)
|
41
41
|
if block_given?
|
42
|
-
logger.step_in()
|
43
42
|
begin
|
44
|
-
|
43
|
+
logger.with_indent do
|
44
|
+
yield
|
45
|
+
end
|
45
46
|
rescue Exception => e
|
46
47
|
if(@options.has_key?(:debug_errors) && @options[:debug_errors] == true)
|
47
48
|
logger.info("Exception raised during step execution and debug-errors option is set, entering pry. Exception was: #{e.inspect}")
|
@@ -50,7 +51,6 @@ module Beaker
|
|
50
51
|
end
|
51
52
|
raise e
|
52
53
|
end
|
53
|
-
logger.step_out()
|
54
54
|
end
|
55
55
|
end
|
56
56
|
|
@@ -120,9 +120,9 @@ module Beaker
|
|
120
120
|
logger.notify "\n#{my_name}\n"
|
121
121
|
set_current_test_name(my_name)
|
122
122
|
if block_given?
|
123
|
-
logger.
|
124
|
-
|
125
|
-
|
123
|
+
logger.with_indent do
|
124
|
+
yield
|
125
|
+
end
|
126
126
|
end
|
127
127
|
end
|
128
128
|
|
data/lib/beaker/host.rb
CHANGED
@@ -332,11 +332,11 @@ module Beaker
|
|
332
332
|
# the options should come at the end of the method signature (rubyism)
|
333
333
|
# and they shouldn't be ssh specific
|
334
334
|
|
335
|
-
@logger.step_in()
|
336
335
|
seconds = Benchmark.realtime {
|
337
|
-
|
336
|
+
@logger.with_indent do
|
337
|
+
result = connection.execute(cmdline, options, output_callback)
|
338
|
+
end
|
338
339
|
}
|
339
|
-
@logger.step_out()
|
340
340
|
|
341
341
|
if not options[:silent]
|
342
342
|
@logger.debug "\n#{log_prefix} executed in %0.2f seconds" % seconds
|
@@ -168,7 +168,7 @@ module Unix::Exec
|
|
168
168
|
exec(Beaker::Command.new("service ssh restart"))
|
169
169
|
when /el-7|centos-7|redhat-7|oracle-7|scientific-7|eos-7|fedora-(1[4-9]|2[0-9])|archlinux-/
|
170
170
|
exec(Beaker::Command.new("systemctl restart sshd.service"))
|
171
|
-
when /el-|centos|fedora|redhat|
|
171
|
+
when /el-|centos|fedora|redhat|oracle|scientific|eos/
|
172
172
|
exec(Beaker::Command.new("/sbin/service sshd restart"))
|
173
173
|
when /sles/
|
174
174
|
exec(Beaker::Command.new("rcsshd restart"))
|
@@ -196,7 +196,7 @@ module Unix::Exec
|
|
196
196
|
directory = create_tmpdir_on(self)
|
197
197
|
exec(Beaker::Command.new("echo 'PermitUserEnvironment yes' | cat - /etc/ssh/sshd_config > #{directory}/sshd_config.permit"))
|
198
198
|
exec(Beaker::Command.new("mv #{directory}/sshd_config.permit /etc/ssh/sshd_config"))
|
199
|
-
when /el-|centos|fedora|redhat|
|
199
|
+
when /el-|centos|fedora|redhat|oracle|scientific|eos/
|
200
200
|
directory = create_tmpdir_on(self)
|
201
201
|
exec(Beaker::Command.new("echo 'PermitUserEnvironment yes' | cat - /etc/ssh/sshd_config > #{directory}/sshd_config.permit"))
|
202
202
|
exec(Beaker::Command.new("mv #{directory}/sshd_config.permit /etc/ssh/sshd_config"))
|
data/lib/beaker/host/unix/pkg.rb
CHANGED
@@ -39,7 +39,7 @@ module Unix::Pkg
|
|
39
39
|
when /el-4/
|
40
40
|
@logger.debug("Package query not supported on rhel4")
|
41
41
|
return false
|
42
|
-
when /cisco|fedora|
|
42
|
+
when /cisco|fedora|centos|eos|el-/
|
43
43
|
result = execute("rpm -q #{name}", opts) { |result| result }
|
44
44
|
when /ubuntu|debian|cumulus|huaweios/
|
45
45
|
result = execute("dpkg -s #{name}", opts) { |result| result }
|
@@ -407,8 +407,8 @@ module Unix::Pkg
|
|
407
407
|
when /^(solaris)$/
|
408
408
|
release_path_end, release_file = solaris_puppet_agent_dev_package_info(
|
409
409
|
puppet_collection, puppet_agent_version, opts )
|
410
|
-
when /^(sles|aix|el|centos|oracle|redhat|
|
411
|
-
variant = 'el' if variant.match(/(?:el|centos|oracle|redhat|
|
410
|
+
when /^(sles|aix|el|centos|oracle|redhat|scientific)$/
|
411
|
+
variant = 'el' if variant.match(/(?:el|centos|oracle|redhat|scientific)/)
|
412
412
|
arch = 'ppc' if variant == 'aix' && arch == 'power'
|
413
413
|
version = '7.1' if variant == 'aix' && version == '7.2'
|
414
414
|
release_path_end = "#{variant}/#{version}/#{puppet_collection}/#{arch}"
|
@@ -444,7 +444,7 @@ module Beaker
|
|
444
444
|
host.exec(Command.new("sudo su -c \"service ssh restart\""), {:pty => true})
|
445
445
|
elsif host['platform'] =~ /arch|centos-7|el-7|redhat-7|fedora-(1[4-9]|2[0-9])/
|
446
446
|
host.exec(Command.new("sudo -E systemctl restart sshd.service"), {:pty => true})
|
447
|
-
elsif host['platform'] =~ /centos|el-|redhat|
|
447
|
+
elsif host['platform'] =~ /centos|el-|redhat|fedora|eos/
|
448
448
|
host.exec(Command.new("sudo -E /sbin/service sshd reload"), {:pty => true})
|
449
449
|
elsif host['platform'] =~ /(free|open)bsd/
|
450
450
|
host.exec(Command.new("sudo /etc/rc.d/sshd restart"))
|
@@ -463,7 +463,7 @@ module Beaker
|
|
463
463
|
def disable_se_linux host, opts
|
464
464
|
logger = opts[:logger]
|
465
465
|
block_on host do |host|
|
466
|
-
if host['platform'] =~ /centos|el-|redhat|
|
466
|
+
if host['platform'] =~ /centos|el-|redhat|fedora|eos/
|
467
467
|
@logger.debug("Disabling se_linux on #{host.name}")
|
468
468
|
host.exec(Command.new("sudo su -c \"setenforce 0\""), {:pty => true})
|
469
469
|
else
|
@@ -479,7 +479,7 @@ module Beaker
|
|
479
479
|
def disable_iptables host, opts
|
480
480
|
logger = opts[:logger]
|
481
481
|
block_on host do |host|
|
482
|
-
if host['platform'] =~ /centos|el-|redhat|
|
482
|
+
if host['platform'] =~ /centos|el-|redhat|fedora|eos/
|
483
483
|
logger.debug("Disabling iptables on #{host.name}")
|
484
484
|
host.exec(Command.new("sudo su -c \"/etc/init.d/iptables stop\""), {:pty => true})
|
485
485
|
else
|
@@ -502,7 +502,7 @@ module Beaker
|
|
502
502
|
case host['platform']
|
503
503
|
when /ubuntu/, /debian/, /cumulus/
|
504
504
|
host.exec(Command.new("echo 'Acquire::http::Proxy \"#{opts[:package_proxy]}/\";' >> /etc/apt/apt.conf.d/10proxy"))
|
505
|
-
when /^el-/, /centos/, /fedora/, /redhat/, /
|
505
|
+
when /^el-/, /centos/, /fedora/, /redhat/, /eos/
|
506
506
|
host.exec(Command.new("echo 'proxy=#{opts[:package_proxy]}/' >> /etc/yum.conf"))
|
507
507
|
else
|
508
508
|
logger.debug("Attempting to enable package manager proxy support on non-supported platform: #{host.name}: #{host['platform']}")
|
@@ -596,7 +596,7 @@ module Beaker
|
|
596
596
|
#
|
597
597
|
# @return [Boolean] if the host is el_based
|
598
598
|
def el_based? host
|
599
|
-
['centos','redhat','
|
599
|
+
['centos','redhat','scientific','el','oracle'].include?(host['platform'].variant)
|
600
600
|
end
|
601
601
|
|
602
602
|
end
|
data/lib/beaker/logger.rb
CHANGED
@@ -232,9 +232,19 @@ module Beaker
|
|
232
232
|
end
|
233
233
|
end
|
234
234
|
|
235
|
+
# Indent the step level for the duration of block.
|
236
|
+
def with_indent(&block)
|
237
|
+
old_line_prefix = self.line_prefix.dup
|
238
|
+
self.line_prefix << ' '
|
239
|
+
yield
|
240
|
+
ensure
|
241
|
+
self.line_prefix = old_line_prefix
|
242
|
+
end
|
243
|
+
|
235
244
|
# Sets the step level appropriately for logging to be indented correctly
|
236
245
|
#
|
237
246
|
# @return nil
|
247
|
+
# @deprecated use {Logger#with_indent}
|
238
248
|
def step_in
|
239
249
|
self.line_prefix = self.line_prefix + ' '
|
240
250
|
end
|
@@ -242,6 +252,7 @@ module Beaker
|
|
242
252
|
# Sets the step level appropriately for logging to be indented correctly
|
243
253
|
#
|
244
254
|
# @return nil
|
255
|
+
# @deprecated use {Logger#with_indent}
|
245
256
|
def step_out
|
246
257
|
self.line_prefix = self.line_prefix.chop.chop
|
247
258
|
end
|
@@ -206,7 +206,8 @@ module Beaker
|
|
206
206
|
# 4. options file values
|
207
207
|
# 5. subcommand options, if executing beaker subcommands
|
208
208
|
# 6. subcommand options from $HOME/.beaker/subcommand_options.yaml
|
209
|
-
# 7.
|
209
|
+
# 7. project values in .beaker.yml
|
210
|
+
# 8. default or preset values are given the lowest priority
|
210
211
|
#
|
211
212
|
# @param [Array] args ARGV or a provided arguments array
|
212
213
|
# @raise [ArgumentError] Raises error on bad input
|
@@ -217,18 +218,25 @@ module Beaker
|
|
217
218
|
cmd_line_options[:command_line] = ([$0] + args).join(' ')
|
218
219
|
@attribution = @attribution.merge(tag_sources(cmd_line_options, "flag"))
|
219
220
|
|
221
|
+
# Merge options in reverse precedence order. First project options,
|
222
|
+
# then global options from $HOME/.beaker/subcommand_options.yaml,
|
223
|
+
# then subcommand options in the project.
|
220
224
|
subcommand_options_file = Beaker::Subcommands::SubcommandUtil::SUBCOMMAND_OPTIONS
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
opts =
|
225
|
+
{
|
226
|
+
"project" => ".beaker.yml",
|
227
|
+
"homedir" => "#{ENV['HOME']}/#{subcommand_options_file}",
|
228
|
+
"subcommand" => subcommand_options_file,
|
229
|
+
}.each_pair do |src, path|
|
230
|
+
opts = if src == "project"
|
231
|
+
Beaker::Options::SubcommandOptionsParser.parse_options_file(path)
|
232
|
+
else
|
233
|
+
Beaker::Options::SubcommandOptionsParser.parse_subcommand_options(args, path)
|
234
|
+
end
|
227
235
|
@attribution = @attribution.merge(tag_sources(opts, src))
|
228
236
|
@options.merge!(opts)
|
229
237
|
end
|
230
238
|
|
231
|
-
file_options = Beaker::Options::OptionsFileParser.parse_options_file(cmd_line_options[:options_file])
|
239
|
+
file_options = Beaker::Options::OptionsFileParser.parse_options_file(cmd_line_options[:options_file] || options[:options_file])
|
232
240
|
@attribution = @attribution.merge(tag_sources(file_options, "options_file"))
|
233
241
|
|
234
242
|
# merge together command line and file_options
|
data/lib/beaker/perf.rb
CHANGED
@@ -4,8 +4,8 @@ module Beaker
|
|
4
4
|
|
5
5
|
PERF_PACKAGES = ['sysstat']
|
6
6
|
# SLES does not treat sysstat as a service that can be started
|
7
|
-
PERF_SUPPORTED_PLATFORMS = /debian|ubuntu|redhat|
|
8
|
-
PERF_START_PLATFORMS = /debian|ubuntu|redhat|
|
7
|
+
PERF_SUPPORTED_PLATFORMS = /debian|ubuntu|redhat|centos|oracle|scientific|fedora|el|eos|cumulus|sles/
|
8
|
+
PERF_START_PLATFORMS = /debian|ubuntu|redhat|centos|oracle|scientific|fedora|el|eos|cumulus/
|
9
9
|
|
10
10
|
# Create the Perf instance and runs setup_perf_on_host on all hosts if --collect-perf-data
|
11
11
|
# was used as an option on the Baker command line invocation. Instances of this class do not
|
@@ -50,7 +50,7 @@ module Beaker
|
|
50
50
|
@logger.perf_output("Enabling aggressive sysstat polling")
|
51
51
|
if host['platform'] =~ /debian|ubuntu/
|
52
52
|
host.exec(Command.new('sed -i s/5-55\\\/10/*/ /etc/cron.d/sysstat'))
|
53
|
-
elsif host['platform'] =~ /centos|el|fedora|oracle|redhats|
|
53
|
+
elsif host['platform'] =~ /centos|el|fedora|oracle|redhats|scientific/
|
54
54
|
host.exec(Command.new('sed -i s/*\\\/10/*/ /etc/cron.d/sysstat'))
|
55
55
|
end
|
56
56
|
end
|
data/lib/beaker/platform.rb
CHANGED
@@ -3,7 +3,7 @@ module Beaker
|
|
3
3
|
# all String methods while adding several platform-specific use cases.
|
4
4
|
class Platform < String
|
5
5
|
# Supported platforms
|
6
|
-
PLATFORMS = /^(huaweios|cisco_nexus|cisco_ios_xr|(free|open)bsd|osx|centos|fedora|debian|oracle|redhat|
|
6
|
+
PLATFORMS = /^(huaweios|cisco_nexus|cisco_ios_xr|(free|open)bsd|osx|centos|fedora|debian|oracle|redhat|scientific|sles|ubuntu|windows|solaris|aix|archlinux|el|eos|cumulus|f5|netscaler)\-.+\-.+$/
|
7
7
|
# Platform version numbers vs. codenames conversion hash
|
8
8
|
PLATFORM_VERSION_CODES =
|
9
9
|
{ :debian => { "stretch" => "9",
|
data/lib/beaker/version.rb
CHANGED
data/spec/beaker/cli_spec.rb
CHANGED
@@ -47,6 +47,7 @@ module Beaker
|
|
47
47
|
|
48
48
|
let(:cli) {
|
49
49
|
allow(File).to receive(:exists?).and_return(true)
|
50
|
+
allow(File).to receive(:exists?).with('.beaker.yml').and_return(false)
|
50
51
|
Beaker::CLI.new.parse_options
|
51
52
|
}
|
52
53
|
|
@@ -61,7 +62,7 @@ module Beaker
|
|
61
62
|
end
|
62
63
|
end
|
63
64
|
|
64
|
-
|
65
|
+
describe '#combined_instance_and_options_hosts' do
|
65
66
|
let (:options_host) { {'HOSTS' => {'ubuntu' => {:options_attribute => 'options'}} }}
|
66
67
|
let (:instance_host ) {
|
67
68
|
[Beaker::Host.create('ubuntu', {:platform => 'host'}, {} )]
|
@@ -78,6 +79,26 @@ module Beaker
|
|
78
79
|
expect(merged_host['ubuntu'][:options_attribute]).to eq('options')
|
79
80
|
expect(merged_host['ubuntu'][:platform]).to eq('host')
|
80
81
|
end
|
82
|
+
|
83
|
+
context 'when hosts share IP addresses' do
|
84
|
+
let (:options_host) do
|
85
|
+
{'HOSTS' => {'host1' => {:options_attribute => 'options'},
|
86
|
+
'host2' => {:options_attribute => 'options'}}}
|
87
|
+
end
|
88
|
+
let (:instance_host ) do
|
89
|
+
[Beaker::Host.create('host1',
|
90
|
+
{:platform => 'host', :ip => '127.0.0.1'}, {} ),
|
91
|
+
Beaker::Host.create('host2',
|
92
|
+
{:platform => 'host', :ip => '127.0.0.1'}, {} )]
|
93
|
+
end
|
94
|
+
|
95
|
+
it 'creates separate entries for each host' do
|
96
|
+
expected_hosts = instance_host.map(&:hostname)
|
97
|
+
merged_hosts = cli.combined_instance_and_options_hosts
|
98
|
+
|
99
|
+
expect(merged_hosts.keys).to eq(expected_hosts)
|
100
|
+
end
|
101
|
+
end
|
81
102
|
end
|
82
103
|
|
83
104
|
context 'execute!' do
|
@@ -28,10 +28,9 @@ describe ClassMixedWithDSLStructure do
|
|
28
28
|
end
|
29
29
|
|
30
30
|
it 'yields if a block is given' do
|
31
|
-
expect( subject ).to receive( :logger ).and_return( logger ).exactly(
|
31
|
+
expect( subject ).to receive( :logger ).and_return( logger ).exactly(2).times
|
32
32
|
allow( subject ).to receive( :set_current_step_name )
|
33
|
-
|
34
|
-
expect( logger ).to receive( :step_out )
|
33
|
+
allow( logger ).to receive(:with_indent) { |&block| block.call }
|
35
34
|
expect( logger ).to receive( :notify )
|
36
35
|
expect( subject ).to receive( :foo )
|
37
36
|
subject.step 'blah' do
|
@@ -130,10 +129,9 @@ describe ClassMixedWithDSLStructure do
|
|
130
129
|
|
131
130
|
it 'yields if a block is given' do
|
132
131
|
subject.instance_variable_set(:@options, options)
|
133
|
-
expect( subject ).to receive( :logger ).and_return( logger ).exactly(
|
132
|
+
expect( subject ).to receive( :logger ).and_return( logger ).exactly(2).times
|
134
133
|
expect( logger ).to receive( :notify )
|
135
|
-
|
136
|
-
expect( logger ).to receive( :step_out )
|
134
|
+
allow( logger ).to receive(:with_indent) { |&block| block.call }
|
137
135
|
expect( subject ).to receive( :foo )
|
138
136
|
subject.manual_test 'blah' do
|
139
137
|
subject.foo
|
@@ -164,10 +162,9 @@ describe ClassMixedWithDSLStructure do
|
|
164
162
|
end
|
165
163
|
|
166
164
|
it 'yields if a block is given' do
|
167
|
-
expect( subject ).to receive( :logger ).and_return( logger ).exactly(
|
165
|
+
expect( subject ).to receive( :logger ).and_return( logger ).exactly(2).times
|
168
166
|
expect( logger ).to receive( :notify )
|
169
|
-
|
170
|
-
expect( logger ).to receive( :step_out )
|
167
|
+
allow( logger ).to receive(:with_indent) { |&block| block.call }
|
171
168
|
expect( subject ).to receive( :foo )
|
172
169
|
subject.test_name 'blah' do
|
173
170
|
subject.foo
|
@@ -383,4 +380,4 @@ describe ClassMixedWithDSLStructure do
|
|
383
380
|
end
|
384
381
|
end
|
385
382
|
|
386
|
-
end
|
383
|
+
end
|
@@ -85,7 +85,7 @@ describe Beaker do
|
|
85
85
|
]
|
86
86
|
end
|
87
87
|
|
88
|
-
['centos','el-','redhat','fedora','
|
88
|
+
['centos','el-','redhat','fedora','eos'].each do | rhel_like |
|
89
89
|
it_should_behave_like 'enables_root_login', rhel_like, [
|
90
90
|
"sudo su -c \"sed -ri 's/^#?PermitRootLogin no|^#?PermitRootLogin yes/PermitRootLogin yes/' /etc/ssh/sshd_config\"",
|
91
91
|
"sudo -E /sbin/service sshd reload"
|
data/spec/beaker/host_spec.rb
CHANGED
@@ -209,8 +209,7 @@ module Beaker
|
|
209
209
|
logger = double(:logger)
|
210
210
|
allow( logger ).to receive(:host_output)
|
211
211
|
allow( logger ).to receive(:debug)
|
212
|
-
allow( logger ).to receive(:
|
213
|
-
allow( logger ).to receive(:step_out)
|
212
|
+
allow( logger ).to receive(:with_indent) { |&block| block.call }
|
214
213
|
host.instance_variable_set :@logger, logger
|
215
214
|
conn = double(:connection)
|
216
215
|
allow( conn ).to receive(:execute).and_return(result)
|
data/spec/beaker/logger_spec.rb
CHANGED
@@ -47,11 +47,19 @@ module Beaker
|
|
47
47
|
end
|
48
48
|
|
49
49
|
context '#prefix_log_line' do
|
50
|
-
|
51
|
-
logger.line_prefix = ''
|
52
|
-
step_in_loop.times { logger.step_in() }
|
53
|
-
expect( logger.prefix_log_line(in_test) ).to be === out_answer
|
50
|
+
around :each do |example|
|
54
51
|
logger.line_prefix = ''
|
52
|
+
begin
|
53
|
+
example.run
|
54
|
+
ensure
|
55
|
+
logger.line_prefix = ''
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
def prefix_log_line_test_compare_helper(in_test, out_answer)
|
60
|
+
logger.with_indent do
|
61
|
+
expect( logger.prefix_log_line(in_test) ).to be === out_answer
|
62
|
+
end
|
55
63
|
end
|
56
64
|
|
57
65
|
it 'can be successfully called with a arrays' do
|
@@ -81,68 +89,70 @@ module Beaker
|
|
81
89
|
it 'can be nested' do
|
82
90
|
line_arg = "\n\nwhy should this matter"
|
83
91
|
answer = " \n \n why should this matter"
|
84
|
-
|
92
|
+
logger.with_indent do
|
93
|
+
logger.with_indent do
|
94
|
+
logger.with_indent do
|
95
|
+
expect( logger.prefix_log_line(line_arg) ).to be === answer
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
85
99
|
end
|
86
100
|
end
|
87
101
|
|
88
|
-
context '
|
89
|
-
|
90
|
-
logger.line_prefix = ''
|
91
|
-
logger.step_in()
|
92
|
-
expect( logger.line_prefix ).to be === ' '
|
102
|
+
context 'when indenting' do
|
103
|
+
around :each do |example|
|
93
104
|
logger.line_prefix = ''
|
105
|
+
begin
|
106
|
+
example.run
|
107
|
+
ensure
|
108
|
+
logger.line_prefix = ''
|
109
|
+
end
|
94
110
|
end
|
95
111
|
|
96
|
-
it '
|
97
|
-
logger.
|
98
|
-
|
99
|
-
|
100
|
-
logger.step_out()
|
101
|
-
logger.step_in()
|
102
|
-
logger.step_in()
|
103
|
-
logger.step_out()
|
104
|
-
expect( logger.line_prefix ).to be === ' '
|
105
|
-
logger.line_prefix = ''
|
112
|
+
it 'steps in correctly (simple case)' do
|
113
|
+
logger.with_indent do
|
114
|
+
expect( logger.line_prefix ).to be === ' '
|
115
|
+
end
|
106
116
|
end
|
107
117
|
|
108
|
-
it '
|
109
|
-
logger.
|
110
|
-
|
111
|
-
|
112
|
-
|
118
|
+
it 'sets length correctly in mixed scenario ' do
|
119
|
+
logger.with_indent do
|
120
|
+
logger.with_indent {}
|
121
|
+
logger.with_indent do
|
122
|
+
logger.with_indent {}
|
123
|
+
expect( logger.line_prefix ).to be === ' '
|
124
|
+
end
|
125
|
+
end
|
113
126
|
end
|
114
127
|
|
115
128
|
it 'can handle arbitrary strings as prefixes' do
|
116
|
-
logger.line_prefix = ''
|
117
129
|
logger.line_prefix = 'Some string:'
|
118
130
|
expect( logger.line_prefix ).to be === 'Some string:'
|
119
|
-
logger.line_prefix = ''
|
120
131
|
end
|
121
132
|
|
122
133
|
it 'can handle stepping in with arbitrary strings' do
|
123
|
-
logger.line_prefix = ''
|
124
134
|
logger.line_prefix = 'Some string:'
|
125
|
-
logger.
|
126
|
-
|
127
|
-
|
128
|
-
|
135
|
+
logger.with_indent do
|
136
|
+
logger.with_indent do
|
137
|
+
expect( logger.line_prefix ).to be === 'Some string: '
|
138
|
+
end
|
139
|
+
end
|
129
140
|
end
|
130
141
|
|
131
|
-
it 'can handle stepping out with arbitrary strings' do
|
132
|
-
logger.line_prefix = ''
|
142
|
+
it 'can handle stepping in and out with arbitrary strings' do
|
133
143
|
logger.line_prefix = 'Some string:'
|
134
|
-
10.times { logger.
|
135
|
-
expect( logger.line_prefix ).to be === ''
|
136
|
-
logger.line_prefix = ''
|
144
|
+
10.times { logger.with_indent {} }
|
145
|
+
expect( logger.line_prefix ).to be === 'Some string:'
|
137
146
|
end
|
138
147
|
|
139
|
-
it '
|
140
|
-
logger.line_prefix = ''
|
148
|
+
it 'restores the original prefix if an argument is raised' do
|
141
149
|
logger.line_prefix = 'Some string:'
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
150
|
+
expect do
|
151
|
+
logger.with_indent do
|
152
|
+
raise "whoops"
|
153
|
+
end
|
154
|
+
end.to raise_error(RuntimeError, 'whoops')
|
155
|
+
expect(logger.line_prefix).to eq('Some string:')
|
146
156
|
end
|
147
157
|
end
|
148
158
|
|
@@ -154,6 +154,12 @@ module Beaker
|
|
154
154
|
:auth_methods => 'auth_home_123'
|
155
155
|
}
|
156
156
|
}}
|
157
|
+
let(:project_file) {@project_file || {
|
158
|
+
:level => 'seventh',
|
159
|
+
:ssh => {
|
160
|
+
:auth_methods => 'auth_project_123'
|
161
|
+
}
|
162
|
+
}}
|
157
163
|
let(:presets) { {
|
158
164
|
:level => 'lowest',
|
159
165
|
:ssh => {
|
@@ -183,11 +189,13 @@ module Beaker
|
|
183
189
|
allow(OptionsFileParser).to receive(:parse_options_file).and_return(opt_file)
|
184
190
|
allow(parser).to receive(:parse_hosts_options).and_return(host_file)
|
185
191
|
|
186
|
-
allow(SubcommandOptionsParser).to receive(:
|
192
|
+
allow(SubcommandOptionsParser).to receive(:parse_options_file).with(".beaker.yml").and_return(project_file)
|
193
|
+
allow(SubcommandOptionsParser).to receive(:parse_subcommand_options).with(anything, "#{ENV['HOME']}/.beaker/subcommand_options.yaml").and_return(homedir_file)
|
194
|
+
allow(SubcommandOptionsParser).to receive(:parse_subcommand_options).with(anything, Pathname(".beaker/subcommand_options.yaml")).and_return(subcommand_file)
|
187
195
|
end
|
188
196
|
|
189
197
|
it 'presets have the lowest priority' do
|
190
|
-
@env = @argv = @host_file = @opt_file = @subcommand_file = @homedir_file = {}
|
198
|
+
@env = @argv = @host_file = @opt_file = @subcommand_file = @homedir_file = @project_file = {}
|
191
199
|
mock_out_parsing
|
192
200
|
|
193
201
|
opts = parser.parse_args([])
|
@@ -196,6 +204,18 @@ module Beaker
|
|
196
204
|
expect(attribution[:level]).to be == 'preset'
|
197
205
|
end
|
198
206
|
|
207
|
+
it 'project options should have seventh priority' do
|
208
|
+
@env = @argv = @host_file = @opt_file = @subcommand_file = @homedir_file = {}
|
209
|
+
mock_out_parsing
|
210
|
+
|
211
|
+
opts = parser.parse_args([])
|
212
|
+
attribution = parser.attribution
|
213
|
+
expect(opts[:ssh][:auth_methods]).to be == 'auth_project_123'
|
214
|
+
expect(attribution[:ssh][:auth_methods]).to be == 'project'
|
215
|
+
expect(opts[:level]).to be == 'seventh'
|
216
|
+
expect(attribution[:level]).to be == 'project'
|
217
|
+
end
|
218
|
+
|
199
219
|
it 'home directory options should have sixth priority' do
|
200
220
|
@env = @argv = @host_file = @opt_file = @subcommand_file = {}
|
201
221
|
mock_out_parsing
|
@@ -266,6 +286,28 @@ module Beaker
|
|
266
286
|
expect(attribution[:level]).to be == 'env'
|
267
287
|
end
|
268
288
|
|
289
|
+
it "loads the options file from a project file" do
|
290
|
+
mock_out_parsing
|
291
|
+
|
292
|
+
project_file[:options_file] = 'my_options_file.rb'
|
293
|
+
allow(OptionsFileParser).to receive(:parse_options_file).with('my_options_file.rb').and_return(ssh: {config: true})
|
294
|
+
|
295
|
+
output = parser.parse_args([])
|
296
|
+
attribution = parser.attribution
|
297
|
+
expect(output[:ssh][:config]).to be true
|
298
|
+
expect(attribution[:ssh][:config]).to eq('options_file')
|
299
|
+
end
|
300
|
+
|
301
|
+
it "loads project file options with the init subcommand" do
|
302
|
+
@env = @argv = @host_file = @opt_file = @subcommand_file = @homedir_file = {}
|
303
|
+
mock_out_parsing
|
304
|
+
|
305
|
+
output = parser.parse_args(%w[init --hosts redhat7-64ma])
|
306
|
+
attribution = parser.attribution
|
307
|
+
expect(output[:level]).to eq('seventh')
|
308
|
+
expect(attribution[:level]).to eq('project')
|
309
|
+
end
|
310
|
+
|
269
311
|
end
|
270
312
|
|
271
313
|
it "can correctly combine arguments from different sources" do
|
@@ -293,7 +335,6 @@ module Beaker
|
|
293
335
|
args = ["-h", hosts_path, "--log-level", "debug", "--fail-mode", "nope"]
|
294
336
|
expect { parser.parse_args(args) }.to raise_error(ArgumentError)
|
295
337
|
end
|
296
|
-
|
297
338
|
end
|
298
339
|
|
299
340
|
describe '#parse_hosts_options' do
|
data/spec/helpers.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: beaker
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.30.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Puppet
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-01-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|
@@ -346,6 +346,20 @@ dependencies:
|
|
346
346
|
- - ~>
|
347
347
|
- !ruby/object:Gem::Version
|
348
348
|
version: '0.1'
|
349
|
+
- !ruby/object:Gem::Dependency
|
350
|
+
name: beaker-abs
|
351
|
+
requirement: !ruby/object:Gem::Requirement
|
352
|
+
requirements:
|
353
|
+
- - ~>
|
354
|
+
- !ruby/object:Gem::Version
|
355
|
+
version: '0.4'
|
356
|
+
type: :runtime
|
357
|
+
prerelease: false
|
358
|
+
version_requirements: !ruby/object:Gem::Requirement
|
359
|
+
requirements:
|
360
|
+
- - ~>
|
361
|
+
- !ruby/object:Gem::Version
|
362
|
+
version: '0.4'
|
349
363
|
- !ruby/object:Gem::Dependency
|
350
364
|
name: beaker-vmpooler
|
351
365
|
requirement: !ruby/object:Gem::Requirement
|