chefspec-chef 9.3.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/Gemfile +30 -0
- data/LICENSE +22 -0
- data/Rakefile +85 -0
- data/chefspec-chef.gemspec +30 -0
- data/lib/chefspec/api/core.rb +217 -0
- data/lib/chefspec/api/described.rb +53 -0
- data/lib/chefspec/api/do_nothing.rb +26 -0
- data/lib/chefspec/api/include_any_recipe.rb +24 -0
- data/lib/chefspec/api/include_recipe.rb +28 -0
- data/lib/chefspec/api/link.rb +28 -0
- data/lib/chefspec/api/notifications.rb +40 -0
- data/lib/chefspec/api/reboot.rb +14 -0
- data/lib/chefspec/api/render_file.rb +37 -0
- data/lib/chefspec/api/state_attrs.rb +30 -0
- data/lib/chefspec/api/stubs.rb +183 -0
- data/lib/chefspec/api/stubs_for.rb +139 -0
- data/lib/chefspec/api/subscriptions.rb +37 -0
- data/lib/chefspec/api/user.rb +230 -0
- data/lib/chefspec/api.rb +39 -0
- data/lib/chefspec/berkshelf.rb +63 -0
- data/lib/chefspec/cacher.rb +64 -0
- data/lib/chefspec/coverage/filters.rb +82 -0
- data/lib/chefspec/coverage.rb +247 -0
- data/lib/chefspec/deprecations.rb +46 -0
- data/lib/chefspec/errors.rb +48 -0
- data/lib/chefspec/expect_exception.rb +51 -0
- data/lib/chefspec/extensions/chef/client.rb +21 -0
- data/lib/chefspec/extensions/chef/conditional.rb +16 -0
- data/lib/chefspec/extensions/chef/cookbook/gem_installer.rb +33 -0
- data/lib/chefspec/extensions/chef/cookbook_loader.rb +14 -0
- data/lib/chefspec/extensions/chef/cookbook_uploader.rb +12 -0
- data/lib/chefspec/extensions/chef/data_query.rb +49 -0
- data/lib/chefspec/extensions/chef/lwrp_base.rb +29 -0
- data/lib/chefspec/extensions/chef/provider.rb +39 -0
- data/lib/chefspec/extensions/chef/resource/freebsd_package.rb +17 -0
- data/lib/chefspec/extensions/chef/resource.rb +188 -0
- data/lib/chefspec/extensions/chef/run_context/cookbook_compiler.rb +84 -0
- data/lib/chefspec/extensions/chef/securable.rb +19 -0
- data/lib/chefspec/extensions/ohai/system.rb +11 -0
- data/lib/chefspec/extensions.rb +21 -0
- data/lib/chefspec/file_cache_path_proxy.rb +15 -0
- data/lib/chefspec/formatter.rb +282 -0
- data/lib/chefspec/librarian.rb +51 -0
- data/lib/chefspec/matchers/do_nothing_matcher.rb +52 -0
- data/lib/chefspec/matchers/include_any_recipe_matcher.rb +51 -0
- data/lib/chefspec/matchers/include_recipe_matcher.rb +46 -0
- data/lib/chefspec/matchers/link_to_matcher.rb +37 -0
- data/lib/chefspec/matchers/notifications_matcher.rb +143 -0
- data/lib/chefspec/matchers/render_file_matcher.rb +140 -0
- data/lib/chefspec/matchers/resource_matcher.rb +175 -0
- data/lib/chefspec/matchers/state_attrs_matcher.rb +71 -0
- data/lib/chefspec/matchers/subscribes_matcher.rb +72 -0
- data/lib/chefspec/matchers.rb +13 -0
- data/lib/chefspec/mixins/normalize.rb +22 -0
- data/lib/chefspec/policyfile.rb +69 -0
- data/lib/chefspec/renderer.rb +145 -0
- data/lib/chefspec/rspec.rb +21 -0
- data/lib/chefspec/runner.rb +8 -0
- data/lib/chefspec/server.rb +4 -0
- data/lib/chefspec/server_methods.rb +173 -0
- data/lib/chefspec/server_runner.rb +76 -0
- data/lib/chefspec/solo_runner.rb +516 -0
- data/lib/chefspec/stubs/command_registry.rb +11 -0
- data/lib/chefspec/stubs/command_stub.rb +37 -0
- data/lib/chefspec/stubs/data_bag_item_registry.rb +13 -0
- data/lib/chefspec/stubs/data_bag_item_stub.rb +25 -0
- data/lib/chefspec/stubs/data_bag_registry.rb +13 -0
- data/lib/chefspec/stubs/data_bag_stub.rb +23 -0
- data/lib/chefspec/stubs/registry.rb +32 -0
- data/lib/chefspec/stubs/search_registry.rb +13 -0
- data/lib/chefspec/stubs/search_stub.rb +25 -0
- data/lib/chefspec/stubs/stub.rb +38 -0
- data/lib/chefspec/util.rb +58 -0
- data/lib/chefspec/version.rb +3 -0
- data/lib/chefspec/zero_server.rb +142 -0
- data/lib/chefspec.rb +75 -0
- data/spec/spec_helper.rb +12 -0
- data/spec/support/hash.rb +35 -0
- data/spec/unit/cacher_spec.rb +70 -0
- data/spec/unit/coverage/filters_spec.rb +60 -0
- data/spec/unit/deprecations_spec.rb +52 -0
- data/spec/unit/errors_spec.rb +57 -0
- data/spec/unit/expect_exception_spec.rb +32 -0
- data/spec/unit/macros_spec.rb +119 -0
- data/spec/unit/matchers/do_nothing_matcher.rb +5 -0
- data/spec/unit/matchers/include_any_recipe_matcher_spec.rb +52 -0
- data/spec/unit/matchers/include_recipe_matcher_spec.rb +38 -0
- data/spec/unit/matchers/link_to_matcher_spec.rb +55 -0
- data/spec/unit/matchers/notifications_matcher_spec.rb +39 -0
- data/spec/unit/matchers/render_file_matcher_spec.rb +68 -0
- data/spec/unit/matchers/resource_matcher_spec.rb +5 -0
- data/spec/unit/matchers/state_attrs_matcher_spec.rb +68 -0
- data/spec/unit/matchers/subscribes_matcher_spec.rb +63 -0
- data/spec/unit/renderer_spec.rb +69 -0
- data/spec/unit/server_runner_spec.rb +28 -0
- data/spec/unit/solo_runner_spec.rb +171 -0
- data/spec/unit/stubs/command_registry_spec.rb +27 -0
- data/spec/unit/stubs/command_stub_spec.rb +61 -0
- data/spec/unit/stubs/data_bag_item_registry_spec.rb +39 -0
- data/spec/unit/stubs/data_bag_item_stub_spec.rb +36 -0
- data/spec/unit/stubs/data_bag_registry_spec.rb +39 -0
- data/spec/unit/stubs/data_bag_stub_spec.rb +35 -0
- data/spec/unit/stubs/registry_spec.rb +29 -0
- data/spec/unit/stubs/search_registry_spec.rb +39 -0
- data/spec/unit/stubs/search_stub_spec.rb +36 -0
- data/spec/unit/stubs/stub_spec.rb +64 -0
- data/templates/coverage/human.erb +22 -0
- data/templates/coverage/json.erb +8 -0
- data/templates/coverage/table.erb +14 -0
- data/templates/errors/cookbook_path_not_found.erb +3 -0
- data/templates/errors/erb_template_parse_error.erb +5 -0
- data/templates/errors/gem_load_error.erb +7 -0
- data/templates/errors/invalid_berkshelf_options.erb +4 -0
- data/templates/errors/may_need_to_specify_platform.erb +25 -0
- data/templates/errors/no_conversion_error.erb +1 -0
- data/templates/errors/not_stubbed.erb +7 -0
- data/templates/errors/shell_out_not_stubbed.erb +10 -0
- data/templates/errors/template_not_found.erb +9 -0
- metadata +221 -0
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# XXX: This monkeypatch is somewhat terrible and dumps all of the
|
|
2
|
+
# resources in the sub-resource collection into the main resource
|
|
3
|
+
# collection. Chefspec needs to be taught how to deal with
|
|
4
|
+
# sub-resource collections.
|
|
5
|
+
|
|
6
|
+
if defined?(Chef::Provider::InlineResources)
|
|
7
|
+
Chef::Provider::InlineResources.prepend(Module.new do
|
|
8
|
+
def initialize(resource, run_context)
|
|
9
|
+
super
|
|
10
|
+
@run_context = run_context
|
|
11
|
+
@resource_collection = run_context.resource_collection
|
|
12
|
+
end
|
|
13
|
+
end)
|
|
14
|
+
|
|
15
|
+
Chef::Provider::InlineResources::ClassMethods.prepend(Module.new do
|
|
16
|
+
def action(name, &block)
|
|
17
|
+
# Note: This does not check $CHEFSPEC_MODE.
|
|
18
|
+
define_method("action_#{name}", &block)
|
|
19
|
+
end
|
|
20
|
+
end)
|
|
21
|
+
else # >= 13.0
|
|
22
|
+
Chef::Provider.prepend(Module.new do
|
|
23
|
+
def compile_and_converge_action(&block)
|
|
24
|
+
return super unless $CHEFSPEC_MODE
|
|
25
|
+
|
|
26
|
+
instance_eval(&block)
|
|
27
|
+
end
|
|
28
|
+
end)
|
|
29
|
+
end
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
require "chef/provider"
|
|
2
|
+
require_relative "../../api"
|
|
3
|
+
|
|
4
|
+
Chef::Provider.prepend(Module.new do
|
|
5
|
+
def self.name
|
|
6
|
+
"ChefSpec extensions for Chef::Provider"
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def self.inspect
|
|
10
|
+
"#<Module: #{name}>"
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
# Hook for the stubs_for system.
|
|
14
|
+
def initialize(*args, &block)
|
|
15
|
+
super(*args, &block)
|
|
16
|
+
ChefSpec::API::StubsFor.setup_stubs_for(self, :provider) if $CHEFSPEC_MODE
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# Defang shell_out and friends so it can never run.
|
|
20
|
+
if ChefSpec::API::StubsFor::HAS_SHELLOUT_COMPACTED.satisfied_by?(Gem::Version.create(Chef::VERSION))
|
|
21
|
+
def shell_out_compacted(*args)
|
|
22
|
+
return super unless $CHEFSPEC_MODE
|
|
23
|
+
|
|
24
|
+
raise ChefSpec::Error::ShellOutNotStubbed.new(args: args, type: "provider", resource: new_resource)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def shell_out_compacted!(*args)
|
|
28
|
+
return super unless $CHEFSPEC_MODE
|
|
29
|
+
|
|
30
|
+
shell_out_compacted(*args).tap(&:error!)
|
|
31
|
+
end
|
|
32
|
+
else
|
|
33
|
+
def shell_out(*args)
|
|
34
|
+
return super unless $CHEFSPEC_MODE
|
|
35
|
+
|
|
36
|
+
raise ChefSpec::Error::ShellOutNotStubbed.new(args: args, type: "provider", resource: new_resource)
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end)
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
require "chef/resource/freebsd_package"
|
|
2
|
+
|
|
3
|
+
Chef::Resource::FreebsdPackage.prepend(Module.new do
|
|
4
|
+
#
|
|
5
|
+
# Chef decided it was a good idea to just shellout inside of a resource.
|
|
6
|
+
# Not only is that a horrible fucking idea, but I got flak when I asked
|
|
7
|
+
# to change it. So we are just going to monkey patch the fucking thing so
|
|
8
|
+
# it does not shell out.
|
|
9
|
+
#
|
|
10
|
+
# @return [false]
|
|
11
|
+
#
|
|
12
|
+
def supports_pkgng?
|
|
13
|
+
return super unless $CHEFSPEC_MODE
|
|
14
|
+
|
|
15
|
+
true
|
|
16
|
+
end
|
|
17
|
+
end)
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
require "chef/resource"
|
|
2
|
+
require "chef/version"
|
|
3
|
+
require_relative "../../api"
|
|
4
|
+
|
|
5
|
+
#
|
|
6
|
+
# Three concerns:
|
|
7
|
+
# - no-op'ing so that the action does not run the provider
|
|
8
|
+
# - tracking the actions that were performed
|
|
9
|
+
# - auto registering helper methods
|
|
10
|
+
#
|
|
11
|
+
|
|
12
|
+
module ChefSpec::Extensions::Chef::Resource
|
|
13
|
+
|
|
14
|
+
#
|
|
15
|
+
# Hooks for the stubs_for system
|
|
16
|
+
#
|
|
17
|
+
def initialize(*args, &block)
|
|
18
|
+
super(*args, &block)
|
|
19
|
+
if $CHEFSPEC_MODE
|
|
20
|
+
# Here be dragons.
|
|
21
|
+
# If we're directly inside a `load_current_resource`, this is probably
|
|
22
|
+
# something like `new_resource.class.new` so we want to call this a current_resource,
|
|
23
|
+
# Otherwise it's probably a normal resource instantiation.
|
|
24
|
+
mode = :resource
|
|
25
|
+
mode = :current_value if caller.any? { |x| x.include?("`load_current_resource'") || x.include?("`load_after_resource'") }
|
|
26
|
+
ChefSpec::API::StubsFor.setup_stubs_for(self, mode)
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def dup
|
|
31
|
+
return super unless $CHEFSPEC_MODE
|
|
32
|
+
|
|
33
|
+
# Also here be dragons.
|
|
34
|
+
super.tap do |dup_resource|
|
|
35
|
+
# We're directly inside a load_current_resource, which is probably via
|
|
36
|
+
# the load_current_value DSL system, so call this a current resource.
|
|
37
|
+
ChefSpec::API::StubsFor.setup_stubs_for(dup_resource, :current_value) if caller.any? { |x| x.include?("`load_current_resource'") || x.include?("`load_after_resource'") }
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
# mix of no-op and tracking concerns
|
|
42
|
+
def run_action(action, notification_type = nil, notifying_resource = nil)
|
|
43
|
+
return super unless $CHEFSPEC_MODE
|
|
44
|
+
|
|
45
|
+
resolve_notification_references
|
|
46
|
+
validate_action(action)
|
|
47
|
+
|
|
48
|
+
Chef::Log.info("Processing #{self} action #{action} (#{defined_at})")
|
|
49
|
+
|
|
50
|
+
ChefSpec::Coverage.add(self)
|
|
51
|
+
|
|
52
|
+
unless should_skip?(action)
|
|
53
|
+
if node.runner.step_into?(self)
|
|
54
|
+
instance_eval { @not_if = []; @only_if = [] }
|
|
55
|
+
super
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
if node.runner.compiling?
|
|
59
|
+
perform_action(action, compile_time: true)
|
|
60
|
+
else
|
|
61
|
+
perform_action(action, converge_time: true)
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
#
|
|
67
|
+
# Defang shell_out and friends so it can never run.
|
|
68
|
+
#
|
|
69
|
+
if ChefSpec::API::StubsFor::HAS_SHELLOUT_COMPACTED.satisfied_by?(Gem::Version.create(Chef::VERSION))
|
|
70
|
+
def shell_out_compacted(*args)
|
|
71
|
+
return super unless $CHEFSPEC_MODE
|
|
72
|
+
|
|
73
|
+
raise ChefSpec::Error::ShellOutNotStubbed.new(args: args, type: "resource", resource: self)
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def shell_out_compacted!(*args)
|
|
77
|
+
return super unless $CHEFSPEC_MODE
|
|
78
|
+
|
|
79
|
+
shell_out_compacted(*args).tap(&:error!)
|
|
80
|
+
end
|
|
81
|
+
else
|
|
82
|
+
def shell_out(*args)
|
|
83
|
+
return super unless $CHEFSPEC_MODE
|
|
84
|
+
|
|
85
|
+
raise ChefSpec::Error::ShellOutNotStubbed.new(args: args, type: "resource", resource: self)
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
#
|
|
90
|
+
# tracking
|
|
91
|
+
#
|
|
92
|
+
|
|
93
|
+
def perform_action(action, options = {})
|
|
94
|
+
@performed_actions ||= {}
|
|
95
|
+
@performed_actions[action.to_sym] ||= {}
|
|
96
|
+
@performed_actions[action.to_sym].merge!(options)
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
def performed_action(action)
|
|
100
|
+
@performed_actions ||= {}
|
|
101
|
+
@performed_actions[action.to_sym]
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
def performed_action?(action)
|
|
105
|
+
if action == :nothing
|
|
106
|
+
performed_actions.empty?
|
|
107
|
+
else
|
|
108
|
+
!!performed_action(action)
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
def performed_actions
|
|
113
|
+
@performed_actions ||= {}
|
|
114
|
+
@performed_actions.keys
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
#
|
|
118
|
+
# auto-registration
|
|
119
|
+
#
|
|
120
|
+
|
|
121
|
+
def self.prepended(base)
|
|
122
|
+
class << base
|
|
123
|
+
prepend ClassMethods
|
|
124
|
+
end
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
module ClassMethods
|
|
128
|
+
# XXX: kind of a crappy way to find all the names of a resource
|
|
129
|
+
def provides_names
|
|
130
|
+
@provides_names ||= []
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
def resource_name(name = ::Chef::NOT_PASSED)
|
|
134
|
+
unless name == ::Chef::NOT_PASSED
|
|
135
|
+
provides_names << name unless provides_names.include?(name)
|
|
136
|
+
inject_actions(*allowed_actions)
|
|
137
|
+
end
|
|
138
|
+
super
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
def provides(name, **options, &block)
|
|
142
|
+
provides_names << name unless provides_names.include?(name)
|
|
143
|
+
inject_actions(*allowed_actions)
|
|
144
|
+
super
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
def action(sym, description: nil, &block)
|
|
148
|
+
inject_actions(sym)
|
|
149
|
+
super(sym, &block)
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
def allowed_actions(*actions)
|
|
153
|
+
inject_actions(*actions) unless actions.empty?
|
|
154
|
+
super
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
def allowed_actions=(value)
|
|
158
|
+
inject_actions(*Array(value))
|
|
159
|
+
super
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
private
|
|
163
|
+
|
|
164
|
+
def inject_method(method, resource_name, action)
|
|
165
|
+
unless ChefSpec::API.respond_to?(method)
|
|
166
|
+
ChefSpec::API.send(:define_method, method) do |name|
|
|
167
|
+
ChefSpec::Matchers::ResourceMatcher.new(resource_name, action, name)
|
|
168
|
+
end
|
|
169
|
+
end
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
def inject_actions(*actions)
|
|
173
|
+
provides_names.each do |resource_name|
|
|
174
|
+
next unless resource_name
|
|
175
|
+
|
|
176
|
+
ChefSpec.define_matcher(resource_name)
|
|
177
|
+
actions.each do |action|
|
|
178
|
+
inject_method(:"#{action}_#{resource_name}", resource_name, action)
|
|
179
|
+
if action == :create_if_missing
|
|
180
|
+
inject_method(:"create_#{resource_name}_if_missing", resource_name, action)
|
|
181
|
+
end
|
|
182
|
+
end
|
|
183
|
+
end
|
|
184
|
+
end
|
|
185
|
+
end
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
Chef::Resource.prepend(ChefSpec::Extensions::Chef::Resource)
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
require "chef/run_context/cookbook_compiler"
|
|
2
|
+
|
|
3
|
+
Chef::RunContext::CookbookCompiler.prepend(Module.new do
|
|
4
|
+
# List of compile phases as of Chef 14:
|
|
5
|
+
# compile_libraries
|
|
6
|
+
# compile_ohai_plugins
|
|
7
|
+
# compile_attributes
|
|
8
|
+
# compile_lwrps
|
|
9
|
+
# compile_resource_definitions
|
|
10
|
+
# compile_recipes
|
|
11
|
+
|
|
12
|
+
#
|
|
13
|
+
# Compile phases that should only ever run once, globally.
|
|
14
|
+
#
|
|
15
|
+
|
|
16
|
+
def load_libraries_from_cookbook(cookbook)
|
|
17
|
+
return super unless $CHEFSPEC_MODE
|
|
18
|
+
|
|
19
|
+
$CHEFSPEC_LIBRARY_PRELOAD ||= {}
|
|
20
|
+
# Already loaded this once.
|
|
21
|
+
return if $CHEFSPEC_LIBRARY_PRELOAD[cookbook]
|
|
22
|
+
|
|
23
|
+
$CHEFSPEC_LIBRARY_PRELOAD[cookbook] = true
|
|
24
|
+
super
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def load_ohai_plugins_from_cookbook(cookbook)
|
|
28
|
+
return super unless $CHEFSPEC_MODE
|
|
29
|
+
|
|
30
|
+
$CHEFSPEC_OHAI_PRELOAD ||= {}
|
|
31
|
+
# Already loaded this once.
|
|
32
|
+
return if $CHEFSPEC_OHAI_PRELOAD[cookbook]
|
|
33
|
+
|
|
34
|
+
$CHEFSPEC_OHAI_PRELOAD[cookbook] = true
|
|
35
|
+
super
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def load_lwrps_from_cookbook(cookbook)
|
|
39
|
+
return super unless $CHEFSPEC_MODE
|
|
40
|
+
|
|
41
|
+
$CHEFSPEC_LWRP_PRELOAD ||= {}
|
|
42
|
+
# Already loaded this once.
|
|
43
|
+
return if $CHEFSPEC_LWRP_PRELOAD[cookbook]
|
|
44
|
+
|
|
45
|
+
$CHEFSPEC_LWRP_PRELOAD[cookbook] = true
|
|
46
|
+
super
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def load_resource_definitions_from_cookbook(cookbook)
|
|
50
|
+
return super unless $CHEFSPEC_MODE
|
|
51
|
+
|
|
52
|
+
$CHEFSPEC_DEFINITION_PRELOAD ||= {}
|
|
53
|
+
# Already loaded this once.
|
|
54
|
+
return if $CHEFSPEC_DEFINITION_PRELOAD[cookbook]
|
|
55
|
+
|
|
56
|
+
$CHEFSPEC_DEFINITION_PRELOAD[cookbook] = true
|
|
57
|
+
super
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
#
|
|
61
|
+
# Compile phases that should not run during preload
|
|
62
|
+
#
|
|
63
|
+
|
|
64
|
+
def compile_ohai_plugins
|
|
65
|
+
return super unless $CHEFSPEC_MODE
|
|
66
|
+
return if $CHEFSPEC_PRELOAD
|
|
67
|
+
|
|
68
|
+
super
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def compile_attributes
|
|
72
|
+
return super unless $CHEFSPEC_MODE
|
|
73
|
+
return if $CHEFSPEC_PRELOAD
|
|
74
|
+
|
|
75
|
+
super
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def compile_recipes
|
|
79
|
+
return super unless $CHEFSPEC_MODE
|
|
80
|
+
return if $CHEFSPEC_PRELOAD
|
|
81
|
+
|
|
82
|
+
super
|
|
83
|
+
end
|
|
84
|
+
end)
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
require "chef/mixin/securable"
|
|
2
|
+
|
|
3
|
+
class Chef
|
|
4
|
+
module Mixin
|
|
5
|
+
module Securable
|
|
6
|
+
# In Chef, this module is only included if the RUBY_PLATFORM is
|
|
7
|
+
# Windows-like. In ChefSpec, we want to include this, regardless of the
|
|
8
|
+
# platform, becuase this module holds the `inherits` attribute, which is
|
|
9
|
+
# critical in testing Windows resources.
|
|
10
|
+
include WindowsSecurableAttributes
|
|
11
|
+
|
|
12
|
+
def self.included(including_class)
|
|
13
|
+
including_class.extend(WindowsMacros)
|
|
14
|
+
including_class.rights_attribute(:rights)
|
|
15
|
+
including_class.rights_attribute(:deny_rights)
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
require "ohai/system"
|
|
2
|
+
|
|
3
|
+
Ohai::System.prepend(Module.new do
|
|
4
|
+
# If an Ohai segment exists, don't actually pull data in for ohai.
|
|
5
|
+
# (we have fake data for that)
|
|
6
|
+
# @see Ohai::System#run_additional_plugins
|
|
7
|
+
def run_additional_plugins(plugin_path)
|
|
8
|
+
return super unless $CHEFSPEC_MODE
|
|
9
|
+
# noop
|
|
10
|
+
end
|
|
11
|
+
end)
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
require "rspec"
|
|
2
|
+
|
|
3
|
+
module ChefSpec::Extensions
|
|
4
|
+
module Chef
|
|
5
|
+
end
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
# STOP! DO NOT ALPHABETIZE!
|
|
9
|
+
require_relative "extensions/chef/data_query" # must be before Chef::Resource loads
|
|
10
|
+
require_relative "extensions/chef/resource" # must come before client extensions or anything that winds up loading resources
|
|
11
|
+
require_relative "extensions/chef/provider"
|
|
12
|
+
require_relative "extensions/chef/securable"
|
|
13
|
+
require_relative "extensions/chef/client"
|
|
14
|
+
require_relative "extensions/chef/conditional"
|
|
15
|
+
require_relative "extensions/chef/cookbook_uploader"
|
|
16
|
+
require_relative "extensions/chef/cookbook/gem_installer"
|
|
17
|
+
require_relative "extensions/chef/lwrp_base"
|
|
18
|
+
require_relative "extensions/chef/resource/freebsd_package"
|
|
19
|
+
require_relative "extensions/chef/run_context/cookbook_compiler"
|
|
20
|
+
require_relative "extensions/chef/cookbook_loader"
|
|
21
|
+
require_relative "extensions/ohai/system"
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
require "fileutils" unless defined?(FileUtils)
|
|
2
|
+
require "singleton" unless defined?(Singleton)
|
|
3
|
+
|
|
4
|
+
module ChefSpec
|
|
5
|
+
class FileCachePathProxy
|
|
6
|
+
include Singleton
|
|
7
|
+
|
|
8
|
+
attr_reader :file_cache_path
|
|
9
|
+
|
|
10
|
+
def initialize
|
|
11
|
+
@file_cache_path = Dir.mktmpdir(%w{chefspec file_cache_path})
|
|
12
|
+
at_exit { FileUtils.rm_rf(@file_cache_path) }
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|