Skip to content

Commit 97a1f2d

Browse files
committed
(CAT-2432) Troubleshoot deferred resources in DSC
Implementing new test cases to test deferred values to DSC resources.
1 parent 5213ae0 commit 97a1f2d

File tree

5 files changed

+66
-1
lines changed

5 files changed

+66
-1
lines changed

.gitignore

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
/junit/
1616
/log/
1717
/pkg/
18-
/spec/fixtures/manifests/
1918
/spec/fixtures/modules/*
2019
/tmp/
2120
/vendor/

spec/acceptance/deferred_spec.rb

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
# frozen_string_literal: true
2+
require 'spec_helper_acceptance'
3+
4+
describe 'deferred values with dsc_lite' do
5+
let(:control_manifest) do
6+
File.read(File.join(__dir__, '..', 'fixtures', 'manifests', '01_file_deferred.pp'))
7+
end
8+
9+
let(:dsc_deferred_direct) do
10+
File.read(File.join(__dir__, '..', 'fixtures', 'manifests', '02_dsc_deferred_direct.pp'))
11+
end
12+
13+
let(:dsc_deferred_var) do
14+
File.read(File.join(__dir__, '..', 'fixtures', 'manifests', '03_dsc_deferred_in_variable.pp'))
15+
end
16+
17+
it 'applies with native file + deferred (control succeeds)' do
18+
idempotent_apply(control_manifest)
19+
# optionally verify file contents
20+
on(default, 'powershell.exe -NoProfile -NonInteractive -Command "(Get-Content -Raw C:/Temp/deferred_ok.txt)"') do |r|
21+
expect(r.stdout).to match(/hello-world/)
22+
end
23+
end
24+
25+
context 'dsc_lite with deferred' do
26+
it 'fails when passing Deferred directly to a DSC property' do
27+
# We currently expect failure (documenting the bug).
28+
result = apply_manifest(dsc_deferred_direct, expect_failures: true)
29+
expect(result.stderr + result.stdout).to match(/Deferred|serialize|to_json|downcase|implicit conversion/i)
30+
end
31+
32+
it 'fails when assigning Deferred to a variable then to a DSC property' do
33+
result = apply_manifest(dsc_deferred_var, expect_failures: true)
34+
expect(result.stderr + result.stdout).to match(/Deferred|serialize|to_json|downcase|implicit conversion/i)
35+
end
36+
end
37+
end
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
# manifest: 01_file_deferred.pp
2+
file { 'C:/Temp/deferred_ok.txt':
3+
ensure => file,
4+
content => Deferred('join', [['hello','-','world'], '']),
5+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
# manifest: 02_dsc_deferred_direct.pp
2+
dsc { 'WriteFileViaDSC':
3+
dsc_resource_name => 'File',
4+
dsc_module => 'PSDesiredStateConfiguration',
5+
properties => {
6+
'DestinationPath' => 'C:\Temp\from_dsc.txt',
7+
'Type' => 'File',
8+
'Ensure' => 'Present',
9+
'Contents' => Deferred('join', [['hello','-','dsc'], '']),
10+
},
11+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
# manifest: 03_dsc_deferred_in_variable.pp
2+
$value = Deferred('join', [['hello','-','var'], ''])
3+
4+
dsc { 'WriteFileViaDSCVar':
5+
dsc_resource_name => 'File',
6+
dsc_module => 'PSDesiredStateConfiguration',
7+
properties => {
8+
'DestinationPath' => 'C:\Temp\from_dsc_var.txt',
9+
'Type' => 'File',
10+
'Ensure' => 'Present',
11+
'Contents' => $value, # still a Deferred wrapper at this point
12+
},
13+
}

0 commit comments

Comments
 (0)