|
1 | 1 | require 'spec_helper'
|
2 | 2 | require 'puppet_spec/compiler'
|
3 | 3 |
|
| 4 | +Puppet::Type.newtype(:test_deferred) do |
| 5 | + newparam(:name) |
| 6 | + newproperty(:value) |
| 7 | +end |
| 8 | + |
4 | 9 | describe Puppet::Pops::Evaluator::DeferredResolver do
|
5 | 10 | include PuppetSpec::Compiler
|
6 | 11 |
|
7 | 12 | let(:environment) { Puppet::Node::Environment.create(:testing, []) }
|
8 | 13 | let(:facts) { Puppet::Node::Facts.new('node.example.com') }
|
9 | 14 |
|
| 15 | + def compile_and_resolve_catalog(code, preprocess = false) |
| 16 | + catalog = compile_to_catalog(code) |
| 17 | + described_class.resolve_and_replace(facts, catalog, environment, preprocess) |
| 18 | + catalog |
| 19 | + end |
| 20 | + |
10 | 21 | it 'resolves deferred values in a catalog' do
|
11 |
| - catalog = compile_to_catalog(<<~END) |
| 22 | + catalog = compile_and_resolve_catalog(<<~END, true) |
12 | 23 | notify { "deferred":
|
13 | 24 | message => Deferred("join", [[1,2,3], ":"])
|
14 | 25 | }
|
15 | 26 | END
|
16 |
| - described_class.resolve_and_replace(facts, catalog) |
17 | 27 |
|
18 | 28 | expect(catalog.resource(:notify, 'deferred')[:message]).to eq('1:2:3')
|
19 | 29 | end
|
20 | 30 |
|
21 | 31 | it 'lazily resolves deferred values in a catalog' do
|
22 |
| - catalog = compile_to_catalog(<<~END) |
| 32 | + catalog = compile_and_resolve_catalog(<<~END) |
23 | 33 | notify { "deferred":
|
24 | 34 | message => Deferred("join", [[1,2,3], ":"])
|
25 | 35 | }
|
26 | 36 | END
|
27 |
| - described_class.resolve_and_replace(facts, catalog, environment, false) |
28 | 37 |
|
29 | 38 | deferred = catalog.resource(:notify, 'deferred')[:message]
|
30 | 39 | expect(deferred.resolve).to eq('1:2:3')
|
31 | 40 | end
|
32 | 41 |
|
33 | 42 | it 'lazily resolves nested deferred values in a catalog' do
|
34 |
| - catalog = compile_to_catalog(<<~END) |
| 43 | + catalog = compile_and_resolve_catalog(<<~END) |
35 | 44 | $args = Deferred("inline_epp", ["<%= 'a,b,c' %>"])
|
36 | 45 | notify { "deferred":
|
37 | 46 | message => Deferred("split", [$args, ","])
|
38 | 47 | }
|
39 | 48 | END
|
40 |
| - described_class.resolve_and_replace(facts, catalog, environment, false) |
41 | 49 |
|
42 | 50 | deferred = catalog.resource(:notify, 'deferred')[:message]
|
43 | 51 | expect(deferred.resolve).to eq(["a", "b", "c"])
|
44 | 52 | end
|
45 | 53 |
|
| 54 | + it 'marks the parameter as sensitive when passed an array containing a Sensitive instance' do |
| 55 | + catalog = compile_and_resolve_catalog(<<~END) |
| 56 | + test_deferred { "deferred": |
| 57 | + value => Deferred('join', [['a', Sensitive('b')], ':']) |
| 58 | + } |
| 59 | + END |
| 60 | + |
| 61 | + resource = catalog.resource(:test_deferred, 'deferred') |
| 62 | + expect(resource.sensitive_parameters).to eq([:value]) |
| 63 | + end |
| 64 | + |
| 65 | + it 'marks the parameter as sensitive when passed a hash containing a Sensitive key' do |
| 66 | + catalog = compile_and_resolve_catalog(<<~END) |
| 67 | + test_deferred { "deferred": |
| 68 | + value => Deferred('keys', [{Sensitive('key') => 'value'}]) |
| 69 | + } |
| 70 | + END |
| 71 | + |
| 72 | + resource = catalog.resource(:test_deferred, 'deferred') |
| 73 | + expect(resource.sensitive_parameters).to eq([:value]) |
| 74 | + end |
| 75 | + |
| 76 | + it 'marks the parameter as sensitive when passed a hash containing a Sensitive value' do |
| 77 | + catalog = compile_and_resolve_catalog(<<~END) |
| 78 | + test_deferred { "deferred": |
| 79 | + value => Deferred('values', [{key => Sensitive('value')}]) |
| 80 | + } |
| 81 | + END |
| 82 | + |
| 83 | + resource = catalog.resource(:test_deferred, 'deferred') |
| 84 | + expect(resource.sensitive_parameters).to eq([:value]) |
| 85 | + end |
| 86 | + |
| 87 | + it 'marks the parameter as sensitive when passed a nested Deferred containing a Sensitive type' do |
| 88 | + catalog = compile_and_resolve_catalog(<<~END) |
| 89 | + $vars = {'token' => Deferred('new', [Sensitive, "hello"])} |
| 90 | + test_deferred { "deferred": |
| 91 | + value => Deferred('inline_epp', ['<%= $token %>', $vars]) |
| 92 | + } |
| 93 | + END |
| 94 | + |
| 95 | + resource = catalog.resource(:test_deferred, 'deferred') |
| 96 | + expect(resource.sensitive_parameters).to eq([:value]) |
| 97 | + end |
46 | 98 | end
|
0 commit comments