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,181 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Daniel DeLeo (<dan@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
|
+
|
21
|
+
# Keeps track of what file got loaded in what order.
|
22
|
+
module LibraryLoadOrder
|
23
|
+
extend self
|
24
|
+
|
25
|
+
def load_order
|
26
|
+
@load_order ||= []
|
27
|
+
end
|
28
|
+
|
29
|
+
def reset!
|
30
|
+
@load_order = nil
|
31
|
+
end
|
32
|
+
|
33
|
+
def record(file)
|
34
|
+
load_order << file
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
# These tests rely on fixture data in spec/data/run_context/cookbooks.
|
39
|
+
#
|
40
|
+
# Dependencies (circular or not) are specified by `depends` directives in the
|
41
|
+
# metadata of these cookbooks.
|
42
|
+
#
|
43
|
+
# Side effects used to verify the behavior are implemented as code in the various file types.
|
44
|
+
#
|
45
|
+
describe Chef::RunContext::CookbookCompiler do
|
46
|
+
|
47
|
+
let(:node) { Chef::Node.new }
|
48
|
+
|
49
|
+
let(:events) { Chef::EventDispatch::Dispatcher.new }
|
50
|
+
|
51
|
+
let(:cookbook_loader) do
|
52
|
+
cl = Chef::CookbookLoader.new(chef_repo_path)
|
53
|
+
cl.load_cookbooks
|
54
|
+
cl
|
55
|
+
end
|
56
|
+
|
57
|
+
let(:run_context) { Chef::RunContext.new(node, cookbook_collection, events) }
|
58
|
+
|
59
|
+
let(:chef_repo_path) { File.expand_path(File.join(CHEF_SPEC_DATA, "run_context", "cookbooks")) }
|
60
|
+
|
61
|
+
let(:cookbook_collection) { Chef::CookbookCollection.new(cookbook_loader) }
|
62
|
+
|
63
|
+
# Lazy evaluation of `expansion` here is used to mutate the run list before expanding it
|
64
|
+
let(:run_list_expansion) { node.run_list.expand('_default') }
|
65
|
+
|
66
|
+
let(:compiler) do
|
67
|
+
Chef::RunContext::CookbookCompiler.new(run_context, run_list_expansion, events)
|
68
|
+
end
|
69
|
+
|
70
|
+
|
71
|
+
describe "loading attribute files" do
|
72
|
+
|
73
|
+
# Attribute files in the fixture data will append their
|
74
|
+
# "cookbook_name::attribute_file_name" to the node's `:attr_load_order`
|
75
|
+
# attribute when loaded.
|
76
|
+
|
77
|
+
it "loads default.rb first, then other files in sort order" do
|
78
|
+
node.run_list("dependency1::default")
|
79
|
+
|
80
|
+
compiler.compile_attributes
|
81
|
+
node[:attr_load_order].should == ["dependency1::default", "dependency1::aa_first", "dependency1::zz_last"]
|
82
|
+
end
|
83
|
+
|
84
|
+
it "loads dependencies before loading the depending cookbook's attributes" do
|
85
|
+
# Also make sure that attributes aren't loaded twice if we have two
|
86
|
+
# recipes from the same cookbook in the run list
|
87
|
+
node.run_list("test-with-deps::default", "test-with-deps::server")
|
88
|
+
|
89
|
+
compiler.compile_attributes
|
90
|
+
|
91
|
+
# dependencies are stored in a hash so therefore unordered, but they should be loaded in sort order
|
92
|
+
node[:attr_load_order].should == ["dependency1::default",
|
93
|
+
"dependency1::aa_first",
|
94
|
+
"dependency1::zz_last",
|
95
|
+
"dependency2::default",
|
96
|
+
"test-with-deps::default"]
|
97
|
+
end
|
98
|
+
|
99
|
+
it "does not follow infinite dependency loops" do
|
100
|
+
node.run_list("test-with-circular-deps::default")
|
101
|
+
|
102
|
+
# Circular deps should not cause infinite loops
|
103
|
+
compiler.compile_attributes
|
104
|
+
|
105
|
+
node[:attr_load_order].should == ["circular-dep2::default", "circular-dep1::default", "test-with-circular-deps::default"]
|
106
|
+
end
|
107
|
+
|
108
|
+
it "loads attributes from cookbooks that don't have a default.rb attribute file" do
|
109
|
+
node.run_list("no-default-attr::default.rb")
|
110
|
+
|
111
|
+
compiler.compile_attributes
|
112
|
+
|
113
|
+
node[:attr_load_order].should == ["no-default-attr::server"]
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
describe "loading libraries" do
|
118
|
+
before do
|
119
|
+
LibraryLoadOrder.reset!
|
120
|
+
end
|
121
|
+
|
122
|
+
# One big test for everything. Individual behaviors are tested by the attribute code above.
|
123
|
+
it "loads libraries in run list order" do
|
124
|
+
node.run_list("test-with-deps::default", "test-with-circular-deps::default")
|
125
|
+
|
126
|
+
compiler.compile_libraries
|
127
|
+
LibraryLoadOrder.load_order.should == ["dependency1", "dependency2", "test-with-deps", "circular-dep2", "circular-dep1", "test-with-circular-deps"]
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
131
|
+
describe "loading LWRPs" do
|
132
|
+
before do
|
133
|
+
LibraryLoadOrder.reset!
|
134
|
+
end
|
135
|
+
|
136
|
+
# One big test for everything. Individual behaviors are tested by the attribute code above.
|
137
|
+
it "loads LWRPs in run list order" do
|
138
|
+
node.run_list("test-with-deps::default", "test-with-circular-deps::default")
|
139
|
+
|
140
|
+
compiler.compile_lwrps
|
141
|
+
LibraryLoadOrder.load_order.should == ["dependency1-provider",
|
142
|
+
"dependency1-resource",
|
143
|
+
"dependency2-provider",
|
144
|
+
"dependency2-resource",
|
145
|
+
"test-with-deps-provider",
|
146
|
+
"test-with-deps-resource",
|
147
|
+
"circular-dep2-provider",
|
148
|
+
"circular-dep2-resource",
|
149
|
+
"circular-dep1-provider",
|
150
|
+
"circular-dep1-resource",
|
151
|
+
"test-with-circular-deps-provider",
|
152
|
+
"test-with-circular-deps-resource"]
|
153
|
+
end
|
154
|
+
end
|
155
|
+
|
156
|
+
describe "loading resource definitions" do
|
157
|
+
before do
|
158
|
+
LibraryLoadOrder.reset!
|
159
|
+
end
|
160
|
+
|
161
|
+
# One big test for all load order concerns. Individual behaviors are tested
|
162
|
+
# by the attribute code above.
|
163
|
+
it "loads resource definitions in run list order" do
|
164
|
+
node.run_list("test-with-deps::default", "test-with-circular-deps::default")
|
165
|
+
|
166
|
+
compiler.compile_resource_definitions
|
167
|
+
LibraryLoadOrder.load_order.should == ["dependency1-definition",
|
168
|
+
"dependency2-definition",
|
169
|
+
"test-with-deps-definition",
|
170
|
+
"circular-dep2-definition",
|
171
|
+
"circular-dep1-definition",
|
172
|
+
"test-with-circular-deps-definition"]
|
173
|
+
end
|
174
|
+
|
175
|
+
end
|
176
|
+
|
177
|
+
describe "loading recipes" do
|
178
|
+
# Tests for this behavior are in RunContext's tests
|
179
|
+
end
|
180
|
+
|
181
|
+
end
|
@@ -24,11 +24,12 @@ Chef::Log.level = :debug
|
|
24
24
|
|
25
25
|
describe Chef::RunContext do
|
26
26
|
before(:each) do
|
27
|
-
Chef::Config.node_path(File.expand_path(File.join(CHEF_SPEC_DATA, "run_context", "nodes")))
|
28
27
|
@chef_repo_path = File.expand_path(File.join(CHEF_SPEC_DATA, "run_context", "cookbooks"))
|
29
|
-
|
28
|
+
cl = Chef::CookbookLoader.new(@chef_repo_path)
|
29
|
+
cl.load_cookbooks
|
30
|
+
@cookbook_collection = Chef::CookbookCollection.new(cl)
|
30
31
|
@node = Chef::Node.new
|
31
|
-
@node.
|
32
|
+
@node.run_list << "test" << "test::one" << "test::two"
|
32
33
|
@events = Chef::EventDispatch::Dispatcher.new
|
33
34
|
@run_context = Chef::RunContext.new(@node, @cookbook_collection, @events)
|
34
35
|
end
|
@@ -53,12 +54,25 @@ describe Chef::RunContext do
|
|
53
54
|
end
|
54
55
|
|
55
56
|
it "should load all the recipes specified for this node" do
|
56
|
-
@run_context.resource_collection[0].to_s.should == "cat[einstein]"
|
57
|
+
@run_context.resource_collection[0].to_s.should == "cat[einstein]"
|
57
58
|
@run_context.resource_collection[1].to_s.should == "cat[loulou]"
|
58
59
|
@run_context.resource_collection[2].to_s.should == "cat[birthday]"
|
59
60
|
@run_context.resource_collection[3].to_s.should == "cat[peanut]"
|
60
61
|
@run_context.resource_collection[4].to_s.should == "cat[fat peanut]"
|
61
62
|
end
|
63
|
+
|
64
|
+
it "loads all the attribute files in the cookbook collection" do
|
65
|
+
@run_context.loaded_fully_qualified_attribute?("test", "george").should be_true
|
66
|
+
@node[:george].should == "washington"
|
67
|
+
end
|
68
|
+
|
69
|
+
it "registers attributes files as loaded so they won't be reloaded" do
|
70
|
+
# This test unfortunately is pretty tightly intertwined with the
|
71
|
+
# implementation of how nodes load attribute files, but is the only
|
72
|
+
# convenient way to test this behavior.
|
73
|
+
@node.should_not_receive(:from_file)
|
74
|
+
@node.include_attribute("test::george")
|
75
|
+
end
|
62
76
|
end
|
63
77
|
|
64
78
|
end
|
data/spec/unit/run_list_spec.rb
CHANGED
@@ -23,13 +23,6 @@ require 'spec_helper'
|
|
23
23
|
require 'chef/version_class'
|
24
24
|
require 'chef/version_constraint'
|
25
25
|
|
26
|
-
# dep_selector/gecode on many platforms is currenly a bowel of hurt
|
27
|
-
begin
|
28
|
-
require 'chef/cookbook_version_selector'
|
29
|
-
rescue LoadError
|
30
|
-
STDERR.puts "\n*** dep_selector not installed. marking all unit tests 'pending' that have a transitive dependency on dep_selector. ***\n\n"
|
31
|
-
end
|
32
|
-
|
33
26
|
describe Chef::RunList do
|
34
27
|
before(:each) do
|
35
28
|
@run_list = Chef::RunList.new
|
@@ -255,13 +248,6 @@ describe Chef::RunList do
|
|
255
248
|
|
256
249
|
end
|
257
250
|
|
258
|
-
describe "from couchdb" do
|
259
|
-
it "should load the role from couchdb" do
|
260
|
-
Chef::Role.should_receive(:cdb_load).and_return(@role)
|
261
|
-
@run_list.expand("_default", "couchdb")
|
262
|
-
end
|
263
|
-
end
|
264
|
-
|
265
251
|
it "should return the list of expanded recipes" do
|
266
252
|
expansion = @run_list.expand("_default")
|
267
253
|
expansion.recipes[0].should == "one"
|
@@ -323,199 +309,4 @@ describe Chef::RunList do
|
|
323
309
|
|
324
310
|
end
|
325
311
|
|
326
|
-
describe "constrain" do
|
327
|
-
|
328
|
-
pending "=> can't find 'dep_selector' gem...skipping Chef::CookbookVersionSelector related tests" do
|
329
|
-
|
330
|
-
@fake_db = Object.new
|
331
|
-
|
332
|
-
def cookbook_maker(name, version, deps)
|
333
|
-
book = Chef::CookbookVersion.new(name, @fake_db)
|
334
|
-
book.version = version
|
335
|
-
deps.each { |dep_name, vc| book.metadata.depends(dep_name, vc) }
|
336
|
-
book
|
337
|
-
end
|
338
|
-
|
339
|
-
def vc_maker(cookbook_name, version_constraint)
|
340
|
-
vc = Chef::VersionConstraint.new(version_constraint)
|
341
|
-
{ :name => cookbook_name, :version_constraint => vc }
|
342
|
-
end
|
343
|
-
|
344
|
-
def assert_failure_unsatisfiable_item(run_list, all_cookbooks, constraints, expected_message)
|
345
|
-
begin
|
346
|
-
Chef::CookbookVersionSelector.constrain(all_cookbooks, constraints)
|
347
|
-
fail "Should have raised a Chef::Exceptions::CookbookVersionSelection::UnsatisfiableRunListItem exception"
|
348
|
-
rescue Chef::Exceptions::CookbookVersionSelection::UnsatisfiableRunListItem => urli
|
349
|
-
urli.message.should include(expected_message)
|
350
|
-
end
|
351
|
-
end
|
352
|
-
|
353
|
-
def assert_failure_invalid_items(run_list, all_cookbooks, constraints, expected_message)
|
354
|
-
begin
|
355
|
-
Chef::CookbookVersionSelector.constrain(all_cookbooks, constraints)
|
356
|
-
fail "Should have raised a Chef::Exceptions::CookbookVersionSelection::InvalidRunListItems exception"
|
357
|
-
rescue Chef::Exceptions::CookbookVersionSelection::InvalidRunListItems => irli
|
358
|
-
irli.message.should include(expected_message)
|
359
|
-
end
|
360
|
-
end
|
361
|
-
|
362
|
-
before(:each) do
|
363
|
-
a1 = cookbook_maker("a", "1.0", [["c", "< 4.0"]])
|
364
|
-
b1 = cookbook_maker("b", "1.0", [["c", "< 3.0"]])
|
365
|
-
|
366
|
-
c2 = cookbook_maker("c", "2.0", [["d", "> 1.0"], ["f", nil]])
|
367
|
-
c3 = cookbook_maker("c", "3.0", [["d", "> 2.0"], ["e", nil]])
|
368
|
-
|
369
|
-
d1_1 = cookbook_maker("d", "1.1", [])
|
370
|
-
d2_1 = cookbook_maker("d", "2.1", [])
|
371
|
-
e1 = cookbook_maker("e", "1.0", [])
|
372
|
-
f1 = cookbook_maker("f", "1.0", [])
|
373
|
-
g1 = cookbook_maker("g", "1.0", [["d", "> 5.0"]])
|
374
|
-
|
375
|
-
n1_1 = cookbook_maker("n", "1.1", [])
|
376
|
-
n1_2 = cookbook_maker("n", "1.2", [])
|
377
|
-
n1_10 = cookbook_maker("n", "1.10", [])
|
378
|
-
|
379
|
-
depends_on_nosuch = cookbook_maker("depends_on_nosuch", "1.0", [["nosuch", nil]])
|
380
|
-
|
381
|
-
@all_cookbooks = {
|
382
|
-
"a" => [a1],
|
383
|
-
"b" => [b1],
|
384
|
-
"c" => [c2, c3],
|
385
|
-
"d" => [d1_1, d2_1],
|
386
|
-
"e" => [e1],
|
387
|
-
"f" => [f1],
|
388
|
-
"g" => [g1],
|
389
|
-
"n" => [n1_1, n1_2, n1_10],
|
390
|
-
"depends_on_nosuch" => [depends_on_nosuch]
|
391
|
-
}
|
392
|
-
|
393
|
-
$stderr.reopen DEV_NULL
|
394
|
-
end
|
395
|
-
|
396
|
-
after do
|
397
|
-
$stderr.reopen STDERR
|
398
|
-
end
|
399
|
-
|
400
|
-
it "pulls in transitive dependencies" do
|
401
|
-
constraints = [vc_maker("a", "~> 1.0")]
|
402
|
-
cookbooks = Chef::CookbookVersionSelector.constrain(@all_cookbooks, constraints)
|
403
|
-
%w(a c d e).each { |k| cookbooks.should have_key k }
|
404
|
-
cookbooks.size.should == 4
|
405
|
-
cookbooks["c"].version.should == "3.0.0"
|
406
|
-
cookbooks["d"].version.should == "2.1.0"
|
407
|
-
end
|
408
|
-
|
409
|
-
it "should satisfy recipe-specific dependencies" do
|
410
|
-
depends_on_recipe = cookbook_maker("depends_on_recipe", "1.0", [["f::recipe", "1.0"]])
|
411
|
-
@all_cookbooks["depends_on_recipe"] = [depends_on_recipe]
|
412
|
-
constraints = [vc_maker("depends_on_recipe", "= 1.0")]
|
413
|
-
cookbooks = Chef::CookbookVersionSelector.constrain(@all_cookbooks, constraints)
|
414
|
-
cookbooks["f"].version.should == "1.0.0"
|
415
|
-
end
|
416
|
-
|
417
|
-
it "properly sorts version triples, treating each term numerically" do
|
418
|
-
constraints = [vc_maker("n", "> 1.2")]
|
419
|
-
cookbooks = Chef::CookbookVersionSelector.constrain(@all_cookbooks, constraints)
|
420
|
-
cookbooks.size.should == 1
|
421
|
-
cookbooks["n"].version.should == "1.10.0"
|
422
|
-
end
|
423
|
-
|
424
|
-
it "should fail to find a solution when a run list item is constrained to a range that includes no cookbooks" do
|
425
|
-
constraints = [vc_maker("d", "> 5.0")]
|
426
|
-
assert_failure_invalid_items(@run_list, @all_cookbooks, constraints, "Run list contains invalid items: no versions match the constraints on cookbook d.")
|
427
|
-
end
|
428
|
-
|
429
|
-
it "should fail to find a solution when a run list item's dependency is constrained to a range that includes no cookbooks" do
|
430
|
-
constraints = [vc_maker("g", nil)]
|
431
|
-
assert_failure_unsatisfiable_item(@run_list, @all_cookbooks, constraints, "Unable to satisfy constraints on cookbook d due to run list item (g >= 0.0.0)")
|
432
|
-
end
|
433
|
-
|
434
|
-
it "selects 'd 2.1.0' given constraint 'd > 1.2.3'" do
|
435
|
-
constraints = [vc_maker("d", "> 1.2.3")]
|
436
|
-
cookbooks = Chef::CookbookVersionSelector.constrain(@all_cookbooks, constraints)
|
437
|
-
cookbooks.size.should == 1
|
438
|
-
cookbooks["d"].version.should == "2.1.0"
|
439
|
-
end
|
440
|
-
|
441
|
-
it "selects largest version when constraint allows multiple" do
|
442
|
-
constraints = [vc_maker("d", "> 1.0")]
|
443
|
-
cookbooks = Chef::CookbookVersionSelector.constrain(@all_cookbooks, constraints)
|
444
|
-
cookbooks.size.should == 1
|
445
|
-
cookbooks["d"].version.should == "2.1.0"
|
446
|
-
end
|
447
|
-
|
448
|
-
it "selects 'd 1.1.0' given constraint 'd ~> 1.0'" do
|
449
|
-
constraints = [vc_maker("d", "~> 1.0")]
|
450
|
-
cookbooks = Chef::CookbookVersionSelector.constrain(@all_cookbooks, constraints)
|
451
|
-
cookbooks.size.should == 1
|
452
|
-
cookbooks["d"].version.should == "1.1.0"
|
453
|
-
end
|
454
|
-
|
455
|
-
it "raises InvalidRunListItems for an unknown cookbook in the run list" do
|
456
|
-
constraints = [vc_maker("nosuch", "1.0.0")]
|
457
|
-
assert_failure_invalid_items(@run_list, @all_cookbooks, constraints, "Run list contains invalid items: no such cookbook nosuch.")
|
458
|
-
end
|
459
|
-
|
460
|
-
it "raises CookbookVersionConflict for an unknown cookbook in a cookbook's dependencies" do
|
461
|
-
constraints = [vc_maker("depends_on_nosuch", "1.0.0")]
|
462
|
-
assert_failure_unsatisfiable_item(@run_list, @all_cookbooks, constraints, "Unable to satisfy constraints on cookbook nosuch, which does not exist, due to run list item (depends_on_nosuch = 1.0.0). Run list items that may result in a constraint on nosuch: [(depends_on_nosuch = 1.0.0) -> (nosuch >= 0.0.0)]")
|
463
|
-
end
|
464
|
-
|
465
|
-
it "raises UnsatisfiableRunListItem for direct conflict" do
|
466
|
-
constraints = [vc_maker("d", "= 1.1.0"), vc_maker("d", ">= 2.0")]
|
467
|
-
assert_failure_unsatisfiable_item(@run_list, @all_cookbooks, constraints, "Unable to satisfy constraints on cookbook d due to run list item (d >= 2.0.0)")
|
468
|
-
end
|
469
|
-
|
470
|
-
describe "should solve regardless of constraint order" do
|
471
|
-
|
472
|
-
it "raises CookbookVersionConflict a then b" do
|
473
|
-
# Cookbooks a and b both have a dependency on c, but with
|
474
|
-
# differing constraints.
|
475
|
-
constraints = [vc_maker("a", "1.0"), vc_maker("b", "1.0")]
|
476
|
-
cookbooks = Chef::CookbookVersionSelector.constrain(@all_cookbooks, constraints)
|
477
|
-
cookbooks.size.should == 5
|
478
|
-
%w(a b c d f).each { |k| cookbooks.should have_key k }
|
479
|
-
cookbooks["a"].version.should == "1.0.0"
|
480
|
-
cookbooks["b"].version.should == "1.0.0"
|
481
|
-
cookbooks["c"].version.should == "2.0.0"
|
482
|
-
cookbooks["d"].version.should == "2.1.0"
|
483
|
-
end
|
484
|
-
|
485
|
-
it "resolves b then a" do
|
486
|
-
# See above comment for a then b. When b is pulled in first,
|
487
|
-
# we should get a version of c that satifies the constraints
|
488
|
-
# on the c dependency for both b and a.
|
489
|
-
constraints = [vc_maker("b", "1.0"), vc_maker("a", "1.0")]
|
490
|
-
cookbooks = Chef::CookbookVersionSelector.constrain(@all_cookbooks, constraints)
|
491
|
-
cookbooks.size.should == 5
|
492
|
-
%w(a b c d f).each { |k| cookbooks.should have_key k }
|
493
|
-
cookbooks["a"].version.should == "1.0.0"
|
494
|
-
cookbooks["b"].version.should == "1.0.0"
|
495
|
-
cookbooks["c"].version.should == "2.0.0"
|
496
|
-
cookbooks["d"].version.should == "2.1.0"
|
497
|
-
end
|
498
|
-
|
499
|
-
it "resolves a then d" do
|
500
|
-
constraints = [vc_maker("a", "1.0"), vc_maker("d", "1.1")]
|
501
|
-
cookbooks = Chef::CookbookVersionSelector.constrain(@all_cookbooks, constraints)
|
502
|
-
cookbooks.size.should == 4
|
503
|
-
%w(a c d f).each { |k| cookbooks.should have_key k }
|
504
|
-
cookbooks["a"].version.should == "1.0.0"
|
505
|
-
cookbooks["c"].version.should == "2.0.0"
|
506
|
-
cookbooks["d"].version.should == "1.1.0"
|
507
|
-
end
|
508
|
-
|
509
|
-
it "resolves d then a" do
|
510
|
-
constraints = [vc_maker("d", "1.1"), vc_maker("a", "1.0")]
|
511
|
-
cookbooks = Chef::CookbookVersionSelector.constrain(@all_cookbooks, constraints)
|
512
|
-
cookbooks.size.should == 4
|
513
|
-
%w(a c d f).each { |k| cookbooks.should have_key k }
|
514
|
-
cookbooks["a"].version.should == "1.0.0"
|
515
|
-
cookbooks["c"].version.should == "2.0.0"
|
516
|
-
cookbooks["d"].version.should == "1.1.0"
|
517
|
-
end
|
518
|
-
end
|
519
|
-
end
|
520
|
-
end
|
521
312
|
end
|