spec/unit/lwrp_spec.rb in microwave-1.0.4 vs spec/unit/lwrp_spec.rb in microwave-11.400.2

- old
+ new

@@ -4,13 +4,13 @@ # License:: Apache License, Version 2.0 # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at -# +# # http://www.apache.org/licenses/LICENSE-2.0 -# +# # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. @@ -23,27 +23,27 @@ $stderr.stub!(:write) end it "should log if attempting to load resource of same name" do Dir[File.expand_path(File.join(File.dirname(__FILE__), "..", "data", "lwrp", "resources", "*"))].each do |file| - Chef::Resource.build_from_file("lwrp", file, nil) + Chef::Resource::LWRPBase.build_from_file("lwrp", file, nil) end Dir[File.expand_path(File.join(File.dirname(__FILE__), "..", "data", "lwrp_override", "resources", "*"))].each do |file| Chef::Log.should_receive(:info).with(/overriding/) - Chef::Resource.build_from_file("lwrp", file, nil) + Chef::Resource::LWRPBase.build_from_file("lwrp", file, nil) end end it "should log if attempting to load provider of same name" do Dir[File.expand_path(File.join(File.dirname(__FILE__), "..", "data", "lwrp", "providers", "*"))].each do |file| - Chef::Provider.build_from_file("lwrp", file, nil) + Chef::Provider::LWRPBase.build_from_file("lwrp", file, nil) end Dir[File.expand_path(File.join(File.dirname(__FILE__), "..", "data", "lwrp_override", "providers", "*"))].each do |file| Chef::Log.should_receive(:info).with(/overriding/) - Chef::Provider.build_from_file("lwrp", file, nil) + Chef::Provider::LWRPBase.build_from_file("lwrp", file, nil) end end end @@ -59,15 +59,15 @@ describe "Lightweight Chef::Resource" do before do Dir[File.expand_path(File.join(File.dirname(__FILE__), "..", "data", "lwrp", "resources", "*"))].each do |file| - Chef::Resource.build_from_file("lwrp", file, nil) + Chef::Resource::LWRPBase.build_from_file("lwrp", file, nil) end Dir[File.expand_path(File.join(File.dirname(__FILE__), "..", "data", "lwrp_override", "resources", "*"))].each do |file| - Chef::Resource.build_from_file("lwrp", file, nil) + Chef::Resource::LWRPBase.build_from_file("lwrp", file, nil) end end it "should load the resource into a properly-named class" do Chef::Resource.const_get("LwrpFoo").should be_kind_of(Class) @@ -92,16 +92,16 @@ it "should build attribute methods that respect validation rules" do lambda { Chef::Resource::LwrpFoo.new("blah").monkey(42) }.should raise_error(ArgumentError) end it "should have access to the run context and node during class definition" do - node = Chef::Node.new(nil) - node[:penguin_name] = "jackass" + node = Chef::Node.new + node.normal[:penguin_name] = "jackass" run_context = Chef::RunContext.new(node, Chef::CookbookCollection.new, @events) Dir[File.expand_path(File.join(File.dirname(__FILE__), "..", "data", "lwrp", "resources_with_default_attributes", "*"))].each do |file| - Chef::Resource.build_from_file("lwrp", file, run_context) + Chef::Resource::LWRPBase.build_from_file("lwrp", file, run_context) end cls = Chef::Resource.const_get("LwrpNodeattr") cls.node.should be_kind_of(Chef::Node) cls.run_context.should be_kind_of(Chef::RunContext) @@ -111,32 +111,32 @@ end describe "Lightweight Chef::Provider" do before do @node = Chef::Node.new - @node.platform(:ubuntu) - @node.platform_version('8.10') + @node.automatic[:platform] = :ubuntu + @node.automatic[:platform_version] = '8.10' @events = Chef::EventDispatch::Dispatcher.new @run_context = Chef::RunContext.new(@node, Chef::CookbookCollection.new({}), @events) @runner = Chef::Runner.new(@run_context) end before(:each) do Dir[File.expand_path(File.join(File.dirname(__FILE__), "..", "data", "lwrp", "resources", "*"))].each do |file| - Chef::Resource.build_from_file("lwrp", file, @run_context) + Chef::Resource::LWRPBase.build_from_file("lwrp", file, @run_context) end Dir[File.expand_path(File.join(File.dirname(__FILE__), "..", "data", "lwrp_override", "resources", "*"))].each do |file| - Chef::Resource.build_from_file("lwrp", file, @run_context) + Chef::Resource::LWRPBase.build_from_file("lwrp", file, @run_context) end Dir[File.expand_path(File.join(File.dirname(__FILE__), "..", "data", "lwrp", "providers", "*"))].each do |file| - Chef::Provider.build_from_file("lwrp", file, @run_context) + Chef::Provider::LWRPBase.build_from_file("lwrp", file, @run_context) end Dir[File.expand_path(File.join(File.dirname(__FILE__), "..", "data", "lwrp_override", "providers", "*"))].each do |file| - Chef::Provider.build_from_file("lwrp", file, @run_context) + Chef::Provider::LWRPBase.build_from_file("lwrp", file, @run_context) end end it "should properly handle a new_resource reference" do @@ -222,9 +222,51 @@ provider = Chef::Platform.provider_for_resource(resource, :twiddle_thumbs) #provider = @runner.build_provider(resource) provider.action_twiddle_thumbs provider.enclosed_resource.monkey.should == 'bob, the monkey' + end + + describe "when using inline compilation" do + before do + # Behavior in these examples depends on implementation of fixture provider. + # See spec/data/lwrp/providers/inline_compiler + + # Side effect of lwrp_inline_compiler provider for testing notifications. + $interior_ruby_block_2 = nil + # resource type doesn't matter, so make an existing resource type work with provider. + @resource = Chef::Resource::LwrpFoo.new("morpheus", @run_context) + @resource.allowed_actions << :test + @resource.action(:test) + @resource.provider(:lwrp_inline_compiler) + end + + it "does not add interior resources to the exterior resource collection" do + @resource.run_action(:test) + @run_context.resource_collection.should be_empty + end + + context "when interior resources are updated" do + it "processes notifications within the LWRP provider's action" do + @resource.run_action(:test) + $interior_ruby_block_2.should == "executed" + end + + it "marks the parent resource updated" do + @resource.run_action(:test) + @resource.should be_updated + @resource.should be_updated_by_last_action + end + end + + context "when interior resources are not updated" do + it "does not mark the parent resource updated" do + @resource.run_action(:no_updates) + @resource.should_not be_updated + @resource.should_not be_updated_by_last_action + end + end + end end end