chef 16.1.16 → 16.2.44
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +2 -3
- data/README.md +3 -3
- data/Rakefile +2 -2
- data/chef.gemspec +3 -3
- data/lib/chef/application/apply.rb +1 -1
- data/lib/chef/application/base.rb +1 -1
- data/lib/chef/application/client.rb +1 -1
- data/lib/chef/application/windows_service_manager.rb +1 -1
- data/lib/chef/chef_fs/data_handler/data_bag_item_data_handler.rb +1 -1
- data/lib/chef/chef_fs/path_utils.rb +1 -1
- data/lib/chef/cookbook/chefignore.rb +1 -1
- data/lib/chef/cookbook/metadata.rb +1 -1
- data/lib/chef/cookbook_version.rb +2 -2
- data/lib/chef/data_bag.rb +4 -4
- data/lib/chef/deprecated.rb +4 -0
- data/lib/chef/file_access_control.rb +1 -1
- data/lib/chef/formatters/error_inspectors/compile_error_inspector.rb +1 -1
- data/lib/chef/formatters/error_inspectors/resource_failure_inspector.rb +3 -3
- data/lib/chef/http.rb +17 -2
- data/lib/chef/http/http_request.rb +1 -1
- data/lib/chef/http/json_output.rb +1 -1
- data/lib/chef/http/ssl_policies.rb +18 -0
- data/lib/chef/knife.rb +1 -1
- data/lib/chef/knife/bootstrap.rb +3 -6
- data/lib/chef/knife/bootstrap/templates/chef-full.erb +9 -9
- data/lib/chef/knife/client_bulk_delete.rb +1 -1
- data/lib/chef/knife/config_get.rb +1 -1
- data/lib/chef/knife/cookbook_delete.rb +1 -1
- data/lib/chef/knife/core/cookbook_scm_repo.rb +1 -1
- data/lib/chef/knife/data_bag_create.rb +1 -1
- data/lib/chef/knife/node_bulk_delete.rb +1 -1
- data/lib/chef/knife/node_run_list_remove.rb +1 -1
- data/lib/chef/knife/role_bulk_delete.rb +1 -1
- data/lib/chef/knife/ssh.rb +1 -1
- data/lib/chef/knife/supermarket_share.rb +1 -1
- data/lib/chef/knife/supermarket_unshare.rb +1 -1
- data/lib/chef/log.rb +1 -1
- data/lib/chef/mixin/securable.rb +2 -2
- data/lib/chef/powershell.rb +1 -1
- data/lib/chef/provider/batch.rb +3 -10
- data/lib/chef/provider/cron.rb +2 -14
- data/lib/chef/provider/execute.rb +2 -1
- data/lib/chef/provider/group/dscl.rb +2 -2
- data/lib/chef/provider/group/windows.rb +1 -1
- data/lib/chef/provider/ifconfig.rb +7 -7
- data/lib/chef/provider/mount/aix.rb +1 -1
- data/lib/chef/provider/mount/windows.rb +2 -2
- data/lib/chef/provider/noop.rb +1 -1
- data/lib/chef/provider/package/openbsd.rb +1 -1
- data/lib/chef/provider/package/portage.rb +2 -2
- data/lib/chef/provider/package/powershell.rb +6 -2
- data/lib/chef/provider/package/rubygems.rb +2 -2
- data/lib/chef/provider/package/snap.rb +96 -27
- data/lib/chef/provider/package/windows/msi.rb +3 -3
- data/lib/chef/provider/package/windows/registry_uninstall_entry.rb +1 -1
- data/lib/chef/provider/powershell_script.rb +10 -14
- data/lib/chef/provider/remote_file/http.rb +4 -1
- data/lib/chef/provider/script.rb +4 -75
- data/lib/chef/provider/service/arch.rb +1 -1
- data/lib/chef/provider/service/debian.rb +2 -2
- data/lib/chef/provider/service/openbsd.rb +4 -4
- data/lib/chef/provider/service/redhat.rb +1 -1
- data/lib/chef/provider/service/windows.rb +1 -1
- data/lib/chef/provider/subversion.rb +2 -2
- data/lib/chef/provider/user/dscl.rb +4 -4
- data/lib/chef/provider/user/linux.rb +3 -3
- data/lib/chef/provider/user/mac.rb +5 -5
- data/lib/chef/provider/windows_script.rb +87 -25
- data/lib/chef/provider/zypper_repository.rb +30 -10
- data/lib/chef/resource.rb +22 -11
- data/lib/chef/resource/apt_package.rb +1 -1
- data/lib/chef/resource/archive_file.rb +28 -8
- data/lib/chef/resource/bash.rb +0 -1
- data/lib/chef/resource/batch.rb +4 -2
- data/lib/chef/resource/chef_client_scheduled_task.rb +13 -1
- data/lib/chef/resource/cron/_cron_shared.rb +98 -0
- data/lib/chef/resource/cron/cron.rb +46 -0
- data/lib/chef/resource/{cron_d.rb → cron/cron_d.rb} +7 -87
- data/lib/chef/resource/cron_access.rb +11 -3
- data/lib/chef/resource/csh.rb +0 -1
- data/lib/chef/resource/execute.rb +477 -7
- data/lib/chef/resource/file.rb +1 -1
- data/lib/chef/resource/freebsd_package.rb +1 -1
- data/lib/chef/resource/helpers/cron_validations.rb +6 -3
- data/lib/chef/resource/homebrew_package.rb +30 -1
- data/lib/chef/resource/homebrew_update.rb +107 -0
- data/lib/chef/resource/hostname.rb +6 -19
- data/lib/chef/resource/kernel_module.rb +14 -1
- data/lib/chef/resource/mount.rb +1 -1
- data/lib/chef/resource/perl.rb +0 -1
- data/lib/chef/resource/plist.rb +23 -4
- data/lib/chef/resource/powershell_script.rb +4 -2
- data/lib/chef/resource/python.rb +0 -1
- data/lib/chef/resource/remote_file.rb +26 -10
- data/lib/chef/resource/ruby.rb +0 -1
- data/lib/chef/resource/template.rb +1 -1
- data/lib/chef/resource/windows_ad_join.rb +30 -1
- data/lib/chef/resource/windows_audit_policy.rb +227 -0
- data/lib/chef/resource/windows_auto_run.rb +11 -0
- data/lib/chef/resource/windows_certificate.rb +26 -0
- data/lib/chef/resource/windows_font.rb +3 -3
- data/lib/chef/resource/windows_package.rb +1 -1
- data/lib/chef/resource/windows_pagefile.rb +1 -1
- data/lib/chef/resource/windows_script.rb +2 -16
- data/lib/chef/resource/windows_security_policy.rb +17 -15
- data/lib/chef/resource/windows_shortcut.rb +1 -2
- data/lib/chef/resource/windows_task.rb +4 -4
- data/lib/chef/resource/windows_user_privilege.rb +5 -5
- data/lib/chef/resource/yum_repository.rb +9 -9
- data/lib/chef/resources.rb +4 -2
- data/lib/chef/search/query.rb +1 -1
- data/lib/chef/util/diff.rb +2 -2
- data/lib/chef/util/windows/net_user.rb +1 -1
- data/lib/chef/util/windows/volume.rb +1 -1
- data/lib/chef/version.rb +1 -1
- data/lib/chef/win32/file.rb +1 -1
- data/lib/chef/win32/registry.rb +2 -2
- data/lib/chef/win32/security.rb +1 -1
- data/spec/data/lwrp/providers/buck_passer.rb +1 -1
- data/spec/data/lwrp/providers/buck_passer_2.rb +1 -1
- data/spec/data/lwrp/providers/embedded_resource_accesses_providers_scope.rb +1 -1
- data/spec/functional/resource/cron_spec.rb +10 -0
- data/spec/functional/resource/remote_file_spec.rb +2 -2
- data/spec/functional/resource/windows_task_spec.rb +8 -8
- data/spec/support/platform_helpers.rb +1 -1
- data/spec/support/platforms/win32/spec_service.rb +1 -1
- data/spec/support/shared/functional/execute_resource.rb +1 -1
- data/spec/support/shared/unit/execute_resource.rb +1 -1
- data/spec/unit/application_spec.rb +7 -0
- data/spec/unit/data_bag_spec.rb +1 -1
- data/spec/unit/http/ssl_policies_spec.rb +20 -0
- data/spec/unit/knife/bootstrap_spec.rb +2 -2
- data/spec/unit/mixin/user_context_spec.rb +1 -9
- data/spec/unit/property_spec.rb +1 -1
- data/spec/unit/provider/batch_spec.rb +130 -0
- data/spec/unit/provider/cron_spec.rb +9 -49
- data/spec/unit/provider/package/powershell_spec.rb +95 -86
- data/spec/unit/provider/package/snap_spec.rb +1 -1
- data/spec/unit/provider/powershell_script_spec.rb +3 -45
- data/spec/unit/provider/script_spec.rb +20 -110
- data/spec/unit/provider/zypper_repository_spec.rb +60 -10
- data/spec/unit/resource/archive_file_spec.rb +11 -2
- data/spec/unit/resource/chef_client_scheduled_task_spec.rb +17 -7
- data/spec/unit/resource/cron_spec.rb +2 -2
- data/spec/unit/resource/helpers/cron_validations_spec.rb +5 -1
- data/spec/unit/resource/homebrew_update_spec.rb +30 -0
- data/spec/unit/resource/powershell_script_spec.rb +10 -15
- data/spec/unit/resource/timezone_spec.rb +1 -1
- data/spec/unit/resource/windows_audit_policy_spec.rb +64 -0
- data/spec/unit/resource/windows_dns_record_spec.rb +3 -3
- data/spec/unit/resource/windows_dns_zone_spec.rb +2 -2
- data/spec/unit/resource/windows_task_spec.rb +1 -1
- data/spec/unit/resource/windows_uac_spec.rb +2 -2
- data/spec/unit/resource/yum_repository_spec.rb +21 -21
- data/spec/unit/resource_spec.rb +67 -1
- data/spec/unit/util/dsc/configuration_generator_spec.rb +1 -1
- data/spec/unit/util/threaded_job_queue_spec.rb +9 -0
- metadata +22 -22
- data/lib/chef/resource/cron.rb +0 -157
@@ -169,7 +169,7 @@ describe Chef::Provider::Package::Snap do
|
|
169
169
|
|
170
170
|
it "does not throw an error if installed version not found" do
|
171
171
|
provider.load_current_resource
|
172
|
-
expect(provider.get_current_versions).to eq([
|
172
|
+
expect(provider.get_current_versions).to eq([])
|
173
173
|
end
|
174
174
|
end
|
175
175
|
end
|
@@ -18,34 +18,12 @@
|
|
18
18
|
|
19
19
|
require "spec_helper"
|
20
20
|
describe Chef::Provider::PowershellScript, "action_run" do
|
21
|
-
|
22
|
-
let(:powershell_version) { nil }
|
23
|
-
let(:node) do
|
24
|
-
node = Chef::Node.new
|
25
|
-
node.default["kernel"] = {}
|
26
|
-
node.default["kernel"][:machine] = :x86_64.to_s
|
27
|
-
unless powershell_version.nil?
|
28
|
-
node.default[:languages] = { powershell: { version: powershell_version } }
|
29
|
-
end
|
30
|
-
node
|
31
|
-
end
|
32
|
-
|
33
|
-
# code block is mandatory for the powershell provider
|
34
|
-
let(:code) { "" }
|
35
|
-
|
36
21
|
let(:events) { Chef::EventDispatch::Dispatcher.new }
|
37
22
|
|
38
|
-
let(:run_context) {
|
23
|
+
let(:run_context) { Chef::RunContext.new(Chef::Node.new, {}, events) }
|
39
24
|
|
40
25
|
let(:new_resource) do
|
41
|
-
|
42
|
-
new_resource.code code
|
43
|
-
new_resource
|
44
|
-
end
|
45
|
-
|
46
|
-
def set_user_defined_flag
|
47
|
-
new_resource.flags "-ExecutionPolicy RemoteSigned"
|
48
|
-
provider
|
26
|
+
Chef::Resource::PowershellScript.new("run some powershell code", run_context)
|
49
27
|
end
|
50
28
|
|
51
29
|
let(:provider) do
|
@@ -54,32 +32,12 @@ describe Chef::Provider::PowershellScript, "action_run" do
|
|
54
32
|
|
55
33
|
context "when setting interpreter flags" do
|
56
34
|
before(:each) do
|
57
|
-
allow(provider).to receive(:
|
58
|
-
os_info_double = double("os_info")
|
59
|
-
allow(provider.run_context.node["kernel"]).to receive(:[]).with("os_info").and_return(os_info_double)
|
60
|
-
allow(os_info_double).to receive(:[]).with("system_directory").and_return("C:\\Windows\\system32")
|
35
|
+
allow(provider).to receive(:basepath).and_return("C:\\Windows\\system32")
|
61
36
|
end
|
62
37
|
|
63
38
|
it "sets the -File flag as the last flag" do
|
64
39
|
flags = provider.command.split(" ").keep_if { |flag| flag =~ /^-/ }
|
65
40
|
expect(flags.pop).to eq("-File")
|
66
41
|
end
|
67
|
-
|
68
|
-
let(:execution_policy_flag) do
|
69
|
-
provider_flags = provider.flags.split(" ")
|
70
|
-
# Last occurance of "executionpolicy"
|
71
|
-
execution_policy_index = provider_flags.map(&:downcase).rindex("-executionpolicy")
|
72
|
-
|
73
|
-
execution_policy_index ? provider_flags[execution_policy_index + 1] : nil
|
74
|
-
end
|
75
|
-
|
76
|
-
it "sets default -ExecutionPolicy flag to 'Bypass'" do
|
77
|
-
expect(execution_policy_flag).to eq("Bypass")
|
78
|
-
end
|
79
|
-
|
80
|
-
it "sets user defined -ExecutionPolicy flag to 'RemoteSigned'" do
|
81
|
-
set_user_defined_flag
|
82
|
-
expect(execution_policy_flag).to eq("RemoteSigned")
|
83
|
-
end
|
84
42
|
end
|
85
43
|
end
|
@@ -34,124 +34,34 @@ describe Chef::Provider::Script, "action_run" do
|
|
34
34
|
|
35
35
|
let(:provider) { Chef::Provider::Script.new(new_resource, run_context) }
|
36
36
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
allow(provider).to receive(:shell_out!).and_return(true)
|
41
|
-
allow(provider).to receive(:script_file).and_return(tempfile)
|
42
|
-
end
|
43
|
-
|
44
|
-
context "#script_file" do
|
45
|
-
it "creates a temporary file to store the script" do
|
46
|
-
allow(provider).to receive(:script_file).and_call_original
|
47
|
-
expect(provider.script_file).to be_an_instance_of(Tempfile)
|
37
|
+
describe "#command" do
|
38
|
+
it "is only the intepreter in quotes by default" do
|
39
|
+
expect(provider.command.strip).to eq(%q{"perl"})
|
48
40
|
end
|
49
|
-
end
|
50
41
|
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
provider.unlink_script_file
|
55
|
-
expect(File.exist?(tempfile_path)).to be false
|
42
|
+
it "is the interpreter in quotes with the flags when flags are used" do
|
43
|
+
new_resource.flags "-f"
|
44
|
+
expect(provider.command).to eq(%q{"perl" -f})
|
56
45
|
end
|
57
46
|
end
|
58
47
|
|
59
|
-
|
60
|
-
context "when not running on Windows" do
|
61
|
-
before do
|
62
|
-
allow(ChefUtils).to receive(:windows?).and_return(false)
|
63
|
-
end
|
64
|
-
context "#set_owner_and_group" do
|
65
|
-
it "sets the owner and group for the script file" do
|
66
|
-
new_resource.user "toor"
|
67
|
-
new_resource.group "wheel"
|
68
|
-
expect(FileUtils).to receive(:chown).with("toor", "wheel", tempfile.path)
|
69
|
-
provider.set_owner_and_group
|
70
|
-
end
|
71
|
-
end
|
72
|
-
end
|
73
|
-
|
74
|
-
context "when running on Windows" do
|
75
|
-
before do
|
76
|
-
allow(ChefUtils).to receive(:windows?).and_return(true)
|
77
|
-
expect(new_resource.user).to eq(nil)
|
78
|
-
stub_const("Chef::ReservedNames::Win32::API::Security::GENERIC_READ", 1)
|
79
|
-
stub_const("Chef::ReservedNames::Win32::API::Security::GENERIC_EXECUTE", 4)
|
80
|
-
stub_const("Chef::ReservedNames::Win32::Security", Class.new)
|
81
|
-
stub_const("Chef::ReservedNames::Win32::Security::SecurableObject", Class.new)
|
82
|
-
stub_const("Chef::ReservedNames::Win32::Security::SID", Class.new)
|
83
|
-
stub_const("Chef::ReservedNames::Win32::Security::ACE", Class.new)
|
84
|
-
stub_const("Chef::ReservedNames::Win32::Security::ACL", Class.new)
|
85
|
-
end
|
86
|
-
|
87
|
-
context "when an alternate user is not specified" do
|
88
|
-
it "does not attempt to set the script file's security descriptor" do
|
89
|
-
expect(provider).to receive(:grant_alternate_user_read_access)
|
90
|
-
expect(Chef::ReservedNames::Win32::Security::SecurableObject).not_to receive(:new)
|
91
|
-
provider.set_owner_and_group
|
92
|
-
end
|
93
|
-
end
|
94
|
-
|
95
|
-
context "when an alternate user is specified" do
|
96
|
-
let(:security_descriptor) { instance_double("Chef::ReservedNames::Win32::Security::SecurityDescriptor", dacl: []) }
|
97
|
-
let(:securable_object) { instance_double("Chef::ReservedNames::Win32::Security::SecurableObject", :security_descriptor => security_descriptor, :dacl= => nil) }
|
98
|
-
it "sets the script file's security descriptor" do
|
99
|
-
new_resource.user("toor")
|
100
|
-
expect(Chef::ReservedNames::Win32::Security::SecurableObject).to receive(:new).and_return(securable_object)
|
101
|
-
expect(Chef::ReservedNames::Win32::Security::SID).to receive(:from_account).and_return(nil)
|
102
|
-
expect(Chef::ReservedNames::Win32::Security::ACE).to receive(:access_allowed).and_return(nil)
|
103
|
-
expect(Chef::ReservedNames::Win32::Security::ACL).to receive(:create).and_return(nil)
|
104
|
-
expect(securable_object).to receive(:dacl=)
|
105
|
-
provider.set_owner_and_group
|
106
|
-
end
|
107
|
-
end
|
108
|
-
end
|
109
|
-
end
|
110
|
-
|
111
|
-
context "with the script file set to the correct owner and group" do
|
48
|
+
describe "#action_run" do
|
112
49
|
before do
|
113
|
-
allow(provider).to receive(:
|
50
|
+
allow(provider).to receive(:stream_to_stdout?).and_return(false)
|
114
51
|
end
|
115
52
|
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
expect(File.exist?(tempfile_path)).to be false
|
129
|
-
end
|
130
|
-
end
|
131
|
-
|
132
|
-
describe "when running the script" do
|
133
|
-
let (:default_opts) do
|
134
|
-
{ timeout: 3600, returns: 0, default_env: false, log_level: :info, log_tag: "script[run some perl code]" }
|
135
|
-
end
|
136
|
-
|
137
|
-
before do
|
138
|
-
allow(STDOUT).to receive(:tty?).and_return(false)
|
139
|
-
end
|
140
|
-
|
141
|
-
it 'should set the command to "interpreter" "tempfile"' do
|
142
|
-
expect(provider.command).to eq(%Q{"perl" "#{tempfile.path}"})
|
143
|
-
end
|
144
|
-
|
145
|
-
it "should call shell_out! with the command" do
|
146
|
-
expect(provider).to receive(:shell_out!).with(provider.command, default_opts).and_return(true)
|
147
|
-
provider.action_run
|
148
|
-
end
|
149
|
-
|
150
|
-
it "should set the command to 'interpreter flags tempfile'" do
|
151
|
-
new_resource.flags "-f"
|
152
|
-
expect(provider.command).to eq(%Q{"perl" -f "#{tempfile.path}"})
|
153
|
-
end
|
53
|
+
it "should call shell_out! with the command and correct options" do
|
54
|
+
opts = {
|
55
|
+
timeout: 3600,
|
56
|
+
returns: 0,
|
57
|
+
default_env: false,
|
58
|
+
log_level: :info,
|
59
|
+
log_tag: "script[run some perl code]",
|
60
|
+
input: "$| = 1; print 'i like beans'",
|
61
|
+
}
|
62
|
+
|
63
|
+
expect(provider).to receive(:shell_out!).with(provider.command, opts).and_return(true)
|
64
|
+
provider.action_run
|
154
65
|
end
|
155
66
|
end
|
156
|
-
|
157
67
|
end
|
@@ -28,12 +28,40 @@ describe Chef::Provider::ZypperRepository do
|
|
28
28
|
|
29
29
|
# Output of the command:
|
30
30
|
# => gpg --with-fingerprint [FILE]
|
31
|
-
|
31
|
+
ZYPPER_GPG_20 = <<~EOF.freeze
|
32
32
|
pub 2048R/3DBDC284 2011-08-19 [expires: 2024-06-14]
|
33
33
|
Key fingerprint = 573B FD6B 3D8F BC64 1079 A6AB ABF5 BD82 7BD9 BF62
|
34
34
|
uid nginx signing key <signing-key@nginx.com>
|
35
35
|
EOF
|
36
36
|
|
37
|
+
# Output of the command:
|
38
|
+
# => gpg --import-options import-show --dry-run --import --with-colons [FILE]
|
39
|
+
ZYPPER_GPG_22 = <<~EOF.freeze
|
40
|
+
pub:-:2048:1:ABF5BD827BD9BF62:1313747554:1718374819::-:::scSC::::::23::0:
|
41
|
+
fpr:::::::::573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62:
|
42
|
+
uid:-::::1466086904::F18C4DBBFCB45099ABB59088DB6B252FA7E9FB41::nginx signing key <signing-key@nginx.com>::::::::::0:
|
43
|
+
gpg: Total number processed: 1
|
44
|
+
EOF
|
45
|
+
|
46
|
+
# Output of the command:
|
47
|
+
# -> gpg --version
|
48
|
+
ZYPPER_GPG_VERSION = <<~EOF.freeze
|
49
|
+
gpg (GnuPG) 2.2.20
|
50
|
+
libgcrypt 1.8.5
|
51
|
+
Copyright (C) 2020 Free Software Foundation, Inc.
|
52
|
+
License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>
|
53
|
+
This is free software: you are free to change and redistribute it.
|
54
|
+
There is NO WARRANTY, to the extent permitted by law.
|
55
|
+
|
56
|
+
Home: /Users/tsmith/.gnupg
|
57
|
+
Supported algorithms:
|
58
|
+
Pubkey: RSA, ELG, DSA, ECDH, ECDSA, EDDSA
|
59
|
+
Cipher: IDEA, 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH,
|
60
|
+
CAMELLIA128, CAMELLIA192, CAMELLIA256
|
61
|
+
Hash: SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224
|
62
|
+
Compression: Uncompressed, ZIP, ZLIB, BZIP2
|
63
|
+
EOF
|
64
|
+
|
37
65
|
let(:new_resource) { Chef::Resource::ZypperRepository.new("Nginx Repository") }
|
38
66
|
let(:logger) { double("Mixlib::Log::Child").as_null_object }
|
39
67
|
let(:provider) do
|
@@ -48,8 +76,16 @@ describe Chef::Provider::ZypperRepository do
|
|
48
76
|
double("shell_out", stdout: ZYPPER_RPM_KEYS, exitstatus: 0, error?: false)
|
49
77
|
end
|
50
78
|
|
51
|
-
let(:
|
52
|
-
double("shell_out", stdout:
|
79
|
+
let(:gpg_20) do
|
80
|
+
double("shell_out", stdout: ZYPPER_GPG_20, exitstatus: 0, error?: false)
|
81
|
+
end
|
82
|
+
|
83
|
+
let(:gpg_22) do
|
84
|
+
double("shell_out", stdout: ZYPPER_GPG_22, exitstatus: 0, error?: false)
|
85
|
+
end
|
86
|
+
|
87
|
+
let(:gpg_ver) do
|
88
|
+
double("shell_out", stdout: ZYPPER_GPG_VERSION, exitstatus: 0, error?: false)
|
53
89
|
end
|
54
90
|
|
55
91
|
it "responds to load_current_resource" do
|
@@ -96,24 +132,38 @@ describe Chef::Provider::ZypperRepository do
|
|
96
132
|
|
97
133
|
describe "#key_installed?" do
|
98
134
|
before do
|
99
|
-
expect(provider).to receive(:shell_out).with("rpm -qa gpg-pubkey*").and_return(rpm_key_finger)
|
135
|
+
expect(provider).to receive(:shell_out).with("/bin/rpm -qa gpg-pubkey*").and_return(rpm_key_finger)
|
100
136
|
end
|
101
137
|
|
102
138
|
it "returns true if the key is installed" do
|
103
|
-
expect(provider).to receive(:
|
139
|
+
expect(provider).to receive(:short_key_id).and_return("3dbdc284")
|
104
140
|
expect(provider.key_installed?("/foo/nginx.key")).to be_truthy
|
105
141
|
end
|
106
142
|
|
107
143
|
it "returns false if the key is not installed" do
|
108
|
-
expect(provider).to receive(:
|
144
|
+
expect(provider).to receive(:short_key_id).and_return("BOGUS")
|
109
145
|
expect(provider.key_installed?("/foo/nginx.key")).to be_falsey
|
110
146
|
end
|
111
147
|
end
|
112
148
|
|
113
|
-
describe "#
|
114
|
-
it "returns the
|
115
|
-
expect(provider).to receive(:shell_out!).with("gpg --
|
116
|
-
expect(provider.
|
149
|
+
describe "#gpg_version" do
|
150
|
+
it "returns the gpg version by shelling out to gpg" do
|
151
|
+
expect(provider).to receive(:shell_out!).with("gpg --version").and_return(gpg_ver)
|
152
|
+
expect(provider.gpg_version).to eq(Gem::Version.new("2.2.20"))
|
153
|
+
end
|
154
|
+
end
|
155
|
+
|
156
|
+
describe "#short_key_id" do
|
157
|
+
it "returns the short key ID via running a dry-run import on gpg 2.2+" do
|
158
|
+
expect(provider).to receive(:gpg_version).and_return(Gem::Version.new("2.2"))
|
159
|
+
expect(provider).to receive(:shell_out!).with("gpg --import-options import-show --dry-run --import --with-colons /foo/nginx.key").and_return(gpg_22)
|
160
|
+
expect(provider.short_key_id("/foo/nginx.key")).to eq("7bd9bf62")
|
161
|
+
end
|
162
|
+
|
163
|
+
it "returns the short key ID via --with-fingerpint on gpg < 2.2" do
|
164
|
+
expect(provider).to receive(:gpg_version).and_return(Gem::Version.new("2.0"))
|
165
|
+
expect(provider).to receive(:shell_out!).with("gpg --with-fingerprint /foo/nginx.key").and_return(gpg_20)
|
166
|
+
expect(provider.short_key_id("/foo/nginx.key")).to eq("3dbdc284")
|
117
167
|
end
|
118
168
|
end
|
119
169
|
|
@@ -18,8 +18,11 @@
|
|
18
18
|
require "spec_helper"
|
19
19
|
|
20
20
|
describe Chef::Resource::ArchiveFile do
|
21
|
-
|
22
|
-
let(:
|
21
|
+
let(:node) { Chef::Node.new }
|
22
|
+
let(:events) { Chef::EventDispatch::Dispatcher.new }
|
23
|
+
let(:run_context) { Chef::RunContext.new(node, {}, events) }
|
24
|
+
let(:resource) { Chef::Resource::ArchiveFile.new("foo", run_context) }
|
25
|
+
let(:provider) { resource.provider_for_action(:extract) }
|
23
26
|
|
24
27
|
it "has a resource name of :archive_file" do
|
25
28
|
expect(resource.resource_name).to eql(:archive_file)
|
@@ -41,6 +44,12 @@ describe Chef::Resource::ArchiveFile do
|
|
41
44
|
expect(resource.mode).to eql("755")
|
42
45
|
end
|
43
46
|
|
47
|
+
it "mode property throws a deprecation warning if Integers are passed" do
|
48
|
+
expect(Chef::Log).to receive(:deprecation)
|
49
|
+
resource.mode 755
|
50
|
+
provider.define_resource_requirements
|
51
|
+
end
|
52
|
+
|
44
53
|
it "options property defaults to [:time]" do
|
45
54
|
expect(resource.options).to eql([:time])
|
46
55
|
end
|
@@ -43,16 +43,26 @@ describe Chef::Resource::ChefClientScheduledTask do
|
|
43
43
|
expect(resource.frequency_modifier).to eql(10)
|
44
44
|
end
|
45
45
|
|
46
|
+
it "expects default frequency modifier to be 30 when frequency is set to 'minute'" do
|
47
|
+
resource.frequency "minute"
|
48
|
+
expect(resource.frequency_modifier).to eql(30)
|
49
|
+
end
|
50
|
+
|
51
|
+
it "expects default frequency modifier to be 1 when frequency is set to 'daily'" do
|
52
|
+
resource.frequency "daily"
|
53
|
+
expect(resource.frequency_modifier).to eql(1)
|
54
|
+
end
|
55
|
+
|
46
56
|
it "validates the start_time property input" do
|
47
57
|
expect { resource.start_time("8:00 am") }.to raise_error(Chef::Exceptions::ValidationFailed)
|
48
58
|
expect { resource.start_time("8:00") }.to raise_error(Chef::Exceptions::ValidationFailed)
|
49
|
-
expect { resource.start_time("08:00") }.not_to raise_error
|
59
|
+
expect { resource.start_time("08:00") }.not_to raise_error
|
50
60
|
end
|
51
61
|
|
52
62
|
it "validates the start_date property input" do
|
53
63
|
expect { resource.start_date("2/1/20") }.to raise_error(Chef::Exceptions::ValidationFailed)
|
54
64
|
expect { resource.start_date("02/01/20") }.to raise_error(Chef::Exceptions::ValidationFailed)
|
55
|
-
expect { resource.start_date("02/01/2020") }.not_to raise_error
|
65
|
+
expect { resource.start_date("02/01/2020") }.not_to raise_error
|
56
66
|
end
|
57
67
|
|
58
68
|
it "raises an error if frequency_modifier is not a positive number" do
|
@@ -70,12 +80,12 @@ describe Chef::Resource::ChefClientScheduledTask do
|
|
70
80
|
|
71
81
|
describe "#client_cmd" do
|
72
82
|
it "creates a valid command if using all default properties" do
|
73
|
-
expect(provider.client_cmd).to eql("C:/opscode/chef/bin/chef-client -L /etc/chef/log/client.log -c /etc/chef/client.rb")
|
83
|
+
expect(provider.client_cmd).to eql("C:/opscode/chef/bin/chef-client -L /etc/chef/log/client.log -c /etc/chef/client.rb") | eql("C:/opscode/chef/bin/chef-client -L C:\\chef/log/client.log -c C:\\chef/client.rb")
|
74
84
|
end
|
75
85
|
|
76
86
|
it "uses daemon_options if set" do
|
77
87
|
resource.daemon_options ["--foo 1", "--bar 2"]
|
78
|
-
expect(provider.client_cmd).to eql("C:/opscode/chef/bin/chef-client -L /etc/chef/log/client.log -c /etc/chef/client.rb --foo 1 --bar 2")
|
88
|
+
expect(provider.client_cmd).to eql("C:/opscode/chef/bin/chef-client -L /etc/chef/log/client.log -c /etc/chef/client.rb --foo 1 --bar 2") | eql("C:/opscode/chef/bin/chef-client -L C:\\chef/log/client.log -c C:\\chef/client.rb --foo 1 --bar 2")
|
79
89
|
end
|
80
90
|
|
81
91
|
it "uses custom config dir if set" do
|
@@ -86,17 +96,17 @@ describe Chef::Resource::ChefClientScheduledTask do
|
|
86
96
|
it "uses custom log files / paths if set" do
|
87
97
|
resource.log_file_name "my-client.log"
|
88
98
|
resource.log_directory "C:/foo/bar"
|
89
|
-
expect(provider.client_cmd).to eql("C:/opscode/chef/bin/chef-client -L C:/foo/bar/my-client.log -c /etc/chef/client.rb")
|
99
|
+
expect(provider.client_cmd).to eql("C:/opscode/chef/bin/chef-client -L C:/foo/bar/my-client.log -c /etc/chef/client.rb") | eql("C:/opscode/chef/bin/chef-client -L C:/foo/bar/my-client.log -c C:\\chef/client.rb")
|
90
100
|
end
|
91
101
|
|
92
102
|
it "uses custom chef-client binary if set" do
|
93
103
|
resource.chef_binary_path "C:/foo/bar/chef-client"
|
94
|
-
expect(provider.client_cmd).to eql("C:/foo/bar/chef-client -L /etc/chef/log/client.log -c /etc/chef/client.rb")
|
104
|
+
expect(provider.client_cmd).to eql("C:/foo/bar/chef-client -L /etc/chef/log/client.log -c /etc/chef/client.rb") | eql("C:/foo/bar/chef-client -L C:\\chef/log/client.log -c C:\\chef/client.rb")
|
95
105
|
end
|
96
106
|
|
97
107
|
it "sets the license acceptance flag if set" do
|
98
108
|
resource.accept_chef_license true
|
99
|
-
expect(provider.client_cmd).to eql("C:/opscode/chef/bin/chef-client -L /etc/chef/log/client.log -c /etc/chef/client.rb --chef-license accept")
|
109
|
+
expect(provider.client_cmd).to eql("C:/opscode/chef/bin/chef-client -L /etc/chef/log/client.log -c /etc/chef/client.rb --chef-license accept") | eql("C:/opscode/chef/bin/chef-client -L C:\\chef/log/client.log -c C:\\chef/client.rb --chef-license accept")
|
100
110
|
end
|
101
111
|
end
|
102
112
|
end
|
@@ -132,10 +132,10 @@ describe Chef::Resource::Cron do
|
|
132
132
|
|
133
133
|
describe "weekday" do
|
134
134
|
it "rejects any weekday over 7" do
|
135
|
-
expect { resource.weekday "8" }.to raise_error(
|
135
|
+
expect { resource.weekday "8" }.to raise_error(Chef::Exceptions::ValidationFailed)
|
136
136
|
end
|
137
137
|
it "rejects any symbols which don't represent day of week" do
|
138
|
-
expect { resource.weekday :foo }.to raise_error(
|
138
|
+
expect { resource.weekday :foo }.to raise_error(Chef::Exceptions::ValidationFailed)
|
139
139
|
end
|
140
140
|
end
|
141
141
|
|
@@ -34,8 +34,12 @@ describe Chef::ResourceHelpers::CronValidations do
|
|
34
34
|
expect(Chef::ResourceHelpers::CronValidations.validate_dow(8)).to be false
|
35
35
|
end
|
36
36
|
|
37
|
+
it "it accepts the string day with full name" do
|
38
|
+
expect(Chef::ResourceHelpers::CronValidations.validate_dow("monday")).to be true
|
39
|
+
end
|
40
|
+
|
37
41
|
it "returns false for an invalid string" do
|
38
|
-
expect(Chef::ResourceHelpers::CronValidations.validate_dow("
|
42
|
+
expect(Chef::ResourceHelpers::CronValidations.validate_dow("funday")).to be false
|
39
43
|
end
|
40
44
|
end
|
41
45
|
|