chef 18.2.7-x64-mingw-ucrt → 18.4.2-x64-mingw-ucrt
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 +4 -4
- data/Gemfile +2 -2
- data/chef-universal-mingw-ucrt.gemspec +1 -1
- data/chef.gemspec +3 -3
- data/lib/chef/application/base.rb +2 -0
- data/lib/chef/chef_fs/file_pattern.rb +1 -1
- data/lib/chef/chef_fs/path_utils.rb +7 -9
- data/lib/chef/client.rb +2 -2
- data/lib/chef/cookbook/synchronizer.rb +19 -2
- data/lib/chef/cookbook_version.rb +1 -1
- data/lib/chef/delayed_evaluator.rb +4 -0
- data/lib/chef/file_access_control/windows.rb +4 -1
- data/lib/chef/guard_interpreter/resource_guard_interpreter.rb +2 -0
- data/lib/chef/http/ssl_policies.rb +2 -2
- data/lib/chef/mixin/homebrew_user.rb +15 -5
- data/lib/chef/monkey_patches/net-http.rb +127 -0
- data/lib/chef/node/attribute_collections.rb +10 -1
- data/lib/chef/node/immutable_collections.rb +7 -3
- data/lib/chef/node/mixin/state_tracking.rb +1 -1
- data/lib/chef/node/mixin/state_tracking_array.rb +41 -0
- data/lib/chef/node.rb +22 -0
- data/lib/chef/provider/launchd.rb +1 -1
- data/lib/chef/provider/mount/linux.rb +1 -1
- data/lib/chef/provider/mount/mount.rb +5 -5
- data/lib/chef/provider/package/apt.rb +11 -2
- data/lib/chef/provider/package/chocolatey.rb +239 -18
- data/lib/chef/provider/package/zypper.rb +6 -0
- data/lib/chef/provider/powershell_script.rb +96 -6
- data/lib/chef/provider/remote_file/http.rb +1 -1
- data/lib/chef/provider/service/systemd.rb +23 -8
- data/lib/chef/provider/service/windows.rb +1 -0
- data/lib/chef/provider/service.rb +14 -0
- data/lib/chef/provider/user.rb +5 -1
- data/lib/chef/provider/yum_repository.rb +1 -1
- data/lib/chef/recipe.rb +3 -11
- data/lib/chef/resource/_rest_resource.rb +1 -1
- data/lib/chef/resource/apt_package.rb +19 -0
- data/lib/chef/resource/apt_repository.rb +26 -6
- data/lib/chef/resource/chef_client_systemd_timer.rb +1 -1
- data/lib/chef/resource/chocolatey_installer.rb +207 -0
- data/lib/chef/resource/chocolatey_package.rb +8 -0
- data/lib/chef/resource/homebrew_cask.rb +6 -7
- data/lib/chef/resource/homebrew_package.rb +1 -1
- data/lib/chef/resource/homebrew_tap.rb +5 -5
- data/lib/chef/resource/launchd.rb +5 -1
- data/lib/chef/resource/locale.rb +5 -2
- data/lib/chef/resource/macos_pkg.rb +111 -0
- data/lib/chef/resource/powershell_script.rb +5 -1
- data/lib/chef/resource/service.rb +3 -0
- data/lib/chef/resource/sudo.rb +37 -2
- data/lib/chef/resource/support/ulimit.erb +40 -0
- data/lib/chef/resource/user_ulimit.rb +38 -0
- data/lib/chef/resource/windows_certificate.rb +1 -1
- data/lib/chef/resource/windows_security_policy.rb +2 -2
- data/lib/chef/resource.rb +11 -1
- data/lib/chef/resources.rb +2 -0
- data/lib/chef/version.rb +1 -1
- data/lib/chef/win32/security.rb +7 -1
- data/spec/data/trusted_certs/example.crt +29 -20
- data/spec/data/trusted_certs/example_no_cn.crt +30 -34
- data/spec/functional/resource/chocolatey_package_spec.rb +32 -20
- data/spec/functional/resource/execute_spec.rb +1 -1
- data/spec/functional/resource/windows_certificate_spec.rb +25 -0
- data/spec/functional/resource/zypper_package_spec.rb +10 -0
- data/spec/unit/client_spec.rb +2 -2
- data/spec/unit/compliance/reporter/chef_server_automate_spec.rb +1 -1
- data/spec/unit/delayed_evaluator_spec.rb +35 -0
- data/spec/unit/mixin/homebrew_user_spec.rb +30 -7
- data/spec/unit/node/vivid_mash_spec.rb +42 -0
- data/spec/unit/node_spec.rb +6 -0
- data/spec/unit/provider/apt_repository_spec.rb +17 -7
- data/spec/unit/provider/launchd_spec.rb +2 -2
- data/spec/unit/provider/mount/aix_spec.rb +2 -2
- data/spec/unit/provider/mount/linux_spec.rb +6 -5
- data/spec/unit/provider/mount/mount_spec.rb +8 -8
- data/spec/unit/provider/package/apt_spec.rb +18 -13
- data/spec/unit/provider/package/chocolatey_spec.rb +53 -9
- data/spec/unit/provider/package/rpm_spec.rb +2 -2
- data/spec/unit/provider/package/zypper_spec.rb +10 -0
- data/spec/unit/provider/powershell_script_spec.rb +100 -4
- data/spec/unit/provider/remote_file/http_spec.rb +4 -4
- data/spec/unit/provider/service/systemd_service_spec.rb +1 -0
- data/spec/unit/provider/user/linux_spec.rb +10 -0
- data/spec/unit/resource/apt_repository_spec.rb +5 -0
- data/spec/unit/resource/chef_client_systemd_timer_spec.rb +1 -1
- data/spec/unit/resource/chocolatey_installer_spec.rb +151 -0
- data/spec/unit/resource/macos_pkg_spec.rb +38 -0
- data/spec/unit/resource/powershell_script_spec.rb +2 -2
- data/spec/unit/resource_spec.rb +86 -0
- metadata +29 -16
- /data/spec/functional/assets/chocolatey_feed/{test-A.1.0.nupkg → test-A.1.0.0.nupkg} +0 -0
- /data/spec/functional/assets/chocolatey_feed/{test-A.1.5.nupkg → test-A.1.5.0.nupkg} +0 -0
- /data/spec/functional/assets/chocolatey_feed/{test-A.2.0.nupkg → test-A.2.0.0.nupkg} +0 -0
- /data/spec/functional/assets/chocolatey_feed/{test-B.1.0.nupkg → test-B.1.0.0.nupkg} +0 -0
@@ -170,7 +170,7 @@ describe Chef::Compliance::Reporter::ChefServerAutomate do
|
|
170
170
|
"X-Ops-Userid" => "spec-node",
|
171
171
|
"X-Remote-Request-Id" => /.+/,
|
172
172
|
}
|
173
|
-
).to_return(status: 200)
|
173
|
+
).to_return(status: 200, body: "OK")
|
174
174
|
|
175
175
|
expect(reporter.send_report(inspec_report)).to eq(true)
|
176
176
|
|
@@ -0,0 +1,35 @@
|
|
1
|
+
#
|
2
|
+
# Copyright:: Copyright (c) Progress Software Inc.
|
3
|
+
# License:: Apache License, Version 2.0
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
#
|
17
|
+
|
18
|
+
require "spec_helper"
|
19
|
+
|
20
|
+
describe Chef::DelayedEvaluator do
|
21
|
+
let(:magic) { "This is magic!" }
|
22
|
+
let(:de) { Chef::DelayedEvaluator.new { magic } }
|
23
|
+
|
24
|
+
describe "#inspect" do
|
25
|
+
it "inspects the result rather than the Proc" do
|
26
|
+
expect(de.inspect).to eq("lazy { (evaluates to) #{magic.inspect} }")
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
describe "#call" do
|
31
|
+
it "evaluates correctly" do
|
32
|
+
expect(de.call).to eq(magic)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -47,6 +47,8 @@ describe Chef::Mixin::HomebrewUser do
|
|
47
47
|
let(:user) { nil }
|
48
48
|
let(:brew_owner) { 2001 }
|
49
49
|
let(:default_brew_path) { "/usr/local/bin/brew" }
|
50
|
+
let(:default_brew_path_arm) { "/opt/homebrew/bin/brew" }
|
51
|
+
let(:default_brew_path_linux) { "/home/linuxbrew/.linuxbrew/bin/brew" }
|
50
52
|
let(:stat_double) do
|
51
53
|
d = double
|
52
54
|
expect(d).to receive(:uid).and_return(brew_owner)
|
@@ -59,16 +61,38 @@ describe Chef::Mixin::HomebrewUser do
|
|
59
61
|
expect(Etc).to receive(:getpwuid).with(brew_owner).and_return(OpenStruct.new(name: "name"))
|
60
62
|
end
|
61
63
|
|
62
|
-
|
63
|
-
|
64
|
-
|
64
|
+
def false_unless_specific_value(object, method, value)
|
65
|
+
allow(object).to receive(method).and_return(false)
|
66
|
+
allow(object).to receive(method).with(value).and_return(true)
|
67
|
+
end
|
68
|
+
|
69
|
+
it "returns the owner of the brew executable when it is at a default location for x86_64 machines" do
|
70
|
+
false_unless_specific_value(File, :exist?, default_brew_path)
|
71
|
+
false_unless_specific_value(File, :executable?, default_brew_path)
|
72
|
+
allow(File).to receive(:stat).with(default_brew_path).and_return(stat_double)
|
73
|
+
expect(homebrew_user.find_homebrew_uid(user)).to eq(brew_owner)
|
74
|
+
end
|
75
|
+
|
76
|
+
it "returns the owner of the brew executable when it is at a default location for arm machines" do
|
77
|
+
false_unless_specific_value(File, :exist?, default_brew_path_arm)
|
78
|
+
false_unless_specific_value(File, :executable?, default_brew_path_arm)
|
79
|
+
allow(File).to receive(:stat).with(default_brew_path_arm).and_return(stat_double)
|
80
|
+
expect(homebrew_user.find_homebrew_uid(user)).to eq(brew_owner)
|
81
|
+
end
|
82
|
+
|
83
|
+
it "returns the owner of the brew executable when it is at a default location for linux machines" do
|
84
|
+
false_unless_specific_value(File, :exist?, default_brew_path_linux)
|
85
|
+
false_unless_specific_value(File, :executable?, default_brew_path_linux)
|
86
|
+
allow(File).to receive(:stat).with(default_brew_path_linux).and_return(stat_double)
|
65
87
|
expect(homebrew_user.find_homebrew_uid(user)).to eq(brew_owner)
|
66
88
|
end
|
67
89
|
|
68
90
|
it "returns the owner of the brew executable when it is not at a default location" do
|
69
|
-
|
91
|
+
allow_any_instance_of(ExampleHomebrewUser).to receive(:which).and_return("/foo")
|
92
|
+
false_unless_specific_value(File, :exist?, "/foo")
|
93
|
+
false_unless_specific_value(File, :executable?, "/foo")
|
70
94
|
allow(homebrew_user).to receive_message_chain(:shell_out, :stdout, :strip).and_return("/foo")
|
71
|
-
|
95
|
+
allow(File).to receive(:stat).with("/foo").and_return(stat_double)
|
72
96
|
expect(homebrew_user.find_homebrew_uid(user)).to eq(brew_owner)
|
73
97
|
end
|
74
98
|
|
@@ -78,8 +102,7 @@ describe Chef::Mixin::HomebrewUser do
|
|
78
102
|
describe "when the homebrew user is not provided" do
|
79
103
|
|
80
104
|
it "raises an error if no executable is found" do
|
81
|
-
expect(File).to receive(:exist?).
|
82
|
-
allow(homebrew_user).to receive_message_chain(:shell_out, :stdout, :strip).and_return("")
|
105
|
+
expect(File).to receive(:exist?).and_return(nil).at_least(:once)
|
83
106
|
expect { homebrew_user.find_homebrew_uid(user) }.to raise_error(Chef::Exceptions::CannotDetermineHomebrewOwner)
|
84
107
|
end
|
85
108
|
|
@@ -364,20 +364,53 @@ describe Chef::Node::AttrArray do
|
|
364
364
|
|
365
365
|
context "#<<" do
|
366
366
|
it "converts a Hash appended with #<< to a VividMash" do
|
367
|
+
expect(root).to receive(:reset_cache).with(nil)
|
367
368
|
array << { "three" => "four" }
|
368
369
|
expect(array[3].class).to eql(Chef::Node::VividMash)
|
369
370
|
end
|
370
371
|
|
371
372
|
it "deeply converts objects appended with #<<" do
|
373
|
+
expect(root).to receive(:reset_cache).with(nil)
|
372
374
|
array << [ { "three" => [ 0, 1] } ]
|
373
375
|
expect(array[3].class).to eql(Chef::Node::AttrArray)
|
374
376
|
expect(array[3][0].class).to eql(Chef::Node::VividMash)
|
375
377
|
expect(array[3][0]["three"].class).to eql(Chef::Node::AttrArray)
|
376
378
|
end
|
379
|
+
|
380
|
+
it "does not invalidate root DeepMergeCache if VividMash top-level key" do
|
381
|
+
# We're checking that __path__ is used to avoid full DeepMergeCache invalidation
|
382
|
+
expect(root).to receive(:reset_cache).with("array")
|
383
|
+
expect(root).not_to receive(:reset_cache).with(nil)
|
384
|
+
|
385
|
+
attr_array = Chef::Node::AttrArray.new([ 0, 1, 2 ])
|
386
|
+
vivid = Chef::Node::VividMash.new(
|
387
|
+
{ "one" => { "two" => { "three" => "four" } }, "array" => attr_array },
|
388
|
+
root
|
389
|
+
)
|
390
|
+
vivid["array"] << 3
|
391
|
+
end
|
392
|
+
|
393
|
+
it "does not send reset_cache with nil if VividMashi nested key" do
|
394
|
+
# We're checking that __path__ is used to avoid full DeepMergeCache invalidation,
|
395
|
+
# and that it is invalidating the top-level key
|
396
|
+
expect(root).to receive(:reset_cache).with("array")
|
397
|
+
expect(root).not_to receive(:reset_cache).with(nil)
|
398
|
+
|
399
|
+
attr_array = Chef::Node::AttrArray.new([ 0, 1, 2 ])
|
400
|
+
vivid = Chef::Node::VividMash.new(
|
401
|
+
{
|
402
|
+
"one" => { "two" => { "three" => "four" } },
|
403
|
+
"array" => { "nested" => attr_array },
|
404
|
+
},
|
405
|
+
root
|
406
|
+
)
|
407
|
+
vivid["array"]["nested"] << 3
|
408
|
+
end
|
377
409
|
end
|
378
410
|
|
379
411
|
context "#[]=" do
|
380
412
|
it "assigning a Hash into an array converts it to VividMash" do
|
413
|
+
expect(root).to receive(:reset_cache).with(nil)
|
381
414
|
array[0] = { "zero" => "zero2" }
|
382
415
|
expect(array[0].class).to eql(Chef::Node::VividMash)
|
383
416
|
end
|
@@ -385,6 +418,7 @@ describe Chef::Node::AttrArray do
|
|
385
418
|
|
386
419
|
context "#push" do
|
387
420
|
it "pushing a Hash into an array converts it to VividMash" do
|
421
|
+
expect(root).to receive(:reset_cache).with(nil)
|
388
422
|
array.push({ "three" => "four" })
|
389
423
|
expect(array[3].class).to eql(Chef::Node::VividMash)
|
390
424
|
end
|
@@ -392,6 +426,7 @@ describe Chef::Node::AttrArray do
|
|
392
426
|
|
393
427
|
context "#unshift" do
|
394
428
|
it "unshifting a Hash into an array converts it to VividMash" do
|
429
|
+
expect(root).to receive(:reset_cache).with(nil)
|
395
430
|
array.unshift({ "zero" => "zero2" })
|
396
431
|
expect(array[0].class).to eql(Chef::Node::VividMash)
|
397
432
|
end
|
@@ -399,6 +434,7 @@ describe Chef::Node::AttrArray do
|
|
399
434
|
|
400
435
|
context "#insert" do
|
401
436
|
it "inserting a Hash into an array converts it to VividMash" do
|
437
|
+
expect(root).to receive(:reset_cache).with(nil)
|
402
438
|
array.insert(1, { "zero" => "zero2" })
|
403
439
|
expect(array[1].class).to eql(Chef::Node::VividMash)
|
404
440
|
end
|
@@ -406,6 +442,7 @@ describe Chef::Node::AttrArray do
|
|
406
442
|
|
407
443
|
context "#collect!" do
|
408
444
|
it "converts Hashes" do
|
445
|
+
expect(root).to receive(:reset_cache).at_least(:once).with(nil)
|
409
446
|
array.collect! { |x| { "zero" => "zero2" } }
|
410
447
|
expect(array[1].class).to eql(Chef::Node::VividMash)
|
411
448
|
end
|
@@ -413,6 +450,7 @@ describe Chef::Node::AttrArray do
|
|
413
450
|
|
414
451
|
context "#map!" do
|
415
452
|
it "converts Hashes" do
|
453
|
+
expect(root).to receive(:reset_cache).with(nil)
|
416
454
|
array.map! { |x| { "zero" => "zero2" } }
|
417
455
|
expect(array[1].class).to eql(Chef::Node::VividMash)
|
418
456
|
end
|
@@ -420,6 +458,7 @@ describe Chef::Node::AttrArray do
|
|
420
458
|
|
421
459
|
context "#compact!" do
|
422
460
|
it "VividMashes remain VividMashes" do
|
461
|
+
expect(root).to receive(:reset_cache).with(nil)
|
423
462
|
array = Chef::Node::AttrArray.new(
|
424
463
|
[ nil, { "one" => "two" }, nil ],
|
425
464
|
root
|
@@ -432,6 +471,7 @@ describe Chef::Node::AttrArray do
|
|
432
471
|
|
433
472
|
context "#fill" do
|
434
473
|
it "inserts VividMashes for Hashes" do
|
474
|
+
expect(root).to receive(:reset_cache).at_least(:once).with(nil)
|
435
475
|
array.fill({ "one" => "two" })
|
436
476
|
expect(array[0].class).to eql(Chef::Node::VividMash)
|
437
477
|
end
|
@@ -439,6 +479,7 @@ describe Chef::Node::AttrArray do
|
|
439
479
|
|
440
480
|
context "#flatten!" do
|
441
481
|
it "flattens sub-arrays maintaining VividMashes in them" do
|
482
|
+
expect(root).to receive(:reset_cache).with(nil)
|
442
483
|
array = Chef::Node::AttrArray.new(
|
443
484
|
[ [ { "one" => "two" } ], [ { "one" => "two" } ] ],
|
444
485
|
root
|
@@ -451,6 +492,7 @@ describe Chef::Node::AttrArray do
|
|
451
492
|
|
452
493
|
context "#replace" do
|
453
494
|
it "replaces the array converting hashes to mashes" do
|
495
|
+
expect(root).to receive(:reset_cache).with(nil)
|
454
496
|
array.replace([ { "foo" => "bar" } ])
|
455
497
|
expect(array[0].class).to eql(Chef::Node::VividMash)
|
456
498
|
end
|
data/spec/unit/node_spec.rb
CHANGED
@@ -303,6 +303,12 @@ describe Chef::Node do
|
|
303
303
|
expect(node["tags"]).to eq(%w{one two three four})
|
304
304
|
end
|
305
305
|
|
306
|
+
it "should let you use untag as a convince method for the tags attribute" do
|
307
|
+
node.normal["tags"] = %w{one two three four}
|
308
|
+
node.untag("three", "four")
|
309
|
+
expect(node["tags"]).to eq(%w{one two})
|
310
|
+
end
|
311
|
+
|
306
312
|
it "normal_unless sets a value even if default or override attrs are set" do
|
307
313
|
node.default[:decontamination] = true
|
308
314
|
node.override[:decontamination] = false
|
@@ -246,33 +246,43 @@ C5986B4F1257FFA86632CBA746181433FBB75451
|
|
246
246
|
describe "#build_repo" do
|
247
247
|
it "creates a repository string" do
|
248
248
|
target = "deb http://test/uri unstable main\n"
|
249
|
-
expect(provider.build_repo("http://test/uri", "unstable", "main", false, nil)).to eql(target)
|
249
|
+
expect(provider.build_repo("http://test/uri", "unstable", "main", false, nil, [])).to eql(target)
|
250
250
|
end
|
251
251
|
|
252
252
|
it "creates a repository string with spaces" do
|
253
253
|
target = "deb http://test/uri%20with%20spaces unstable main\n"
|
254
|
-
expect(provider.build_repo("http://test/uri with spaces", "unstable", "main", false, nil)).to eql(target)
|
254
|
+
expect(provider.build_repo("http://test/uri with spaces", "unstable", "main", false, nil, [])).to eql(target)
|
255
255
|
end
|
256
256
|
|
257
257
|
it "creates a repository string with no distribution" do
|
258
258
|
target = "deb http://test/uri main\n"
|
259
|
-
expect(provider.build_repo("http://test/uri", nil, "main", false, nil)).to eql(target)
|
259
|
+
expect(provider.build_repo("http://test/uri", nil, "main", false, nil, [])).to eql(target)
|
260
260
|
end
|
261
261
|
|
262
262
|
it "creates a repository string with source" do
|
263
263
|
target = "deb http://test/uri unstable main\ndeb-src http://test/uri unstable main\n"
|
264
|
-
expect(provider.build_repo("http://test/uri", "unstable", "main", false, nil, true)).to eql(target)
|
264
|
+
expect(provider.build_repo("http://test/uri", "unstable", "main", false, nil, [], true)).to eql(target)
|
265
265
|
end
|
266
266
|
|
267
|
-
it "creates a repository string with
|
267
|
+
it "creates a repository string with trusted" do
|
268
268
|
target = "deb [trusted=yes] http://test/uri unstable main\n"
|
269
|
-
expect(provider.build_repo("http://test/uri", "unstable", "main", true, nil)).to eql(target)
|
269
|
+
expect(provider.build_repo("http://test/uri", "unstable", "main", true, nil, [])).to eql(target)
|
270
|
+
end
|
271
|
+
|
272
|
+
it "creates a repository string with custom options" do
|
273
|
+
target = "deb [by-hash=no] http://test/uri unstable main\n"
|
274
|
+
expect(provider.build_repo("http://test/uri", "unstable", "main", false, nil, ["by-hash=no"])).to eql(target)
|
275
|
+
end
|
276
|
+
|
277
|
+
it "creates a repository string with trusted, arch, and custom options" do
|
278
|
+
target = "deb [arch=amd64 trusted=yes by-hash=no] http://test/uri unstable main\n"
|
279
|
+
expect(provider.build_repo("http://test/uri", "unstable", "main", true, "amd64", ["by-hash=no"])).to eql(target)
|
270
280
|
end
|
271
281
|
|
272
282
|
it "handles a ppa repo" do
|
273
283
|
target = "deb http://ppa.launchpad.net/chef/main/ubuntu unstable main\n"
|
274
284
|
expect(provider).to receive(:make_ppa_url).with("ppa:chef/main").and_return("http://ppa.launchpad.net/chef/main/ubuntu")
|
275
|
-
expect(provider.build_repo("ppa:chef/main", "unstable", "main", false, nil)).to eql(target)
|
285
|
+
expect(provider.build_repo("ppa:chef/main", "unstable", "main", false, nil, [])).to eql(target)
|
276
286
|
end
|
277
287
|
end
|
278
288
|
end
|
@@ -197,7 +197,7 @@ describe Chef::Provider::Launchd do
|
|
197
197
|
describe "with an :delete action" do
|
198
198
|
describe "and the ld file is present" do
|
199
199
|
before(:each) do
|
200
|
-
allow(File).to receive(:
|
200
|
+
allow(File).to receive(:exist?).and_return(true)
|
201
201
|
allow(provider).to receive(
|
202
202
|
:manage_service
|
203
203
|
).with(:disable).and_return(true)
|
@@ -218,7 +218,7 @@ describe Chef::Provider::Launchd do
|
|
218
218
|
|
219
219
|
describe "and the ld file is not present" do
|
220
220
|
before(:each) do
|
221
|
-
allow(File).to receive(:
|
221
|
+
allow(File).to receive(:exist?).and_return(false)
|
222
222
|
allow(provider).to receive(
|
223
223
|
:manage_plist
|
224
224
|
).with(:delete).and_return(true)
|
@@ -65,8 +65,8 @@ describe Chef::Provider::Mount::Aix do
|
|
65
65
|
|
66
66
|
@provider = Chef::Provider::Mount::Aix.new(@new_resource, @run_context)
|
67
67
|
|
68
|
-
allow(::File).to receive(:
|
69
|
-
allow(::File).to receive(:
|
68
|
+
allow(::File).to receive(:exist?).with("/dev/sdz1").and_return true
|
69
|
+
allow(::File).to receive(:exist?).with("/tmp/foo").and_return true
|
70
70
|
end
|
71
71
|
|
72
72
|
def stub_mounted(provider, mounted_output)
|
@@ -22,10 +22,11 @@ describe Chef::Provider::Mount::Linux do
|
|
22
22
|
end
|
23
23
|
|
24
24
|
before(:each) do
|
25
|
-
allow(::File).to receive(:
|
26
|
-
allow(::File).to receive(:
|
27
|
-
allow(::File).to receive(:
|
28
|
-
allow(::File).to receive(:
|
25
|
+
allow(::File).to receive(:exist?).with("/etc/fstab").and_call_original
|
26
|
+
allow(::File).to receive(:exist?).with("/dev/sdz1").and_return true
|
27
|
+
allow(::File).to receive(:exist?).with("/tmp/foo").and_return true
|
28
|
+
allow(::File).to receive(:exist?).with("//192.168.11.102/Share/backup").and_return true
|
29
|
+
allow(::File).to receive(:exist?).with("//192.168.11.102/Share/backup folder").and_return true
|
29
30
|
allow(::File).to receive(:realpath).with("/dev/sdz1").and_return "/dev/sdz1"
|
30
31
|
allow(::File).to receive(:realpath).with("/tmp/foo").and_return "/tmp/foo"
|
31
32
|
end
|
@@ -127,4 +128,4 @@ describe Chef::Provider::Mount::Linux do
|
|
127
128
|
end
|
128
129
|
end
|
129
130
|
|
130
|
-
end
|
131
|
+
end
|
@@ -34,8 +34,8 @@ describe Chef::Provider::Mount::Mount do
|
|
34
34
|
|
35
35
|
@provider = Chef::Provider::Mount::Mount.new(@new_resource, @run_context)
|
36
36
|
|
37
|
-
allow(::File).to receive(:
|
38
|
-
allow(::File).to receive(:
|
37
|
+
allow(::File).to receive(:exist?).with("/dev/sdz1").and_return true
|
38
|
+
allow(::File).to receive(:exist?).with("/tmp/foo").and_return true
|
39
39
|
allow(::File).to receive(:realpath).with("/dev/sdz1").and_return "/dev/sdz1"
|
40
40
|
allow(::File).to receive(:realpath).with("/tmp/foo").and_return "/tmp/foo"
|
41
41
|
end
|
@@ -83,12 +83,12 @@ describe Chef::Provider::Mount::Mount do
|
|
83
83
|
end
|
84
84
|
|
85
85
|
it "should raise an error if the mount device does not exist" do
|
86
|
-
allow(::File).to receive(:
|
86
|
+
allow(::File).to receive(:exist?).with("/dev/sdz1").and_return false
|
87
87
|
expect { @provider.load_current_resource; @provider.mountable? }.to raise_error(Chef::Exceptions::Mount)
|
88
88
|
end
|
89
89
|
|
90
90
|
it "should not call mountable? with load_current_resource - CHEF-1565" do
|
91
|
-
allow(::File).to receive(:
|
91
|
+
allow(::File).to receive(:exist?).with("/dev/sdz1").and_return false
|
92
92
|
expect(@provider).to receive(:mounted?).and_return(true)
|
93
93
|
expect(@provider).to receive(:enabled?).and_return(true)
|
94
94
|
expect(@provider).not_to receive(:mountable?)
|
@@ -100,12 +100,12 @@ describe Chef::Provider::Mount::Mount do
|
|
100
100
|
@new_resource.device_type :uuid
|
101
101
|
@new_resource.device "d21afe51-a0fe-4dc6-9152-ac733763ae0a"
|
102
102
|
expect(@provider).to receive(:shell_out_compacted).with("/sbin/findfs", "UUID=d21afe51-a0fe-4dc6-9152-ac733763ae0a").and_return(status)
|
103
|
-
expect(::File).to receive(:
|
103
|
+
expect(::File).to receive(:exist?).with("").and_return(false)
|
104
104
|
expect { @provider.load_current_resource; @provider.mountable? }.to raise_error(Chef::Exceptions::Mount)
|
105
105
|
end
|
106
106
|
|
107
107
|
it "should raise an error if the mount point does not exist" do
|
108
|
-
allow(::File).to receive(:
|
108
|
+
allow(::File).to receive(:exist?).with("/tmp/foo").and_return false
|
109
109
|
expect { @provider.load_current_resource; @provider.mountable? }.to raise_error(Chef::Exceptions::Mount)
|
110
110
|
end
|
111
111
|
|
@@ -521,8 +521,8 @@ describe Chef::Provider::Mount::Mount do
|
|
521
521
|
|
522
522
|
@provider = Chef::Provider::Mount::Mount.new(@new_resource, @run_context)
|
523
523
|
|
524
|
-
allow(::File).to receive(:
|
525
|
-
allow(::File).to receive(:
|
524
|
+
allow(::File).to receive(:exist?).with("cephserver:6789:/").and_return true
|
525
|
+
allow(::File).to receive(:exist?).with("/tmp/bar").and_return true
|
526
526
|
allow(::File).to receive(:realpath).with("cephserver:6789:/").and_return "cephserver:6789:/"
|
527
527
|
allow(::File).to receive(:realpath).with("/tmp/bar").and_return "/tmp/foo"
|
528
528
|
end
|
@@ -63,11 +63,16 @@ describe Chef::Provider::Package::Apt do
|
|
63
63
|
allow(@provider).to receive(:shell_out).with("dpkg", "--compare-versions", "1.0.1ubuntu2", "eq", "1.1.0").and_return(so2)
|
64
64
|
end
|
65
65
|
|
66
|
+
def get_pkg_name_str(name)
|
67
|
+
# Package name with or without anchors attached to it based on the flag.
|
68
|
+
@new_resource.anchor_package_regex ? "^#{name}$" : name
|
69
|
+
end
|
70
|
+
|
66
71
|
describe "when loading current resource" do
|
67
72
|
|
68
73
|
it "should create a current resource with the name of the new_resource" do
|
69
74
|
expect(@provider).to receive(:shell_out_compacted!).with(
|
70
|
-
"apt-cache", "policy", @new_resource.package_name,
|
75
|
+
"apt-cache", "policy", get_pkg_name_str(@new_resource.package_name),
|
71
76
|
env: { "DEBIAN_FRONTEND" => "noninteractive" },
|
72
77
|
timeout: @timeout
|
73
78
|
).and_return(@shell_out)
|
@@ -107,7 +112,7 @@ describe Chef::Provider::Package::Apt do
|
|
107
112
|
POLICY_STDOUT
|
108
113
|
policy = double(stdout: policy_out, exitstatus: 0)
|
109
114
|
expect(@provider).to receive(:shell_out_compacted!).with(
|
110
|
-
"apt-cache", "policy", "conic-smarms",
|
115
|
+
"apt-cache", "policy", get_pkg_name_str("conic-smarms"),
|
111
116
|
env: { "DEBIAN_FRONTEND" => "noninteractive" },
|
112
117
|
timeout: @timeout
|
113
118
|
).and_return(policy)
|
@@ -116,7 +121,7 @@ describe Chef::Provider::Package::Apt do
|
|
116
121
|
SHOWPKG_STDOUT
|
117
122
|
showpkg = double(stdout: showpkg_out, exitstatus: 0)
|
118
123
|
expect(@provider).to receive(:shell_out_compacted!).with(
|
119
|
-
"apt-cache", "showpkg", "conic-smarms",
|
124
|
+
"apt-cache", "showpkg", get_pkg_name_str("conic-smarms"),
|
120
125
|
env: { "DEBIAN_FRONTEND" => "noninteractive" },
|
121
126
|
timeout: @timeout
|
122
127
|
).and_return(showpkg)
|
@@ -135,7 +140,7 @@ describe Chef::Provider::Package::Apt do
|
|
135
140
|
VPKG_STDOUT
|
136
141
|
virtual_package = double(stdout: virtual_package_out, exitstatus: 0)
|
137
142
|
expect(@provider).to receive(:shell_out_compacted!).with(
|
138
|
-
"apt-cache", "policy", "libmysqlclient15-dev",
|
143
|
+
"apt-cache", "policy", get_pkg_name_str("libmysqlclient15-dev"),
|
139
144
|
env: { "DEBIAN_FRONTEND" => "noninteractive" },
|
140
145
|
timeout: @timeout
|
141
146
|
).and_return(virtual_package)
|
@@ -159,7 +164,7 @@ describe Chef::Provider::Package::Apt do
|
|
159
164
|
SHOWPKG_STDOUT
|
160
165
|
showpkg = double(stdout: showpkg_out, exitstatus: 0)
|
161
166
|
expect(@provider).to receive(:shell_out_compacted!).with(
|
162
|
-
"apt-cache", "showpkg", "libmysqlclient15-dev",
|
167
|
+
"apt-cache", "showpkg", get_pkg_name_str("libmysqlclient15-dev"),
|
163
168
|
env: { "DEBIAN_FRONTEND" => "noninteractive" },
|
164
169
|
timeout: @timeout
|
165
170
|
).and_return(showpkg)
|
@@ -178,7 +183,7 @@ describe Chef::Provider::Package::Apt do
|
|
178
183
|
RPKG_STDOUT
|
179
184
|
real_package = double(stdout: real_package_out, exitstatus: 0)
|
180
185
|
expect(@provider).to receive(:shell_out_compacted!).with(
|
181
|
-
"apt-cache", "policy", "libmysqlclient-dev",
|
186
|
+
"apt-cache", "policy", get_pkg_name_str("libmysqlclient-dev"),
|
182
187
|
env: { "DEBIAN_FRONTEND" => "noninteractive" },
|
183
188
|
timeout: @timeout
|
184
189
|
).and_return(real_package)
|
@@ -195,7 +200,7 @@ describe Chef::Provider::Package::Apt do
|
|
195
200
|
VPKG_STDOUT
|
196
201
|
virtual_package = double(stdout: virtual_package_out, exitstatus: 0)
|
197
202
|
expect(@provider).to receive(:shell_out_compacted!).with(
|
198
|
-
"apt-cache", "policy", "mp3-decoder",
|
203
|
+
"apt-cache", "policy", get_pkg_name_str("mp3-decoder"),
|
199
204
|
env: { "DEBIAN_FRONTEND" => "noninteractive" },
|
200
205
|
timeout: @timeout
|
201
206
|
).and_return(virtual_package)
|
@@ -222,7 +227,7 @@ describe Chef::Provider::Package::Apt do
|
|
222
227
|
SHOWPKG_STDOUT
|
223
228
|
showpkg = double(stdout: showpkg_out, exitstatus: 0)
|
224
229
|
expect(@provider).to receive(:shell_out_compacted!).with(
|
225
|
-
"apt-cache", "showpkg", "mp3-decoder",
|
230
|
+
"apt-cache", "showpkg", get_pkg_name_str("mp3-decoder"),
|
226
231
|
env: { "DEBIAN_FRONTEND" => "noninteractive" },
|
227
232
|
timeout: @timeout
|
228
233
|
).and_return(showpkg)
|
@@ -236,7 +241,7 @@ describe Chef::Provider::Package::Apt do
|
|
236
241
|
@new_resource.default_release("lenny-backports")
|
237
242
|
@new_resource.provider(nil)
|
238
243
|
expect(@provider).to receive(:shell_out_compacted!).with(
|
239
|
-
"apt-cache", "-o", "APT::Default-Release=lenny-backports", "policy", "irssi",
|
244
|
+
"apt-cache", "-o", "APT::Default-Release=lenny-backports", "policy", get_pkg_name_str("irssi"),
|
240
245
|
env: { "DEBIAN_FRONTEND" => "noninteractive" },
|
241
246
|
timeout: @timeout
|
242
247
|
).and_return(@shell_out)
|
@@ -246,7 +251,7 @@ describe Chef::Provider::Package::Apt do
|
|
246
251
|
it "raises an exception if a source is specified (CHEF-5113)" do
|
247
252
|
@new_resource.source "pluto"
|
248
253
|
expect(@provider).to receive(:shell_out_compacted!).with(
|
249
|
-
"apt-cache", "policy", @new_resource.package_name,
|
254
|
+
"apt-cache", "policy", get_pkg_name_str(@new_resource.package_name),
|
250
255
|
env: { "DEBIAN_FRONTEND" => "noninteractive" } ,
|
251
256
|
timeout: @timeout
|
252
257
|
).and_return(@shell_out)
|
@@ -277,7 +282,7 @@ describe Chef::Provider::Package::Apt do
|
|
277
282
|
RPKG_STDOUT
|
278
283
|
real_package = double(stdout: real_package_out, exitstatus: 0)
|
279
284
|
expect(@provider).to receive(:shell_out_compacted!).with(
|
280
|
-
"apt-cache", "policy", "libmysqlclient-dev",
|
285
|
+
"apt-cache", "policy", get_pkg_name_str("libmysqlclient-dev"),
|
281
286
|
env: { "DEBIAN_FRONTEND" => "noninteractive" },
|
282
287
|
timeout: @timeout
|
283
288
|
).and_return(real_package)
|
@@ -307,12 +312,12 @@ describe Chef::Provider::Package::Apt do
|
|
307
312
|
RPKG_STDOUT
|
308
313
|
real_package = double(stdout: real_package_out, exitstatus: 0)
|
309
314
|
expect(@provider).to receive(:shell_out_compacted!).with(
|
310
|
-
"apt-cache", "policy", @new_resource.package_name,
|
315
|
+
"apt-cache", "policy", get_pkg_name_str(@new_resource.package_name),
|
311
316
|
env: { "DEBIAN_FRONTEND" => "noninteractive" } ,
|
312
317
|
timeout: @timeout
|
313
318
|
).and_return(real_package)
|
314
319
|
expect(@provider).to receive(:shell_out_compacted!).with(
|
315
|
-
"apt-cache", "showpkg", @new_resource.package_name,
|
320
|
+
"apt-cache", "showpkg", get_pkg_name_str(@new_resource.package_name),
|
316
321
|
env: { "DEBIAN_FRONTEND" => "noninteractive" } ,
|
317
322
|
timeout: @timeout
|
318
323
|
).and_return(real_package)
|
@@ -47,9 +47,20 @@ describe Chef::Provider::Package::Chocolatey, :windows_only do
|
|
47
47
|
allow(provider).to receive(:choco_exe).and_return(choco_exe)
|
48
48
|
local_list_obj = double(stdout: local_list_stdout)
|
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
|
+
allow(provider).to receive(:powershell_exec!).with("#{choco_exe} --version").and_return(double(result: "2.1.0"))
|
51
|
+
# Mock the local file system choco queries
|
52
|
+
allow(provider).to receive(:get_local_pkg_dirs).and_return(%w{chocolatey ConEmu})
|
53
|
+
allow(provider).to receive(:fetch_package_versions_local).and_return({ "chocolatey" => "0.9.9.11", "conemu" => "15.10.25.0" })
|
54
|
+
end
|
55
|
+
|
56
|
+
after(:each) do
|
57
|
+
provider.instance_variable_set(:@get_choco_version, nil)
|
50
58
|
end
|
51
59
|
|
52
60
|
def allow_remote_list(package_names, args = nil)
|
61
|
+
# Ensure that when we set this, we invalidate any cache since we're changing
|
62
|
+
# the returned data on purpose
|
63
|
+
provider.invalidate_cache
|
53
64
|
remote_list_stdout = <<~EOF
|
54
65
|
Chocolatey v0.9.9.11
|
55
66
|
chocolatey|0.9.9.11
|
@@ -59,12 +70,10 @@ describe Chef::Provider::Package::Chocolatey, :windows_only do
|
|
59
70
|
munin-node|1.6.1.20130823
|
60
71
|
EOF
|
61
72
|
remote_list_obj = double(stdout: remote_list_stdout)
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
allow(provider).to receive(:shell_out_compacted!).with(choco_exe, "list", "-r", pkg, { returns: [0, 2], timeout: timeout }).and_return(remote_list_obj)
|
67
|
-
end
|
73
|
+
if args
|
74
|
+
allow(provider).to receive(:shell_out_compacted!).with(choco_exe, provider.query_command, "-r", *(package_names.sort + args), { returns: [0, 2], timeout: timeout }).and_return(remote_list_obj)
|
75
|
+
else
|
76
|
+
allow(provider).to receive(:shell_out_compacted!).with(choco_exe, provider.query_command, "-r", *(package_names.sort), { returns: [0, 2], timeout: timeout }).and_return(remote_list_obj)
|
68
77
|
end
|
69
78
|
end
|
70
79
|
|
@@ -78,6 +87,25 @@ describe Chef::Provider::Package::Chocolatey, :windows_only do
|
|
78
87
|
end
|
79
88
|
end
|
80
89
|
|
90
|
+
describe "choco searches change with the version" do
|
91
|
+
it "Choco V1 uses List" do
|
92
|
+
allow(provider).to receive(:powershell_exec!).with("#{choco_exe} --version").and_return(double(result: "1.4.0"))
|
93
|
+
expect(provider.query_command).to eql("list")
|
94
|
+
end
|
95
|
+
|
96
|
+
it "Choco V2 uses Search" do
|
97
|
+
allow(provider).to receive(:powershell_exec!).with("#{choco_exe} --version").and_return(double(result: "2.1.0"))
|
98
|
+
expect(provider.query_command).to eql("search")
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
describe "bulk_query changes the search behaviour" do
|
103
|
+
it "should respect bulk_query when getting working out what to search" do
|
104
|
+
new_resource.bulk_query(true)
|
105
|
+
expect(provider.collect_package_requests).to eql(["*"])
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
81
109
|
describe "#candidate_version" do
|
82
110
|
it "should set the candidate_version to the latest version when not pinning" do
|
83
111
|
allow_remote_list(["git"])
|
@@ -121,6 +149,13 @@ describe Chef::Provider::Package::Chocolatey, :windows_only do
|
|
121
149
|
end
|
122
150
|
end
|
123
151
|
|
152
|
+
describe "the query cache should be invalidated if the config is clean" do
|
153
|
+
it "should return false to cache_is_valid? by default" do
|
154
|
+
provider.invalidate_cache
|
155
|
+
expect(provider.cache_is_valid?).to eql(false)
|
156
|
+
end
|
157
|
+
end
|
158
|
+
|
124
159
|
describe "#load_current_resource" do
|
125
160
|
it "should return a current_resource" do
|
126
161
|
expect(provider.load_current_resource).to be_kind_of(Chef::Resource::ChocolateyPackage)
|
@@ -131,7 +166,16 @@ describe Chef::Provider::Package::Chocolatey, :windows_only do
|
|
131
166
|
expect(provider.current_resource.package_name).to eql(["git"])
|
132
167
|
end
|
133
168
|
|
134
|
-
it "should load and downcase names in the installed_packages hash" do
|
169
|
+
it "should load and downcase names in the installed_packages hash (with disk provider)" do
|
170
|
+
new_resource.use_choco_list(false)
|
171
|
+
provider.load_current_resource
|
172
|
+
expect(provider.send(:installed_packages)).to eql(
|
173
|
+
{ "chocolatey" => "0.9.9.11", "conemu" => "15.10.25.0" }
|
174
|
+
)
|
175
|
+
end
|
176
|
+
|
177
|
+
it "should load and downcase names in the installed_packages hash (with choco list provider)" do
|
178
|
+
new_resource.use_choco_list(true)
|
135
179
|
provider.load_current_resource
|
136
180
|
expect(provider.send(:installed_packages)).to eql(
|
137
181
|
{ "chocolatey" => "0.9.9.11", "conemu" => "15.10.25.0" }
|
@@ -150,7 +194,7 @@ describe Chef::Provider::Package::Chocolatey, :windows_only do
|
|
150
194
|
new_resource.package_name("package-does-not-exist")
|
151
195
|
new_resource.returns([0])
|
152
196
|
allow(provider).to receive(:shell_out_compacted!)
|
153
|
-
.with(choco_exe,
|
197
|
+
.with(choco_exe, provider.query_command, "-r", new_resource.package_name.first, { returns: new_resource.returns, timeout: timeout })
|
154
198
|
.and_raise(Mixlib::ShellOut::ShellCommandFailed, "Expected process to exit with [0], but received '2'")
|
155
199
|
expect { provider.send(:available_packages) }.to raise_error(Mixlib::ShellOut::ShellCommandFailed, "Expected process to exit with [0], but received '2'")
|
156
200
|
end
|
@@ -508,7 +552,7 @@ describe "behavior when Chocolatey is not installed" do
|
|
508
552
|
end
|
509
553
|
|
510
554
|
let(:error_regex) do
|
511
|
-
/Could not locate.*
|
555
|
+
/Could not locate.*installer.*resource.*PowerShell.*GetEnvironmentVariable/m
|
512
556
|
end
|
513
557
|
|
514
558
|
context "#choco_exe" do
|