diff options
author | Bryan Kearney <bkearney@redhat.com> | 2008-10-29 11:29:12 -0400 |
---|---|---|
committer | James Turnbull <james@lovedthanlost.net> | 2008-10-30 06:59:33 +1100 |
commit | f0635179b60f5cf30d1f7070f4c3c998ad5131c0 (patch) | |
tree | 882a5d12cf186a937e5a3797d9583ede29a897a7 /spec | |
parent | 2d37f09aa093b10cb64b9b649f0066217c53d48f (diff) | |
download | puppet-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.rb | 238 | ||||
-rw-r--r-- | spec/unit/type/augeas.rb | 103 |
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 |