beaker 4.34.0 → 4.35.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: bc022311d195fb3d0b0ff1b9b957272379e6adc5aadb1dfb30e77d89a912872d
4
- data.tar.gz: be60dbf2c333ea695d3e6d8b4b8fd5dc6811acbe6489e17cf924b08f24c79b05
3
+ metadata.gz: 9a6679daffb138ec6bb59a4b06779db93ce4aada9f4213696ccbc1ea00041e3f
4
+ data.tar.gz: 81d748b81d7ff9ec56e9b7b1309682f38540e0f03c9a861404a2493f592d4313
5
5
  SHA512:
6
- metadata.gz: '0287d90c4f88b325f104eb4dd36ad8d75f26f070c2851d4bec00c364ee3150fc706902667ecd14f1e127cd5e4030d8a418ce0dccbe9a6ec9f58dbdd08a81a1de'
7
- data.tar.gz: 8db6cc489d03e57bf25f373cd20dbc1c99b3d1eebbd7108191bd133e3152f61b8333a8f24667f7ed24c29ba4f29242bfaa5c016c24d380a11c24cb0c3207d942
6
+ metadata.gz: b631a91707d5b1f6ff2dbb855f0cb67cfe8a693f7923b4e6dbe03eb36e6be6a9f37f56a9886eaa9c371879e3d1e4a7d276404079990e7b60c12614811805ff5c
7
+ data.tar.gz: 893a6a7616500aba9df72dcaed0305bcd73038178e5b9687b0cbf2313737801e39e11a49b1bc7d836249d34577dde7bc0a79c7841072c3847bcd6255aaf55624
@@ -19,6 +19,7 @@ jobs:
19
19
  - ruby: "2.6"
20
20
  - ruby: "2.7"
21
21
  - ruby: "3.0"
22
+ - ruby: "3.1"
22
23
  coverage: "yes"
23
24
  env:
24
25
  COVERAGE: ${{ matrix.coverage }}
@@ -29,5 +30,7 @@ jobs:
29
30
  with:
30
31
  ruby-version: ${{ matrix.ruby }}
31
32
  bundler-cache: true
33
+ - name: Build gem
34
+ run: gem build *.gemspec
32
35
  - name: Run tests
33
36
  run: bundle exec rake spec
data/CHANGELOG.md CHANGED
@@ -1,5 +1,12 @@
1
1
  # Changelog
2
2
 
3
+ ## [4.35.0](https://github.com/voxpupuli/beaker/tree/4.35.0) (2022-05-13)
4
+
5
+ ## Added
6
+
7
+ - Add Ruby 3.1 support ([#1736](https://github.com/voxpupuli/beaker/pull/1736))
8
+ - Build gem during CI runs ([#1738](https://github.com/voxpupuli/beaker/pull/1738))
9
+
3
10
  ## [4.34.0](https://github.com/voxpupuli/beaker/tree/4.34.0) (2022-01-27)
4
11
 
5
12
  ### Added
data/Gemfile CHANGED
@@ -28,3 +28,5 @@ group :coverage, optional: ENV['COVERAGE']!='yes' do
28
28
  gem 'simplecov-console', :require => false
29
29
  gem 'codecov', :require => false
30
30
  end
31
+
32
+ gem 'rdoc' if RUBY_VERSION >= '3.1'
@@ -2,6 +2,7 @@ module Beaker
2
2
  module Options
3
3
  #A set of functions to parse hosts files
4
4
  module HostsFileParser
5
+ PERMITTED_YAML_CLASSES = [Beaker::Options::OptionsHash, Beaker::Platform, Symbol, Time]
5
6
 
6
7
  # Read the contents of the hosts.cfg into an OptionsHash, merge the 'CONFIG' section into the OptionsHash, return OptionsHash
7
8
  # @param [String] hosts_file_path The path to the hosts file
@@ -24,7 +25,7 @@ module Beaker
24
25
 
25
26
  raise "#{hosts_file_path} is not a valid path" unless File.exist?(hosts_file_path)
26
27
 
27
- YAML.load(ERB.new(File.read(hosts_file_path), nil, '-').result(binding))
28
+ process_yaml(File.read(hosts_file_path), binding)
28
29
  }
29
30
  fix_roles_array( host_options )
30
31
  end
@@ -42,7 +43,7 @@ module Beaker
42
43
  return host_options unless hosts_def_yaml
43
44
  error_message = "#{hosts_def_yaml}\nis not a valid YAML string\n\t"
44
45
  host_options = self.merge_hosts_yaml( host_options, error_message ) {
45
- YAML.load(ERB.new(hosts_def_yaml, nil, '-').result(binding))
46
+ process_yaml(hosts_def_yaml, binding)
46
47
  }
47
48
  fix_roles_array( host_options )
48
49
  end
@@ -85,6 +86,23 @@ module Beaker
85
86
  host_options.merge( loaded_host_options )
86
87
  end
87
88
 
89
+ # A helper to parse the YAML file and apply ERB templating
90
+ #
91
+ # @param [String] path Path to the file to read
92
+ # @param [Binding] b The binding to pass to ERB rendering
93
+ # @api private
94
+ def self.process_yaml(template, b)
95
+ erb_obj = if RUBY_VERSION >= '2.7'
96
+ ERB.new(template, trim_mode: '-')
97
+ else
98
+ ERB.new(template, nil, '-')
99
+ end
100
+ if RUBY_VERSION >= '2.6'
101
+ YAML.safe_load(erb_obj.result(b), permitted_classes: PERMITTED_YAML_CLASSES)
102
+ else
103
+ YAML.load(erb_obj.result(b))
104
+ end
105
+ end
88
106
  end
89
107
  end
90
108
  end
@@ -1,5 +1,5 @@
1
1
  module Beaker
2
2
  module Version
3
- STRING = '4.34.0'
3
+ STRING = '4.35.0'
4
4
  end
5
5
  end
@@ -1,5 +1,15 @@
1
1
  require 'spec_helper'
2
2
 
3
+ def load_yaml_file(path)
4
+ # Ruby 2.x has no safe_load_file
5
+ if YAML.respond_to?(:safe_load_file)
6
+ permitted = [Beaker::Options::OptionsHash, Symbol, RSpec::Mocks::Double, Time]
7
+ YAML.safe_load_file(path, permitted_classes: permitted, aliases: true)
8
+ else
9
+ YAML.load_file(path)
10
+ end
11
+ end
12
+
3
13
  module Beaker
4
14
  describe CLI do
5
15
 
@@ -361,7 +371,7 @@ module Beaker
361
371
  cli.instance_variable_set(:@hosts, hosts)
362
372
 
363
373
  preserved_file = cli.preserve_hosts_file
364
- hosts_yaml = YAML.load_file(preserved_file)
374
+ hosts_yaml = load_yaml_file(preserved_file)
365
375
  expect(hosts_yaml['CONFIG'][:tests]).to be == []
366
376
  expect(hosts_yaml['CONFIG'][:pre_suite]).to be == []
367
377
  expect(hosts_yaml['CONFIG'][:post_suite]).to be == []
@@ -428,7 +438,7 @@ module Beaker
428
438
  cli.execute!
429
439
 
430
440
  copied_hosts_file = File.join(File.absolute_path(dir), 'hosts_preserved.yml')
431
- expect{ YAML.load_file(copied_hosts_file) }.to_not raise_error
441
+ expect{ load_yaml_file(copied_hosts_file) }.to_not raise_error
432
442
  end
433
443
  end
434
444
 
@@ -440,7 +450,7 @@ module Beaker
440
450
  cli.execute!
441
451
 
442
452
  copied_hosts_file = File.join(File.absolute_path(dir), 'hosts_preserved.yml')
443
- yaml_content = YAML.load_file(copied_hosts_file)
453
+ yaml_content = load_yaml_file(copied_hosts_file)
444
454
  expect( yaml_content['CONFIG']['provision'] ).to be_falsy
445
455
  end
446
456
  end
@@ -106,7 +106,7 @@ module Beaker
106
106
  pkg = 'sles_package'
107
107
  expect( Beaker::Command ).to receive( :new ).with( /^rpmkeys.*nightlies.puppetlabs.com.*/, anything, anything ).and_return('').ordered.once
108
108
  expect( Beaker::Command ).to receive(:new).with("zypper --gpg-auto-import-keys se -i --match-exact #{pkg}", [], {:prepend_cmds=>nil, :cmdexe=>false}).and_return('').ordered.once
109
- expect( instance ).to receive(:exec).with('', :accept_all_exit_codes => true).and_return(generate_result("hello", {:exit_code => 0})).exactly(2).times
109
+ expect( instance ).to receive(:exec).with('', {:accept_all_exit_codes => true}).and_return(generate_result("hello", {:exit_code => 0})).exactly(2).times
110
110
  expect( instance.check_for_package(pkg) ).to be === true
111
111
  end
112
112
  it "checks correctly on opensuse" do
@@ -114,7 +114,7 @@ module Beaker
114
114
  pkg = 'sles_package'
115
115
  expect( Beaker::Command ).to receive( :new ).with( /^rpmkeys.*nightlies.puppetlabs.com.*/, anything, anything ).and_return('').ordered.once
116
116
  expect( Beaker::Command ).to receive(:new).with("zypper --gpg-auto-import-keys se -i --match-exact #{pkg}", [], {:prepend_cmds=>nil, :cmdexe=>false}).and_return('').ordered.once
117
- expect( instance ).to receive(:exec).with('', :accept_all_exit_codes => true).and_return(generate_result("hello", {:exit_code => 0})).exactly(2).times
117
+ expect( instance ).to receive(:exec).with('', {:accept_all_exit_codes => true}).and_return(generate_result("hello", {:exit_code => 0})).exactly(2).times
118
118
  expect( instance.check_for_package(pkg) ).to be === true
119
119
  end
120
120
 
@@ -122,7 +122,7 @@ module Beaker
122
122
  @opts = {'platform' => 'fedora-is-me'}
123
123
  pkg = 'fedora_package'
124
124
  expect( Beaker::Command ).to receive(:new).with("rpm -q #{pkg}", [], {:prepend_cmds=>nil, :cmdexe=>false}).and_return('')
125
- expect( instance ).to receive(:exec).with('', :accept_all_exit_codes => true).and_return(generate_result("hello", {:exit_code => 0}))
125
+ expect( instance ).to receive(:exec).with('', {:accept_all_exit_codes => true}).and_return(generate_result("hello", {:exit_code => 0}))
126
126
  expect( instance.check_for_package(pkg) ).to be === true
127
127
  end
128
128
 
@@ -131,7 +131,7 @@ module Beaker
131
131
  @opts = {'platform' => "#{platform}-is-me"}
132
132
  pkg = "#{platform}_package"
133
133
  expect( Beaker::Command ).to receive(:new).with("rpm -q #{pkg}", [], {:prepend_cmds=>nil, :cmdexe=>false}).and_return('')
134
- expect( instance ).to receive(:exec).with('', :accept_all_exit_codes => true).and_return(generate_result("hello", {:exit_code => 0}))
134
+ expect( instance ).to receive(:exec).with('', {:accept_all_exit_codes => true}).and_return(generate_result("hello", {:exit_code => 0}))
135
135
  expect( instance.check_for_package(pkg) ).to be === true
136
136
  end
137
137
  end
@@ -140,7 +140,7 @@ module Beaker
140
140
  @opts = {'platform' => 'eos-is-me'}
141
141
  pkg = 'eos-package'
142
142
  expect( Beaker::Command ).to receive(:new).with("rpm -q #{pkg}", [], {:prepend_cmds=>nil, :cmdexe=>false}).and_return('')
143
- expect( instance ).to receive(:exec).with('', :accept_all_exit_codes => true).and_return(generate_result("hello", {:exit_code => 0}))
143
+ expect( instance ).to receive(:exec).with('', {:accept_all_exit_codes => true}).and_return(generate_result("hello", {:exit_code => 0}))
144
144
  expect( instance.check_for_package(pkg) ).to be === true
145
145
  end
146
146
 
@@ -148,7 +148,7 @@ module Beaker
148
148
  @opts = {'platform' => 'el-is-me'}
149
149
  pkg = 'el_package'
150
150
  expect( Beaker::Command ).to receive(:new).with("rpm -q #{pkg}", [], {:prepend_cmds=>nil, :cmdexe=>false}).and_return('')
151
- expect( instance ).to receive(:exec).with('', :accept_all_exit_codes => true).and_return(generate_result("hello", {:exit_code => 0}))
151
+ expect( instance ).to receive(:exec).with('', {:accept_all_exit_codes => true}).and_return(generate_result("hello", {:exit_code => 0}))
152
152
  expect( instance.check_for_package(pkg) ).to be === true
153
153
  end
154
154
 
@@ -156,14 +156,14 @@ module Beaker
156
156
  @opts = {'platform' => 'huaweios-is-me'}
157
157
  pkg = 'debian_package'
158
158
  expect( Beaker::Command ).to receive(:new).with("dpkg -s #{pkg}", [], {:prepend_cmds=>nil, :cmdexe=>false}).and_return('')
159
- expect( instance ).to receive(:exec).with('', :accept_all_exit_codes => true).and_return(generate_result("hello", {:exit_code => 0}))
159
+ expect( instance ).to receive(:exec).with('', {:accept_all_exit_codes => true}).and_return(generate_result("hello", {:exit_code => 0}))
160
160
  expect( instance.check_for_package(pkg) ).to be === true
161
161
  end
162
162
  it "checks correctly on debian" do
163
163
  @opts = {'platform' => 'debian-is-me'}
164
164
  pkg = 'debian_package'
165
165
  expect( Beaker::Command ).to receive(:new).with("dpkg -s #{pkg}", [], {:prepend_cmds=>nil, :cmdexe=>false}).and_return('')
166
- expect( instance ).to receive(:exec).with('', :accept_all_exit_codes => true).and_return(generate_result("hello", {:exit_code => 0}))
166
+ expect( instance ).to receive(:exec).with('', {:accept_all_exit_codes => true}).and_return(generate_result("hello", {:exit_code => 0}))
167
167
  expect( instance.check_for_package(pkg) ).to be === true
168
168
  end
169
169
 
@@ -171,7 +171,7 @@ module Beaker
171
171
  @opts = {'platform' => 'ubuntu-is-me'}
172
172
  pkg = 'ubuntu_package'
173
173
  expect( Beaker::Command ).to receive(:new).with("dpkg -s #{pkg}", [], {:prepend_cmds=>nil, :cmdexe=>false}).and_return('')
174
- expect( instance ).to receive(:exec).with('', :accept_all_exit_codes => true).and_return(generate_result("hello", {:exit_code => 0}))
174
+ expect( instance ).to receive(:exec).with('', {:accept_all_exit_codes => true}).and_return(generate_result("hello", {:exit_code => 0}))
175
175
  expect( instance.check_for_package(pkg) ).to be === true
176
176
  end
177
177
 
@@ -179,7 +179,7 @@ module Beaker
179
179
  @opts = {'platform' => 'cumulus-is-me'}
180
180
  pkg = 'cumulus_package'
181
181
  expect( Beaker::Command ).to receive(:new).with("dpkg -s #{pkg}", [], {:prepend_cmds=>nil, :cmdexe=>false}).and_return('')
182
- expect( instance ).to receive(:exec).with('', :accept_all_exit_codes => true).and_return(generate_result("hello", {:exit_code => 0}))
182
+ expect( instance ).to receive(:exec).with('', {:accept_all_exit_codes => true}).and_return(generate_result("hello", {:exit_code => 0}))
183
183
  expect( instance.check_for_package(pkg) ).to be === true
184
184
  end
185
185
 
@@ -187,7 +187,7 @@ module Beaker
187
187
  @opts = {'platform' => 'solaris-11-is-me'}
188
188
  pkg = 'solaris-11_package'
189
189
  expect( Beaker::Command ).to receive(:new).with("pkg info #{pkg}", [], {:prepend_cmds=>nil, :cmdexe=>false}).and_return('')
190
- expect( instance ).to receive(:exec).with('', :accept_all_exit_codes => true).and_return(generate_result("hello", {:exit_code => 0}))
190
+ expect( instance ).to receive(:exec).with('', {:accept_all_exit_codes => true}).and_return(generate_result("hello", {:exit_code => 0}))
191
191
  expect( instance.check_for_package(pkg) ).to be === true
192
192
  end
193
193
 
@@ -195,7 +195,7 @@ module Beaker
195
195
  @opts = {'platform' => 'solaris-10-is-me'}
196
196
  pkg = 'solaris-10_package'
197
197
  expect( Beaker::Command ).to receive(:new).with("pkginfo #{pkg}", [], {:prepend_cmds=>nil, :cmdexe=>false}).and_return('')
198
- expect( instance ).to receive(:exec).with('', :accept_all_exit_codes => true).and_return(generate_result("hello", {:exit_code => 0}))
198
+ expect( instance ).to receive(:exec).with('', {:accept_all_exit_codes => true}).and_return(generate_result("hello", {:exit_code => 0}))
199
199
  expect( instance.check_for_package(pkg) ).to be === true
200
200
  end
201
201
 
@@ -203,7 +203,7 @@ module Beaker
203
203
  @opts = {'platform' => 'archlinux-is-me'}
204
204
  pkg = 'archlinux_package'
205
205
  expect( Beaker::Command ).to receive(:new).with("pacman -Q #{pkg}", [], {:prepend_cmds=>nil, :cmdexe=>false}).and_return('')
206
- expect( instance ).to receive(:exec).with('', :accept_all_exit_codes => true).and_return(generate_result("hello", {:exit_code => 0}))
206
+ expect( instance ).to receive(:exec).with('', {:accept_all_exit_codes => true}).and_return(generate_result("hello", {:exit_code => 0}))
207
207
  expect( instance.check_for_package(pkg) ).to be === true
208
208
  end
209
209
 
@@ -66,9 +66,10 @@ module Beaker
66
66
  expect( host_options ).to be === parser.new_host_options
67
67
  end
68
68
 
69
- it 'passes a YAML.load call through to #merge_hosts_yaml' do
69
+ it 'passes a process_yaml call through to #merge_hosts_yaml' do
70
70
  yaml_string = 'not actually yaml, but that wont matter'
71
- expect( YAML ).to receive( :load ).with( yaml_string )
71
+ expect(described_class).to receive(:process_yaml).with(yaml_string, instance_of(Binding))
72
+
72
73
  parser.parse_hosts_string( yaml_string )
73
74
  end
74
75
  end
@@ -150,7 +150,14 @@ module Beaker
150
150
  @name = 'ubuntu-14.04-x86_64'
151
151
  end
152
152
 
153
- let(:round_tripped) { YAML.load(YAML.dump(platform)) }
153
+ let(:round_tripped) do
154
+ # Ruby 2 has no unsafe_load
155
+ if YAML.respond_to?(:unsafe_load)
156
+ YAML.unsafe_load(YAML.dump(platform))
157
+ else
158
+ YAML.load(YAML.dump(platform))
159
+ end
160
+ end
154
161
 
155
162
  [:variant, :arch, :version, :codename].each do |field|
156
163
  it "deserializes the '#{field}' field" do
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: 4.34.0
4
+ version: 4.35.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Puppet
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-01-27 00:00:00.000000000 Z
11
+ date: 2022-05-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec
@@ -676,7 +676,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
676
676
  - !ruby/object:Gem::Version
677
677
  version: '0'
678
678
  requirements: []
679
- rubygems_version: 3.2.32
679
+ rubygems_version: 3.2.33
680
680
  signing_key:
681
681
  specification_version: 4
682
682
  summary: Let's test Puppet!