summaryrefslogtreecommitdiffstats
path: root/spec
diff options
context:
space:
mode:
authorBryan Kearney <bkearney@redhat.com>2008-10-29 11:29:12 -0400
committerJames Turnbull <james@lovedthanlost.net>2008-10-30 06:59:33 +1100
commitf0635179b60f5cf30d1f7070f4c3c998ad5131c0 (patch)
tree882a5d12cf186a937e5a3797d9583ede29a897a7 /spec
parent2d37f09aa093b10cb64b9b649f0066217c53d48f (diff)
downloadpuppet-f0635179b60f5cf30d1f7070f4c3c998ad5131c0.tar.gz
puppet-f0635179b60f5cf30d1f7070f4c3c998ad5131c0.tar.xz
puppet-f0635179b60f5cf30d1f7070f4c3c998ad5131c0.zip
Added unit tests for the augeas type and provider
Diffstat (limited to 'spec')
-rw-r--r--spec/unit/provider/augeas/augeas.rb238
-rw-r--r--spec/unit/type/augeas.rb103
2 files changed, 341 insertions, 0 deletions
diff --git a/spec/unit/provider/augeas/augeas.rb b/spec/unit/provider/augeas/augeas.rb
new file mode 100644
index 000000000..1bbf18f83
--- /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 000000000..bda98b697
--- /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