chef 12.5.1-universal-mingw32 → 12.6.0-universal-mingw32
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 +6 -1
- data/README.md +6 -4
- data/Rakefile +1 -4
- data/chef-windows.gemspec +21 -0
- data/chef.gemspec +58 -0
- data/lib/chef/api_client/registration.rb +9 -4
- data/lib/chef/application.rb +3 -84
- data/lib/chef/application/apply.rb +9 -2
- data/lib/chef/application/client.rb +8 -3
- data/lib/chef/application/solo.rb +7 -1
- data/lib/chef/application/windows_service.rb +21 -6
- data/lib/chef/application/windows_service_manager.rb +2 -3
- data/lib/chef/audit/runner.rb +1 -0
- data/lib/chef/chef_class.rb +1 -11
- data/lib/chef/chef_fs/chef_fs_data_store.rb +181 -2
- data/lib/chef/chef_fs/file_system/cookbook_subdir.rb +5 -0
- data/lib/chef/chef_fs/file_system/file_system_entry.rb +11 -7
- data/lib/chef/client.rb +28 -1
- data/lib/chef/cookbook/cookbook_collection.rb +14 -1
- data/lib/chef/cookbook/cookbook_version_loader.rb +1 -1
- data/lib/chef/cookbook/metadata.rb +115 -9
- data/lib/chef/cookbook/remote_file_vendor.rb +1 -1
- data/lib/chef/cookbook_version.rb +6 -2
- data/lib/chef/data_bag.rb +1 -1
- data/lib/chef/data_bag_item.rb +1 -1
- data/lib/chef/digester.rb +5 -1
- data/lib/chef/dsl/chef_provisioning.rb +57 -0
- data/lib/chef/dsl/cheffish.rb +64 -0
- data/lib/chef/dsl/declare_resource.rb +108 -0
- data/lib/chef/dsl/platform_introspection.rb +3 -3
- data/lib/chef/dsl/recipe.rb +3 -73
- data/lib/chef/dsl/resources.rb +27 -1
- data/lib/chef/event_dispatch/base.rb +3 -0
- data/lib/chef/event_dispatch/dispatcher.rb +5 -0
- data/lib/chef/event_dispatch/events_output_stream.rb +8 -0
- data/lib/chef/exceptions.rb +21 -1
- data/lib/chef/file_access_control/unix.rb +12 -12
- data/lib/chef/file_content_management/deploy/cp.rb +2 -2
- data/lib/chef/file_content_management/deploy/mv_unix.rb +4 -4
- data/lib/chef/file_content_management/deploy/mv_windows.rb +1 -1
- data/lib/chef/formatters/base.rb +7 -0
- data/lib/chef/formatters/error_inspectors/compile_error_inspector.rb +2 -2
- data/lib/chef/formatters/indentable_output_stream.rb +5 -0
- data/lib/chef/http.rb +19 -3
- data/lib/chef/http/decompressor.rb +2 -2
- data/lib/chef/json_compat.rb +1 -0
- data/lib/chef/knife.rb +16 -2
- data/lib/chef/knife/bootstrap.rb +55 -10
- data/lib/chef/knife/cookbook_site_install.rb +5 -1
- data/lib/chef/knife/core/bootstrap_context.rb +2 -1
- data/lib/chef/knife/core/node_presenter.rb +1 -1
- data/lib/chef/knife/ssh.rb +30 -16
- data/lib/chef/knife/ssl_check.rb +4 -2
- data/lib/chef/knife/ssl_fetch.rb +3 -2
- data/lib/chef/knife/status.rb +14 -1
- data/lib/chef/log.rb +14 -0
- data/lib/chef/mixin/get_source_from_package.rb +7 -2
- data/lib/chef/mixin/properties.rb +302 -0
- data/lib/chef/mixin/proxified_socket.rb +38 -0
- data/lib/chef/mixin/subclass_directive.rb +37 -0
- data/lib/chef/node.rb +13 -5
- data/lib/chef/platform/query_helpers.rb +14 -3
- data/lib/chef/platform/service_helpers.rb +20 -38
- data/lib/chef/policy_builder/expand_node_object.rb +3 -0
- data/lib/chef/policy_builder/policyfile.rb +1 -0
- data/lib/chef/property.rb +51 -12
- data/lib/chef/provider.rb +40 -35
- data/lib/chef/provider/deploy.rb +1 -1
- data/lib/chef/provider/dsc_resource.rb +54 -20
- data/lib/chef/provider/execute.rb +25 -4
- data/lib/chef/provider/group.rb +1 -1
- data/lib/chef/provider/lwrp_base.rb +1 -0
- data/lib/chef/provider/package.rb +76 -30
- data/lib/chef/provider/package/dpkg.rb +152 -69
- data/lib/chef/provider/package/openbsd.rb +6 -8
- data/lib/chef/provider/package/solaris.rb +2 -0
- data/lib/chef/provider/package/windows.rb +95 -14
- data/lib/chef/provider/package/windows/exe.rb +129 -0
- data/lib/chef/provider/package/windows/msi.rb +37 -13
- data/lib/chef/provider/package/windows/registry_uninstall_entry.rb +89 -0
- data/lib/chef/provider/package/yum.rb +13 -3
- data/lib/chef/provider/powershell_script.rb +3 -0
- data/lib/chef/provider/remote_file/cache_control_data.rb +37 -4
- data/lib/chef/provider/remote_file/http.rb +1 -1
- data/lib/chef/provider/script.rb +1 -0
- data/lib/chef/provider/service.rb +13 -10
- data/lib/chef/provider/service/solaris.rb +43 -17
- data/lib/chef/provider/service/upstart.rb +3 -3
- data/lib/chef/provider/user.rb +1 -1
- data/lib/chef/provider/user/dscl.rb +111 -100
- data/lib/chef/provider/user/windows.rb +5 -3
- data/lib/chef/recipe.rb +3 -5
- data/lib/chef/resource.rb +77 -320
- data/lib/chef/resource/action_class.rb +4 -0
- data/lib/chef/resource/dpkg_package.rb +4 -3
- data/lib/chef/resource/dsc_resource.rb +40 -2
- data/lib/chef/resource/execute.rb +9 -1
- data/lib/chef/resource/ksh.rb +32 -0
- data/lib/chef/resource/lwrp_base.rb +6 -10
- data/lib/chef/resource/package.rb +8 -9
- data/lib/chef/resource/registry_key.rb +1 -1
- data/lib/chef/resource/resource_notification.rb +14 -1
- data/lib/chef/resource/script.rb +1 -1
- data/lib/chef/resource/windows_package.rb +1 -1
- data/lib/chef/resource_builder.rb +14 -7
- data/lib/chef/resource_reporter.rb +6 -0
- data/lib/chef/resources.rb +1 -7
- data/lib/chef/rest.rb +1 -1
- data/lib/chef/run_context.rb +45 -2
- data/lib/chef/run_list/run_list_expansion.rb +47 -0
- data/lib/chef/runner.rb +25 -0
- data/lib/chef/search/query.rb +16 -2
- data/lib/chef/util/diff.rb +2 -2
- data/lib/chef/util/powershell/ps_credential.rb +2 -3
- data/lib/chef/version.rb +1 -1
- data/lib/chef/win32/api/file.rb +51 -1
- data/lib/chef/win32/file.rb +5 -0
- data/lib/chef/win32/file/version_info.rb +93 -0
- data/lib/chef/win32/mutex.rb +1 -1
- data/spec/data/apt/chef-integration-test2-1.0/debian/changelog +5 -0
- data/spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2.debhelper.log +45 -0
- data/spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2.substvars +1 -0
- data/spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2/DEBIAN/conffiles +1 -0
- data/spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2/DEBIAN/control +10 -0
- data/spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2/DEBIAN/md5sums +1 -0
- data/spec/data/apt/chef-integration-test2-1.0/debian/compat +1 -0
- data/spec/data/apt/chef-integration-test2-1.0/debian/conffiles +1 -0
- data/spec/data/apt/chef-integration-test2-1.0/debian/control +13 -0
- data/spec/data/apt/chef-integration-test2-1.0/debian/copyright +34 -0
- data/spec/data/apt/chef-integration-test2-1.0/debian/files +1 -0
- data/spec/data/apt/chef-integration-test2-1.0/debian/rules +13 -0
- data/spec/data/apt/chef-integration-test2-1.0/debian/source/format +1 -0
- data/spec/data/apt/chef-integration-test2_1.0-1.debian.tar.gz +0 -0
- data/spec/data/apt/chef-integration-test2_1.0-1.dsc +18 -0
- data/spec/data/apt/chef-integration-test2_1.0-1_amd64.build +91 -0
- data/spec/data/apt/chef-integration-test2_1.0-1_amd64.changes +31 -0
- data/spec/data/apt/chef-integration-test2_1.0-1_amd64.deb +0 -0
- data/spec/data/apt/chef-integration-test2_1.0.orig.tar.gz +0 -0
- data/spec/functional/application_spec.rb +1 -1
- data/spec/functional/audit/runner_spec.rb +4 -0
- data/spec/functional/knife/ssh_spec.rb +5 -5
- data/spec/functional/notifications_spec.rb +74 -4
- data/spec/functional/resource/aix_service_spec.rb +2 -2
- data/spec/functional/resource/dpkg_package_spec.rb +339 -0
- data/spec/functional/resource/ifconfig_spec.rb +3 -1
- data/spec/functional/resource/mount_spec.rb +5 -2
- data/spec/functional/resource/package_spec.rb +1 -1
- data/spec/functional/resource/user/windows_spec.rb +8 -0
- data/spec/functional/resource/windows_package_spec.rb +177 -0
- data/spec/functional/win32/version_info_spec.rb +50 -0
- data/spec/integration/client/client_spec.rb +80 -0
- data/spec/integration/knife/download_spec.rb +9 -0
- data/spec/integration/knife/upload_spec.rb +28 -1
- data/spec/integration/recipes/lwrp_inline_resources_spec.rb +93 -23
- data/spec/integration/recipes/resource_action_spec.rb +211 -116
- data/spec/integration/recipes/resource_converge_if_changed_spec.rb +72 -0
- data/spec/integration/solo/solo_spec.rb +34 -0
- data/spec/spec_helper.rb +11 -1
- data/spec/support/platform_helpers.rb +8 -0
- data/spec/support/shared/integration/integration_helper.rb +6 -0
- data/spec/support/shared/unit/execute_resource.rb +5 -0
- data/spec/support/shared/unit/platform_introspector.rb +7 -0
- data/spec/tiny_server.rb +6 -2
- data/spec/unit/api_client/registration_spec.rb +5 -4
- data/spec/unit/application_spec.rb +1 -181
- data/spec/unit/chef_fs/file_system/cookbook_subdir_spec.rb +34 -0
- data/spec/unit/cookbook/metadata_spec.rb +122 -2
- data/spec/unit/http_spec.rb +102 -0
- data/spec/unit/knife/bootstrap_spec.rb +55 -13
- data/spec/unit/knife/core/bootstrap_context_spec.rb +10 -3
- data/spec/unit/knife/ssl_check_spec.rb +7 -3
- data/spec/unit/knife/ssl_fetch_spec.rb +2 -2
- data/spec/unit/knife/status_spec.rb +13 -13
- data/spec/unit/knife_spec.rb +26 -2
- data/spec/unit/lwrp_spec.rb +1 -1
- data/spec/unit/mixin/properties_spec.rb +97 -0
- data/spec/unit/mixin/proxified_socket_spec.rb +94 -0
- data/spec/unit/mixin/subclass_directive_spec.rb +45 -0
- data/spec/unit/node_spec.rb +9 -1
- data/spec/unit/policy_builder/policyfile_spec.rb +2 -0
- data/spec/unit/property/validation_spec.rb +14 -12
- data/spec/unit/property_spec.rb +56 -0
- data/spec/unit/provider/deploy_spec.rb +1 -1
- data/spec/unit/provider/dsc_resource_spec.rb +63 -24
- data/spec/unit/provider/execute_spec.rb +95 -28
- data/spec/unit/provider/package/dpkg_spec.rb +185 -96
- data/spec/unit/provider/package/windows/exe_spec.rb +251 -0
- data/spec/unit/provider/package/windows/msi_spec.rb +94 -10
- data/spec/unit/provider/package/windows_spec.rb +227 -26
- data/spec/unit/provider/package/yum_spec.rb +6 -0
- data/spec/unit/provider/package_spec.rb +495 -366
- data/spec/unit/provider/remote_file/cache_control_data_spec.rb +62 -36
- data/spec/unit/provider/script_spec.rb +2 -2
- data/spec/unit/provider/service/solaris_smf_service_spec.rb +110 -39
- data/spec/unit/provider/service/upstart_service_spec.rb +19 -0
- data/spec/unit/provider/user/dscl_spec.rb +14 -0
- data/spec/unit/provider/user/windows_spec.rb +2 -2
- data/spec/unit/provider/user_spec.rb +9 -0
- data/spec/unit/provider_resolver_spec.rb +6 -30
- data/spec/unit/recipe_spec.rb +46 -20
- data/spec/unit/resource/chef_gem_spec.rb +1 -1
- data/spec/unit/resource/dsc_resource_spec.rb +14 -3
- data/spec/unit/resource/ksh_spec.rb +40 -0
- data/spec/unit/resource/registry_key_spec.rb +2 -2
- data/spec/unit/resource/resource_notification_spec.rb +44 -45
- data/spec/unit/resource_reporter_spec.rb +7 -0
- data/spec/unit/resource_spec.rb +268 -253
- data/spec/unit/rest_spec.rb +2 -2
- data/spec/unit/run_list/run_list_expansion_spec.rb +18 -3
- data/spec/unit/search/query_spec.rb +19 -1
- data/spec/unit/util/powershell/ps_credential_spec.rb +8 -1
- data/spec/unit/windows_service_spec.rb +83 -38
- data/tasks/external_tests.rb +19 -9
- data/tasks/rspec.rb +1 -1
- metadata +70 -21
- data/spec/support/pedant/Gemfile +0 -3
- data/spec/support/pedant/pedant_config.rb +0 -129
- data/spec/support/pedant/run_pedant.rb +0 -63
- data/spec/support/pedant/stickywicket.pem +0 -27
- data/spec/unit/provider/package_spec.rbe +0 -0
@@ -139,7 +139,7 @@ E
|
|
139
139
|
context "when the TLS connection is successful" do
|
140
140
|
|
141
141
|
before do
|
142
|
-
expect(
|
142
|
+
expect(ssl_fetch).to receive(:proxified_socket).with("foo.example.com", 8443).and_return(tcp_socket)
|
143
143
|
expect(OpenSSL::SSL::SSLSocket).to receive(:new).with(tcp_socket, ssl_fetch.noverify_peer_ssl_context).and_return(ssl_socket)
|
144
144
|
expect(ssl_socket).to receive(:connect)
|
145
145
|
expect(ssl_socket).to receive(:peer_cert_chain).and_return([self_signed_crt])
|
@@ -161,7 +161,7 @@ E
|
|
161
161
|
let(:unknown_protocol_error) { OpenSSL::SSL::SSLError.new("SSL_connect returned=1 errno=0 state=SSLv2/v3 read server hello A: unknown protocol") }
|
162
162
|
|
163
163
|
before do
|
164
|
-
expect(
|
164
|
+
expect(ssl_fetch).to receive(:proxified_socket).with("foo.example.com", 80).and_return(tcp_socket)
|
165
165
|
expect(OpenSSL::SSL::SSLSocket).to receive(:new).with(tcp_socket, ssl_fetch.noverify_peer_ssl_context).and_return(ssl_socket)
|
166
166
|
expect(ssl_socket).to receive(:connect).and_raise(unknown_protocol_error)
|
167
167
|
|
@@ -44,9 +44,9 @@ describe Chef::Knife::Status do
|
|
44
44
|
@knife.run
|
45
45
|
end
|
46
46
|
|
47
|
-
it "should filter
|
48
|
-
@knife.config[:
|
49
|
-
expect(@query).to receive(:search).with(:node, "NOT ohai_time:[
|
47
|
+
it "should filter by nodes older than some mins" do
|
48
|
+
@knife.config[:hide_by_mins] = 59
|
49
|
+
expect(@query).to receive(:search).with(:node, "NOT ohai_time:[1428569880 TO 1428573420]", opts)
|
50
50
|
@knife.run
|
51
51
|
end
|
52
52
|
|
@@ -56,10 +56,10 @@ describe Chef::Knife::Status do
|
|
56
56
|
@knife.run
|
57
57
|
end
|
58
58
|
|
59
|
-
it "should filter by environment and
|
59
|
+
it "should filter by environment and nodes older than some mins" do
|
60
60
|
@knife.config[:environment] = "production"
|
61
|
-
@knife.config[:
|
62
|
-
expect(@query).to receive(:search).with(:node, "chef_environment:production NOT ohai_time:[
|
61
|
+
@knife.config[:hide_by_mins] = 59
|
62
|
+
expect(@query).to receive(:search).with(:node, "chef_environment:production NOT ohai_time:[1428569880 TO 1428573420]", opts)
|
63
63
|
@knife.run
|
64
64
|
end
|
65
65
|
|
@@ -79,22 +79,22 @@ describe Chef::Knife::Status do
|
|
79
79
|
@knife.run
|
80
80
|
end
|
81
81
|
|
82
|
-
it "should filter
|
83
|
-
@knife.config[:
|
84
|
-
expect(@query).to receive(:search).with(:node, "name:my_custom_name NOT ohai_time:[
|
82
|
+
it "should filter by nodes older than some mins with nodename specified" do
|
83
|
+
@knife.config[:hide_by_mins] = 59
|
84
|
+
expect(@query).to receive(:search).with(:node, "name:my_custom_name NOT ohai_time:[1428569880 TO 1428573420]", opts)
|
85
85
|
@knife.run
|
86
86
|
end
|
87
87
|
|
88
|
-
it "should filter by environment" do
|
88
|
+
it "should filter by environment with nodename specified" do
|
89
89
|
@knife.config[:environment] = "production"
|
90
90
|
expect(@query).to receive(:search).with(:node, "name:my_custom_name AND chef_environment:production", opts)
|
91
91
|
@knife.run
|
92
92
|
end
|
93
93
|
|
94
|
-
it "should filter by environment and
|
94
|
+
it "should filter by environment and nodes older than some mins with nodename specified" do
|
95
95
|
@knife.config[:environment] = "production"
|
96
|
-
@knife.config[:
|
97
|
-
expect(@query).to receive(:search).with(:node, "name:my_custom_name AND chef_environment:production NOT ohai_time:[
|
96
|
+
@knife.config[:hide_by_mins] = 59
|
97
|
+
expect(@query).to receive(:search).with(:node, "name:my_custom_name AND chef_environment:production NOT ohai_time:[1428569880 TO 1428573420]", opts)
|
98
98
|
@knife.run
|
99
99
|
end
|
100
100
|
end
|
data/spec/unit/knife_spec.rb
CHANGED
@@ -33,7 +33,10 @@ describe Chef::Knife do
|
|
33
33
|
let(:config_location) { File.expand_path("~/.chef/config.rb") }
|
34
34
|
|
35
35
|
let(:config_loader) do
|
36
|
-
instance_double("WorkstationConfigLoader",
|
36
|
+
instance_double("WorkstationConfigLoader",
|
37
|
+
load: nil, no_config_found?: false,
|
38
|
+
config_location: config_location,
|
39
|
+
:chef_config_dir => "/etc/chef")
|
37
40
|
end
|
38
41
|
|
39
42
|
before(:each) do
|
@@ -60,6 +63,12 @@ describe Chef::Knife do
|
|
60
63
|
Chef::Knife.reset_config_loader!
|
61
64
|
end
|
62
65
|
|
66
|
+
it "does not reset Chef::Config[:verbosity to nil if config[:verbosity] is nil" do
|
67
|
+
Chef::Config[:verbosity] = 2
|
68
|
+
Chef::Knife.new
|
69
|
+
expect(Chef::Config[:verbosity]).to eq(2)
|
70
|
+
end
|
71
|
+
|
63
72
|
describe "after loading a subcommand" do
|
64
73
|
before do
|
65
74
|
Chef::Knife.reset_subcommands!
|
@@ -117,6 +126,14 @@ describe Chef::Knife do
|
|
117
126
|
expect(Chef::Knife.subcommands["super_awesome_command"]).to eq(SuperAwesomeCommand)
|
118
127
|
end
|
119
128
|
|
129
|
+
it "records the location of ChefFS-based commands correctly" do
|
130
|
+
class AwesomeCheffsCommand < Chef::ChefFS::Knife
|
131
|
+
end
|
132
|
+
|
133
|
+
Chef::Knife.load_commands
|
134
|
+
expect(Chef::Knife.subcommand_files["awesome_cheffs_command"]).to eq([__FILE__])
|
135
|
+
end
|
136
|
+
|
120
137
|
it "guesses a category from a given ARGV" do
|
121
138
|
Chef::Knife.subcommands_by_category["cookbook"] << :cookbook
|
122
139
|
Chef::Knife.subcommands_by_category["cookbook site"] << :cookbook_site
|
@@ -298,7 +315,7 @@ describe Chef::Knife do
|
|
298
315
|
expect(Chef::Config[:listen]).to be(false)
|
299
316
|
end
|
300
317
|
|
301
|
-
context "verbosity is
|
318
|
+
context "verbosity is one" do
|
302
319
|
let(:fake_config) { "/does/not/exist/knife.rb" }
|
303
320
|
|
304
321
|
before do
|
@@ -316,6 +333,13 @@ describe Chef::Knife do
|
|
316
333
|
knife.configure_chef
|
317
334
|
end
|
318
335
|
end
|
336
|
+
|
337
|
+
it "does not humanize the exception if Chef::Config[:verbosity] is two" do
|
338
|
+
Chef::Config[:verbosity] = 2
|
339
|
+
allow(knife).to receive(:run).and_raise(Exception)
|
340
|
+
expect(knife).not_to receive(:humanize_exception)
|
341
|
+
expect { knife.run_with_pretty_exceptions }.to raise_error(Exception)
|
342
|
+
end
|
319
343
|
end
|
320
344
|
end
|
321
345
|
|
data/spec/unit/lwrp_spec.rb
CHANGED
@@ -190,7 +190,7 @@ describe "LWRP" do
|
|
190
190
|
end
|
191
191
|
|
192
192
|
it "should have a class that outputs a reasonable string" do
|
193
|
-
expect(get_lwrp(:lwrp_foo).to_s).to eq "
|
193
|
+
expect(get_lwrp(:lwrp_foo).to_s).to eq "Custom resource lwrp_foo from cookbook lwrp"
|
194
194
|
end
|
195
195
|
|
196
196
|
it "should add the specified actions to the allowed_actions array" do
|
@@ -0,0 +1,97 @@
|
|
1
|
+
require 'support/shared/integration/integration_helper'
|
2
|
+
require 'chef/mixin/properties'
|
3
|
+
|
4
|
+
module ChefMixinPropertiesSpec
|
5
|
+
describe "Chef::Resource.property" do
|
6
|
+
include IntegrationSupport
|
7
|
+
|
8
|
+
context "with a base class A with properties a, ab, and ac" do
|
9
|
+
class A
|
10
|
+
include Chef::Mixin::Properties
|
11
|
+
property :a, 'a', default: 'a'
|
12
|
+
property :ab, ['a', 'b'], default: 'a'
|
13
|
+
property :ac, ['a', 'c'], default: 'a'
|
14
|
+
end
|
15
|
+
|
16
|
+
context "and a module B with properties b, ab and bc" do
|
17
|
+
module B
|
18
|
+
include Chef::Mixin::Properties
|
19
|
+
property :b, 'b', default: 'b'
|
20
|
+
property :ab, default: 'b'
|
21
|
+
property :bc, ['b', 'c'], default: 'c'
|
22
|
+
end
|
23
|
+
|
24
|
+
context "and a derived class C < A with properties c, ac and bc" do
|
25
|
+
class C < A
|
26
|
+
include B
|
27
|
+
property :c, 'c', default: 'c'
|
28
|
+
property :ac, default: 'c'
|
29
|
+
property :bc, default: 'c'
|
30
|
+
end
|
31
|
+
|
32
|
+
it "A.properties has a, ab, and ac with types 'a', ['a', 'b'], and ['b', 'c']" do
|
33
|
+
expect(A.properties.keys).to eq [ :a, :ab, :ac ]
|
34
|
+
expect(A.properties[:a].validation_options[:is]).to eq 'a'
|
35
|
+
expect(A.properties[:ab].validation_options[:is]).to eq [ 'a', 'b' ]
|
36
|
+
expect(A.properties[:ac].validation_options[:is]).to eq [ 'a', 'c' ]
|
37
|
+
end
|
38
|
+
it "B.properties has b, ab, and bc with types 'b', nil and ['b', 'c']" do
|
39
|
+
expect(B.properties.keys).to eq [ :b, :ab, :bc ]
|
40
|
+
expect(B.properties[:b].validation_options[:is]).to eq 'b'
|
41
|
+
expect(B.properties[:ab].validation_options[:is]).to be_nil
|
42
|
+
expect(B.properties[:bc].validation_options[:is]).to eq [ 'b', 'c' ]
|
43
|
+
end
|
44
|
+
it "C.properties has a, b, c, ac and bc with merged types" do
|
45
|
+
expect(C.properties.keys).to eq [ :a, :ab, :ac, :b, :bc, :c ]
|
46
|
+
expect(C.properties[:a].validation_options[:is]).to eq 'a'
|
47
|
+
expect(C.properties[:b].validation_options[:is]).to eq 'b'
|
48
|
+
expect(C.properties[:c].validation_options[:is]).to eq 'c'
|
49
|
+
expect(C.properties[:ac].validation_options[:is]).to eq [ 'a', 'c' ]
|
50
|
+
expect(C.properties[:bc].validation_options[:is]).to eq [ 'b', 'c' ]
|
51
|
+
end
|
52
|
+
it "C.properties has ab with a non-merged type (from B)" do
|
53
|
+
expect(C.properties[:ab].validation_options[:is]).to be_nil
|
54
|
+
end
|
55
|
+
|
56
|
+
context "and an instance of C" do
|
57
|
+
let(:c) { C.new }
|
58
|
+
|
59
|
+
it "all properties can be retrieved and merged properties default to ab->b, ac->c, bc->c" do
|
60
|
+
expect(c.a).to eq('a')
|
61
|
+
expect(c.b).to eq('b')
|
62
|
+
expect(c.c).to eq('c')
|
63
|
+
expect(c.ab).to eq('b')
|
64
|
+
expect(c.ac).to eq('c')
|
65
|
+
expect(c.bc).to eq('c')
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
context "with an Inner module" do
|
74
|
+
module Inner
|
75
|
+
include Chef::Mixin::Properties
|
76
|
+
property :inner
|
77
|
+
end
|
78
|
+
|
79
|
+
context "and an Outer module including it" do
|
80
|
+
module Outer
|
81
|
+
include Inner
|
82
|
+
property :outer
|
83
|
+
end
|
84
|
+
|
85
|
+
context "and an Outerest class including that" do
|
86
|
+
class Outerest
|
87
|
+
include Outer
|
88
|
+
property :outerest
|
89
|
+
end
|
90
|
+
|
91
|
+
it "Outerest.properties.validation_options[:is] inner, outer, outerest" do
|
92
|
+
expect(Outerest.properties.keys).to eq [:inner, :outer, :outerest]
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
@@ -0,0 +1,94 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Tyler Ball (<tball@chef.io>)
|
3
|
+
# Copyright:: Copyright (c) 2014 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
|
+
require "chef/mixin/proxified_socket"
|
21
|
+
require "proxifier/proxy"
|
22
|
+
|
23
|
+
class TestProxifiedSocket
|
24
|
+
include Chef::Mixin::ProxifiedSocket
|
25
|
+
end
|
26
|
+
|
27
|
+
describe Chef::Mixin::ProxifiedSocket do
|
28
|
+
|
29
|
+
before do
|
30
|
+
@original_env = ENV.to_hash
|
31
|
+
end
|
32
|
+
|
33
|
+
after do
|
34
|
+
ENV.clear
|
35
|
+
ENV.update(@original_env)
|
36
|
+
end
|
37
|
+
|
38
|
+
let(:host) { "host" }
|
39
|
+
let(:port) { 7979 }
|
40
|
+
let(:test_instance) { TestProxifiedSocket.new }
|
41
|
+
let(:socket_double) { instance_double(TCPSocket)}
|
42
|
+
let(:proxifier_double) { instance_double(Proxifier::Proxy) }
|
43
|
+
let(:http_uri) { "http://somehost:1" }
|
44
|
+
let(:https_uri) { "https://somehost:1" }
|
45
|
+
let(:no_proxy_spec) { nil }
|
46
|
+
|
47
|
+
shared_examples "proxified socket" do
|
48
|
+
it "wraps the Socket in a Proxifier::Proxy" do
|
49
|
+
expect(Proxifier).to receive(:Proxy).with(proxy_uri, no_proxy: no_proxy_spec).and_return(proxifier_double)
|
50
|
+
expect(proxifier_double).to receive(:open).with(host, port).and_return(socket_double)
|
51
|
+
expect(test_instance.proxified_socket(host, port)).to eq(socket_double)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
context "when no proxy is set" do
|
56
|
+
it "returns a plain TCPSocket" do
|
57
|
+
expect(TCPSocket).to receive(:new).with(host, port).and_return(socket_double)
|
58
|
+
expect(test_instance.proxified_socket(host, port)).to eq(socket_double)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
context "when https_proxy is set" do
|
63
|
+
before do
|
64
|
+
# I'm purposefully setting both of these because we prefer the https
|
65
|
+
# variable
|
66
|
+
ENV['https_proxy'] = https_uri
|
67
|
+
ENV['http_proxy'] = http_uri
|
68
|
+
end
|
69
|
+
|
70
|
+
let(:proxy_uri) { https_uri }
|
71
|
+
include_examples "proxified socket"
|
72
|
+
|
73
|
+
context "when no_proxy is set" do
|
74
|
+
# This is testing that no_proxy is also provided to Proxified
|
75
|
+
# when it is set
|
76
|
+
before do
|
77
|
+
ENV['no_proxy'] = no_proxy_spec
|
78
|
+
end
|
79
|
+
|
80
|
+
let(:no_proxy_spec) { "somehost1,somehost2" }
|
81
|
+
include_examples "proxified socket"
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
context "when http_proxy is set" do
|
86
|
+
before do
|
87
|
+
ENV['http_proxy'] = http_uri
|
88
|
+
end
|
89
|
+
|
90
|
+
let(:proxy_uri) { http_uri }
|
91
|
+
include_examples "proxified socket"
|
92
|
+
end
|
93
|
+
|
94
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
#
|
2
|
+
# Copyright:: Copyright (c) 2015 Chef 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
|
+
class SubclassDirectiveParent
|
21
|
+
extend Chef::Mixin::SubclassDirective
|
22
|
+
|
23
|
+
subclass_directive :behave_differently
|
24
|
+
end
|
25
|
+
|
26
|
+
class SubclassDirectiveChild < SubclassDirectiveParent
|
27
|
+
behave_differently
|
28
|
+
end
|
29
|
+
|
30
|
+
class ChildWithoutDirective < SubclassDirectiveParent
|
31
|
+
end
|
32
|
+
|
33
|
+
describe Chef::Mixin::Uris do
|
34
|
+
let (:child) { SubclassDirectiveChild.new }
|
35
|
+
|
36
|
+
let (:other_child) { ChildWithoutDirective.new }
|
37
|
+
|
38
|
+
it "the child instance has the directive set" do
|
39
|
+
expect(child.behave_differently?).to be true
|
40
|
+
end
|
41
|
+
|
42
|
+
it "a child that does not declare it does not have it set" do
|
43
|
+
expect(other_child.behave_differently?).to be false
|
44
|
+
end
|
45
|
+
end
|
data/spec/unit/node_spec.rb
CHANGED
@@ -42,6 +42,14 @@ describe Chef::Node do
|
|
42
42
|
expect([n3, n1, n2].sort).to eq([n1, n2, n3])
|
43
43
|
end
|
44
44
|
|
45
|
+
it "should share identity only with others of the same name" do
|
46
|
+
n1 = Chef::Node.build('foo')
|
47
|
+
n2 = Chef::Node.build('foo')
|
48
|
+
n3 = Chef::Node.build('bar')
|
49
|
+
expect(n1).to eq(n2)
|
50
|
+
expect(n1).not_to eq(n3)
|
51
|
+
end
|
52
|
+
|
45
53
|
describe "when the node does not exist on the server" do
|
46
54
|
before do
|
47
55
|
response = OpenStruct.new(:code => '404')
|
@@ -785,7 +793,7 @@ describe Chef::Node do
|
|
785
793
|
end
|
786
794
|
|
787
795
|
it "should not set the tags attribute to an empty array if it is already defined" do
|
788
|
-
node.
|
796
|
+
node.tag("radiohead")
|
789
797
|
node.consume_external_attrs(@ohai_data, {})
|
790
798
|
expect(node.tags).to eql([ "radiohead" ])
|
791
799
|
end
|
@@ -662,6 +662,7 @@ describe Chef::PolicyBuilder::Policyfile do
|
|
662
662
|
it "builds a run context" do
|
663
663
|
expect(cookbook_synchronizer).to receive(:sync_cookbooks)
|
664
664
|
expect_any_instance_of(Chef::RunContext).to receive(:load).with(policy_builder.run_list_expansion_ish)
|
665
|
+
expect_any_instance_of(Chef::CookbookCollection).to receive(:validate!)
|
665
666
|
run_context = policy_builder.setup_run_context
|
666
667
|
expect(run_context.node).to eq(node)
|
667
668
|
expect(run_context.cookbook_collection.keys).to match_array(["example1", "example2"])
|
@@ -670,6 +671,7 @@ describe Chef::PolicyBuilder::Policyfile do
|
|
670
671
|
it "makes the run context available via static method on Chef" do
|
671
672
|
expect(cookbook_synchronizer).to receive(:sync_cookbooks)
|
672
673
|
expect_any_instance_of(Chef::RunContext).to receive(:load).with(policy_builder.run_list_expansion_ish)
|
674
|
+
expect_any_instance_of(Chef::CookbookCollection).to receive(:validate!)
|
673
675
|
run_context = policy_builder.setup_run_context
|
674
676
|
expect(Chef.run_context).to eq(run_context)
|
675
677
|
end
|
@@ -137,12 +137,8 @@ describe "Chef::Resource.property validation" do
|
|
137
137
|
it "set to invalid value raises ValidationFailed" do
|
138
138
|
expect { resource.x 10 }.to raise_error Chef::Exceptions::ValidationFailed
|
139
139
|
end
|
140
|
-
it "set to nil emits
|
141
|
-
expect
|
142
|
-
Chef::Config[:treat_deprecation_warnings_as_errors] = false
|
143
|
-
resource.x 'str'
|
144
|
-
expect(resource.x nil).to eq 'str'
|
145
|
-
expect(resource.x).to eq 'str'
|
140
|
+
it "set to nil emits no warning because the value would not change" do
|
141
|
+
expect(resource.x nil).to be_nil
|
146
142
|
end
|
147
143
|
end
|
148
144
|
end
|
@@ -534,12 +530,18 @@ describe "Chef::Resource.property validation" do
|
|
534
530
|
expect(resource.x 1).to eq 1
|
535
531
|
expect(resource.x).to eq 1
|
536
532
|
end
|
537
|
-
it "value nil emits a
|
538
|
-
expect { resource.x nil }.to raise_error Chef::Exceptions::
|
539
|
-
|
540
|
-
|
541
|
-
|
542
|
-
|
533
|
+
it "value nil emits a validation failed error because it must have a value" do
|
534
|
+
expect { resource.x nil }.to raise_error Chef::Exceptions::ValidationFailed
|
535
|
+
end
|
536
|
+
context "and value is set to something other than nil" do
|
537
|
+
before { resource.x 10 }
|
538
|
+
it "value nil emits a deprecation warning and does a get" do
|
539
|
+
expect { resource.x nil }.to raise_error Chef::Exceptions::DeprecatedFeatureError
|
540
|
+
Chef::Config[:treat_deprecation_warnings_as_errors] = false
|
541
|
+
resource.x 1
|
542
|
+
expect(resource.x nil).to eq 1
|
543
|
+
expect(resource.x).to eq 1
|
544
|
+
end
|
543
545
|
end
|
544
546
|
end
|
545
547
|
|