chef 12.14.89-universal-mingw32 → 12.15.19-universal-mingw32
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CONTRIBUTING.md +76 -51
- data/Gemfile +1 -1
- data/README.md +9 -7
- data/Rakefile +1 -1
- data/VERSION +1 -1
- data/acceptance/Gemfile +3 -0
- data/acceptance/Gemfile.lock +19 -18
- data/acceptance/fips/.kitchen.yml +1 -1
- data/lib/chef/application/exit_code.rb +9 -0
- data/lib/chef/cookbook/file_system_file_vendor.rb +7 -8
- data/lib/chef/cookbook/metadata.rb +8 -0
- data/lib/chef/exceptions.rb +5 -0
- data/lib/chef/knife.rb +14 -15
- data/lib/chef/knife/ssh.rb +1 -0
- data/lib/chef/node/attribute.rb +1 -3
- data/lib/chef/node/attribute_collections.rb +20 -0
- data/lib/chef/provider/apt_repository.rb +1 -1
- data/lib/chef/provider/apt_update.rb +1 -1
- data/lib/chef/provider/group/groupadd.rb +2 -1
- data/lib/chef/provider/package/cab.rb +150 -0
- data/lib/chef/provider/package/rubygems.rb +0 -1
- data/lib/chef/provider/registry_key.rb +26 -2
- data/lib/chef/provider/remote_file/content.rb +1 -1
- data/lib/chef/provider/user.rb +10 -0
- data/lib/chef/provider/user/dscl.rb +2 -2
- data/lib/chef/provider/user/linux.rb +4 -14
- data/lib/chef/provider/user/pw.rb +2 -2
- data/lib/chef/provider/user/solaris.rb +15 -0
- data/lib/chef/provider/user/useradd.rb +1 -5
- data/lib/chef/providers.rb +1 -0
- data/lib/chef/resource/cab_package.rb +44 -0
- data/lib/chef/resource/registry_key.rb +3 -3
- data/lib/chef/resource/yum_repository.rb +1 -1
- data/lib/chef/resources.rb +1 -0
- data/lib/chef/server_api.rb +1 -1
- data/lib/chef/util/dsc/local_configuration_manager.rb +1 -1
- data/lib/chef/version.rb +1 -1
- data/spec/data/templates/chef-seattle20160930-4388-1crv7ef.txt +1 -0
- data/spec/data/templates/chef-seattle20160930-4388-jjfoae.txt +1 -0
- data/spec/data/templates/chef-seattle20160930-4388-umeq2c.txt +1 -0
- data/spec/functional/knife/cookbook_delete_spec.rb +48 -59
- data/spec/functional/resource/ifconfig_spec.rb +6 -0
- data/spec/functional/resource/registry_spec.rb +110 -4
- data/spec/unit/application/exit_code_spec.rb +10 -0
- data/spec/unit/cookbook/file_vendor_spec.rb +15 -0
- data/spec/unit/cookbook/metadata_spec.rb +19 -0
- data/spec/unit/exceptions_spec.rb +2 -0
- data/spec/unit/node/attribute_spec.rb +23 -1
- data/spec/unit/node/vivid_mash_spec.rb +27 -0
- data/spec/unit/provider/group/groupadd_spec.rb +118 -99
- data/spec/unit/provider/package/cab_spec.rb +218 -0
- data/spec/unit/provider/package/rubygems_spec.rb +2 -4
- data/spec/unit/provider/registry_key_spec.rb +94 -0
- data/spec/unit/provider/remote_file/content_spec.rb +1 -0
- data/spec/unit/provider/user/solaris_spec.rb +52 -40
- data/spec/unit/resource/apt_update_spec.rb +25 -17
- data/spec/unit/resource/cab_package_spec.rb +38 -0
- data/spec/unit/resource/registry_key_spec.rb +26 -10
- data/spec/unit/server_api_spec.rb +50 -0
- data/spec/unit/util/dsc/local_configuration_manager_spec.rb +10 -4
- metadata +13 -5
@@ -735,10 +735,9 @@ describe Chef::Provider::Package::Rubygems do
|
|
735
735
|
context "when source is a path" do
|
736
736
|
let(:source) { CHEF_SPEC_DATA + "/gems/chef-integration-test-0.1.0.gem" }
|
737
737
|
let(:target_version) { ">= 0" }
|
738
|
-
let(:domain) { " --local" }
|
739
738
|
|
740
739
|
it "installs the gem by shelling out to gem install" do
|
741
|
-
expect(provider).to receive(:shell_out!).with("#{gem_binary} install #{source} -q --no-rdoc --no-ri -v \"#{target_version}\"
|
740
|
+
expect(provider).to receive(:shell_out!).with("#{gem_binary} install #{source} -q --no-rdoc --no-ri -v \"#{target_version}\"", env: nil, timeout: 900)
|
742
741
|
provider.run_action(:install)
|
743
742
|
expect(new_resource).to be_updated_by_last_action
|
744
743
|
end
|
@@ -747,11 +746,10 @@ describe Chef::Provider::Package::Rubygems do
|
|
747
746
|
context "when the package is a path and source is nil" do
|
748
747
|
let(:gem_name) { CHEF_SPEC_DATA + "/gems/chef-integration-test-0.1.0.gem" }
|
749
748
|
let(:target_version) { ">= 0" }
|
750
|
-
let(:domain) { " --local" }
|
751
749
|
|
752
750
|
it "installs the gem from file by shelling out to gem install when the package is a path and the source is nil" do
|
753
751
|
expect(new_resource.source).to eq(gem_name)
|
754
|
-
expect(provider).to receive(:shell_out!).with("#{gem_binary} install #{gem_name} -q --no-rdoc --no-ri -v \"#{target_version}\"
|
752
|
+
expect(provider).to receive(:shell_out!).with("#{gem_binary} install #{gem_name} -q --no-rdoc --no-ri -v \"#{target_version}\"", env: nil, timeout: 900)
|
755
753
|
provider.run_action(:install)
|
756
754
|
expect(new_resource).to be_updated_by_last_action
|
757
755
|
end
|
@@ -311,3 +311,97 @@ describe Chef::Provider::RegistryKey do
|
|
311
311
|
end
|
312
312
|
end
|
313
313
|
end
|
314
|
+
|
315
|
+
describe Chef::Provider::RegistryKey, "key_missing?" do
|
316
|
+
let(:provider) { Chef::Provider::RegistryKey.new(nil, nil) }
|
317
|
+
let(:all_keys_present_in_all_hash) do
|
318
|
+
[ { :name => "input1_value1", :type => :string, :data => "my_value1" },
|
319
|
+
{ :name => "input1_value2", :type => :string, :data => "my_value2" },
|
320
|
+
]
|
321
|
+
end
|
322
|
+
let(:type_key_not_present_in_any_hash) do
|
323
|
+
[ { :name => "input2_value1", :data => "my_value1" },
|
324
|
+
{ :name => "input2_value2", :data => "my_value2" },
|
325
|
+
]
|
326
|
+
end
|
327
|
+
let(:type_key_not_present_in_some_hash) do
|
328
|
+
[ { :name => "input3_value1", :data => "my_value1" },
|
329
|
+
{ :name => "input3_value2", :type => :string, :data => "my_value2" },
|
330
|
+
]
|
331
|
+
end
|
332
|
+
let(:data_key_not_present_in_any_hash) do
|
333
|
+
[ { :name => "input4_value1", :type => :string },
|
334
|
+
{ :name => "input4_value2", :type => :string },
|
335
|
+
]
|
336
|
+
end
|
337
|
+
let(:data_key_not_present_in_some_hash) do
|
338
|
+
[ { :name => "input5_value1", :type => :string, :data => "my_value1" },
|
339
|
+
{ :name => "input5_value2", :type => :string },
|
340
|
+
]
|
341
|
+
end
|
342
|
+
let(:only_name_key_present_in_all_hash) do
|
343
|
+
[ { :name => "input6_value1" },
|
344
|
+
{ :name => "input6_value2" },
|
345
|
+
]
|
346
|
+
end
|
347
|
+
|
348
|
+
context "type key" do
|
349
|
+
context "when type key is present in all the values hash of registry_key resource" do
|
350
|
+
it "returns false" do
|
351
|
+
response = provider.key_missing?(all_keys_present_in_all_hash, :type)
|
352
|
+
expect(response).to be == false
|
353
|
+
end
|
354
|
+
end
|
355
|
+
|
356
|
+
context "when type key is not present in any of the values hash of registry_key resource" do
|
357
|
+
it "returns true" do
|
358
|
+
response = provider.key_missing?(type_key_not_present_in_any_hash, :type)
|
359
|
+
expect(response).to be == true
|
360
|
+
end
|
361
|
+
end
|
362
|
+
|
363
|
+
context "when type key is not present only in some of the values hash of registry_key resource" do
|
364
|
+
it "returns true" do
|
365
|
+
response = provider.key_missing?(type_key_not_present_in_some_hash, :type)
|
366
|
+
expect(response).to be == true
|
367
|
+
end
|
368
|
+
end
|
369
|
+
|
370
|
+
context "when only name key is present in all the values hash of registry_key resource" do
|
371
|
+
it "returns true" do
|
372
|
+
response = provider.key_missing?(only_name_key_present_in_all_hash, :type)
|
373
|
+
expect(response).to be == true
|
374
|
+
end
|
375
|
+
end
|
376
|
+
end
|
377
|
+
|
378
|
+
context "data key" do
|
379
|
+
context "when data key is present in all the values hash of registry_key resource" do
|
380
|
+
it "returns false" do
|
381
|
+
response = provider.key_missing?(all_keys_present_in_all_hash, :data)
|
382
|
+
expect(response).to be == false
|
383
|
+
end
|
384
|
+
end
|
385
|
+
|
386
|
+
context "when data key is not present in any of the values hash of registry_key resource" do
|
387
|
+
it "returns true" do
|
388
|
+
response = provider.key_missing?(data_key_not_present_in_any_hash, :data)
|
389
|
+
expect(response).to be == true
|
390
|
+
end
|
391
|
+
end
|
392
|
+
|
393
|
+
context "when data key is not present only in some of the values hash of registry_key resource" do
|
394
|
+
it "returns true" do
|
395
|
+
response = provider.key_missing?(data_key_not_present_in_some_hash, :data)
|
396
|
+
expect(response).to be == true
|
397
|
+
end
|
398
|
+
end
|
399
|
+
|
400
|
+
context "when only name key is present in all the values hash of registry_key resource" do
|
401
|
+
it "returns true" do
|
402
|
+
response = provider.key_missing?(only_name_key_present_in_all_hash, :data)
|
403
|
+
expect(response).to be == true
|
404
|
+
end
|
405
|
+
end
|
406
|
+
end
|
407
|
+
end
|
@@ -29,26 +29,31 @@ describe Chef::Provider::User::Solaris do
|
|
29
29
|
Struct.new(:stdout, :stderr, :exitstatus)
|
30
30
|
end
|
31
31
|
|
32
|
-
|
33
|
-
|
34
|
-
|
32
|
+
let(:node) do
|
33
|
+
Chef::Node.new.tap do |node|
|
34
|
+
node.automatic["platform"] = "solaris2"
|
35
|
+
end
|
36
|
+
end
|
37
|
+
let(:events) { Chef::EventDispatch::Dispatcher.new }
|
38
|
+
let(:run_context) { Chef::RunContext.new(node, {}, events) }
|
39
|
+
let(:new_resource) do
|
40
|
+
Chef::Resource::User::SolarisUser.new("adam", @run_context)
|
41
|
+
end
|
42
|
+
let(:current_resource) do
|
43
|
+
Chef::Resource::User::SolarisUser.new("adam", @run_context)
|
44
|
+
end
|
35
45
|
|
36
|
-
|
37
|
-
|
38
|
-
|
46
|
+
subject(:provider) do
|
47
|
+
described_class.new(new_resource, run_context).tap do |p|
|
48
|
+
p.current_resource = current_resource
|
49
|
+
# Prevent the useradd-based provider tests from trying to write /etc/shadow
|
50
|
+
allow(p).to receive(:write_shadow_file)
|
51
|
+
end
|
39
52
|
end
|
40
53
|
|
41
54
|
describe "when we want to set a password" do
|
42
55
|
before(:each) do
|
43
|
-
|
44
|
-
@events = Chef::EventDispatch::Dispatcher.new
|
45
|
-
@run_context = Chef::RunContext.new(@node, {}, @events)
|
46
|
-
|
47
|
-
@new_resource = Chef::Resource::User::SolarisUser.new("adam", @run_context)
|
48
|
-
@current_resource = Chef::Resource::User::SolarisUser.new("adam", @run_context)
|
49
|
-
|
50
|
-
@new_resource.password "hocus-pocus"
|
51
|
-
|
56
|
+
new_resource.password "hocus-pocus"
|
52
57
|
end
|
53
58
|
|
54
59
|
it "should use its own shadow file writer to set the password" do
|
@@ -68,53 +73,60 @@ describe Chef::Provider::User::Solaris do
|
|
68
73
|
# may not be able to write to /etc for tests...
|
69
74
|
temp_file = Tempfile.new("shadow")
|
70
75
|
allow(Tempfile).to receive(:new).with("shadow", "/etc").and_return(temp_file)
|
71
|
-
|
76
|
+
new_resource.password "verysecurepassword"
|
72
77
|
provider.manage_user
|
73
78
|
expect(::File.open(password_file.path, "r").read).to match(/adam:verysecurepassword:/)
|
74
79
|
password_file.unlink
|
75
80
|
end
|
76
81
|
end
|
77
82
|
|
78
|
-
describe "
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
83
|
+
describe "#create_user" do
|
84
|
+
context "with a system user" do
|
85
|
+
before { new_resource.system(true) }
|
86
|
+
it "should not pass -r" do
|
87
|
+
expect(provider).to receive(:shell_out!).with("useradd", "adam")
|
88
|
+
provider.create_user
|
89
|
+
end
|
90
|
+
end
|
86
91
|
|
87
|
-
|
88
|
-
|
92
|
+
context "with manage_home" do
|
93
|
+
before { new_resource.manage_home(true) }
|
94
|
+
it "should not pass -r" do
|
95
|
+
expect(provider).to receive(:shell_out!).with("useradd", "-m", "adam")
|
96
|
+
provider.create_user
|
97
|
+
end
|
89
98
|
end
|
99
|
+
end
|
100
|
+
|
101
|
+
describe "when managing user locked status" do
|
90
102
|
describe "when determining if the user is locked" do
|
91
103
|
|
92
104
|
# locked shadow lines
|
93
105
|
[
|
94
|
-
"
|
95
|
-
"
|
96
|
-
"
|
97
|
-
"
|
98
|
-
"
|
106
|
+
"adam:LK:::::::",
|
107
|
+
"adam:*LK*:::::::",
|
108
|
+
"adam:*LK*foobar:::::::",
|
109
|
+
"adam:*LK*bahamas10:::::::",
|
110
|
+
"adam:*LK*L....:::::::",
|
99
111
|
].each do |shadow|
|
100
112
|
it "should return true if user is locked with #{shadow}" do
|
101
113
|
shell_return = shellcmdresult.new(shadow + "\n", "", 0)
|
102
|
-
expect(provider).to receive(:shell_out!).with("getent", "shadow",
|
114
|
+
expect(provider).to receive(:shell_out!).with("getent", "shadow", "adam").and_return(shell_return)
|
103
115
|
expect(provider.check_lock).to eql(true)
|
104
116
|
end
|
105
117
|
end
|
106
118
|
|
107
119
|
# unlocked shadow lines
|
108
120
|
[
|
109
|
-
"
|
110
|
-
"
|
111
|
-
"
|
112
|
-
"
|
113
|
-
"
|
121
|
+
"adam:NP:::::::",
|
122
|
+
"adam:*NP*:::::::",
|
123
|
+
"adam:foobar:::::::",
|
124
|
+
"adam:bahamas10:::::::",
|
125
|
+
"adam:L...:::::::",
|
114
126
|
].each do |shadow|
|
115
127
|
it "should return false if user is unlocked with #{shadow}" do
|
116
128
|
shell_return = shellcmdresult.new(shadow + "\n", "", 0)
|
117
|
-
expect(provider).to receive(:shell_out!).with("getent", "shadow",
|
129
|
+
expect(provider).to receive(:shell_out!).with("getent", "shadow", "adam").and_return(shell_return)
|
118
130
|
expect(provider.check_lock).to eql(false)
|
119
131
|
end
|
120
132
|
end
|
@@ -123,7 +135,7 @@ describe Chef::Provider::User::Solaris do
|
|
123
135
|
describe "when locking the user" do
|
124
136
|
it "should run passwd -l with the new resources username" do
|
125
137
|
shell_return = shellcmdresult.new("", "", 0)
|
126
|
-
expect(provider).to receive(:shell_out!).with("passwd", "-l",
|
138
|
+
expect(provider).to receive(:shell_out!).with("passwd", "-l", "adam").and_return(shell_return)
|
127
139
|
provider.lock_user
|
128
140
|
end
|
129
141
|
end
|
@@ -131,7 +143,7 @@ describe Chef::Provider::User::Solaris do
|
|
131
143
|
describe "when unlocking the user" do
|
132
144
|
it "should run passwd -u with the new resources username" do
|
133
145
|
shell_return = shellcmdresult.new("", "", 0)
|
134
|
-
expect(provider).to receive(:shell_out!).with("passwd", "-u",
|
146
|
+
expect(provider).to receive(:shell_out!).with("passwd", "-u", "adam").and_return(shell_return)
|
135
147
|
provider.unlock_user
|
136
148
|
end
|
137
149
|
end
|
@@ -24,27 +24,35 @@ describe Chef::Resource::AptUpdate do
|
|
24
24
|
let(:run_context) { Chef::RunContext.new(node, {}, events) }
|
25
25
|
let(:resource) { Chef::Resource::AptUpdate.new("update", run_context) }
|
26
26
|
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
27
|
+
context "on linux", :linux_only do
|
28
|
+
it "should create a new Chef::Resource::AptUpdate" do
|
29
|
+
expect(resource).to be_a_kind_of(Chef::Resource)
|
30
|
+
expect(resource).to be_a_kind_of(Chef::Resource::AptUpdate)
|
31
|
+
end
|
31
32
|
|
32
|
-
|
33
|
-
|
34
|
-
|
33
|
+
it "the default frequency should be 1 day" do
|
34
|
+
expect(resource.frequency).to eql(86_400)
|
35
|
+
end
|
35
36
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
37
|
+
it "the frequency should accept integers" do
|
38
|
+
resource.frequency(400)
|
39
|
+
expect(resource.frequency).to eql(400)
|
40
|
+
end
|
41
|
+
|
42
|
+
it "should resolve to a Noop class when apt-get is not found" do
|
43
|
+
expect(Chef::Provider::AptUpdate).to receive(:which).with("apt-get").and_return(false)
|
44
|
+
expect(resource.provider_for_action(:add)).to be_a(Chef::Provider::Noop)
|
45
|
+
end
|
40
46
|
|
41
|
-
|
42
|
-
|
43
|
-
|
47
|
+
it "should resolve to a AptUpdate class when apt-get is found" do
|
48
|
+
expect(Chef::Provider::AptUpdate).to receive(:which).with("apt-get").and_return(true)
|
49
|
+
expect(resource.provider_for_action(:add)).to be_a(Chef::Provider::AptUpdate)
|
50
|
+
end
|
44
51
|
end
|
45
52
|
|
46
|
-
|
47
|
-
|
48
|
-
|
53
|
+
context "on windows", :windows_only do
|
54
|
+
it "should resolve to a NoOp provider" do
|
55
|
+
expect(resource.provider_for_action(:add)).to be_a(Chef::Provider::Noop)
|
56
|
+
end
|
49
57
|
end
|
50
58
|
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Vasundhara Jagdale (<vasundhara.jagdale@msystechnologies.com>)
|
3
|
+
# Copyright:: Copyright 2008-2016, Chef Software, Inc.
|
4
|
+
# License:: Apache License, Version 2.0
|
5
|
+
#
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
+
# you may not use this file except in compliance with the License.
|
8
|
+
# You may obtain a copy of the License at
|
9
|
+
#
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
+
#
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
+
# See the License for the specific language governing permissions and
|
16
|
+
# limitations under the License.
|
17
|
+
#
|
18
|
+
|
19
|
+
require "spec_helper"
|
20
|
+
|
21
|
+
describe Chef::Resource::CabPackage do
|
22
|
+
|
23
|
+
let(:resource) { Chef::Resource::CabPackage.new("test_pkg") }
|
24
|
+
|
25
|
+
it "creates a new Chef::Resource::CabPackage" do
|
26
|
+
expect(resource).to be_a_kind_of(Chef::Resource)
|
27
|
+
expect(resource).to be_a_kind_of(Chef::Resource::Package)
|
28
|
+
expect(resource).to be_a_instance_of(Chef::Resource::CabPackage)
|
29
|
+
end
|
30
|
+
|
31
|
+
it "sets resource name as :cab_package" do
|
32
|
+
expect(resource.resource_name).to eql(:cab_package)
|
33
|
+
end
|
34
|
+
|
35
|
+
it "coerce its name to a package_name" do
|
36
|
+
expect(resource.package_name).to eql("test_pkg")
|
37
|
+
end
|
38
|
+
end
|
@@ -94,19 +94,11 @@ describe Chef::Resource::RegistryKey, "values" do
|
|
94
94
|
expect(@resource.values).to eql([ { :name => "poosh", :type => :binary, :data => "a8100ae6aa1940d0b663bb31cd466142ebbdbd5187131b92d93818987832eb89" } ])
|
95
95
|
end
|
96
96
|
|
97
|
-
it "should
|
97
|
+
it "should raise an exception if the name field is missing" do
|
98
98
|
expect { @resource.values [ { :type => :string, :data => "carmen" } ] }.to raise_error(ArgumentError)
|
99
99
|
end
|
100
100
|
|
101
|
-
it "should
|
102
|
-
expect { @resource.values [ { :name => "poosh", :data => "carmen" } ] }.to raise_error(ArgumentError)
|
103
|
-
end
|
104
|
-
|
105
|
-
it "should throw an exception if the data field is missing" do
|
106
|
-
expect { @resource.values [ { :name => "poosh", :type => :string } ] }.to raise_error(ArgumentError)
|
107
|
-
end
|
108
|
-
|
109
|
-
it "should throw an exception if extra fields are present" do
|
101
|
+
it "should raise an exception if extra fields are present" do
|
110
102
|
expect { @resource.values [ { :name => "poosh", :type => :string, :data => "carmen", :screwdriver => "sonic" } ] }.to raise_error(ArgumentError)
|
111
103
|
end
|
112
104
|
|
@@ -117,6 +109,30 @@ describe Chef::Resource::RegistryKey, "values" do
|
|
117
109
|
it "should not allow an integer" do
|
118
110
|
expect { @resource.send(:values, 100) }.to raise_error(ArgumentError)
|
119
111
|
end
|
112
|
+
|
113
|
+
it "should raise an exception if type of name is not string" do
|
114
|
+
expect { @resource.values([ { :name => 123, :type => :string, :data => "carmen" } ]) }.to raise_error(ArgumentError)
|
115
|
+
end
|
116
|
+
|
117
|
+
it "should not raise an exception if type of name is string" do
|
118
|
+
expect { @resource.values([ { :name => "123", :type => :string, :data => "carmen" } ]) }.to_not raise_error
|
119
|
+
end
|
120
|
+
|
121
|
+
context "type key not given" do
|
122
|
+
it "should not raise an exception" do
|
123
|
+
expect { @resource.values([ { :name => "123", :data => "carmen" } ]) }.to_not raise_error
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
context "type key given" do
|
128
|
+
it "should raise an exception if type of type is not symbol" do
|
129
|
+
expect { @resource.values([ { :name => "123", :type => "string", :data => "carmen" } ]) }.to raise_error(ArgumentError)
|
130
|
+
end
|
131
|
+
|
132
|
+
it "should not raise an exception if type of type is symbol" do
|
133
|
+
expect { @resource.values([ { :name => "123", :type => :string, :data => "carmen" } ]) }.to_not raise_error
|
134
|
+
end
|
135
|
+
end
|
120
136
|
end
|
121
137
|
|
122
138
|
describe Chef::Resource::RegistryKey, "recursive" do
|
@@ -0,0 +1,50 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
SIGNING_KEY_DOT_PEM = "-----BEGIN RSA PRIVATE KEY-----
|
4
|
+
MIIEpAIBAAKCAQEA49TA0y81ps0zxkOpmf5V4/c4IeR5yVyQFpX3JpxO4TquwnRh
|
5
|
+
8VSUhrw8kkTLmB3cS39Db+3HadvhoqCEbqPE6915kXSuk/cWIcNozujLK7tkuPEy
|
6
|
+
YVsyTioQAddSdfe+8EhQVf3oHxaKmUd6waXrWqYCnhxgOjxocenREYNhZ/OETIei
|
7
|
+
PbOku47vB4nJK/0GhKBytL2XnsRgfKgDxf42BqAi1jglIdeq8lAWZNF9TbNBU21A
|
8
|
+
O1iuT7Pm6LyQujhggPznR5FJhXKRUARXBJZawxpGV4dGtdcahwXNE4601aXPra+x
|
9
|
+
PcRd2puCNoEDBzgVuTSsLYeKBDMSfs173W1QYwIDAQABAoIBAGF05q7vqOGbMaSD
|
10
|
+
2Q7YbuE/JTHKTBZIlBI1QC2x+0P5GDxyEFttNMOVzcs7xmNhkpRw8eX1LrInrpMk
|
11
|
+
WsIBKAFFEfWYlf0RWtRChJjNl+szE9jQxB5FJnWtJH/FHa78tR6PsF24aQyzVcJP
|
12
|
+
g0FGujBihwgfV0JSCNOBkz8MliQihjQA2i8PGGmo4R4RVzGfxYKTIq9vvRq/+QEa
|
13
|
+
Q4lpVLoBqnENpnY/9PTl6JMMjW2b0spbLjOPVwDaIzXJ0dChjNXo15K5SHI5mALJ
|
14
|
+
I5gN7ODGb8PKUf4619ez194FXq+eob5YJdilTFKensIUvt3YhP1ilGMM+Chi5Vi/
|
15
|
+
/RCTw3ECgYEA9jTw4wv9pCswZ9wbzTaBj9yZS3YXspGg26y6Ohq3ZmvHz4jlT6uR
|
16
|
+
xK+DDcUiK4072gci8S4Np0fIVS7q6ivqcOdzXPrTF5/j+MufS32UrBbUTPiM1yoO
|
17
|
+
ECcy+1szl/KoLEV09bghPbvC58PFSXV71evkaTETYnA/F6RK12lEepcCgYEA7OSy
|
18
|
+
bsMrGDVU/MKJtwqyGP9ubA53BorM4Pp9VVVSCrGGVhb9G/XNsjO5wJC8J30QAo4A
|
19
|
+
s59ZzCpyNRy046AB8jwRQuSwEQbejSdeNgQGXhZ7aIVUtuDeFFdaIz/zjVgxsfj4
|
20
|
+
DPOuzieMmJ2MLR4F71ocboxNoDI7xruPSE8dDhUCgYA3vx732cQxgtHwAkeNPJUz
|
21
|
+
dLiE/JU7CnxIoSB9fYUfPLI+THnXgzp7NV5QJN2qzMzLfigsQcg3oyo6F2h7Yzwv
|
22
|
+
GkjlualIRRzCPaCw4Btkp7qkPvbs1QngIHALt8fD1N69P3DPHkTwjG4COjKWgnJq
|
23
|
+
qoHKS6Fe/ZlbigikI6KsuwKBgQCTlSLoyGRHr6oj0hqz01EDK9ciMJzMkZp0Kvn8
|
24
|
+
OKxlBxYW+jlzut4MQBdgNYtS2qInxUoAnaz2+hauqhSzntK3k955GznpUatCqx0R
|
25
|
+
b857vWviwPX2/P6+E3GPdl8IVsKXCvGWOBZWTuNTjQtwbDzsUepWoMgXnlQJSn5I
|
26
|
+
YSlLxQKBgQD16Gw9kajpKlzsPa6XoQeGmZALT6aKWJQlrKtUQIrsIWM0Z6eFtX12
|
27
|
+
2jjHZ0awuCQ4ldqwl8IfRogWMBkHOXjTPVK0YKWWlxMpD/5+bGPARa5fir8O1Zpo
|
28
|
+
Y6S6MeZ69Rp89ma4ttMZ+kwi1+XyHqC/dlcVRW42Zl5Dc7BALRlJjQ==
|
29
|
+
-----END RSA PRIVATE KEY-----"
|
30
|
+
|
31
|
+
describe Chef::ServerAPI do
|
32
|
+
let(:url) { "http://chef.example.com:4000" }
|
33
|
+
let(:key_path) { "/tmp/foo" }
|
34
|
+
|
35
|
+
describe "#initialize" do
|
36
|
+
it "uses the configured key file" do
|
37
|
+
allow(IO).to receive(:read).with(key_path).and_return(SIGNING_KEY_DOT_PEM)
|
38
|
+
Chef::Config[:client_key] = key_path
|
39
|
+
|
40
|
+
api = described_class.new(url)
|
41
|
+
expect(api.options[:signing_key_filename]).to eql(key_path)
|
42
|
+
end
|
43
|
+
|
44
|
+
it "allows a user to set a raw_key" do
|
45
|
+
api = described_class.new(url, raw_key: SIGNING_KEY_DOT_PEM)
|
46
|
+
expect(api.options[:signing_key_filename]).to be_nil
|
47
|
+
expect(api.options[:raw_key]).to eql(SIGNING_KEY_DOT_PEM)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|