chefspec-chef 9.3.4
Sign up to get free protection for your applications and to get access to all the features.
- 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
|