chef 17.10.0 → 17.10.95

Sign up to get free protection for your applications and to get access to all the features.
Files changed (65) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +2 -2
  3. data/Rakefile +2 -2
  4. data/chef-universal-mingw32.gemspec +2 -2
  5. data/chef.gemspec +5 -5
  6. data/lib/chef/client.rb +17 -2
  7. data/lib/chef/compliance/input_collection.rb +1 -1
  8. data/lib/chef/compliance/profile_collection.rb +1 -1
  9. data/lib/chef/compliance/waiver_collection.rb +1 -1
  10. data/lib/chef/dsl/secret.rb +113 -5
  11. data/lib/chef/mixin/checksum.rb +6 -0
  12. data/lib/chef/mixin/properties.rb +6 -0
  13. data/lib/chef/node/attribute.rb +20 -3
  14. data/lib/chef/node/mixin/deep_merge_cache.rb +4 -4
  15. data/lib/chef/provider/file.rb +2 -2
  16. data/lib/chef/provider/package/chocolatey.rb +18 -1
  17. data/lib/chef/provider/package/powershell.rb +1 -1
  18. data/lib/chef/provider/package/windows.rb +1 -1
  19. data/lib/chef/provider/user.rb +5 -1
  20. data/lib/chef/resource/chef_client_config.rb +5 -0
  21. data/lib/chef/resource/locale.rb +5 -2
  22. data/lib/chef/resource/macos_userdefaults.rb +9 -5
  23. data/lib/chef/resource/rhsm_register.rb +19 -0
  24. data/lib/chef/resource/support/client.erb +1 -2
  25. data/lib/chef/resource/windows_certificate.rb +54 -43
  26. data/lib/chef/resource/windows_pagefile.rb +28 -21
  27. data/lib/chef/resource/windows_user_privilege.rb +36 -26
  28. data/lib/chef/resource.rb +2 -1
  29. data/lib/chef/run_context.rb +16 -0
  30. data/lib/chef/secret_fetcher/hashi_vault.rb +1 -1
  31. data/lib/chef/version.rb +1 -1
  32. data/lib/chef/win32/version.rb +2 -1
  33. data/spec/data/trusted_certs/example.crt +29 -20
  34. data/spec/data/trusted_certs/example_no_cn.crt +30 -34
  35. data/spec/data/trusted_certs/opscode.pem +33 -54
  36. data/spec/functional/resource/chocolatey_package_spec.rb +32 -20
  37. data/spec/functional/resource/macos_userdefaults_spec.rb +4 -4
  38. data/spec/functional/resource/windows_certificate_spec.rb +41 -13
  39. data/spec/functional/resource/windows_font_spec.rb +1 -1
  40. data/spec/functional/resource/windows_pagefile_spec.rb +31 -4
  41. data/spec/functional/resource/yum_package_spec.rb +1 -1
  42. data/spec/functional/shell_spec.rb +6 -0
  43. data/spec/unit/client_spec.rb +6 -3
  44. data/spec/unit/compliance/reporter/chef_server_automate_spec.rb +1 -1
  45. data/spec/unit/daemon_spec.rb +1 -5
  46. data/spec/unit/dsl/secret_spec.rb +127 -23
  47. data/spec/unit/mixin/checksum_spec.rb +28 -0
  48. data/spec/unit/provider/package/chocolatey_spec.rb +19 -3
  49. data/spec/unit/provider/package/rubygems_spec.rb +1 -1
  50. data/spec/unit/provider/user/linux_spec.rb +55 -0
  51. data/spec/unit/resource/chef_client_config_spec.rb +8 -0
  52. data/spec/unit/resource/macos_user_defaults_spec.rb +4 -4
  53. data/spec/unit/resource_spec.rb +22 -1
  54. data/spec/unit/run_context_spec.rb +16 -0
  55. metadata +28 -34
  56. /data/spec/functional/assets/chocolatey_feed/{test-A.1.0.nupkg → test-A.1.0.0.nupkg} +0 -0
  57. /data/spec/functional/assets/chocolatey_feed/{test-A.1.5.nupkg → test-A.1.5.0.nupkg} +0 -0
  58. /data/spec/functional/assets/chocolatey_feed/{test-A.2.0.nupkg → test-A.2.0.0.nupkg} +0 -0
  59. /data/spec/functional/assets/chocolatey_feed/{test-B.1.0.nupkg → test-B.1.0.0.nupkg} +0 -0
  60. /data/spec/functional/assets/yumrepo/repodata/{4632d67cb92636e7575d911c24f0e04d3505a944e97c483abe0c3e73a7c62d33-filelists.sqlite.bz2 → 01a3b-filelists.sqlite.bz2} +0 -0
  61. /data/spec/functional/assets/yumrepo/repodata/{bdb4f5f1492a3b9532f22c43110a81500dd744f23da0aec5c33b2a41317c737d-filelists.xml.gz → 401dc-filelists.xml.gz} +0 -0
  62. /data/spec/functional/assets/yumrepo/repodata/{a845d418f919d2115ab95a56b2c76f6825ad0d0bede49181a55c04f58995d057-primary.sqlite.bz2 → 5dc1e-primary.sqlite.bz2} +0 -0
  63. /data/spec/functional/assets/yumrepo/repodata/{74599b793e54d877323837d2d81a1c3c594c44e4335f9528234bb490f7b9b439-other.xml.gz → 6bf96-other.xml.gz} +0 -0
  64. /data/spec/functional/assets/yumrepo/repodata/{af9b7cf9ef23bd7b43068d74a460f3b5d06753d638e58e4a0c9edc35bfb9cdc4-other.sqlite.bz2 → 7c365-other.sqlite.bz2} +0 -0
  65. /data/spec/functional/assets/yumrepo/repodata/{c10d1d34ce99e02f12ec96ef68360543ab1bb7c3cb81a4a2bf78df7d8597e9df-primary.xml.gz → dabe2-primary.xml.gz} +0 -0
@@ -17,11 +17,14 @@
17
17
  #
18
18
 
19
19
  require "spec_helper"
20
+ require "chef/exceptions"
20
21
  require "chef/dsl/secret"
21
22
  require "chef/secret_fetcher/base"
23
+
22
24
  class SecretDSLTester
23
25
  include Chef::DSL::Secret
24
- # Because DSL is invoked in the context of a recipe,
26
+
27
+ # Because DSL is invoked in the context of a recipe or attribute file
25
28
  # we expect run_context to always be available when SecretFetcher::Base
26
29
  # requests it - making it safe to mock here
27
30
  def run_context
@@ -37,35 +40,136 @@ end
37
40
 
38
41
  describe Chef::DSL::Secret do
39
42
  let(:dsl) { SecretDSLTester.new }
40
- it "responds to 'secret'" do
41
- expect(dsl.respond_to?(:secret)).to eq true
43
+ let(:run_context) { Chef::RunContext.new(Chef::Node.new, {}, Chef::EventDispatch::Dispatcher.new) }
44
+
45
+ before do
46
+ allow(dsl).to receive(:run_context).and_return(run_context)
42
47
  end
43
48
 
44
- it "uses SecretFetcher.for_service to find the fetcher" do
45
- substitute_fetcher = SecretFetcherImpl.new({}, nil)
46
- expect(Chef::SecretFetcher).to receive(:for_service).with(:example, {}, nil).and_return(substitute_fetcher)
47
- expect(substitute_fetcher).to receive(:fetch).with("key1", nil)
48
- dsl.secret(name: "key1", service: :example, config: {})
49
+ %w{
50
+ secret
51
+ default_secret_service
52
+ default_secret_config
53
+ with_secret_service
54
+ with_secret_config
55
+ }.each do |m|
56
+ it "responds to ##{m}" do
57
+ expect(dsl.respond_to?(m)).to eq true
58
+ end
59
+ end
60
+
61
+ describe "#default_secret_service" do
62
+ let(:service) { :hashi_vault }
63
+
64
+ it "persists the service passed in as an argument" do
65
+ expect(dsl.default_secret_service).to eq(nil)
66
+ dsl.default_secret_service(service)
67
+ expect(dsl.default_secret_service).to eq(service)
68
+ end
69
+
70
+ it "returns run_context.default_secret_service value when no argument is given" do
71
+ run_context.default_secret_service = :my_thing
72
+ expect(dsl.default_secret_service).to eq(:my_thing)
73
+ end
74
+
75
+ it "raises exception when service given is not valid" do
76
+ stub_const("Chef::SecretFetcher::SECRET_FETCHERS", %i{service_a service_b})
77
+ expect { dsl.default_secret_service(:unknown_service) }.to raise_error(Chef::Exceptions::Secret::InvalidFetcherService)
78
+ end
49
79
  end
50
80
 
51
- it "resolves a secret when using the example fetcher" do
52
- secret_value = dsl.secret(name: "test1", service: :example, config: { "test1" => "secret value" })
53
- expect(secret_value).to eq "secret value"
81
+ describe "#with_secret_config" do
82
+ let(:service) { :hashi_vault }
83
+
84
+ it "sets the service for the scope of the block only" do
85
+ expect(dsl.default_secret_service).to eq(nil)
86
+ dsl.with_secret_service(service) do
87
+ expect(dsl.default_secret_service).to eq(service)
88
+ end
89
+ expect(dsl.default_secret_service).to eq(nil)
90
+ end
91
+
92
+ it "raises exception when block is not given" do
93
+ expect { dsl.with_secret_service(service) }.to raise_error(ArgumentError)
94
+ end
54
95
  end
55
96
 
56
- context "when used within a resource" do
57
- let(:run_context) {
58
- Chef::RunContext.new(Chef::Node.new,
59
- Chef::CookbookCollection.new(Chef::CookbookLoader.new(File.join(CHEF_SPEC_DATA, "cookbooks"))),
60
- Chef::EventDispatch::Dispatcher.new)
61
- }
62
-
63
- it "marks that resource as 'sensitive'" do
64
- recipe = Chef::Recipe.new("secrets", "test", run_context)
65
- recipe.zen_master "secret_test" do
66
- peace secret(name: "test1", service: :example, config: { "test1" => true })
97
+ describe "#default_secret_config" do
98
+ let(:config) { { my_key: "value" } }
99
+
100
+ it "persists the config passed in as argument" do
101
+ expect(dsl.default_secret_config).to eq({})
102
+ dsl.default_secret_config(**config)
103
+ expect(dsl.default_secret_config).to eq(config)
104
+ end
105
+
106
+ it "returns run_context.default_secret_config value when no argument is given" do
107
+ run_context.default_secret_config = { my_thing: "that" }
108
+ expect(dsl.default_secret_config).to eq({ my_thing: "that" })
109
+ end
110
+ end
111
+
112
+ describe "#with_secret_config" do
113
+ let(:config) { { my_key: "value" } }
114
+
115
+ it "sets the config for the scope of the block only" do
116
+ expect(dsl.default_secret_config).to eq({})
117
+ dsl.with_secret_config(**config) do
118
+ expect(dsl.default_secret_config).to eq(config)
67
119
  end
68
- expect(run_context.resource_collection.lookup("zen_master[secret_test]").sensitive).to eql(true)
120
+ expect(dsl.default_secret_config).to eq({})
121
+ end
122
+
123
+ it "raises exception when block is not given" do
124
+ expect { dsl.with_secret_config(**config) }.to raise_error(ArgumentError)
125
+ end
126
+ end
127
+
128
+ describe "#secret" do
129
+ it "uses SecretFetcher.for_service to find the fetcher" do
130
+ substitute_fetcher = SecretFetcherImpl.new({}, nil)
131
+ expect(Chef::SecretFetcher).to receive(:for_service).with(:example, {}, run_context).and_return(substitute_fetcher)
132
+ expect(substitute_fetcher).to receive(:fetch).with("key1", nil)
133
+ dsl.secret(name: "key1", service: :example, config: {})
134
+ end
135
+
136
+ it "resolves a secret when using the example fetcher" do
137
+ secret_value = dsl.secret(name: "test1", service: :example, config: { "test1" => "secret value" })
138
+ expect(secret_value).to eq "secret value"
139
+ end
140
+
141
+ context "when used within a resource" do
142
+ let(:run_context) {
143
+ Chef::RunContext.new(Chef::Node.new,
144
+ Chef::CookbookCollection.new(Chef::CookbookLoader.new(File.join(CHEF_SPEC_DATA, "cookbooks"))),
145
+ Chef::EventDispatch::Dispatcher.new)
146
+ }
147
+
148
+ it "marks that resource as 'sensitive'" do
149
+ recipe = Chef::Recipe.new("secrets", "test", run_context)
150
+ recipe.zen_master "secret_test" do
151
+ peace secret(name: "test1", service: :example, config: { "test1" => true })
152
+ end
153
+ expect(run_context.resource_collection.lookup("zen_master[secret_test]").sensitive).to eql(true)
154
+ end
155
+ end
156
+
157
+ it "passes default service to SecretFetcher.for_service" do
158
+ service = :example
159
+ dsl.default_secret_service(service)
160
+ substitute_fetcher = SecretFetcherImpl.new({}, nil)
161
+ expect(Chef::SecretFetcher).to receive(:for_service).with(service, {}, run_context).and_return(substitute_fetcher)
162
+ allow(substitute_fetcher).to receive(:fetch).with("key1", nil)
163
+ dsl.secret(name: "key1")
164
+ end
165
+
166
+ it "passes default config to SecretFetcher.for_service" do
167
+ config = { my_config: "value" }
168
+ dsl.default_secret_config(**config)
169
+ substitute_fetcher = SecretFetcherImpl.new({}, nil)
170
+ expect(Chef::SecretFetcher).to receive(:for_service).with(:example, config, run_context).and_return(substitute_fetcher)
171
+ allow(substitute_fetcher).to receive(:fetch).with("key1", nil)
172
+ dsl.secret(name: "key1", service: :example)
69
173
  end
70
174
  end
71
175
  end
@@ -51,4 +51,32 @@ describe Chef::Mixin::Checksum do
51
51
  end
52
52
  end
53
53
 
54
+ describe "checksum_match?" do
55
+ context "when checksum cases match" do
56
+ it "returns true" do
57
+ expect(@checksum_user.checksum_match?("u7ghbxikk3i9blsimmy2y2ionmxx", "u7ghbxikk3i9blsimmy2y2ionmxx")).to be true
58
+ end
59
+ end
60
+
61
+ context "when one checksum is uppercase and other is lowercase" do
62
+ it "returns true" do
63
+ expect(@checksum_user.checksum_match?("U7GHBXIKK3I9BLSIMMY2Y2IONMXX", "u7ghbxikk3i9blsimmy2y2ionmxx")).to be true
64
+ end
65
+ end
66
+
67
+ context "when checksums do not match" do
68
+ it "returns false" do
69
+ expect(@checksum_user.checksum_match?("u7ghbxikk3i9blsimmy2y2ionmxx", "09ee9c8cc70501763563bcf9c218")).to be false
70
+ end
71
+ end
72
+
73
+ context "when checksum is nil" do
74
+ it "returns false" do
75
+ expect(@checksum_user.checksum_match?("u7ghbxikk3i9blsimmy2y2ionmxx", nil)).to be false
76
+ expect(@checksum_user.checksum_match?(nil, "09ee9c8cc70501763563bcf9c218")).to be false
77
+ expect(@checksum_user.checksum_match?(nil, nil)).to be false
78
+ end
79
+ end
80
+ end
81
+
54
82
  end
@@ -49,6 +49,10 @@ describe Chef::Provider::Package::Chocolatey, :windows_only do
49
49
  allow(provider).to receive(:shell_out_compacted!).with(choco_exe, "list", "-l", "-r", { returns: [0, 2], timeout: timeout }).and_return(local_list_obj)
50
50
  end
51
51
 
52
+ after(:each) do
53
+ described_class.instance_variable_set(:@get_choco_version, nil)
54
+ end
55
+
52
56
  def allow_remote_list(package_names, args = nil)
53
57
  remote_list_stdout = <<~EOF
54
58
  Chocolatey v0.9.9.11
@@ -61,9 +65,9 @@ describe Chef::Provider::Package::Chocolatey, :windows_only do
61
65
  remote_list_obj = double(stdout: remote_list_stdout)
62
66
  package_names.each do |pkg|
63
67
  if args
64
- allow(provider).to receive(:shell_out_compacted!).with(choco_exe, "list", "-r", pkg, *args, { returns: [0, 2], timeout: timeout }).and_return(remote_list_obj)
68
+ allow(provider).to receive(:shell_out_compacted!).with(choco_exe, described_class.query_command, "-r", pkg, *args, { returns: [0, 2], timeout: timeout }).and_return(remote_list_obj)
65
69
  else
66
- allow(provider).to receive(:shell_out_compacted!).with(choco_exe, "list", "-r", pkg, { returns: [0, 2], timeout: timeout }).and_return(remote_list_obj)
70
+ allow(provider).to receive(:shell_out_compacted!).with(choco_exe, described_class.query_command, "-r", pkg, { returns: [0, 2], timeout: timeout }).and_return(remote_list_obj)
67
71
  end
68
72
  end
69
73
  end
@@ -78,6 +82,18 @@ describe Chef::Provider::Package::Chocolatey, :windows_only do
78
82
  end
79
83
  end
80
84
 
85
+ describe "choco searches change with the version" do
86
+ it "Choco V1 uses List" do
87
+ allow(described_class).to receive(:get_choco_version).and_return("1.4.0")
88
+ expect(provider.query_command).to eql("list")
89
+ end
90
+
91
+ it "Choco V2 uses Search" do
92
+ allow(described_class).to receive(:get_choco_version).and_return("2.1.0")
93
+ expect(provider.query_command).to eql("search")
94
+ end
95
+ end
96
+
81
97
  describe "#candidate_version" do
82
98
  it "should set the candidate_version to the latest version when not pinning" do
83
99
  allow_remote_list(["git"])
@@ -150,7 +166,7 @@ describe Chef::Provider::Package::Chocolatey, :windows_only do
150
166
  new_resource.package_name("package-does-not-exist")
151
167
  new_resource.returns([0])
152
168
  allow(provider).to receive(:shell_out_compacted!)
153
- .with(choco_exe, "list", "-r", new_resource.package_name.first, { returns: new_resource.returns, timeout: timeout })
169
+ .with(choco_exe, described_class.query_command, "-r", new_resource.package_name.first, { returns: new_resource.returns, timeout: timeout })
154
170
  .and_raise(Mixlib::ShellOut::ShellCommandFailed, "Expected process to exit with [0], but received '2'")
155
171
  expect { provider.send(:available_packages) }.to raise_error(Mixlib::ShellOut::ShellCommandFailed, "Expected process to exit with [0], but received '2'")
156
172
  end
@@ -143,7 +143,7 @@ describe Chef::Provider::Package::Rubygems::CurrentGemEnvironment do
143
143
  .to_return(status: 200, body: File.binread(File.join(CHEF_SPEC_DATA, "rubygems.org", "sexp_processor-4.15.1.gemspec.rz")))
144
144
 
145
145
  dep = Gem::Dependency.new("sexp_processor", ">= 0")
146
- expect(@gem_env.candidate_version_from_remote(dep, "https://rubygems2.org")).to be_kind_of(Gem::Version)
146
+ expect(@gem_env.candidate_version_from_remote(dep, "https://rubygems2.org")).to be_nil
147
147
  end
148
148
  end
149
149
 
@@ -70,4 +70,59 @@ describe Chef::Provider::User::Linux do
70
70
  expect( provider.useradd_options ).to eql(["-m"])
71
71
  end
72
72
  end
73
+
74
+ describe "compare_user_linux" do
75
+ before(:each) do
76
+ @new_resource = Chef::Resource::User::LinuxUser.new("notarealuser")
77
+ @current_resource = Chef::Resource::User::LinuxUser.new("notarealuser")
78
+ end
79
+
80
+ let(:mapping) do
81
+ {
82
+ "username" => %w{notarealuser notarealuser},
83
+ "comment" => ["Nota Realuser", "Not a Realuser"],
84
+ "uid" => [1000, 1001],
85
+ "gid" => [1000, 1001],
86
+ "home" => ["/home/notarealuser", "/Users/notarealuser"],
87
+ "shell" => ["/usr/bin/zsh", "/bin/bash"],
88
+ "password" => %w{abcd 12345},
89
+ "sensitive" => [true],
90
+ }
91
+ end
92
+
93
+ %w{uid gid comment home shell password}.each do |property|
94
+ it "should return true if #{property} doesn't match" do
95
+ @new_resource.send(property, mapping[property][0])
96
+ @current_resource.send(property, mapping[property][1])
97
+ expect(provider.compare_user).to eql(true)
98
+ end
99
+ end
100
+
101
+ it "should show a blank for password if sensitive set to true" do
102
+ @new_resource.password mapping["password"][0]
103
+ @current_resource.password mapping["password"][1]
104
+ @new_resource.sensitive true
105
+ @current_resource.sensitive true
106
+ provider.compare_user
107
+ expect(provider.change_desc).to eql(["change password from ******** to ********"])
108
+ end
109
+
110
+ %w{uid gid}.each do |property|
111
+ it "should return false if string #{property} matches fixnum" do
112
+ @new_resource.send(property, "100")
113
+ @current_resource.send(property, 100)
114
+ expect(provider.compare_user).to eql(false)
115
+ end
116
+ end
117
+
118
+ it "should return false if the objects are identical" do
119
+ expect(provider.compare_user).to eql(false)
120
+ end
121
+
122
+ it "should ignore differences in trailing slash in home paths" do
123
+ @new_resource.home "/home/notarealuser"
124
+ @current_resource.home "/home/notarealuser/"
125
+ expect(provider.compare_user).to eql(false)
126
+ end
127
+ end
73
128
  end
@@ -134,4 +134,12 @@ describe Chef::Resource::ChefClientConfig do
134
134
  expect(provider.format_handler([{ "class" => "Foo", "arguments" => ["'one'", "two", "three"] }])).to eql(["Foo.new('one',two,three)"])
135
135
  end
136
136
  end
137
+
138
+ describe "rubygems_url property" do
139
+ it "accepts nil, a single URL, or an array of URLs" do
140
+ expect { resource.rubygems_url(nil) }.not_to raise_error
141
+ expect { resource.rubygems_url("https://rubygems.internal.example.com") }.not_to raise_error
142
+ expect { resource.rubygems_url(["https://rubygems.east.example.com", "https://rubygems.west.example.com"]) }.not_to raise_error
143
+ end
144
+ end
137
145
  end
@@ -39,12 +39,12 @@ describe Chef::Resource::MacosUserDefaults, :macos_only do
39
39
  expect(resource.domain).to eq("NSGlobalDomain")
40
40
  end
41
41
 
42
- it "nil for the host property" do
43
- expect(resource.host).to be_nil
42
+ it ":all for the host property" do
43
+ expect(resource.host).to eq(:all)
44
44
  end
45
45
 
46
- it "nil for the user property" do
47
- expect(resource.user).to be_nil
46
+ it ":current for the user property" do
47
+ expect(resource.user).to eq(:current)
48
48
  end
49
49
 
50
50
  it ":write for resource action" do
@@ -371,6 +371,9 @@ describe Chef::Resource do
371
371
  end
372
372
 
373
373
  describe "to_text" do
374
+
375
+ let(:sensitive_property_masked_value) { "sensitive value suppressed" }
376
+
374
377
  it "prints nice message" do
375
378
  resource_class = Class.new(Chef::Resource) { property :foo, String }
376
379
  resource = resource_class.new("sensitive_property_tests")
@@ -383,7 +386,25 @@ describe Chef::Resource do
383
386
  resource_class = Class.new(Chef::Resource) { property :foo, String, sensitive: true }
384
387
  resource = resource_class.new("sensitive_property_tests")
385
388
  resource.foo = "some value"
386
- expect(resource.to_text).to match(/foo "\*sensitive value suppressed\*"/)
389
+ expect(resource.to_text).to match(/foo "\*#{sensitive_property_masked_value}\*"/)
390
+ end
391
+
392
+ it "suppresses that properties value irrespective of desired state (false) " do
393
+ resource_class = Class.new(Chef::Resource) {
394
+ property :suppressed_content, String, sensitive: true, desired_state: false
395
+ }
396
+ resource = resource_class.new("desired_state_property_tests")
397
+ resource.suppressed_content = "some value"
398
+ expect(resource.to_text).to match(/suppressed_content "\*#{sensitive_property_masked_value}\*"/)
399
+ end
400
+
401
+ it "suppresses that properties value irrespective of desired state (true) " do
402
+ resource_class = Class.new(Chef::Resource) {
403
+ property :desired_state_content, String, sensitive: true, desired_state: true
404
+ }
405
+ resource = resource_class.new("desired_state_property_tests")
406
+ resource.desired_state_content = "some value"
407
+ expect(resource.to_text).to match(/desired_state_content "\*#{sensitive_property_masked_value}\*"/)
387
408
  end
388
409
  end
389
410
 
@@ -53,6 +53,22 @@ describe Chef::RunContext do
53
53
  expect(run_context.node).to eq(node)
54
54
  end
55
55
 
56
+ it "responds to #default_secret_service" do
57
+ expect(run_context).to respond_to(:default_secret_service)
58
+ end
59
+
60
+ it "responds to #default_secret_config" do
61
+ expect(run_context).to respond_to(:default_secret_config)
62
+ end
63
+
64
+ it "#default_secret_service defaults to nil" do
65
+ expect(run_context.default_secret_service).to eq(nil)
66
+ end
67
+
68
+ it "#default_secret_config defaults to {}" do
69
+ expect(run_context.default_secret_config).to eq({})
70
+ end
71
+
56
72
  it "loads up node[:cookbooks]" do
57
73
  expect(run_context.node[:cookbooks]).to eql(
58
74
  {
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: chef
3
3
  version: !ruby/object:Gem::Version
4
- version: 17.10.0
4
+ version: 17.10.95
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adam Jacob
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-03-17 00:00:00.000000000 Z
11
+ date: 2023-11-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: chef-config
@@ -16,48 +16,42 @@ dependencies:
16
16
  requirements:
17
17
  - - '='
18
18
  - !ruby/object:Gem::Version
19
- version: 17.10.0
19
+ version: 17.10.95
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - '='
25
25
  - !ruby/object:Gem::Version
26
- version: 17.10.0
26
+ version: 17.10.95
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: chef-utils
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - '='
32
32
  - !ruby/object:Gem::Version
33
- version: 17.10.0
33
+ version: 17.10.95
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - '='
39
39
  - !ruby/object:Gem::Version
40
- version: 17.10.0
40
+ version: 17.10.95
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: train-core
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '3.2'
48
- - - ">="
49
- - !ruby/object:Gem::Version
50
- version: 3.2.28
47
+ version: '3.10'
51
48
  type: :runtime
52
49
  prerelease: false
53
50
  version_requirements: !ruby/object:Gem::Requirement
54
51
  requirements:
55
52
  - - "~>"
56
53
  - !ruby/object:Gem::Version
57
- version: '3.2'
58
- - - ">="
59
- - !ruby/object:Gem::Version
60
- version: 3.2.28
54
+ version: '3.10'
61
55
  - !ruby/object:Gem::Dependency
62
56
  name: train-winrm
63
57
  requirement: !ruby/object:Gem::Requirement
@@ -210,30 +204,30 @@ dependencies:
210
204
  name: inspec-core
211
205
  requirement: !ruby/object:Gem::Requirement
212
206
  requirements:
213
- - - "~>"
207
+ - - ">="
214
208
  - !ruby/object:Gem::Version
215
209
  version: '4.23'
216
210
  type: :runtime
217
211
  prerelease: false
218
212
  version_requirements: !ruby/object:Gem::Requirement
219
213
  requirements:
220
- - - "~>"
214
+ - - ">="
221
215
  - !ruby/object:Gem::Version
222
216
  version: '4.23'
223
217
  - !ruby/object:Gem::Dependency
224
218
  name: ffi
225
219
  requirement: !ruby/object:Gem::Requirement
226
220
  requirements:
227
- - - ">="
221
+ - - "~>"
228
222
  - !ruby/object:Gem::Version
229
- version: 1.5.0
223
+ version: 1.15.0
230
224
  type: :runtime
231
225
  prerelease: false
232
226
  version_requirements: !ruby/object:Gem::Requirement
233
227
  requirements:
234
- - - ">="
228
+ - - "~>"
235
229
  - !ruby/object:Gem::Version
236
- version: 1.5.0
230
+ version: 1.15.0
237
231
  - !ruby/object:Gem::Dependency
238
232
  name: ffi-yajl
239
233
  requirement: !ruby/object:Gem::Requirement
@@ -257,7 +251,7 @@ dependencies:
257
251
  version: 2.1.2
258
252
  - - "<"
259
253
  - !ruby/object:Gem::Version
260
- version: '4.0'
254
+ version: '5.0'
261
255
  type: :runtime
262
256
  prerelease: false
263
257
  version_requirements: !ruby/object:Gem::Requirement
@@ -267,7 +261,7 @@ dependencies:
267
261
  version: 2.1.2
268
262
  - - "<"
269
263
  - !ruby/object:Gem::Version
270
- version: '4.0'
264
+ version: '5.0'
271
265
  - !ruby/object:Gem::Dependency
272
266
  name: erubis
273
267
  requirement: !ruby/object:Gem::Requirement
@@ -1663,10 +1657,10 @@ files:
1663
1657
  - spec/functional/assets/PkgA.1.0.0.0.bff
1664
1658
  - spec/functional/assets/PkgA.2.0.0.0.bff
1665
1659
  - spec/functional/assets/chefinittest
1666
- - spec/functional/assets/chocolatey_feed/test-A.1.0.nupkg
1667
- - spec/functional/assets/chocolatey_feed/test-A.1.5.nupkg
1668
- - spec/functional/assets/chocolatey_feed/test-A.2.0.nupkg
1669
- - spec/functional/assets/chocolatey_feed/test-B.1.0.nupkg
1660
+ - spec/functional/assets/chocolatey_feed/test-A.1.0.0.nupkg
1661
+ - spec/functional/assets/chocolatey_feed/test-A.1.5.0.nupkg
1662
+ - spec/functional/assets/chocolatey_feed/test-A.2.0.0.nupkg
1663
+ - spec/functional/assets/chocolatey_feed/test-B.1.0.0.nupkg
1670
1664
  - spec/functional/assets/dummy-1-0.aix6.1.noarch.rpm
1671
1665
  - spec/functional/assets/dummy-2-0.aix6.1.noarch.rpm
1672
1666
  - spec/functional/assets/inittest
@@ -1687,12 +1681,12 @@ files:
1687
1681
  - spec/functional/assets/yumrepo/chef_rpm-1.2-1.s390x.rpm
1688
1682
  - spec/functional/assets/yumrepo/chef_rpm-1.2-1.src.rpm
1689
1683
  - spec/functional/assets/yumrepo/chef_rpm-1.2-1.x86_64.rpm
1690
- - spec/functional/assets/yumrepo/repodata/4632d67cb92636e7575d911c24f0e04d3505a944e97c483abe0c3e73a7c62d33-filelists.sqlite.bz2
1691
- - spec/functional/assets/yumrepo/repodata/74599b793e54d877323837d2d81a1c3c594c44e4335f9528234bb490f7b9b439-other.xml.gz
1692
- - spec/functional/assets/yumrepo/repodata/a845d418f919d2115ab95a56b2c76f6825ad0d0bede49181a55c04f58995d057-primary.sqlite.bz2
1693
- - spec/functional/assets/yumrepo/repodata/af9b7cf9ef23bd7b43068d74a460f3b5d06753d638e58e4a0c9edc35bfb9cdc4-other.sqlite.bz2
1694
- - spec/functional/assets/yumrepo/repodata/bdb4f5f1492a3b9532f22c43110a81500dd744f23da0aec5c33b2a41317c737d-filelists.xml.gz
1695
- - spec/functional/assets/yumrepo/repodata/c10d1d34ce99e02f12ec96ef68360543ab1bb7c3cb81a4a2bf78df7d8597e9df-primary.xml.gz
1684
+ - spec/functional/assets/yumrepo/repodata/01a3b-filelists.sqlite.bz2
1685
+ - spec/functional/assets/yumrepo/repodata/401dc-filelists.xml.gz
1686
+ - spec/functional/assets/yumrepo/repodata/5dc1e-primary.sqlite.bz2
1687
+ - spec/functional/assets/yumrepo/repodata/6bf96-other.xml.gz
1688
+ - spec/functional/assets/yumrepo/repodata/7c365-other.sqlite.bz2
1689
+ - spec/functional/assets/yumrepo/repodata/dabe2-primary.xml.gz
1696
1690
  - spec/functional/assets/yumrepo/repodata/filelists.xml.gz
1697
1691
  - spec/functional/assets/yumrepo/repodata/other.xml.gz
1698
1692
  - spec/functional/assets/yumrepo/repodata/primary.xml.gz
@@ -2387,14 +2381,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
2387
2381
  requirements:
2388
2382
  - - ">="
2389
2383
  - !ruby/object:Gem::Version
2390
- version: 2.6.0
2384
+ version: 2.7.0
2391
2385
  required_rubygems_version: !ruby/object:Gem::Requirement
2392
2386
  requirements:
2393
2387
  - - ">="
2394
2388
  - !ruby/object:Gem::Version
2395
2389
  version: '0'
2396
2390
  requirements: []
2397
- rubygems_version: 3.2.32
2391
+ rubygems_version: 3.2.33
2398
2392
  signing_key:
2399
2393
  specification_version: 4
2400
2394
  summary: A systems integration framework, built to bring the benefits of configuration