chef 12.5.1 → 12.6.0
Sign up to get free protection for your applications and to get access to all the features.
- 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 +64 -15
- 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
@@ -70,6 +70,40 @@ EOM
|
|
70
70
|
end
|
71
71
|
end
|
72
72
|
|
73
|
+
when_the_repository "has a cookbook with an incompatible chef_version" do
|
74
|
+
before do
|
75
|
+
file 'cookbooks/x/metadata.rb', cb_metadata('x', '1.0.0', "\nchef_version '~> 999.0'")
|
76
|
+
file 'cookbooks/x/recipes/default.rb', 'puts "ITWORKS"'
|
77
|
+
file 'config/solo.rb', <<EOM
|
78
|
+
cookbook_path "#{path_to('cookbooks')}"
|
79
|
+
file_cache_path "#{path_to('config/cache')}"
|
80
|
+
EOM
|
81
|
+
end
|
82
|
+
|
83
|
+
it "should exit with an error" do
|
84
|
+
result = shell_out("#{chef_solo} -c \"#{path_to('config/solo.rb')}\" -o 'x::default' -l debug", :cwd => chef_dir)
|
85
|
+
expect(result.exitstatus).to eq(1)
|
86
|
+
expect(result.stdout).to include("Chef::Exceptions::CookbookChefVersionMismatch")
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
when_the_repository "has a cookbook with an incompatible ohai_version" do
|
91
|
+
before do
|
92
|
+
file 'cookbooks/x/metadata.rb', cb_metadata('x', '1.0.0', "\nohai_version '~> 999.0'")
|
93
|
+
file 'cookbooks/x/recipes/default.rb', 'puts "ITWORKS"'
|
94
|
+
file 'config/solo.rb', <<EOM
|
95
|
+
cookbook_path "#{path_to('cookbooks')}"
|
96
|
+
file_cache_path "#{path_to('config/cache')}"
|
97
|
+
EOM
|
98
|
+
end
|
99
|
+
|
100
|
+
it "should exit with an error" do
|
101
|
+
result = shell_out("#{chef_solo} -c \"#{path_to('config/solo.rb')}\" -o 'x::default' -l debug", :cwd => chef_dir)
|
102
|
+
expect(result.exitstatus).to eq(1)
|
103
|
+
expect(result.stdout).to include("Chef::Exceptions::CookbookOhaiVersionMismatch")
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
73
107
|
|
74
108
|
when_the_repository "has a cookbook with a recipe with sleep" do
|
75
109
|
before do
|
data/spec/spec_helper.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
#
|
2
2
|
# Author:: Adam Jacob (<adam@opscode.com>)
|
3
|
-
# Copyright:: Copyright (c) 2008
|
3
|
+
# Copyright:: Copyright (c) 2008-2015 Chef Software, Inc.
|
4
4
|
# License:: Apache License, Version 2.0
|
5
5
|
#
|
6
6
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
@@ -94,8 +94,10 @@ test_node.automatic['platform_family'] = (OHAI_SYSTEM['platform_family'] || 'unk
|
|
94
94
|
test_node.automatic['platform'] = (OHAI_SYSTEM['platform'] || 'unknown_platform').dup.freeze
|
95
95
|
test_node.automatic['platform_version'] = (OHAI_SYSTEM['platform_version'] || 'unknown_platform_version').dup.freeze
|
96
96
|
TEST_NODE = test_node.freeze
|
97
|
+
TEST_OS = TEST_NODE['os']
|
97
98
|
TEST_PLATFORM = TEST_NODE['platform']
|
98
99
|
TEST_PLATFORM_VERSION = TEST_NODE['platform_version']
|
100
|
+
TEST_PLATFORM_FAMILY = TEST_NODE['platform_family']
|
99
101
|
|
100
102
|
RSpec.configure do |config|
|
101
103
|
config.include(Matchers)
|
@@ -121,6 +123,7 @@ RSpec.configure do |config|
|
|
121
123
|
|
122
124
|
config.filter_run_excluding :skip_appveyor => true if ENV["APPVEYOR"]
|
123
125
|
config.filter_run_excluding :appveyor_only => true unless ENV["APPVEYOR"]
|
126
|
+
config.filter_run_excluding :skip_travis => true if ENV["TRAVIS"]
|
124
127
|
|
125
128
|
config.filter_run_excluding :windows_only => true unless windows?
|
126
129
|
config.filter_run_excluding :not_supported_on_mac_osx_106 => true if mac_osx_106?
|
@@ -144,6 +147,7 @@ RSpec.configure do |config|
|
|
144
147
|
config.filter_run_excluding :system_windows_service_gem_only => true unless system_windows_service_gem?
|
145
148
|
config.filter_run_excluding :unix_only => true unless unix?
|
146
149
|
config.filter_run_excluding :aix_only => true unless aix?
|
150
|
+
config.filter_run_excluding :debian_family_only => true unless debian_family?
|
147
151
|
config.filter_run_excluding :supports_cloexec => true unless supports_cloexec?
|
148
152
|
config.filter_run_excluding :selinux_only => true unless selinux_enabled?
|
149
153
|
config.filter_run_excluding :ruby_20_only => true unless ruby_20?
|
@@ -159,6 +163,7 @@ RSpec.configure do |config|
|
|
159
163
|
config.filter_run_excluding :openssl_lt_101 => true unless openssl_lt_101?
|
160
164
|
config.filter_run_excluding :aes_256_gcm_only => true unless aes_256_gcm?
|
161
165
|
config.filter_run_excluding :broken => true
|
166
|
+
config.filter_run_excluding :not_wpar => true unless wpar?
|
162
167
|
|
163
168
|
running_platform_arch = `uname -m`.strip unless windows?
|
164
169
|
|
@@ -200,6 +205,11 @@ RSpec.configure do |config|
|
|
200
205
|
ENV['CHEF_TREAT_DEPRECATION_WARNINGS_AS_ERRORS'] = "1"
|
201
206
|
end
|
202
207
|
|
208
|
+
# raise if anyone commits any test to CI with :focus set on it
|
209
|
+
config.before(:example, :focus) do
|
210
|
+
raise 'This example was committed with `:focus` and should not have been'
|
211
|
+
end if ENV['CI']
|
212
|
+
|
203
213
|
config.before(:suite) do
|
204
214
|
ARGV.clear
|
205
215
|
end
|
@@ -143,10 +143,18 @@ def freebsd?
|
|
143
143
|
!!(RUBY_PLATFORM =~ /freebsd/)
|
144
144
|
end
|
145
145
|
|
146
|
+
def debian_family?
|
147
|
+
!!(ohai[:platform_family] == "debian")
|
148
|
+
end
|
149
|
+
|
146
150
|
def aix?
|
147
151
|
!!(RUBY_PLATFORM =~ /aix/)
|
148
152
|
end
|
149
153
|
|
154
|
+
def wpar?
|
155
|
+
!((ohai[:virtualization] || {})[:wpar_no].nil?)
|
156
|
+
end
|
157
|
+
|
150
158
|
def supports_cloexec?
|
151
159
|
Fcntl.const_defined?('F_SETFD') && Fcntl.const_defined?('FD_CLOEXEC')
|
152
160
|
end
|
@@ -27,6 +27,12 @@ require 'support/shared/integration/app_server_support'
|
|
27
27
|
require 'cheffish/rspec/chef_run_support'
|
28
28
|
require 'spec_helper'
|
29
29
|
|
30
|
+
module Cheffish
|
31
|
+
class BasicChefClient
|
32
|
+
def_delegators :@run_context, :before_notifications
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
30
36
|
module IntegrationSupport
|
31
37
|
include ChefZero::RSpec
|
32
38
|
|
@@ -111,6 +111,11 @@ shared_examples_for "an execute resource" do
|
|
111
111
|
expect(@resource.creates).to eql("something")
|
112
112
|
end
|
113
113
|
|
114
|
+
it "should accept a boolean for live streaming" do
|
115
|
+
@resource.live_stream true
|
116
|
+
expect(@resource.live_stream).to be true
|
117
|
+
end
|
118
|
+
|
114
119
|
describe "when it has cwd, environment, group, path, return value, and a user" do
|
115
120
|
before do
|
116
121
|
@resource.command("grep")
|
@@ -32,6 +32,7 @@ shared_examples_for "a platform introspector" do
|
|
32
32
|
# The following @platform_hash keys are used for testing version constraints
|
33
33
|
@platform_hash['exact_match'] = { '1.2.3' => 'exact', '>= 1.0' => 'not exact'}
|
34
34
|
@platform_hash['multiple_matches'] = { '~> 2.3.4' => 'matched ~> 2.3.4', '>= 2.3' => 'matched >=2.3' }
|
35
|
+
@platform_hash['invalid_cookbook_version'] = {'>= 21' => 'Matches a single number'}
|
35
36
|
@platform_hash['successful_matches'] = { '< 3.0' => 'matched < 3.0', '>= 3.0' => 'matched >= 3.0' }
|
36
37
|
|
37
38
|
@platform_family_hash = {
|
@@ -95,6 +96,12 @@ shared_examples_for "a platform introspector" do
|
|
95
96
|
expect {platform_introspector.value_for_platform(@platform_hash)}.to raise_error(RuntimeError)
|
96
97
|
end
|
97
98
|
|
99
|
+
it 'should not require .0 to match >= 21.0' do
|
100
|
+
node.automatic_attrs[:platform] = 'invalid_cookbook_version'
|
101
|
+
node.automatic_attrs[:platform_version] = '21'
|
102
|
+
expect(platform_introspector.value_for_platform(@platform_hash)).to eq('Matches a single number')
|
103
|
+
end
|
104
|
+
|
98
105
|
it 'should return the value for that match' do
|
99
106
|
node.automatic_attrs[:platform] = 'successful_matches'
|
100
107
|
node.automatic_attrs[:platform_version] = '2.9'
|
data/spec/tiny_server.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
#
|
2
2
|
# Author:: Daniel DeLeo (<dan@opscode.com>)
|
3
|
-
# Copyright:: Copyright (c) 2010
|
3
|
+
# Copyright:: Copyright (c) 2010-2015 Chef Software, Inc.
|
4
4
|
# License:: Apache License, Version 2.0
|
5
5
|
#
|
6
6
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
@@ -66,9 +66,11 @@ module TinyServer
|
|
66
66
|
@server = Server.setup(@options) do
|
67
67
|
run API.instance
|
68
68
|
end
|
69
|
+
@old_handler = trap(:INT, "EXIT")
|
69
70
|
@server.start
|
70
71
|
end
|
71
72
|
block_until_started
|
73
|
+
trap(:INT, @old_handler)
|
72
74
|
end
|
73
75
|
|
74
76
|
def url
|
@@ -92,9 +94,11 @@ module TinyServer
|
|
92
94
|
true
|
93
95
|
rescue Errno::ECONNREFUSED, EOFError, Errno::ECONNRESET => e
|
94
96
|
sleep 0.1
|
97
|
+
true
|
95
98
|
# If the host has ":::1 localhost" in its hosts file and if IPv6
|
96
99
|
# is not enabled we can get NetworkUnreachable exception...
|
97
|
-
rescue Errno::ENETUNREACH
|
100
|
+
rescue Errno::ENETUNREACH, Net::ReadTimeout, IO::EAGAINWaitReadable,
|
101
|
+
Errno::EHOSTUNREACH => e
|
98
102
|
sleep 0.1
|
99
103
|
false
|
100
104
|
end
|
@@ -35,7 +35,7 @@ describe Chef::ApiClient::Registration do
|
|
35
35
|
File.open(Chef::Config[:validation_key], "r") {|f| f.read.chomp }
|
36
36
|
end
|
37
37
|
|
38
|
-
let(:http_mock) { double("Chef::
|
38
|
+
let(:http_mock) { double("Chef::ServerAPI mock") }
|
39
39
|
|
40
40
|
let(:expected_post_data) do
|
41
41
|
{ :name => client_name, :admin => false, :public_key => generated_public_key.to_pem }
|
@@ -93,9 +93,10 @@ describe Chef::ApiClient::Registration do
|
|
93
93
|
end
|
94
94
|
|
95
95
|
it "has an HTTP client configured with validator credentials" do
|
96
|
-
expect(registration.http_api).to be_a_kind_of(Chef::
|
97
|
-
expect(registration.http_api.client_name).to eq("test-validator")
|
98
|
-
|
96
|
+
expect(registration.http_api).to be_a_kind_of(Chef::ServerAPI)
|
97
|
+
expect(registration.http_api.options[:client_name]).to eq("test-validator")
|
98
|
+
auth = registration.http_api.middlewares.select { |klass| klass.kind_of? Chef::HTTP::Authenticator }.first
|
99
|
+
expect(auth.client_name).to eq("test-validator")
|
99
100
|
end
|
100
101
|
|
101
102
|
describe "when creating/updating the client on the server" do
|
@@ -39,7 +39,6 @@ describe Chef::Application do
|
|
39
39
|
@app = Chef::Application.new
|
40
40
|
allow(@app).to receive(:configure_chef).and_return(true)
|
41
41
|
allow(@app).to receive(:configure_logging).and_return(true)
|
42
|
-
allow(@app).to receive(:configure_proxy_environment_variables).and_return(true)
|
43
42
|
end
|
44
43
|
|
45
44
|
it "should configure chef" do
|
@@ -52,11 +51,6 @@ describe Chef::Application do
|
|
52
51
|
@app.reconfigure
|
53
52
|
end
|
54
53
|
|
55
|
-
it "should configure environment variables" do
|
56
|
-
expect(@app).to receive(:configure_proxy_environment_variables).and_return(true)
|
57
|
-
@app.reconfigure
|
58
|
-
end
|
59
|
-
|
60
54
|
it 'should not receive set_specific_recipes' do
|
61
55
|
expect(@app).to_not receive(:set_specific_recipes)
|
62
56
|
@app.reconfigure
|
@@ -101,6 +95,7 @@ describe Chef::Application do
|
|
101
95
|
@app = Chef::Application.new
|
102
96
|
#Chef::Config.stub(:merge!).and_return(true)
|
103
97
|
allow(@app).to receive(:parse_options).and_return(true)
|
98
|
+
expect(Chef::Config).to receive(:export_proxies).and_return(true)
|
104
99
|
end
|
105
100
|
|
106
101
|
it "should parse the commandline options" do
|
@@ -245,181 +240,6 @@ describe Chef::Application do
|
|
245
240
|
end
|
246
241
|
end
|
247
242
|
|
248
|
-
describe "when configuring environment variables" do
|
249
|
-
def configure_proxy_environment_variables_stubs
|
250
|
-
allow(@app).to receive(:configure_http_proxy).and_return(true)
|
251
|
-
allow(@app).to receive(:configure_https_proxy).and_return(true)
|
252
|
-
allow(@app).to receive(:configure_ftp_proxy).and_return(true)
|
253
|
-
allow(@app).to receive(:configure_no_proxy).and_return(true)
|
254
|
-
end
|
255
|
-
|
256
|
-
shared_examples_for "setting ENV['http_proxy']" do
|
257
|
-
before do
|
258
|
-
Chef::Config[:http_proxy] = http_proxy
|
259
|
-
end
|
260
|
-
|
261
|
-
it "should set ENV['http_proxy']" do
|
262
|
-
@app.configure_proxy_environment_variables
|
263
|
-
expect(@env['http_proxy']).to eq("#{scheme}://#{address}:#{port}")
|
264
|
-
end
|
265
|
-
|
266
|
-
it "should set ENV['HTTP_PROXY']" do
|
267
|
-
@app.configure_proxy_environment_variables
|
268
|
-
expect(@env['HTTP_PROXY']).to eq("#{scheme}://#{address}:#{port}")
|
269
|
-
end
|
270
|
-
|
271
|
-
describe "when Chef::Config[:http_proxy_user] is set" do
|
272
|
-
before do
|
273
|
-
Chef::Config[:http_proxy_user] = "username"
|
274
|
-
end
|
275
|
-
|
276
|
-
it "should set ENV['http_proxy'] with the username" do
|
277
|
-
@app.configure_proxy_environment_variables
|
278
|
-
expect(@env['http_proxy']).to eq("#{scheme}://username@#{address}:#{port}")
|
279
|
-
expect(@env['HTTP_PROXY']).to eq("#{scheme}://username@#{address}:#{port}")
|
280
|
-
end
|
281
|
-
|
282
|
-
context "when :http_proxy_user contains '@' and/or ':'" do
|
283
|
-
before do
|
284
|
-
Chef::Config[:http_proxy_user] = "my:usern@me"
|
285
|
-
end
|
286
|
-
|
287
|
-
it "should set ENV['http_proxy'] with the escaped username" do
|
288
|
-
@app.configure_proxy_environment_variables
|
289
|
-
expect(@env['http_proxy']).to eq("#{scheme}://my%3Ausern%40me@#{address}:#{port}")
|
290
|
-
expect(@env['HTTP_PROXY']).to eq("#{scheme}://my%3Ausern%40me@#{address}:#{port}")
|
291
|
-
end
|
292
|
-
end
|
293
|
-
|
294
|
-
describe "when Chef::Config[:http_proxy_pass] is set" do
|
295
|
-
before do
|
296
|
-
Chef::Config[:http_proxy_pass] = "password"
|
297
|
-
end
|
298
|
-
|
299
|
-
it "should set ENV['http_proxy'] with the password" do
|
300
|
-
@app.configure_proxy_environment_variables
|
301
|
-
expect(@env['http_proxy']).to eq("#{scheme}://username:password@#{address}:#{port}")
|
302
|
-
expect(@env['HTTP_PROXY']).to eq("#{scheme}://username:password@#{address}:#{port}")
|
303
|
-
end
|
304
|
-
|
305
|
-
context "when :http_proxy_pass contains '@' and/or ':'" do
|
306
|
-
before do
|
307
|
-
Chef::Config[:http_proxy_pass] = ":P@ssword101"
|
308
|
-
end
|
309
|
-
|
310
|
-
it "should set ENV['http_proxy'] with the escaped password" do
|
311
|
-
@app.configure_proxy_environment_variables
|
312
|
-
expect(@env['http_proxy']).to eq("#{scheme}://username:%3AP%40ssword101@#{address}:#{port}")
|
313
|
-
expect(@env['HTTP_PROXY']).to eq("#{scheme}://username:%3AP%40ssword101@#{address}:#{port}")
|
314
|
-
end
|
315
|
-
end
|
316
|
-
end
|
317
|
-
end
|
318
|
-
|
319
|
-
describe "when Chef::Config[:http_proxy_pass] is set (but not Chef::Config[:http_proxy_user])" do
|
320
|
-
before do
|
321
|
-
Chef::Config[:http_proxy_user] = nil
|
322
|
-
Chef::Config[:http_proxy_pass] = "password"
|
323
|
-
end
|
324
|
-
|
325
|
-
it "should set ENV['http_proxy']" do
|
326
|
-
@app.configure_proxy_environment_variables
|
327
|
-
expect(@env['http_proxy']).to eq("#{scheme}://#{address}:#{port}")
|
328
|
-
expect(@env['HTTP_PROXY']).to eq("#{scheme}://#{address}:#{port}")
|
329
|
-
end
|
330
|
-
end
|
331
|
-
end
|
332
|
-
|
333
|
-
describe "when configuring ENV['http_proxy']" do
|
334
|
-
before do
|
335
|
-
@env = {}
|
336
|
-
allow(@app).to receive(:env).and_return(@env)
|
337
|
-
|
338
|
-
allow(@app).to receive(:configure_https_proxy).and_return(true)
|
339
|
-
allow(@app).to receive(:configure_ftp_proxy).and_return(true)
|
340
|
-
allow(@app).to receive(:configure_no_proxy).and_return(true)
|
341
|
-
end
|
342
|
-
|
343
|
-
describe "when Chef::Config[:http_proxy] is not set" do
|
344
|
-
before do
|
345
|
-
Chef::Config[:http_proxy] = nil
|
346
|
-
end
|
347
|
-
|
348
|
-
it "should not set ENV['http_proxy']" do
|
349
|
-
@app.configure_proxy_environment_variables
|
350
|
-
expect(@env).to eq({})
|
351
|
-
end
|
352
|
-
end
|
353
|
-
|
354
|
-
describe "when Chef::Config[:http_proxy] is set" do
|
355
|
-
context "when given an FQDN" do
|
356
|
-
let(:scheme) { "http" }
|
357
|
-
let(:address) { "proxy.example.org" }
|
358
|
-
let(:port) { 8080 }
|
359
|
-
let(:http_proxy) { "#{scheme}://#{address}:#{port}" }
|
360
|
-
|
361
|
-
it_should_behave_like "setting ENV['http_proxy']"
|
362
|
-
end
|
363
|
-
|
364
|
-
context "when given an HTTPS URL" do
|
365
|
-
let(:scheme) { "https" }
|
366
|
-
let(:address) { "proxy.example.org" }
|
367
|
-
let(:port) { 8080 }
|
368
|
-
let(:http_proxy) { "#{scheme}://#{address}:#{port}" }
|
369
|
-
|
370
|
-
it_should_behave_like "setting ENV['http_proxy']"
|
371
|
-
end
|
372
|
-
|
373
|
-
context "when given an IP" do
|
374
|
-
let(:scheme) { "http" }
|
375
|
-
let(:address) { "127.0.0.1" }
|
376
|
-
let(:port) { 22 }
|
377
|
-
let(:http_proxy) { "#{scheme}://#{address}:#{port}" }
|
378
|
-
|
379
|
-
it_should_behave_like "setting ENV['http_proxy']"
|
380
|
-
end
|
381
|
-
|
382
|
-
context "when given an IPv6" do
|
383
|
-
let(:scheme) { "http" }
|
384
|
-
let(:address) { "[2001:db8::1]" }
|
385
|
-
let(:port) { 80 }
|
386
|
-
let(:http_proxy) { "#{scheme}://#{address}:#{port}" }
|
387
|
-
|
388
|
-
it_should_behave_like "setting ENV['http_proxy']"
|
389
|
-
end
|
390
|
-
|
391
|
-
context "when given without including http://" do
|
392
|
-
let(:scheme) { "http" }
|
393
|
-
let(:address) { "proxy.example.org" }
|
394
|
-
let(:port) { 8181 }
|
395
|
-
let(:http_proxy) { "#{address}:#{port}" }
|
396
|
-
|
397
|
-
it_should_behave_like "setting ENV['http_proxy']"
|
398
|
-
end
|
399
|
-
|
400
|
-
context "when given the full proxy in :http_proxy only" do
|
401
|
-
before do
|
402
|
-
Chef::Config[:http_proxy] = "http://username:password@proxy.example.org:2222"
|
403
|
-
Chef::Config[:http_proxy_user] = nil
|
404
|
-
Chef::Config[:http_proxy_pass] = nil
|
405
|
-
end
|
406
|
-
|
407
|
-
it "should set ENV['http_proxy']" do
|
408
|
-
@app.configure_proxy_environment_variables
|
409
|
-
expect(@env['http_proxy']).to eq(Chef::Config[:http_proxy])
|
410
|
-
end
|
411
|
-
end
|
412
|
-
|
413
|
-
context "when the config options aren't URI compliant" do
|
414
|
-
it "raises Chef::Exceptions::BadProxyURI" do
|
415
|
-
Chef::Config[:http_proxy] = "http://proxy.bad_example.org/:8080"
|
416
|
-
expect { @app.configure_proxy_environment_variables }.to raise_error(Chef::Exceptions::BadProxyURI)
|
417
|
-
end
|
418
|
-
end
|
419
|
-
end
|
420
|
-
end
|
421
|
-
end
|
422
|
-
|
423
243
|
describe "class method: fatal!" do
|
424
244
|
before do
|
425
245
|
allow(STDERR).to receive(:puts).with("FATAL: blah").and_return(true)
|
@@ -0,0 +1,34 @@
|
|
1
|
+
#
|
2
|
+
# Author:: John Keiser (<jkeiser@opscode.com>)
|
3
|
+
# Copyright:: Copyright (c) 2012 Opscode, 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/chef_fs/file_system/cookbook_subdir'
|
21
|
+
|
22
|
+
describe Chef::ChefFS::FileSystem::CookbookSubdir do
|
23
|
+
let(:root) do
|
24
|
+
Chef::ChefFS::FileSystem::BaseFSDir.new('', nil)
|
25
|
+
end
|
26
|
+
|
27
|
+
let(:cookbook_subdir) do
|
28
|
+
Chef::ChefFS::FileSystem::CookbookSubdir.new('test', root, false, true)
|
29
|
+
end
|
30
|
+
|
31
|
+
it 'can get child' do
|
32
|
+
cookbook_subdir.child('test')
|
33
|
+
end
|
34
|
+
end
|