kitchen-pester 1.0.0 → 1.2.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: 3d308bdccbb4f9795482dcdac1abbe373935c4cb164e0bb1bca3d16c8d7185fe
4
- data.tar.gz: 798da4d69f83306722efd7311104e8797611cec975af00d88168c535a2056cc7
3
+ metadata.gz: 19d804e92d719bc9b7a474f32fb09562e5ca26e56a7d22f2ce432a5b704fd59f
4
+ data.tar.gz: 85891cc61ec3764ba9d9397958f8610f3a3e9238d53c6b6f9fdc26814ada51b2
5
5
  SHA512:
6
- metadata.gz: 5bebf6a71183b7c02b3dcce3c8f1769b039dd30266a4da75da95f5c9fefd7da00f42421950e543fa529cfdf3cdbf2eb41756569d13e0a91bce68af881aed3cc3
7
- data.tar.gz: 408ac94d07a5b4a544892f325b7c70b85dbf4e9dcc9193d4505ca3307fcbda5b5e0f5a49c1a3f80cda8b8f084490cf52d7ac5169b372419c6a2075abbb21467a
6
+ metadata.gz: 7da614b278d3fc0f408dc0d913ba9c853bf3997ef669aba45578bb23d65c725bcefcaffb75b8d799f579fca233ae7f84134983cb6147b7bcd91c51041c0dbb2b
7
+ data.tar.gz: 56af02995deb34e6a6044396096ada3b4fbe371b9d8c2be1a74dbf8109728808110d28e9a9e620951530bc48e5b2ac3bbf49ba07046630f393c67c8d2b83a766
data/Gemfile CHANGED
@@ -11,7 +11,7 @@ group :integration do
11
11
  end
12
12
 
13
13
  group :changelog do
14
- gem "github_changelog_generator", "1.15.2"
14
+ gem "github_changelog_generator", "1.16.4"
15
15
  end
16
16
 
17
17
  group :debug do
data/Rakefile CHANGED
@@ -23,7 +23,7 @@ desc "Run all quality tasks"
23
23
  task quality: :style
24
24
 
25
25
  begin
26
- require "yard"
26
+ require "yard" unless defined?(YARD)
27
27
  YARD::Rake::YardocTask.new
28
28
  rescue LoadError
29
29
  puts "yard is not available. (sudo) gem install yard to generate yard documentation."
@@ -1,4 +1,4 @@
1
- lib = File.expand_path("../lib", __FILE__)
1
+ lib = File.expand_path("lib", __dir__)
2
2
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
3
 
4
4
  require "kitchen/verifier/pester_version"
@@ -16,10 +16,9 @@ Gem::Specification.new do |spec|
16
16
  spec.files = %w{LICENSE kitchen-pester.gemspec Gemfile Rakefile} + Dir.glob("lib/**/*")
17
17
  spec.require_paths = ["lib"]
18
18
 
19
- spec.add_development_dependency "bundler"
20
19
  spec.add_development_dependency "rake"
21
- spec.add_development_dependency "minitest", "~> 5.3", "< 5.15"
20
+ spec.add_development_dependency "minitest", "~> 5.3", "< 5.16"
22
21
  spec.add_development_dependency "mocha", "~> 1.1"
23
22
 
24
- spec.add_dependency "test-kitchen", ">= 1.10", "< 3"
23
+ spec.add_dependency "test-kitchen", ">= 1.10", "< 4"
25
24
  end
@@ -14,12 +14,12 @@
14
14
  # See the License for the specific language governing permissions and
15
15
  # limitations under the License.
16
16
 
17
- require "fileutils"
18
- require "pathname"
17
+ require "fileutils" unless defined?(FileUtils)
18
+ require "pathname" unless defined?(Pathname)
19
19
  require "kitchen/util"
20
20
  require "kitchen/verifier/base"
21
21
  require "kitchen/version"
22
- require "base64"
22
+ require "base64" unless defined?(Base64)
23
23
  require_relative "pester_version"
24
24
 
25
25
  module Kitchen
@@ -47,10 +47,26 @@ module Kitchen
47
47
  Force: true,
48
48
  ErrorAction: "Stop",
49
49
  }
50
+ default_config :pester_configuration, {
51
+ run: {
52
+ path: ".",
53
+ PassThru: true,
54
+ },
55
+ TestResult: {
56
+ Enabled: true,
57
+ OutputPath: "PesterTestResults.xml",
58
+ TestSuiteName: "",
59
+ },
60
+ Output: {
61
+ Verbosity: "Detailed",
62
+ },
63
+ }
50
64
  default_config :install_modules, []
51
- default_config :downloads, ["./PesterTestResults.xml"] => "./testresults"
65
+ default_config :downloads, { "./PesterTestResults.xml" => "./testresults/" }
52
66
  default_config :copy_folders, []
53
67
  default_config :sudo, false
68
+ default_config :shell, nil
69
+ default_config :environment, {}
54
70
 
55
71
  # Creates a new Verifier object using the provided configuration data
56
72
  # which will be merged with any default configuration.
@@ -58,6 +74,7 @@ module Kitchen
58
74
  # @param config [Hash] provided verifier configuration
59
75
  def initialize(config = {})
60
76
  init_config(config)
77
+ raise ClientError.new "Environment Variables must be specified as a hash, not a #{config[:environment].class}" unless config[:environment].is_a?(Hash)
61
78
  end
62
79
 
63
80
  # Creates a temporary directory on the local workstation into which
@@ -115,7 +132,7 @@ module Kitchen
115
132
  )
116
133
 
117
134
  if ($modulesToRemove.ModuleBase.Count -eq 0) {
118
- # for PS7 on linux
135
+ # for PS7 on linux
119
136
  return
120
137
  }
121
138
 
@@ -150,6 +167,7 @@ module Kitchen
150
167
  # @return [String] a command string
151
168
  def prepare_command
152
169
  info("Preparing the SUT and Pester dependencies...")
170
+ resolve_downloads_paths!
153
171
  really_wrap_shell_code(install_command_script)
154
172
  end
155
173
 
@@ -159,7 +177,39 @@ module Kitchen
159
177
  #
160
178
  # @return [String] a command string
161
179
  def run_command
162
- really_wrap_shell_code(run_command_script)
180
+ really_wrap_shell_code(invoke_pester_scriptblock)
181
+ end
182
+
183
+ # Resolves the remote Downloads path from the verifier root path,
184
+ # unless they're absolute path (starts with / or C:\)
185
+ # This updates the config[:downloads], nothing (nil) is returned.
186
+ #
187
+ # @return [nil] updates config downloads
188
+ def resolve_downloads_paths!
189
+ info("Resolving Downloads path from config.")
190
+ config[:downloads] = config[:downloads]
191
+ .map do |source, destination|
192
+ source = source.to_s
193
+ destination = destination.gsub("%{instance_name}", instance.name)
194
+ info(" resolving remote source's absolute path.")
195
+ unless source.match?('^/|^[a-zA-Z]:[\\/]') # is Absolute?
196
+ info(" '#{source}' is a relative path, resolving to: #{File.join(config[:root_path], source)}")
197
+ source = File.join(config[:root_path], source.to_s).to_s
198
+ end
199
+
200
+ if destination.match?('\\$|/$') # is Folder (ends with / or \)
201
+ destination = File.join(destination, File.basename(source)).to_s
202
+ end
203
+ info(" Destination: #{destination}")
204
+ if !File.directory?(File.dirname(destination))
205
+ FileUtils.mkdir_p(File.dirname(destination))
206
+ else
207
+ info(" Directory #{File.dirname(destination)} seems to exist.")
208
+ end
209
+
210
+ [ source, destination ]
211
+ end
212
+ nil # make sure we do not return anything
163
213
  end
164
214
 
165
215
  # Download functionality was added to the base verifier behavior after
@@ -168,7 +218,9 @@ module Kitchen
168
218
  def call(state)
169
219
  super
170
220
  ensure
171
- download_test_files(state) unless config[:download].nil?
221
+ info("Ensure download test files.")
222
+ download_test_files(state) unless config[:downloads].nil?
223
+ info("Download complete.")
172
224
  end
173
225
  else
174
226
  def call(state)
@@ -176,25 +228,88 @@ module Kitchen
176
228
  rescue
177
229
  # If the verifier reports failure, we need to download the files ourselves.
178
230
  # Test Kitchen's base verifier doesn't have the download in an `ensure` block.
179
- download_test_files(state) unless config[:download].nil?
180
-
231
+ info("Rescue to download test files.")
232
+ download_test_files(state) unless config[:downloads].nil?
181
233
  # Rethrow original exception, we still want to register the failure.
182
234
  raise
183
235
  end
184
236
  end
185
237
 
186
238
  # private
187
- def run_command_script
239
+ def invoke_pester_scriptblock
188
240
  <<-PS1
189
- Import-Module -Name Pester -Force -ErrorAction Stop
241
+ $PesterModule = Import-Module -Name Pester -Force -ErrorAction Stop -PassThru
190
242
 
191
243
  $TestPath = Join-Path "#{config[:root_path]}" -ChildPath "suites"
192
244
  $OutputFilePath = Join-Path "#{config[:root_path]}" -ChildPath 'PesterTestResults.xml'
193
245
 
194
- $options = New-PesterOption -TestSuiteName "Pester - #{instance.to_str}"
246
+ #{ps_environment(config[:environment])}
247
+ if ($PesterModule.Version.Major -le 4)
248
+ {
249
+ Write-Host -Object "Invoke Pester with v$($PesterModule.Version) Options"
250
+ $options = New-PesterOption -TestSuiteName "Pester - #{instance.to_str}"
251
+ $defaultPesterParameters = @{
252
+ Script = $TestPath
253
+ OutputFile = $OutputFilePath
254
+ OutputFormat = 'NUnitXml'
255
+ PassThru = $true
256
+ PesterOption = $options
257
+ }
258
+
259
+ $pesterCmd = Get-Command -Name 'Invoke-Pester'
260
+ $pesterConfig = #{ps_hash(config[:pester_configuration])}
261
+ $invokePesterParams = @{}
262
+
263
+ foreach ($paramName in $pesterCmd.Parameters.Keys)
264
+ {
265
+ $paramValue = $pesterConfig.($paramName)
266
+
267
+ if ($paramValue) {
268
+ Write-Host -Object "Using $paramName from Yaml config."
269
+ $invokePesterParams[$paramName] = $paramValue
270
+ }
271
+ elseif ($defaultPesterParameters.ContainsKey($paramName))
272
+ {
273
+ Write-Host -Object "Using $paramName from Defaults: $($defaultPesterParameters[$paramName])."
274
+ $invokePesterParams[$paramName] = $defaultPesterParameters[$paramName]
275
+ }
276
+ }
277
+
278
+ $result = Invoke-Pester @invokePesterParams
279
+ }
280
+ else
281
+ {
282
+ Write-Host -Object "Invoke Pester with v$($PesterModule.Version) Configuration."
283
+ $pesterConfigHash = #{ps_hash(config[:pester_configuration])}
284
+
285
+ if (-not $pesterConfigHash.ContainsKey('run')) {
286
+ $pesterConfigHash['run'] = @{}
287
+ }
288
+
289
+ if (-not $pesterConfigHash.ContainsKey('TestResult')) {
290
+ $pesterConfigHash['TestResult'] = @{}
291
+ }
292
+
293
+ if (-not $pesterConfigHash.run.path) {
294
+ $pesterConfigHash['run']['path'] = $TestPath
295
+ }
296
+
297
+ if (-not $pesterConfigHash.TestResult.TestSuiteName) {
298
+ $pesterConfigHash['TestResult']['TestSuiteName'] = 'Pester - #{instance.to_str}'
299
+ }
300
+
301
+ if (-not $pesterConfigHash.TestResult.OutputPath) {
302
+ $pesterConfigHash['TestResult']['OutputPath'] = $OutputFilePath
303
+ }
195
304
 
196
- $result = Invoke-Pester -Script $TestPath -OutputFile $OutputFilePath -OutputFormat NUnitXml -PesterOption $options -PassThru
197
- $result | Export-CliXml -Path (Join-Path -Path $TestPath -ChildPath 'result.xml')
305
+ $PesterConfig = New-PesterConfiguration -Hashtable $pesterConfigHash
306
+ $result = Invoke-Pester -Configuration $PesterConfig
307
+ }
308
+
309
+ $resultXmlPath = (Join-Path -Path $TestPath -ChildPath 'result.xml')
310
+ if (Test-Path -Path $resultXmlPath) {
311
+ $result | Export-CliXml -Path
312
+ }
198
313
 
199
314
  $LASTEXITCODE = $result.FailedCount
200
315
  $host.SetShouldExit($LASTEXITCODE)
@@ -216,6 +331,7 @@ module Kitchen
216
331
  if powershell_module.is_a? Hash
217
332
  <<-PS1
218
333
  ${#{powershell_module[:Name]}} = #{ps_hash(powershell_module)}
334
+
219
335
  Install-ModuleFromNuget -Module ${#{powershell_module[:Name]}} #{gallery_url_param}
220
336
  PS1
221
337
  else
@@ -231,7 +347,7 @@ module Kitchen
231
347
  #
232
348
  # @return [Array<String>] array of suite files
233
349
  # @api private
234
- def register_psrepository
350
+ def register_psrepository_scriptblock
235
351
  return if config[:register_repository].nil?
236
352
 
237
353
  info("Registering a new PowerShellGet Repository")
@@ -302,30 +418,60 @@ module Kitchen
302
418
  windows_os? ? really_wrap_windows_shell_code(code) : really_wrap_posix_shell_code(code)
303
419
  end
304
420
 
421
+ # Get the defined shell or fall back to pwsh, unless we're on windows where we use powershell
422
+ # call via sudo if sudo is true.
423
+ # This allows to use pwsh-preview instead of pwsh, or a full path to a specific binary.
424
+ def shell_cmd
425
+ if !config[:shell].nil?
426
+ config[:sudo] ? "sudo #{config[:shell]}" : "#{config[:shell]}"
427
+ elsif windows_os?
428
+ "powershell"
429
+ else
430
+ config[:sudo] ? "sudo pwsh" : "pwsh"
431
+ end
432
+ end
433
+
305
434
  def really_wrap_windows_shell_code(code)
306
- wrap_shell_code(Util.outdent!(use_local_powershell_modules(code)))
435
+ my_command = <<-PWSH
436
+ echo "Running as '$(whoami)'..."
437
+ New-Item -ItemType Directory -Path '#{config[:root_path]}/modules' -Force -ErrorAction SilentlyContinue
438
+ Set-Location -Path "#{config[:root_path]}"
439
+ # Send the pwsh here string to the file kitchen_cmd.ps1
440
+ @'
441
+ try {
442
+ if (@('Bypass', 'Unrestricted') -notcontains (Get-ExecutionPolicy)) {
443
+ Set-ExecutionPolicy Unrestricted -Force -Scope Process
444
+ }
445
+ }
446
+ catch {
447
+ $_ | Out-String | Write-Warning
448
+ }
449
+ #{Util.outdent!(use_local_powershell_modules(code))}
450
+ '@ | Set-Content -Path kitchen_cmd.ps1 -Encoding utf8 -Force -ErrorAction 'Stop'
451
+ # create the modules folder, making sure it's done as current user (not root)
452
+ #
453
+ # Invoke the created kitchen_cmd.ps1 file using pwsh
454
+ #{shell_cmd} ./kitchen_cmd.ps1
455
+ PWSH
456
+ wrap_shell_code(Util.outdent!(my_command))
307
457
  end
308
458
 
309
459
  # Writing the command to a ps1 file, adding the pwsh shebang
310
460
  # invoke the file
311
461
  def really_wrap_posix_shell_code(code)
312
- if config[:sudo]
313
- pwsh_cmd = "sudo pwsh"
314
- else
315
- pwsh_cmd = "pwsh"
316
- end
317
-
318
462
  my_command = <<-BASH
319
463
  echo "Running as '$(whoami)'"
320
- # Send the bash heredoc 'EOF' to the file current.ps1 using the tool cat
321
- cat << 'EOF' > current.ps1
464
+ # create the modules folder, making sure it's done as current user (not root)
465
+ mkdir -p #{config[:root_path]}/modules
466
+ cd #{config[:root_path]}
467
+ # Send the bash heredoc 'EOF' to the file kitchen_cmd.ps1 using the tool cat
468
+ cat << 'EOF' > kitchen_cmd.ps1
322
469
  #!/usr/bin/env pwsh
323
470
  #{Util.outdent!(use_local_powershell_modules(code))}
324
471
  EOF
325
- # create the modules folder, making sure it's done as current user (not root)
326
- mkdir -p foo #{config[:root_path]}/modules
327
- # Invoke the created current.ps1 file using pwsh
328
- #{pwsh_cmd} -f current.ps1
472
+ chmod +x kitchen_cmd.ps1
473
+ # Invoke the created kitchen_cmd.ps1 file using pwsh
474
+ #{shell_cmd} ./kitchen_cmd.ps1
329
475
  BASH
330
476
 
331
477
  debug(Util.outdent!(my_command))
@@ -334,23 +480,15 @@ module Kitchen
334
480
 
335
481
  def use_local_powershell_modules(script)
336
482
  <<-PS1
337
- try {
338
- if (!$IsLinux -and !$IsMacOs) {
339
- Set-ExecutionPolicy Unrestricted -force
340
- }
341
- }
342
- catch {
343
- $_ | Out-String | Write-Warning
344
- }
345
-
483
+ Write-Host -Object ("{0} - PowerShell {1}" -f $PSVersionTable.OS,$PSVersionTable.PSVersion)
346
484
  $global:ProgressPreference = 'SilentlyContinue'
347
485
  $PSModPathToPrepend = Join-Path "#{config[:root_path]}" -ChildPath 'modules'
348
486
  Write-Verbose "Adding '$PSModPathToPrepend' to `$Env:PSModulePath."
349
487
  if (!$isLinux -and -not (Test-Path -Path $PSModPathToPrepend)) {
350
- # if you create this folder now un Linux, it will run as root (via sudo).
488
+ # if you create this folder now in Linux, it may run as root (via sudo).
351
489
  $null = New-Item -Path $PSModPathToPrepend -Force -ItemType Directory
352
490
  }
353
-
491
+
354
492
  if ($Env:PSModulePath.Split([io.path]::PathSeparator) -notcontains $PSModPathToPrepend) {
355
493
  $env:PSModulePath = @($PSModPathToPrepend, $env:PSModulePath) -Join [io.path]::PathSeparator
356
494
  }
@@ -367,7 +505,7 @@ module Kitchen
367
505
 
368
506
  #{get_powershell_modules_from_nugetapi.join("\n") unless config.dig(:bootstrap, :modules).nil?}
369
507
 
370
- #{register_psrepository.join("\n") unless config[:register_repository].nil?}
508
+ #{register_psrepository_scriptblock.join("\n") unless config[:register_repository].nil?}
371
509
 
372
510
  #{install_pester}
373
511
 
@@ -389,12 +527,15 @@ module Kitchen
389
527
  end
390
528
 
391
529
  def download_test_files(state)
392
- return if config[:downloads].nil?
530
+ if config[:downloads].nil?
531
+ info("Skipped downloading test result file from #{instance.to_str}; 'downloads' hash is empty.")
532
+ return
533
+ end
393
534
 
394
535
  info("Downloading test result files from #{instance.to_str}")
395
536
  instance.transport.connection(state) do |conn|
396
- config[:downloads].to_h.each do |remotes, local|
397
- debug("Downloading #{Array(remotes).join(", ")} to #{local}")
537
+ config[:downloads].each do |remotes, local|
538
+ debug("downloading #{Array(remotes).join(", ")} to #{local}")
398
539
  conn.download(remotes, local)
399
540
  end
400
541
  end
@@ -480,6 +621,17 @@ module Kitchen
480
621
  end
481
622
  end
482
623
 
624
+ # Creates environment variable assignments from a ruby map.
625
+ #
626
+ # @api private
627
+ def ps_environment(obj)
628
+ commands = obj.map do |k, v|
629
+ "$env:#{k} = '#{v}'"
630
+ end
631
+
632
+ commands.join("\n")
633
+ end
634
+
483
635
  # returns the path of the modules subfolder
484
636
  # in the sandbox, where PS Modules and folders will be copied to.
485
637
  #
@@ -527,7 +679,7 @@ module Kitchen
527
679
  end
528
680
 
529
681
  def prepare_supporting_psmodules
530
- debug("Preparing to copy files from '#{support_psmodule_folder}' to the SUT.")
682
+ info("Preparing to copy files from '#{support_psmodule_folder}' to the SUT.")
531
683
  sandbox_module_path = File.join(sandbox_path, "modules")
532
684
  copy_if_src_exists(support_psmodule_folder, sandbox_module_path)
533
685
  end
@@ -542,7 +694,7 @@ module Kitchen
542
694
  return
543
695
  end
544
696
 
545
- debug("Moving #{src_to_validate} to #{destination}")
697
+ info("Moving #{src_to_validate} to #{destination}")
546
698
  unless Dir.exist?(destination)
547
699
  FileUtils.mkdir_p(destination)
548
700
  debug("Folder '#{destination}' created.")
@@ -1,5 +1,5 @@
1
1
  module Kitchen
2
2
  module Verifier
3
- PESTER_VERSION = "1.0.0".freeze
3
+ PESTER_VERSION = "1.2.0".freeze
4
4
  end
5
5
  end
@@ -106,8 +106,9 @@ function Set-PSRepo {
106
106
  [Parameter(Mandatory)]
107
107
  $Repository
108
108
  )
109
+
109
110
  if (-not (Get-Command Get-PSRepository) -and (Get-Command Get-PackageSource)) {
110
- # Old version of PSGet do not have a *-PSrepository but have *-PackageSource instead.
111
+ # Old versions of PSGet do not have a *-PSrepository but have *-PackageSource instead.
111
112
  if (Get-PackageSource -Name $Repository.Name) {
112
113
  Set-PackageSource @Repository
113
114
  }
metadata CHANGED
@@ -1,29 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kitchen-pester
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Steven Murawski
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-08-19 00:00:00.000000000 Z
11
+ date: 2022-05-14 00:00:00.000000000 Z
12
12
  dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: bundler
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - ">="
18
- - !ruby/object:Gem::Version
19
- version: '0'
20
- type: :development
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - ">="
25
- - !ruby/object:Gem::Version
26
- version: '0'
27
13
  - !ruby/object:Gem::Dependency
28
14
  name: rake
29
15
  requirement: !ruby/object:Gem::Requirement
@@ -47,7 +33,7 @@ dependencies:
47
33
  version: '5.3'
48
34
  - - "<"
49
35
  - !ruby/object:Gem::Version
50
- version: '5.15'
36
+ version: '5.16'
51
37
  type: :development
52
38
  prerelease: false
53
39
  version_requirements: !ruby/object:Gem::Requirement
@@ -57,7 +43,7 @@ dependencies:
57
43
  version: '5.3'
58
44
  - - "<"
59
45
  - !ruby/object:Gem::Version
60
- version: '5.15'
46
+ version: '5.16'
61
47
  - !ruby/object:Gem::Dependency
62
48
  name: mocha
63
49
  requirement: !ruby/object:Gem::Requirement
@@ -81,7 +67,7 @@ dependencies:
81
67
  version: '1.10'
82
68
  - - "<"
83
69
  - !ruby/object:Gem::Version
84
- version: '3'
70
+ version: '4'
85
71
  type: :runtime
86
72
  prerelease: false
87
73
  version_requirements: !ruby/object:Gem::Requirement
@@ -91,7 +77,7 @@ dependencies:
91
77
  version: '1.10'
92
78
  - - "<"
93
79
  - !ruby/object:Gem::Version
94
- version: '3'
80
+ version: '4'
95
81
  description: Skip all that Busser stuff and jump right into Pester.
96
82
  email:
97
83
  - steven.murawski@gmail.com
@@ -125,7 +111,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
125
111
  - !ruby/object:Gem::Version
126
112
  version: '0'
127
113
  requirements: []
128
- rubygems_version: 3.0.6
114
+ rubygems_version: 3.0.3.1
129
115
  signing_key:
130
116
  specification_version: 4
131
117
  summary: Test-Kitchen verifier for Pester.