microwave 1.0.4 → 11.400.2
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.
- data/CONTRIBUTING.md +155 -0
- data/README.md +89 -0
- data/Rakefile +2 -2
- data/bin/chef-apply +25 -0
- data/bin/chef-shell +34 -0
- data/bin/chef-solo +0 -2
- data/bin/shef +6 -5
- data/lib/chef.rb +2 -4
- data/spec/data/big_json.json +2 -1
- data/spec/data/big_json_plus_one.json +2 -1
- data/spec/data/cookbooks/chefignore +2 -0
- data/spec/data/cookbooks/openldap/attributes/default.rb +10 -9
- data/spec/data/cookbooks/openldap/attributes/smokey.rb +1 -1
- data/spec/data/git_bundles/sinatra-test-app-with-callback-files.gitbundle +0 -0
- data/spec/data/git_bundles/sinatra-test-app-with-symlinks.gitbundle +0 -0
- data/spec/data/git_bundles/sinatra-test-app.gitbundle +0 -0
- data/spec/data/lwrp/providers/inline_compiler.rb +26 -0
- data/spec/data/nodes/default.rb +3 -3
- data/spec/data/nodes/test.example.com.rb +3 -3
- data/spec/data/nodes/test.rb +3 -3
- data/spec/data/partial_one.erb +1 -0
- data/spec/data/run_context/cookbooks/circular-dep1/attributes/default.rb +4 -0
- data/spec/data/run_context/cookbooks/circular-dep1/definitions/circular_dep1_res.rb +1 -0
- data/spec/data/run_context/cookbooks/circular-dep1/libraries/lib.rb +2 -0
- data/spec/data/run_context/cookbooks/circular-dep1/metadata.rb +2 -0
- data/spec/data/run_context/cookbooks/circular-dep1/providers/provider.rb +1 -0
- data/spec/data/run_context/cookbooks/circular-dep1/recipes/default.rb +0 -0
- data/spec/data/run_context/cookbooks/circular-dep1/resources/resource.rb +1 -0
- data/spec/data/run_context/cookbooks/circular-dep2/attributes/default.rb +3 -0
- data/spec/data/run_context/cookbooks/circular-dep2/definitions/circular_dep2_res.rb +1 -0
- data/spec/data/run_context/cookbooks/circular-dep2/libraries/lib.rb +2 -0
- data/spec/data/run_context/cookbooks/circular-dep2/metadata.rb +2 -0
- data/spec/data/run_context/cookbooks/circular-dep2/providers/provider.rb +1 -0
- data/spec/data/run_context/cookbooks/circular-dep2/recipes/default.rb +0 -0
- data/spec/data/run_context/cookbooks/circular-dep2/resources/resource.rb +1 -0
- data/spec/data/run_context/cookbooks/dependency1/attributes/aa_first.rb +2 -0
- data/spec/data/run_context/cookbooks/dependency1/attributes/default.rb +2 -0
- data/spec/data/run_context/cookbooks/dependency1/attributes/zz_last.rb +3 -0
- data/spec/data/run_context/cookbooks/dependency1/definitions/dependency1_res.rb +1 -0
- data/spec/data/run_context/cookbooks/dependency1/libraries/lib.rb +2 -0
- data/spec/data/run_context/cookbooks/dependency1/providers/provider.rb +1 -0
- data/spec/data/run_context/cookbooks/dependency1/recipes/default.rb +0 -0
- data/spec/data/run_context/cookbooks/dependency1/resources/resource.rb +1 -0
- data/spec/data/run_context/cookbooks/dependency2/attributes/default.rb +3 -0
- data/spec/data/run_context/cookbooks/dependency2/definitions/dependency2_res.rb +1 -0
- data/spec/data/run_context/cookbooks/dependency2/libraries/lib.rb +2 -0
- data/spec/data/run_context/cookbooks/dependency2/providers/provider.rb +1 -0
- data/spec/data/run_context/cookbooks/dependency2/recipes/default.rb +0 -0
- data/spec/data/run_context/cookbooks/dependency2/resources/resource.rb +1 -0
- data/spec/data/run_context/cookbooks/no-default-attr/attributes/server.rb +3 -0
- data/spec/data/run_context/cookbooks/no-default-attr/definitions/no_default-attr_res.rb +1 -0
- data/spec/data/run_context/cookbooks/no-default-attr/providers/provider.rb +1 -0
- data/spec/data/run_context/cookbooks/no-default-attr/recipes/default.rb +0 -0
- data/spec/data/run_context/cookbooks/no-default-attr/resources/resource.rb +1 -0
- data/spec/data/run_context/cookbooks/test-with-circular-deps/attributes/default.rb +3 -0
- data/spec/data/run_context/cookbooks/test-with-circular-deps/definitions/test_with-circular-deps_res.rb +1 -0
- data/spec/data/run_context/cookbooks/test-with-circular-deps/libraries/lib.rb +2 -0
- data/spec/data/run_context/cookbooks/test-with-circular-deps/metadata.rb +2 -0
- data/spec/data/run_context/cookbooks/test-with-circular-deps/providers/provider.rb +1 -0
- data/spec/data/run_context/cookbooks/test-with-circular-deps/recipes/default.rb +0 -0
- data/spec/data/run_context/cookbooks/test-with-circular-deps/resources/resource.rb +1 -0
- data/spec/data/run_context/cookbooks/test-with-deps/attributes/default.rb +3 -0
- data/spec/data/run_context/cookbooks/test-with-deps/definitions/test_with-deps_res.rb +1 -0
- data/spec/data/run_context/cookbooks/test-with-deps/libraries/lib.rb +1 -0
- data/spec/data/run_context/cookbooks/test-with-deps/metadata.rb +3 -0
- data/spec/data/run_context/cookbooks/test-with-deps/providers/provider.rb +1 -0
- data/spec/data/run_context/cookbooks/test-with-deps/recipes/default.rb +0 -0
- data/spec/data/run_context/cookbooks/test-with-deps/recipes/server.rb +0 -0
- data/spec/data/run_context/cookbooks/test-with-deps/resources/resource.rb +1 -0
- data/spec/data/run_context/cookbooks/test/attributes/default.rb +0 -0
- data/spec/data/run_context/cookbooks/test/attributes/george.rb +1 -1
- data/spec/data/run_context/cookbooks/test/definitions/test_res.rb +1 -0
- data/spec/data/run_context/cookbooks/test/providers/provider.rb +1 -0
- data/spec/data/run_context/cookbooks/test/resources/resource.rb +1 -0
- data/spec/data/shef-config.rb +10 -0
- data/spec/functional/dsl/registry_helper_spec.rb +63 -0
- data/spec/functional/knife/cookbook_delete_spec.rb +0 -2
- data/spec/functional/knife/exec_spec.rb +4 -6
- data/spec/functional/knife/smoke_test.rb +34 -0
- data/spec/functional/knife/ssh_spec.rb +64 -3
- data/spec/functional/resource/cookbook_file_spec.rb +33 -2
- data/spec/functional/resource/deploy_revision_spec.rb +515 -0
- data/spec/functional/resource/directory_spec.rb +4 -0
- data/spec/functional/resource/file_spec.rb +56 -22
- data/spec/functional/resource/link_spec.rb +12 -10
- data/spec/functional/resource/registry_spec.rb +572 -0
- data/spec/functional/resource/remote_directory_spec.rb +142 -36
- data/spec/functional/resource/remote_file_spec.rb +28 -3
- data/spec/functional/resource/template_spec.rb +23 -2
- data/spec/functional/run_lock_spec.rb +238 -0
- data/spec/functional/shell_spec.rb +101 -0
- data/spec/functional/tiny_server_spec.rb +5 -4
- data/spec/functional/win32/registry_helper_spec.rb +632 -0
- data/spec/functional/win32/security_spec.rb +37 -0
- data/spec/spec_helper.rb +15 -3
- data/spec/stress/win32/security_spec.rb +5 -5
- data/spec/support/chef_helpers.rb +14 -3
- data/spec/support/lib/chef/resource/cat.rb +3 -5
- data/spec/support/lib/chef/resource/one_two_three_four.rb +8 -10
- data/spec/support/lib/chef/resource/zen_master.rb +8 -10
- data/spec/support/matchers/leak.rb +1 -1
- data/spec/support/platform_helpers.rb +18 -0
- data/spec/support/shared/functional/directory_resource.rb +85 -23
- data/spec/support/shared/functional/file_resource.rb +198 -53
- data/spec/support/shared/functional/securable_resource.rb +140 -105
- data/spec/support/shared/functional/securable_resource_with_reporting.rb +375 -0
- data/spec/support/shared/unit/file_system_support.rb +110 -0
- data/spec/support/shared/unit/platform_introspector.rb +162 -0
- data/spec/tiny_server.rb +29 -10
- data/spec/unit/api_client/registration_spec.rb +172 -0
- data/spec/unit/api_client_spec.rb +156 -103
- data/spec/unit/application/apply.rb +84 -0
- data/spec/unit/application/knife_spec.rb +5 -0
- data/spec/unit/application_spec.rb +57 -2
- data/spec/unit/chef_fs/diff_spec.rb +329 -0
- data/spec/unit/chef_fs/file_pattern_spec.rb +526 -0
- data/spec/unit/chef_fs/file_system/chef_server_root_dir_spec.rb +237 -0
- data/spec/unit/chef_fs/file_system/cookbooks_dir_spec.rb +568 -0
- data/spec/unit/chef_fs/file_system/data_bags_dir_spec.rb +220 -0
- data/spec/unit/chef_fs/file_system_spec.rb +136 -0
- data/spec/unit/client_spec.rb +188 -16
- data/spec/unit/config_spec.rb +54 -4
- data/spec/unit/cookbook/chefignore_spec.rb +2 -1
- data/spec/unit/cookbook/syntax_check_spec.rb +48 -109
- data/spec/unit/cookbook_loader_spec.rb +153 -91
- data/spec/unit/cookbook_manifest_spec.rb +81 -81
- data/spec/unit/cookbook_spec.rb +3 -20
- data/spec/unit/cookbook_version_spec.rb +23 -122
- data/spec/unit/digester_spec.rb +50 -0
- data/spec/unit/dsl/data_query_spec.rb +66 -0
- data/spec/unit/dsl/platform_introspection_spec.rb +130 -0
- data/spec/unit/dsl/regsitry_helper_spec.rb +55 -0
- data/spec/unit/encrypted_data_bag_item_spec.rb +126 -10
- data/spec/unit/environment_spec.rb +0 -130
- data/spec/unit/exceptions_spec.rb +2 -3
- data/spec/unit/formatters/error_inspectors/resource_failure_inspector_spec.rb +23 -3
- data/spec/unit/json_compat_spec.rb +69 -0
- data/spec/unit/knife/bootstrap_spec.rb +81 -28
- data/spec/unit/knife/client_reregister_spec.rb +23 -22
- data/spec/unit/knife/configure_spec.rb +29 -26
- data/spec/unit/knife/cookbook_metadata_spec.rb +11 -4
- data/spec/unit/knife/cookbook_site_install_spec.rb +12 -2
- data/spec/unit/knife/cookbook_test_spec.rb +1 -0
- data/spec/unit/knife/cookbook_upload_spec.rb +41 -2
- data/spec/unit/knife/core/bootstrap_context_spec.rb +8 -1
- data/spec/unit/knife/core/ui_spec.rb +156 -7
- data/spec/unit/knife/data_bag_create_spec.rb +14 -0
- data/spec/unit/knife/data_bag_edit_spec.rb +14 -4
- data/spec/unit/knife/data_bag_from_file_spec.rb +17 -5
- data/spec/unit/knife/data_bag_show_spec.rb +11 -4
- data/spec/unit/knife/index_rebuild_spec.rb +96 -33
- data/spec/unit/knife/knife_help.rb +7 -7
- data/spec/unit/knife/node_run_list_remove_spec.rb +2 -1
- data/spec/unit/knife/ssh_spec.rb +121 -15
- data/spec/unit/knife/status_spec.rb +2 -2
- data/spec/unit/knife/user_create_spec.rb +86 -0
- data/spec/unit/knife/user_delete_spec.rb +39 -0
- data/spec/unit/knife/user_edit_spec.rb +42 -0
- data/spec/unit/knife/user_list_spec.rb +32 -0
- data/spec/unit/knife/user_reregister_spec.rb +53 -0
- data/spec/unit/knife/user_show_spec.rb +41 -0
- data/spec/unit/knife_spec.rb +53 -0
- data/spec/unit/lwrp_spec.rb +59 -17
- data/spec/unit/mixin/checksum_spec.rb +2 -2
- data/spec/unit/mixin/deep_merge_spec.rb +56 -491
- data/spec/unit/mixin/deprecation_spec.rb +23 -0
- data/spec/unit/mixin/enforce_ownership_and_permissions_spec.rb +6 -1
- data/spec/unit/mixin/params_validate_spec.rb +4 -2
- data/spec/unit/mixin/securable_spec.rb +5 -3
- data/spec/unit/mixin/template_spec.rb +119 -0
- data/spec/unit/node/attribute_spec.rb +272 -137
- data/spec/unit/node/immutable_collections_spec.rb +139 -0
- data/spec/unit/node_spec.rb +411 -339
- data/spec/unit/platform_spec.rb +8 -8
- data/spec/unit/provider/breakpoint_spec.rb +8 -8
- data/spec/unit/provider/cookbook_file_spec.rb +4 -8
- data/spec/unit/provider/deploy/revision_spec.rb +2 -8
- data/spec/unit/provider/deploy_spec.rb +6 -40
- data/spec/unit/provider/directory_spec.rb +103 -68
- data/spec/unit/provider/erl_call_spec.rb +0 -2
- data/spec/unit/provider/file_spec.rb +69 -59
- data/spec/unit/provider/git_spec.rb +0 -10
- data/spec/unit/provider/group/groupadd_spec.rb +1 -1
- data/spec/unit/provider/group/usermod_spec.rb +2 -2
- data/spec/unit/provider/http_request_spec.rb +28 -69
- data/spec/unit/provider/ifconfig_spec.rb +2 -2
- data/spec/unit/provider/link_spec.rb +1 -1
- data/spec/unit/provider/ohai_spec.rb +4 -4
- data/spec/unit/provider/package/apt_spec.rb +0 -1
- data/spec/unit/provider/package/ips_spec.rb +0 -1
- data/spec/unit/provider/package/rubygems_spec.rb +0 -18
- data/spec/unit/provider/package/yum_spec.rb +79 -15
- data/spec/unit/provider/package_spec.rb +7 -5
- data/spec/unit/provider/registry_key_spec.rb +269 -0
- data/spec/unit/provider/remote_directory_spec.rb +24 -7
- data/spec/unit/provider/remote_file_spec.rb +36 -0
- data/spec/unit/provider/route_spec.rb +3 -6
- data/spec/unit/provider/ruby_block_spec.rb +8 -0
- data/spec/unit/provider/service/arch_service_spec.rb +4 -4
- data/spec/unit/provider/service/debian_service_spec.rb +1 -1
- data/spec/unit/provider/service/freebsd_service_spec.rb +4 -4
- data/spec/unit/provider/service/init_service_spec.rb +26 -3
- data/spec/unit/provider/service/insserv_service_spec.rb +1 -1
- data/spec/unit/provider/service/invokercd_service_spec.rb +3 -3
- data/spec/unit/provider/service/redhat_spec.rb +1 -1
- data/spec/unit/provider/service/simple_service_spec.rb +3 -3
- data/spec/unit/provider/service/upstart_service_spec.rb +7 -7
- data/spec/unit/provider/service_spec.rb +2 -2
- data/spec/unit/provider/subversion_spec.rb +1 -1
- data/spec/unit/provider/template_spec.rb +35 -11
- data/spec/unit/provider/user/dscl_spec.rb +57 -31
- data/spec/unit/provider/user_spec.rb +7 -16
- data/spec/unit/provider_spec.rb +4 -3
- data/spec/unit/recipe_spec.rb +10 -8
- data/spec/unit/registry_helper_spec.rb +376 -0
- data/spec/unit/resource/log_spec.rb +9 -0
- data/spec/unit/resource/registry_key_spec.rb +171 -0
- data/spec/unit/resource/remote_file_spec.rb +21 -23
- data/spec/unit/resource/ruby_block_spec.rb +7 -3
- data/spec/unit/resource/service_spec.rb +11 -0
- data/spec/unit/resource_spec.rb +27 -4
- data/spec/unit/rest/auth_credentials_spec.rb +2 -14
- data/spec/unit/rest_spec.rb +122 -187
- data/spec/unit/run_context/cookbook_compiler_spec.rb +181 -0
- data/spec/unit/run_context_spec.rb +18 -4
- data/spec/unit/run_list_spec.rb +0 -209
- data/spec/unit/run_lock_spec.rb +37 -0
- data/spec/unit/runner_spec.rb +101 -2
- data/spec/unit/scan_access_control_spec.rb +4 -4
- data/spec/unit/{shef → shell}/model_wrapper_spec.rb +5 -5
- data/spec/unit/{shef/shef_ext_spec.rb → shell/shell_ext_spec.rb} +21 -21
- data/spec/unit/{shef/shef_session_spec.rb → shell/shell_session_spec.rb} +12 -12
- data/spec/unit/shell_out_spec.rb +18 -0
- data/spec/unit/{shef_spec.rb → shell_spec.rb} +20 -20
- data/spec/unit/user_spec.rb +255 -0
- metadata +162 -157
- data/README.rdoc +0 -177
- data/spec/unit/certificate_spec.rb +0 -76
- data/spec/unit/checksum_cache_spec.rb +0 -209
- data/spec/unit/checksum_spec.rb +0 -94
- data/spec/unit/couchdb_spec.rb +0 -274
- data/spec/unit/index_queue_spec.rb +0 -391
- data/spec/unit/json_compat_spect.rb +0 -53
- data/spec/unit/mixin/language_spec.rb +0 -305
- data/spec/unit/openid_registration_spec.rb +0 -153
- data/spec/unit/solr_query/query_transform_spec.rb +0 -454
- data/spec/unit/solr_query/solr_http_request_spec.rb +0 -244
- data/spec/unit/solr_query_spec.rb +0 -203
- data/spec/unit/webui_user_spec.rb +0 -238
@@ -0,0 +1,220 @@
|
|
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/chef_server_root_dir'
|
21
|
+
|
22
|
+
describe Chef::ChefFS::FileSystem::DataBagsDir do
|
23
|
+
let(:root_dir) {
|
24
|
+
Chef::ChefFS::FileSystem::ChefServerRootDir.new('remote',
|
25
|
+
{
|
26
|
+
:chef_server_url => 'url',
|
27
|
+
:node_name => 'username',
|
28
|
+
:client_key => 'key'
|
29
|
+
}, 'everything')
|
30
|
+
}
|
31
|
+
let(:data_bags_dir) { root_dir.child('data_bags') }
|
32
|
+
let(:should_list_data_bags) do
|
33
|
+
@rest.should_receive(:get_rest).with('data').once.and_return(
|
34
|
+
{
|
35
|
+
"achild" => "http://opscode.com/achild",
|
36
|
+
"bchild" => "http://opscode.com/bchild"
|
37
|
+
})
|
38
|
+
end
|
39
|
+
before(:each) do
|
40
|
+
@rest = double("rest")
|
41
|
+
Chef::REST.stub(:new).with('url','username','key') { @rest }
|
42
|
+
end
|
43
|
+
|
44
|
+
it 'has / as parent' do
|
45
|
+
data_bags_dir.parent.should == root_dir
|
46
|
+
end
|
47
|
+
it 'is a directory' do
|
48
|
+
data_bags_dir.dir?.should be_true
|
49
|
+
end
|
50
|
+
it 'exists' do
|
51
|
+
data_bags_dir.exists?.should be_true
|
52
|
+
end
|
53
|
+
it 'has name data_bags' do
|
54
|
+
data_bags_dir.name.should == 'data_bags'
|
55
|
+
end
|
56
|
+
it 'has path /data_bags' do
|
57
|
+
data_bags_dir.path.should == '/data_bags'
|
58
|
+
end
|
59
|
+
it 'has path_for_printing remote/data_bags' do
|
60
|
+
data_bags_dir.path_for_printing.should == 'remote/data_bags'
|
61
|
+
end
|
62
|
+
it 'has correct children' do
|
63
|
+
should_list_data_bags
|
64
|
+
data_bags_dir.children.map { |child| child.name }.should =~ %w(achild bchild)
|
65
|
+
end
|
66
|
+
it 'can have directories as children' do
|
67
|
+
data_bags_dir.can_have_child?('blah', true).should be_true
|
68
|
+
end
|
69
|
+
it 'cannot have files as children' do
|
70
|
+
data_bags_dir.can_have_child?('blah', false).should be_false
|
71
|
+
end
|
72
|
+
|
73
|
+
shared_examples_for 'a data bag item' do
|
74
|
+
it 'has data bag as parent' do
|
75
|
+
data_bag_item.parent.should == data_bag_dir
|
76
|
+
end
|
77
|
+
it 'is not a directory' do
|
78
|
+
data_bag_item.dir?.should be_false
|
79
|
+
end
|
80
|
+
it 'exists' do
|
81
|
+
should_list_data_bag_items
|
82
|
+
data_bag_item.exists?.should be_true
|
83
|
+
end
|
84
|
+
it 'has correct name' do
|
85
|
+
data_bag_item.name.should == data_bag_item_name
|
86
|
+
end
|
87
|
+
it 'has correct path' do
|
88
|
+
data_bag_item.path.should == "/data_bags/#{data_bag_dir_name}/#{data_bag_item_name}"
|
89
|
+
end
|
90
|
+
it 'has correct path_for_printing' do
|
91
|
+
data_bag_item.path_for_printing.should == "remote/data_bags/#{data_bag_dir_name}/#{data_bag_item_name}"
|
92
|
+
end
|
93
|
+
it 'reads correctly' do
|
94
|
+
@rest.should_receive(:get_rest).with("data/#{data_bag_dir_name}/#{data_bag_item_short_name}").once.and_return({
|
95
|
+
'a' => 'b'
|
96
|
+
})
|
97
|
+
data_bag_item.read.should == '{
|
98
|
+
"a": "b"
|
99
|
+
}'
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
shared_examples_for 'a data bag' do
|
104
|
+
let(:should_list_data_bag_items) do
|
105
|
+
@rest.should_receive(:get_rest).with("data/#{data_bag_dir_name}").once.and_return(
|
106
|
+
{
|
107
|
+
"aitem" => "http://opscode.com/achild",
|
108
|
+
"bitem" => "http://opscode.com/bchild"
|
109
|
+
})
|
110
|
+
end
|
111
|
+
it 'has /data as a parent' do
|
112
|
+
data_bag_dir.parent.should == data_bags_dir
|
113
|
+
end
|
114
|
+
it 'is a directory' do
|
115
|
+
should_list_data_bags
|
116
|
+
data_bag_dir.dir?.should be_true
|
117
|
+
end
|
118
|
+
it 'exists' do
|
119
|
+
should_list_data_bags
|
120
|
+
data_bag_dir.exists?.should be_true
|
121
|
+
end
|
122
|
+
it 'has correct name' do
|
123
|
+
data_bag_dir.name.should == data_bag_dir_name
|
124
|
+
end
|
125
|
+
it 'has correct path' do
|
126
|
+
data_bag_dir.path.should == "/data_bags/#{data_bag_dir_name}"
|
127
|
+
end
|
128
|
+
it 'has correct path_for_printing' do
|
129
|
+
data_bag_dir.path_for_printing.should == "remote/data_bags/#{data_bag_dir_name}"
|
130
|
+
end
|
131
|
+
it 'has correct children' do
|
132
|
+
should_list_data_bag_items
|
133
|
+
data_bag_dir.children.map { |child| child.name }.should =~ %w(aitem.json bitem.json)
|
134
|
+
end
|
135
|
+
it 'can have json files as children' do
|
136
|
+
data_bag_dir.can_have_child?('blah.json', false).should be_true
|
137
|
+
end
|
138
|
+
it 'cannot have non-json files as children' do
|
139
|
+
data_bag_dir.can_have_child?('blah', false).should be_false
|
140
|
+
end
|
141
|
+
it 'cannot have directories as children' do
|
142
|
+
data_bag_dir.can_have_child?('blah', true).should be_false
|
143
|
+
data_bag_dir.can_have_child?('blah.json', true).should be_false
|
144
|
+
end
|
145
|
+
context 'aitem from data_bag.children' do
|
146
|
+
let(:data_bag_item) do
|
147
|
+
should_list_data_bag_items
|
148
|
+
data_bag_dir.children.select { |child| child.name == 'aitem.json' }.first
|
149
|
+
end
|
150
|
+
let(:data_bag_item_short_name) { 'aitem' }
|
151
|
+
let(:data_bag_item_name) { 'aitem.json' }
|
152
|
+
it_behaves_like 'a data bag item'
|
153
|
+
end
|
154
|
+
context 'data_bag.child(aitem)' do
|
155
|
+
let(:data_bag_item) { data_bag_dir.child('aitem.json') }
|
156
|
+
let(:data_bag_item_short_name) { 'aitem' }
|
157
|
+
let(:data_bag_item_name) { 'aitem.json' }
|
158
|
+
it_behaves_like 'a data bag item'
|
159
|
+
end
|
160
|
+
context 'nonexistent child()' do
|
161
|
+
let(:nonexistent_child) { data_bag_dir.child('blah.json') }
|
162
|
+
it 'has correct parent, name, path and path_for_printing' do
|
163
|
+
nonexistent_child.parent.should == data_bag_dir
|
164
|
+
nonexistent_child.name.should == "blah.json"
|
165
|
+
nonexistent_child.path.should == "/data_bags/#{data_bag_dir_name}/blah.json"
|
166
|
+
nonexistent_child.path_for_printing.should == "remote/data_bags/#{data_bag_dir_name}/blah.json"
|
167
|
+
end
|
168
|
+
it 'does not exist' do
|
169
|
+
should_list_data_bag_items
|
170
|
+
nonexistent_child.exists?.should be_false
|
171
|
+
end
|
172
|
+
it 'is not a directory' do
|
173
|
+
nonexistent_child.dir?.should be_false
|
174
|
+
end
|
175
|
+
it 'read returns NotFoundError' do
|
176
|
+
@rest.should_receive(:get_rest).with("data/#{data_bag_dir_name}/blah").once.and_raise(Net::HTTPServerException.new(nil,Net::HTTPResponse.new(nil,'404',nil)))
|
177
|
+
expect { nonexistent_child.read }.to raise_error(Chef::ChefFS::FileSystem::NotFoundError)
|
178
|
+
end
|
179
|
+
end
|
180
|
+
end
|
181
|
+
|
182
|
+
context 'achild from data_bags.children' do
|
183
|
+
let(:data_bag_dir) do
|
184
|
+
should_list_data_bags
|
185
|
+
data_bags_dir.children.select { |child| child.name == 'achild' }.first
|
186
|
+
end
|
187
|
+
let(:data_bag_dir_name) { 'achild' }
|
188
|
+
it_behaves_like 'a data bag'
|
189
|
+
end
|
190
|
+
|
191
|
+
context 'data_bags.child(achild)' do
|
192
|
+
let(:data_bag_dir) do
|
193
|
+
data_bags_dir.child('achild')
|
194
|
+
end
|
195
|
+
let(:data_bag_dir_name) { 'achild' }
|
196
|
+
it_behaves_like 'a data bag'
|
197
|
+
end
|
198
|
+
|
199
|
+
context 'nonexistent child()' do
|
200
|
+
let(:nonexistent_child) { data_bags_dir.child('blah') }
|
201
|
+
it 'has correct parent, name, path and path_for_printing' do
|
202
|
+
nonexistent_child.parent.should == data_bags_dir
|
203
|
+
nonexistent_child.name.should == "blah"
|
204
|
+
nonexistent_child.path.should == "/data_bags/blah"
|
205
|
+
nonexistent_child.path_for_printing.should == "remote/data_bags/blah"
|
206
|
+
end
|
207
|
+
it 'does not exist' do
|
208
|
+
should_list_data_bags
|
209
|
+
nonexistent_child.exists?.should be_false
|
210
|
+
end
|
211
|
+
it 'is not a directory' do
|
212
|
+
should_list_data_bags
|
213
|
+
nonexistent_child.dir?.should be_false
|
214
|
+
end
|
215
|
+
it 'read returns NotFoundError' do
|
216
|
+
expect { nonexistent_child.read }.to raise_error(Chef::ChefFS::FileSystem::NotFoundError)
|
217
|
+
end
|
218
|
+
end
|
219
|
+
|
220
|
+
end
|
@@ -0,0 +1,136 @@
|
|
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 'support/shared/unit/file_system_support'
|
21
|
+
require 'chef/chef_fs/file_system'
|
22
|
+
require 'chef/chef_fs/file_pattern'
|
23
|
+
|
24
|
+
describe Chef::ChefFS::FileSystem do
|
25
|
+
include FileSystemSupport
|
26
|
+
|
27
|
+
context 'with empty filesystem' do
|
28
|
+
let(:fs) { memory_fs('', {}) }
|
29
|
+
|
30
|
+
context 'list' do
|
31
|
+
it '/' do
|
32
|
+
list_should_yield_paths(fs, '/', '/')
|
33
|
+
end
|
34
|
+
it '/a' do
|
35
|
+
list_should_yield_paths(fs, '/a', '/a')
|
36
|
+
end
|
37
|
+
it '/a/b' do
|
38
|
+
list_should_yield_paths(fs, '/a/b')
|
39
|
+
end
|
40
|
+
it '/*' do
|
41
|
+
list_should_yield_paths(fs, '/*', '/')
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
context 'resolve_path' do
|
46
|
+
it '/' do
|
47
|
+
Chef::ChefFS::FileSystem.resolve_path(fs, '/').path.should == '/'
|
48
|
+
end
|
49
|
+
it 'nonexistent /a' do
|
50
|
+
Chef::ChefFS::FileSystem.resolve_path(fs, '/a').path.should == '/a'
|
51
|
+
end
|
52
|
+
it 'nonexistent /a/b' do
|
53
|
+
Chef::ChefFS::FileSystem.resolve_path(fs, '/a/b').path.should == '/a/b'
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
context 'with a populated filesystem' do
|
59
|
+
let(:fs) {
|
60
|
+
memory_fs('', {
|
61
|
+
:a => {
|
62
|
+
:aa => {
|
63
|
+
:c => '',
|
64
|
+
:zz => ''
|
65
|
+
},
|
66
|
+
:ab => {
|
67
|
+
:c => '',
|
68
|
+
}
|
69
|
+
},
|
70
|
+
:x => ''
|
71
|
+
})
|
72
|
+
}
|
73
|
+
context 'list' do
|
74
|
+
it '/**' do
|
75
|
+
list_should_yield_paths(fs, '/**', '/', '/a', '/x', '/a/aa', '/a/aa/c', '/a/aa/zz', '/a/ab', '/a/ab/c')
|
76
|
+
end
|
77
|
+
it '/' do
|
78
|
+
list_should_yield_paths(fs, '/', '/')
|
79
|
+
end
|
80
|
+
it '/*' do
|
81
|
+
list_should_yield_paths(fs, '/*', '/', '/a', '/x')
|
82
|
+
end
|
83
|
+
it '/*/*' do
|
84
|
+
list_should_yield_paths(fs, '/*/*', '/a/aa', '/a/ab')
|
85
|
+
end
|
86
|
+
it '/*/*/*' do
|
87
|
+
list_should_yield_paths(fs, '/*/*/*', '/a/aa/c', '/a/aa/zz', '/a/ab/c')
|
88
|
+
end
|
89
|
+
it '/*/*/?' do
|
90
|
+
list_should_yield_paths(fs, '/*/*/?', '/a/aa/c', '/a/ab/c')
|
91
|
+
end
|
92
|
+
it '/a/*/c' do
|
93
|
+
list_should_yield_paths(fs, '/a/*/c', '/a/aa/c', '/a/ab/c')
|
94
|
+
end
|
95
|
+
it '/**b/c' do
|
96
|
+
list_should_yield_paths(fs, '/**b/c', '/a/ab/c')
|
97
|
+
end
|
98
|
+
it '/a/ab/c' do
|
99
|
+
no_blocking_calls_allowed
|
100
|
+
list_should_yield_paths(fs, '/a/ab/c', '/a/ab/c')
|
101
|
+
end
|
102
|
+
it 'nonexistent /a/ab/blah' do
|
103
|
+
no_blocking_calls_allowed
|
104
|
+
list_should_yield_paths(fs, '/a/ab/blah', '/a/ab/blah')
|
105
|
+
end
|
106
|
+
it 'nonexistent /a/ab/blah/bjork' do
|
107
|
+
no_blocking_calls_allowed
|
108
|
+
list_should_yield_paths(fs, '/a/ab/blah/bjork')
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
context 'resolve_path' do
|
113
|
+
before(:each) do
|
114
|
+
no_blocking_calls_allowed
|
115
|
+
end
|
116
|
+
it 'resolves /' do
|
117
|
+
Chef::ChefFS::FileSystem.resolve_path(fs, '/').path.should == '/'
|
118
|
+
end
|
119
|
+
it 'resolves /x' do
|
120
|
+
Chef::ChefFS::FileSystem.resolve_path(fs, '/x').path.should == '/x'
|
121
|
+
end
|
122
|
+
it 'resolves /a' do
|
123
|
+
Chef::ChefFS::FileSystem.resolve_path(fs, '/a').path.should == '/a'
|
124
|
+
end
|
125
|
+
it 'resolves /a/aa' do
|
126
|
+
Chef::ChefFS::FileSystem.resolve_path(fs, '/a/aa').path.should == '/a/aa'
|
127
|
+
end
|
128
|
+
it 'resolves /a/aa/zz' do
|
129
|
+
Chef::ChefFS::FileSystem.resolve_path(fs, '/a/aa/zz').path.should == '/a/aa/zz'
|
130
|
+
end
|
131
|
+
it 'resolves nonexistent /y/x/w' do
|
132
|
+
Chef::ChefFS::FileSystem.resolve_path(fs, '/y/x/w').path.should == '/y/x/w'
|
133
|
+
end
|
134
|
+
end
|
135
|
+
end
|
136
|
+
end
|
data/spec/unit/client_spec.rb
CHANGED
@@ -35,17 +35,15 @@ shared_examples_for Chef::Client do
|
|
35
35
|
ohai_data = { :fqdn => @fqdn,
|
36
36
|
:hostname => @hostname,
|
37
37
|
:platform => 'example-platform',
|
38
|
-
:platform_version => 'example-platform',
|
38
|
+
:platform_version => 'example-platform-1.0',
|
39
39
|
:data => {} }
|
40
40
|
ohai_data.stub!(:all_plugins).and_return(true)
|
41
|
-
ohai_data.stub!(:data).and_return(ohai_data
|
41
|
+
ohai_data.stub!(:data).and_return(ohai_data)
|
42
42
|
Ohai::System.stub!(:new).and_return(ohai_data)
|
43
43
|
|
44
|
-
@node = Chef::Node.new
|
44
|
+
@node = Chef::Node.new
|
45
45
|
@node.name(@fqdn)
|
46
46
|
@node.chef_environment("_default")
|
47
|
-
@node[:platform] = "example-platform"
|
48
|
-
@node[:platform_version] = "example-platform-1.0"
|
49
47
|
|
50
48
|
@client = Chef::Client.new
|
51
49
|
@client.node = @node
|
@@ -75,6 +73,111 @@ shared_examples_for Chef::Client do
|
|
75
73
|
end
|
76
74
|
end
|
77
75
|
|
76
|
+
describe "configuring output formatters" do
|
77
|
+
before do
|
78
|
+
@original_config = Chef::Config.configuration
|
79
|
+
end
|
80
|
+
|
81
|
+
after do
|
82
|
+
Chef::Config.configuration.replace(@original_config)
|
83
|
+
end
|
84
|
+
context "when no formatter has been configured" do
|
85
|
+
before do
|
86
|
+
Chef::Config.formatters.clear
|
87
|
+
@client = Chef::Client.new
|
88
|
+
end
|
89
|
+
|
90
|
+
context "and STDOUT is a TTY" do
|
91
|
+
before do
|
92
|
+
Chef::Config[:force_formatter] = false
|
93
|
+
Chef::Config[:force_logger] = false
|
94
|
+
STDOUT.stub!(:tty?).and_return(true)
|
95
|
+
end
|
96
|
+
|
97
|
+
it "configures the :doc formatter" do
|
98
|
+
@client.formatters_for_run.should == [[:doc]]
|
99
|
+
end
|
100
|
+
|
101
|
+
context "and force_logger is set" do
|
102
|
+
before do
|
103
|
+
Chef::Config[:force_logger] = true
|
104
|
+
end
|
105
|
+
|
106
|
+
it "configures the :null formatter" do
|
107
|
+
Chef::Config[:force_logger].should be_true
|
108
|
+
@client.formatters_for_run.should == [[:null]]
|
109
|
+
end
|
110
|
+
|
111
|
+
end
|
112
|
+
|
113
|
+
end
|
114
|
+
|
115
|
+
context "and STDOUT is not a TTY" do
|
116
|
+
before do
|
117
|
+
Chef::Config[:force_formatter] = false
|
118
|
+
STDOUT.stub!(:tty?).and_return(false)
|
119
|
+
end
|
120
|
+
|
121
|
+
it "configures the :null formatter" do
|
122
|
+
@client.formatters_for_run.should == [[:null]]
|
123
|
+
end
|
124
|
+
|
125
|
+
context "and force_formatter is set" do
|
126
|
+
before do
|
127
|
+
Chef::Config[:force_formatter] = true
|
128
|
+
end
|
129
|
+
it "it configures the :doc formatter" do
|
130
|
+
@client.formatters_for_run.should == [[:doc]]
|
131
|
+
end
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
end
|
136
|
+
|
137
|
+
context "when a formatter is configured" do
|
138
|
+
context "with no output path" do
|
139
|
+
before do
|
140
|
+
Chef::Config.formatters.clear
|
141
|
+
@client = Chef::Client.new
|
142
|
+
Chef::Config.add_formatter(:min)
|
143
|
+
end
|
144
|
+
|
145
|
+
it "does not configure a default formatter" do
|
146
|
+
@client.formatters_for_run.should == [[:min, nil]]
|
147
|
+
end
|
148
|
+
|
149
|
+
it "configures the formatter for STDOUT/STDERR" do
|
150
|
+
configured_formatters = @client.configure_formatters
|
151
|
+
min_formatter = configured_formatters[0]
|
152
|
+
min_formatter.output.out.should == STDOUT
|
153
|
+
min_formatter.output.err.should == STDERR
|
154
|
+
end
|
155
|
+
end
|
156
|
+
|
157
|
+
context "with an output path" do
|
158
|
+
before do
|
159
|
+
Chef::Config.formatters.clear
|
160
|
+
@client = Chef::Client.new
|
161
|
+
@tmpout = Tempfile.open("rspec-for-client-formatter-selection-#{Process.pid}")
|
162
|
+
Chef::Config.add_formatter(:min, @tmpout.path)
|
163
|
+
end
|
164
|
+
|
165
|
+
after do
|
166
|
+
@tmpout.close unless @tmpout.closed?
|
167
|
+
@tmpout.unlink
|
168
|
+
end
|
169
|
+
|
170
|
+
it "configures the formatter for the file path" do
|
171
|
+
configured_formatters = @client.configure_formatters
|
172
|
+
min_formatter = configured_formatters[0]
|
173
|
+
min_formatter.output.out.path.should == @tmpout.path
|
174
|
+
min_formatter.output.err.path.should == @tmpout.path
|
175
|
+
end
|
176
|
+
end
|
177
|
+
|
178
|
+
end
|
179
|
+
end
|
180
|
+
|
78
181
|
describe "run" do
|
79
182
|
|
80
183
|
it "should identify the node and run ohai, then register the client" do
|
@@ -89,10 +192,8 @@ shared_examples_for Chef::Client do
|
|
89
192
|
File.should_receive(:exists?).with(Chef::Config[:client_key]).exactly(1).times.and_return(false)
|
90
193
|
|
91
194
|
# Client.register will register with the validation client name.
|
92
|
-
Chef::
|
93
|
-
mock_chef_rest_for_client.should_receive(:register).with(@fqdn, Chef::Config[:client_key]).exactly(1).and_return(true)
|
195
|
+
Chef::ApiClient::Registration.any_instance.should_receive(:run)
|
94
196
|
# Client.register will then turn around create another
|
95
|
-
|
96
197
|
# Chef::REST object, this time with the client key it got from the
|
97
198
|
# previous step.
|
98
199
|
Chef::REST.should_receive(:new).with(Chef::Config[:chef_server_url], @fqdn, Chef::Config[:client_key]).exactly(1).and_return(mock_chef_rest_for_node)
|
@@ -124,6 +225,9 @@ shared_examples_for Chef::Client do
|
|
124
225
|
Chef::REST.should_receive(:new).with(Chef::Config[:chef_server_url]).and_return(mock_chef_rest_for_node_save)
|
125
226
|
mock_chef_rest_for_node_save.should_receive(:put_rest).with("nodes/#{@fqdn}", @node).and_return(true)
|
126
227
|
|
228
|
+
Chef::RunLock.any_instance.should_receive(:acquire)
|
229
|
+
Chef::RunLock.any_instance.should_receive(:release)
|
230
|
+
|
127
231
|
# Post conditions: check that node has been filled in correctly
|
128
232
|
@client.should_receive(:run_started)
|
129
233
|
@client.should_receive(:run_completed_successfully)
|
@@ -138,7 +242,6 @@ shared_examples_for Chef::Client do
|
|
138
242
|
res.replace(string)
|
139
243
|
end
|
140
244
|
pipe_sim.should_receive(:gets).and_return(res)
|
141
|
-
Chef::CouchDB.should_receive(:new).and_return(nil)
|
142
245
|
IO.should_receive(:pipe).and_return([pipe_sim, pipe_sim])
|
143
246
|
IO.should_receive(:select).and_return(true)
|
144
247
|
end
|
@@ -150,7 +253,7 @@ shared_examples_for Chef::Client do
|
|
150
253
|
block.call
|
151
254
|
end
|
152
255
|
end
|
153
|
-
|
256
|
+
|
154
257
|
# This is what we're testing.
|
155
258
|
@client.run
|
156
259
|
|
@@ -159,7 +262,7 @@ shared_examples_for Chef::Client do
|
|
159
262
|
@node.automatic_attrs[:platform_version].should == "example-platform-1.0"
|
160
263
|
end
|
161
264
|
end
|
162
|
-
|
265
|
+
|
163
266
|
describe "when notifying other objects of the status of the chef run" do
|
164
267
|
before do
|
165
268
|
Chef::Client.clear_notifications
|
@@ -232,13 +335,75 @@ shared_examples_for Chef::Client do
|
|
232
335
|
end
|
233
336
|
end
|
234
337
|
|
338
|
+
describe "windows_admin_check" do
|
339
|
+
before do
|
340
|
+
@client = Chef::Client.new
|
341
|
+
end
|
342
|
+
|
343
|
+
context "platform is not windows" do
|
344
|
+
before do
|
345
|
+
Chef::Platform.stub(:windows?).and_return(false)
|
346
|
+
end
|
347
|
+
|
348
|
+
it "shouldn't be called" do
|
349
|
+
@client.should_not_receive(:has_admin_privileges?)
|
350
|
+
@client.do_windows_admin_check
|
351
|
+
end
|
352
|
+
end
|
353
|
+
|
354
|
+
context "platform is windows" do
|
355
|
+
before do
|
356
|
+
Chef::Platform.stub(:windows?).and_return(true)
|
357
|
+
end
|
358
|
+
|
359
|
+
it "should be called" do
|
360
|
+
@client.should_receive(:has_admin_privileges?)
|
361
|
+
@client.do_windows_admin_check
|
362
|
+
end
|
363
|
+
|
364
|
+
context "admin privileges exist" do
|
365
|
+
before do
|
366
|
+
@client.should_receive(:has_admin_privileges?).and_return(true)
|
367
|
+
end
|
368
|
+
|
369
|
+
it "should not log a warning message" do
|
370
|
+
Chef::Log.should_not_receive(:warn)
|
371
|
+
@client.do_windows_admin_check
|
372
|
+
end
|
373
|
+
|
374
|
+
context "fatal admin check is configured" do
|
375
|
+
it "should not raise an exception" do
|
376
|
+
@client.do_windows_admin_check.should_not raise_error(Chef::Exceptions::WindowsNotAdmin)
|
377
|
+
end
|
378
|
+
end
|
379
|
+
end
|
380
|
+
|
381
|
+
context "admin privileges doesn't exist" do
|
382
|
+
before do
|
383
|
+
@client.should_receive(:has_admin_privileges?).and_return(false)
|
384
|
+
end
|
385
|
+
|
386
|
+
it "should log a warning message" do
|
387
|
+
Chef::Log.should_receive(:warn)
|
388
|
+
@client.do_windows_admin_check
|
389
|
+
end
|
390
|
+
|
391
|
+
context "fatal admin check is configured" do
|
392
|
+
it "should raise an exception" do
|
393
|
+
@client.do_windows_admin_check.should_not raise_error(Chef::Exceptions::WindowsNotAdmin)
|
394
|
+
end
|
395
|
+
end
|
396
|
+
end
|
397
|
+
end
|
398
|
+
end
|
399
|
+
|
235
400
|
describe "when a run list override is provided" do
|
236
401
|
before do
|
237
|
-
@node = Chef::Node.new
|
402
|
+
@node = Chef::Node.new
|
238
403
|
@node.name(@fqdn)
|
239
404
|
@node.chef_environment("_default")
|
240
|
-
@node[:platform] = "example-platform"
|
241
|
-
@node[:platform_version] = "example-platform-1.0"
|
405
|
+
@node.automatic_attrs[:platform] = "example-platform"
|
406
|
+
@node.automatic_attrs[:platform_version] = "example-platform-1.0"
|
242
407
|
end
|
243
408
|
|
244
409
|
it "should permit spaces in overriding run list" do
|
@@ -264,7 +429,7 @@ shared_examples_for Chef::Client do
|
|
264
429
|
@node.should_receive(:save).and_return(nil)
|
265
430
|
|
266
431
|
@client.build_node
|
267
|
-
|
432
|
+
|
268
433
|
@node[:roles].should_not be_nil
|
269
434
|
@node[:roles].should eql(['test_role'])
|
270
435
|
@node[:recipes].should eql(['cookbook1'])
|
@@ -283,8 +448,15 @@ describe Chef::Client do
|
|
283
448
|
end
|
284
449
|
|
285
450
|
describe "Chef::Client Forked" do
|
286
|
-
it_behaves_like Chef::Client
|
287
451
|
before do
|
452
|
+
@original_config = Chef::Config.configuration
|
288
453
|
Chef::Config[:client_fork] = true
|
289
454
|
end
|
455
|
+
|
456
|
+
after do
|
457
|
+
Chef::Config.configuration.replace(@original_config)
|
458
|
+
end
|
459
|
+
|
460
|
+
it_behaves_like Chef::Client
|
461
|
+
|
290
462
|
end
|