summaryrefslogtreecommitdiffstats
path: root/spec/unit/provider/augeas/augeas.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/unit/provider/augeas/augeas.rb')
-rw-r--r--spec/unit/provider/augeas/augeas.rb238
1 files changed, 238 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