[Pkg-puppet-devel] [SCM] Puppet packaging for Debian branch, master, updated. debian/0.24.6-1-356-g5718585

James Turnbull james at lovedthanlost.net
Fri Jan 23 14:21:35 UTC 2009


The following commit has been merged in the master branch:
commit f0635179b60f5cf30d1f7070f4c3c998ad5131c0
Author: Bryan Kearney <bkearney at redhat.com>
Date:   Wed Oct 29 11:29:12 2008 -0400

    Added unit tests for the augeas type and provider

diff --git a/lib/puppet/provider/augeas/augeas.rb b/lib/puppet/provider/augeas/augeas.rb
index a487e2a..cadbd66 100644
--- a/lib/puppet/provider/augeas/augeas.rb
+++ b/lib/puppet/provider/augeas/augeas.rb
@@ -158,12 +158,13 @@ Puppet::Type.type(:augeas).provide(:augeas) do
     # Actually execute the augeas changes.
     def execute_changes
         aug = open_augeas
-        commands = self.resource[:changes]
+        commands = resource[:changes]
+        context = resource[:context]
         commands.each do |cmd_array|
             fail("invalid command #{cmd_array.join[" "]}") if cmd_array.length < 2
             command = cmd_array[0]
             cmd_array.shift()
-            cmd_array[0]=File.join(resource[:context], cmd_array[0])
+            cmd_array[0]=File.join(context, cmd_array[0])
             debug("sending command '#{command}' with params #{cmd_array.inspect}")
             begin
                 case command
diff --git a/spec/unit/provider/augeas/augeas.rb b/spec/unit/provider/augeas/augeas.rb
new file mode 100644
index 0000000..1bbf18f
--- /dev/null
+++ b/spec/unit/provider/augeas/augeas.rb
@@ -0,0 +1,238 @@
+#!/usr/bin/env ruby
+
+require File.dirname(__FILE__) + '/../../../spec_helper'
+
+provider_class = Puppet::Type.type(:augeas).provider(:augeas)
+
+describe provider_class do
+    describe "command parsing" do
+        it "should break apart a single line into three tokens" do
+            provider = provider_class.new()
+            tokens = provider.parse_commands("set /Jar/Jar Binks")
+            tokens.size.should == 1
+            tokens[0].size.should == 3      
+            tokens[0][0].should == "set"
+            tokens[0][1].should == "/Jar/Jar"
+            tokens[0][2].should == "Binks"            
+        end
+        
+        it "should break apart a multiple line into six tokens" do
+            provider = provider_class.new()
+            tokens = provider.parse_commands("set /Jar/Jar Binks\nrm anakin skywalker")
+            tokens.size.should == 2
+            tokens[0].size.should == 3      
+            tokens[1].size.should == 3            
+            tokens[0][0].should == "set"
+            tokens[0][1].should == "/Jar/Jar"
+            tokens[0][2].should == "Binks"            
+            tokens[1][0].should == "rm"
+            tokens[1][1].should == "anakin"
+            tokens[1][2].should == "skywalker"                
+        end        
+        
+        it "should handle arrays" do
+            provider = provider_class.new()
+            commands = ["set /Jar/Jar Binks", "rm anakin skywalker"]
+            tokens = provider.parse_commands(commands)
+            tokens.size.should == 2
+            tokens[0].size.should == 3      
+            tokens[1].size.should == 3            
+            tokens[0][0].should == "set"
+            tokens[0][1].should == "/Jar/Jar"
+            tokens[0][2].should == "Binks"            
+            tokens[1][0].should == "rm"
+            tokens[1][1].should == "anakin"
+            tokens[1][2].should == "skywalker"                
+        end                
+        
+        it "should concat the last values" do
+            provider = provider_class.new()
+            tokens = provider.parse_commands("set /Jar/Jar Binks is my copilot")
+            tokens.size.should == 1
+            tokens[0].size.should == 3      
+            tokens[0][0].should == "set"
+            tokens[0][1].should == "/Jar/Jar"
+            tokens[0][2].should == "Binks is my copilot"            
+        end
+    end
+    
+    describe "get filters" do
+        before do
+            augeas_stub = stub("augeas", :get => "value")
+            @provider = provider_class.new()        
+            @provider.stubs(:open_augeas).returns(augeas_stub)        
+        end
+        
+        it "should return false for a = nonmatch" do
+            command = ["get", "fake value", "==", "value"]
+            @provider.process_get(command).should == true
+        end
+        
+        it "should return true for a != match" do
+            command = ["get", "fake value", "!=", "value"]
+            @provider.process_get(command).should == false
+        end        
+        
+        it "should return true for a =~ match" do
+            command = ["get", "fake value", "=~", "val*"]
+            @provider.process_get(command).should == true
+        end           
+        
+        it "should return false for a == nonmatch" do
+            command = ["get", "fake value", "=~", "num*"]
+            @provider.process_get(command).should == false
+        end 
+    end
+    
+    describe "match filters" do
+        before do
+            augeas_stub = stub("augeas", :match => ["set", "of", "values"])
+            @provider = provider_class.new()        
+            @provider.stubs(:open_augeas).returns(augeas_stub)        
+        end
+        
+        it "should return true for size match" do
+            command = ["match", "fake value", "size", "==", "3"]
+            @provider.process_match(command).should == true
+        end
+        
+        it "should return false for a size non match" do
+            command = ["match", "fake value", "size", "<", "3"]
+            @provider.process_match(command).should == false
+        end    
+        
+        it "should return true for includes match" do
+            command = ["get", "fake value", "include", "values"]
+            @provider.process_match(command).should == true
+        end           
+        
+        it "should return false for includes non match" do
+            command = ["get", "fake value", "include", "JarJar"]
+            @provider.process_match(command).should == false
+        end           
+        
+        it "should return true for an array match" do
+            command = ["get", "fake value", "==", "['set', 'of', 'values']"]
+            @provider.process_match(command).should == true
+        end  
+        
+        it "should return false for an array non match" do
+            command = ["get", "fake value", "==", "['this', 'should', 'not', 'match']"]
+            @provider.process_match(command).should == false
+        end                 
+    end    
+    
+    describe "need_to_run" do
+        it "should handle no filters" do
+            resource = stub("resource", :[] => "")
+            provider = provider_class.new(resource)
+            provider.need_to_run?.should == true        
+        end
+        
+        it "should return true when a get filter matches" do
+            resource = stub("resource", :[] => "get path == value")
+            provider = provider_class.new(resource)
+            augeas_stub = stub("augeas", :get => "value")
+            provider.stubs(:open_augeas).returns(augeas_stub)              
+            provider.need_to_run?.should == true       
+        end       
+        
+        it "should return false when a get filter does not match" do
+            resource = stub("resource", :[] => "get path == another value")
+            provider = provider_class.new(resource)
+            augeas_stub = stub("augeas", :get => "value")
+            provider.stubs(:open_augeas).returns(augeas_stub)              
+            provider.need_to_run?.should == false       
+        end            
+        
+        it "should return true when a match filter matches" do
+            resource = stub("resource", :[] => "match path size == 3")
+            provider = provider_class.new(resource)
+            augeas_stub = stub("augeas", :match => ["set", "of", "values"])
+            provider.stubs(:open_augeas).returns(augeas_stub)              
+            provider.need_to_run?.should == true       
+        end       
+        
+        it "should return false when a match filter does not match" do
+            resource = stub("resource", :[] => "match path size == 2")
+            provider = provider_class.new(resource)
+            augeas_stub = stub("augeas", :match => ["set", "of", "values"])
+            provider.stubs(:open_augeas).returns(augeas_stub)              
+            provider.need_to_run?.should == false       
+        end       
+    end
+    
+    describe "augeas integration" do
+        
+        before do
+            @resource = stub("resource")
+            @provider = provider_class.new(@resource)
+            @augeas = stub("augeas")
+            @provider.stubs(:open_augeas).returns(@augeas)
+        end
+    
+        it "should handle set commands" do
+            command = [["set", "/Jar/Jar", "Binks"]]
+            context = "/some/path"
+            @resource.expects(:[]).times(2).returns(command).then.returns(context)
+            @augeas.expects(:set).with("/some/path/Jar/Jar", "Binks")
+            @augeas.expects(:save).returns(true)
+            @provider.execute_changes.should == :executed
+        end
+        
+        it "should handle rm commands" do
+            command = [["rm", "/Jar/Jar"]]
+            context = ""
+            @resource.expects(:[]).times(2).returns(command).then.returns(context)
+            @augeas.expects(:rm).with("/Jar/Jar")
+            @augeas.expects(:save).returns(true)
+            @provider.execute_changes.should == :executed
+        end        
+        
+        it "should handle remove commands" do
+            command = [["remove", "Jar/Jar"]]
+            context = ""
+            @resource.expects(:[]).times(2).returns(command).then.returns(context)
+            @augeas.expects(:rm).with("/Jar/Jar")
+            @augeas.expects(:save).returns(true)
+            @provider.execute_changes.should == :executed
+        end              
+        
+        it "should handle clear commands" do
+            command = [["clear", "/Jar/Jar"]]
+            context = "/foo"
+            @resource.expects(:[]).times(2).returns(command).then.returns(context)
+            @augeas.expects(:clear).with("/foo/Jar/Jar")
+            @augeas.expects(:save).returns(true)
+            @provider.execute_changes.should == :executed
+        end        
+        
+        it "should handle insert commands" do
+            command = [["insert", "/Jar/Jar"]]
+            context = "/foo"
+            @resource.expects(:[]).times(2).returns(command).then.returns(context)
+            @augeas.expects(:insert).with("/foo/Jar/Jar")
+            @augeas.expects(:save).returns(true)
+            @provider.execute_changes.should == :executed
+        end     
+        
+        it "should handle ins commands" do
+            command = [["ins", "/Jar/Jar"]]
+            context = "/foo"
+            @resource.expects(:[]).times(2).returns(command).then.returns(context)
+            @augeas.expects(:insert).with("/foo/Jar/Jar")
+            @augeas.expects(:save).returns(true)
+            @provider.execute_changes.should == :executed
+        end      
+        
+        it "should handle multiple commands" do
+            command = [["ins", "/Jar/Jar"], ["clear", "/Jar/Jar"]]
+            context = "/foo"
+            @resource.expects(:[]).times(2).returns(command).then.returns(context)
+            @augeas.expects(:insert).with("/foo/Jar/Jar")
+            @augeas.expects(:clear).with("/foo/Jar/Jar")            
+            @augeas.expects(:save).returns(true)
+            @provider.execute_changes.should == :executed
+        end    
+    end
+end
diff --git a/spec/unit/type/augeas.rb b/spec/unit/type/augeas.rb
new file mode 100644
index 0000000..bda98b6
--- /dev/null
+++ b/spec/unit/type/augeas.rb
@@ -0,0 +1,103 @@
+#!/usr/bin/env ruby
+
+require File.dirname(__FILE__) + '/../../spec_helper'
+
+augeas = Puppet::Type.type(:augeas)
+
+describe augeas do
+
+	describe "basic structure" do
+		it "should have a default provider inheriting from Puppet::Provider" do
+			augeas.defaultprovider.ancestors.should be_include(Puppet::Provider)
+		end
+		
+		it "should have a valid provider" do
+			augeas.create(:name => "foo").provider.class.ancestors.should be_include(Puppet::Provider)
+		end		
+
+		it "should be able to create a instance" do
+			augeas.create(:name => "bar").should_not be_nil
+		end
+
+		it "should have an parse_commands feature" do
+			augeas.provider_feature(:parse_commands).should_not be_nil
+		end
+		
+		it "should have an need_to_run? feature" do
+			augeas.provider_feature(:need_to_run?).should_not be_nil
+		end    
+		
+		it "should have an execute_changes feature" do
+			augeas.provider_feature(:execute_changes).should_not be_nil
+		end   		
+
+		properties = [:returns]
+		params = [:name, :context, :onlyif, :changes, :root, :load_path, :type_check]
+
+		properties.each do |property|
+			it "should have a %s property" % property do
+				augeas.attrclass(property).ancestors.should be_include(Puppet::Property)
+			end
+
+			it "should have documentation for its %s property" % property do
+				augeas.attrclass(property).doc.should be_instance_of(String)
+			end
+		end		
+		
+		params.each do |param|
+			it "should have a %s parameter" % param do
+				augeas.attrclass(param).ancestors.should be_include(Puppet::Parameter)
+			end
+
+			it "should have documentation for its %s parameter" % param do
+				augeas.attrclass(param).doc.should be_instance_of(String)
+			end
+		end				
+	end
+	
+	describe "default values" do
+		it "should be blank for context" do
+			augeas.create(:name => :context)[:context].should == ""
+		end
+		
+		it "should be blank for onlyif" do
+			augeas.create(:name => :onlyif)[:onlyif].should == ""
+		end		
+		
+		it "should be blank for load_path" do
+			augeas.create(:name => :load_path)[:load_path].should == ""
+		end		
+		
+		it "should be / for root" do
+			augeas.create(:name => :root)[:root].should == "/"
+		end		
+		
+		it "should be false for type_check" do
+			augeas.create(:name => :type_check)[:type_check].should == :false
+		end				
+	end
+	
+	describe "provider interaction" do
+		it "should munge the changes" do
+			provider = stub("provider", :parse_commands => "Jar Jar Binks")
+			resource = stub('resource', :resource => nil, :provider => provider, :line => nil, :file => nil)
+			changes = augeas.attrclass(:changes).new(:resource => resource)
+			changes.value= "Testing 123"
+			changes.value.should == "Jar Jar Binks"
+		end
+		
+		it "should return 0 if it does not need to run" do
+			provider = stub("provider", :need_to_run? => false)
+			resource = stub('resource', :resource => nil, :provider => provider, :line => nil, :file => nil)
+			changes = augeas.attrclass(:returns).new(:resource => resource)
+			changes.retrieve.should == 0
+		end		
+		
+		it "should return :need_to_run if it needs to run" do
+			provider = stub("provider", :need_to_run? => true)
+			resource = stub('resource', :resource => nil, :provider => provider, :line => nil, :file => nil)
+			changes = augeas.attrclass(:returns).new(:resource => resource)
+			changes.retrieve.should == :need_to_run
+		end				
+	end
+end

-- 
Puppet packaging for Debian



More information about the Pkg-puppet-devel mailing list