aboutsummaryrefslogtreecommitdiff
path: root/spec/unit
diff options
context:
space:
mode:
Diffstat (limited to 'spec/unit')
-rw-r--r--spec/unit/provider/augeas/augeas_spec.rb832
-rw-r--r--spec/unit/type/augeas_spec.rb1
2 files changed, 421 insertions, 412 deletions
diff --git a/spec/unit/provider/augeas/augeas_spec.rb b/spec/unit/provider/augeas/augeas_spec.rb
index 39dba9c..46bf161 100644
--- a/spec/unit/provider/augeas/augeas_spec.rb
+++ b/spec/unit/provider/augeas/augeas_spec.rb
@@ -1,21 +1,27 @@
-#! /usr/bin/env ruby
require 'spec_helper'
require 'puppet/util/package'
-provider_class = Puppet::Type.type(:augeas).provider(:augeas)
-
-describe provider_class do
- before(:each) do
- @resource = Puppet::Type.type(:augeas).new(
+describe Puppet::Type.type(:augeas).provider(:augeas) do
+ let(:resource) do
+ Puppet::Type.type(:augeas).new(
name: 'test',
root: my_fixture_dir,
provider: :augeas,
)
- @provider = provider_class.new(@resource)
+ end
+
+ let(:provider) do
+ resource.provider
+ end
+
+ let(:logs) do
+ # rubocop:disable RSpec/InstanceVariable
+ @logs
+ # rubocop:enable RSpec/InstanceVariable
end
after(:each) do
- @provider.close_augeas
+ provider.close_augeas
end
def my_fixture_dir
@@ -41,8 +47,8 @@ describe provider_class do
describe 'command parsing' do
it 'breaks apart a single line into three tokens and clean up the context' do
- @resource[:context] = '/context'
- tokens = @provider.parse_commands('set Jar/Jar Binks')
+ resource[:context] = '/context'
+ tokens = provider.parse_commands('set Jar/Jar Binks')
expect(tokens.size).to eq(1)
expect(tokens[0].size).to eq(3)
expect(tokens[0][0]).to eq('set')
@@ -51,7 +57,7 @@ describe provider_class do
end
it 'breaks apart a multiple line into six tokens' do
- tokens = @provider.parse_commands("set /Jar/Jar Binks\nrm anakin")
+ tokens = provider.parse_commands("set /Jar/Jar Binks\nrm anakin")
expect(tokens.size).to eq(2)
expect(tokens[0].size).to eq(3)
expect(tokens[1].size).to eq(2)
@@ -63,7 +69,7 @@ describe provider_class do
end
it 'strips whitespace and ignore blank lines' do
- tokens = @provider.parse_commands(" set /Jar/Jar Binks \t\n \n\n rm anakin ")
+ tokens = provider.parse_commands(" set /Jar/Jar Binks \t\n \n\n rm anakin ")
expect(tokens.size).to eq(2)
expect(tokens[0].size).to eq(3)
expect(tokens[1].size).to eq(2)
@@ -75,9 +81,9 @@ describe provider_class do
end
it 'handles arrays' do
- @resource[:context] = '/foo/'
+ resource[:context] = '/foo/'
commands = ['set /Jar/Jar Binks', 'rm anakin']
- tokens = @provider.parse_commands(commands)
+ tokens = provider.parse_commands(commands)
expect(tokens.size).to eq(2)
expect(tokens[0].size).to eq(3)
expect(tokens[1].size).to eq(2)
@@ -100,8 +106,8 @@ describe provider_class do
# end
it 'accepts spaces in the value and single ticks' do
- @resource[:context] = '/foo/'
- tokens = @provider.parse_commands("set JarJar 'Binks is my copilot'")
+ resource[:context] = '/foo/'
+ tokens = provider.parse_commands("set JarJar 'Binks is my copilot'")
expect(tokens.size).to eq(1)
expect(tokens[0].size).to eq(3)
expect(tokens[0][0]).to eq('set')
@@ -110,8 +116,8 @@ describe provider_class do
end
it 'accepts spaces in the value and double ticks' do
- @resource[:context] = '/foo/'
- tokens = @provider.parse_commands('set /JarJar "Binks is my copilot"')
+ resource[:context] = '/foo/'
+ tokens = provider.parse_commands('set /JarJar "Binks is my copilot"')
expect(tokens.size).to eq(1)
expect(tokens[0].size).to eq(3)
expect(tokens[0][0]).to eq('set')
@@ -120,8 +126,8 @@ describe provider_class do
end
it 'accepts mixed ticks' do
- @resource[:context] = '/foo/'
- tokens = @provider.parse_commands('set JarJar "Some \'Test\'"')
+ resource[:context] = '/foo/'
+ tokens = provider.parse_commands('set JarJar "Some \'Test\'"')
expect(tokens.size).to eq(1)
expect(tokens[0].size).to eq(3)
expect(tokens[0][0]).to eq('set')
@@ -130,322 +136,324 @@ describe provider_class do
end
it 'handles predicates with literals' do
- @resource[:context] = '/foo/'
- tokens = @provider.parse_commands("rm */*[module='pam_console.so']")
+ resource[:context] = '/foo/'
+ tokens = provider.parse_commands("rm */*[module='pam_console.so']")
expect(tokens).to eq([['rm', "/foo/*/*[module='pam_console.so']"]])
end
it 'handles whitespace in predicates' do
- @resource[:context] = '/foo/'
- tokens = @provider.parse_commands("ins 42 before /files/etc/hosts/*/ipaddr[ . = '127.0.0.1' ]")
+ resource[:context] = '/foo/'
+ tokens = provider.parse_commands("ins 42 before /files/etc/hosts/*/ipaddr[ . = '127.0.0.1' ]")
expect(tokens).to eq([['ins', '42', 'before', "/files/etc/hosts/*/ipaddr[ . = '127.0.0.1' ]"]])
end
it 'handles multiple predicates' do
- @resource[:context] = '/foo/'
- tokens = @provider.parse_commands("clear pam.d/*/*[module = 'system-auth'][type = 'account']")
+ resource[:context] = '/foo/'
+ tokens = provider.parse_commands("clear pam.d/*/*[module = 'system-auth'][type = 'account']")
expect(tokens).to eq([['clear', "/foo/pam.d/*/*[module = 'system-auth'][type = 'account']"]])
end
it 'handles nested predicates' do
- @resource[:context] = '/foo/'
+ resource[:context] = '/foo/'
args = ['clear', "/foo/pam.d/*/*[module[ ../type = 'type] = 'system-auth'][type[last()] = 'account']"]
- tokens = @provider.parse_commands(args.join(' '))
+ tokens = provider.parse_commands(args.join(' '))
expect(tokens).to eq([args])
end
it 'handles escaped doublequotes in doublequoted string' do
- @resource[:context] = '/foo/'
- tokens = @provider.parse_commands("set /foo \"''\\\"''\"")
+ resource[:context] = '/foo/'
+ tokens = provider.parse_commands("set /foo \"''\\\"''\"")
expect(tokens).to eq([['set', '/foo', "''\"''"]])
end
it 'preserves escaped single quotes in double quoted strings' do
- @resource[:context] = '/foo/'
- tokens = @provider.parse_commands("set /foo \"\\'\"")
+ resource[:context] = '/foo/'
+ tokens = provider.parse_commands("set /foo \"\\'\"")
expect(tokens).to eq([['set', '/foo', "\\'"]])
end
it 'allows escaped spaces and brackets in paths' do
- @resource[:context] = '/foo/'
+ resource[:context] = '/foo/'
args = ['set', '/white\\ space/\\[section', 'value']
- tokens = @provider.parse_commands(args.join(" \t "))
+ tokens = provider.parse_commands(args.join(" \t "))
expect(tokens).to eq([args])
end
it 'allows single quoted escaped spaces in paths' do
- @resource[:context] = '/foo/'
+ resource[:context] = '/foo/'
args = ['set', "'/white\\ space/key'", 'value']
- tokens = @provider.parse_commands(args.join(" \t "))
+ tokens = provider.parse_commands(args.join(" \t "))
expect(tokens).to eq([['set', '/white\\ space/key', 'value']])
end
it 'allows double quoted escaped spaces in paths' do
- @resource[:context] = '/foo/'
+ resource[:context] = '/foo/'
args = ['set', '"/white\\ space/key"', 'value']
- tokens = @provider.parse_commands(args.join(" \t "))
+ tokens = provider.parse_commands(args.join(" \t "))
expect(tokens).to eq([['set', '/white\\ space/key', 'value']])
end
it 'removes trailing slashes' do
- @resource[:context] = '/foo/'
- tokens = @provider.parse_commands('set foo/ bar')
+ resource[:context] = '/foo/'
+ tokens = provider.parse_commands('set foo/ bar')
expect(tokens).to eq([['set', '/foo/foo', 'bar']])
end
end
describe 'get filters' do
+ let(:augeas) { stub('augeas', get: 'value') }
+
before(:each) do
- augeas = stub('augeas', get: 'value')
augeas.stubs('close')
- @provider.aug = augeas
+ provider.aug = augeas
end
it 'returns false for a = nonmatch' do
command = ['get', 'fake value', '==', 'value']
- expect(@provider.process_get(command)).to eq(true)
+ expect(provider.process_get(command)).to eq(true)
end
it 'returns true for a != match' do
command = ['get', 'fake value', '!=', 'value']
- expect(@provider.process_get(command)).to eq(false)
+ expect(provider.process_get(command)).to eq(false)
end
it 'returns true for a =~ match' do
command = ['get', 'fake value', '=~', 'val*']
- expect(@provider.process_get(command)).to eq(true)
+ expect(provider.process_get(command)).to eq(true)
end
it 'returns false for a == nonmatch' do
command = ['get', 'fake value', '=~', 'num*']
- expect(@provider.process_get(command)).to eq(false)
+ expect(provider.process_get(command)).to eq(false)
end
end
describe 'values filters' do
+ let(:augeas) { stub('augeas', match: %w[set of values]) }
+
before(:each) do
- augeas = stub('augeas', match: %w[set of values])
augeas.stubs(:get).returns('set').then.returns('of').then.returns('values')
augeas.stubs('close')
- @provider = provider_class.new(@resource)
- @provider.aug = augeas
+ provider.aug = augeas
end
it 'returns true for includes match' do
command = ['values', 'fake value', 'include values']
- expect(@provider.process_values(command)).to eq(true)
+ expect(provider.process_values(command)).to eq(true)
end
it 'returns false for includes non match' do
command = ['values', 'fake value', 'include JarJar']
- expect(@provider.process_values(command)).to eq(false)
+ expect(provider.process_values(command)).to eq(false)
end
- it 'returns true for includes match' do
+ it 'returns true for not_include non match' do
command = ['values', 'fake value', 'not_include JarJar']
- expect(@provider.process_values(command)).to eq(true)
+ expect(provider.process_values(command)).to eq(true)
end
- it 'returns false for includes non match' do
+ it 'returns false for non_include match' do
command = ['values', 'fake value', 'not_include values']
- expect(@provider.process_values(command)).to eq(false)
+ expect(provider.process_values(command)).to eq(false)
end
it 'returns true for an array match' do
command = ['values', 'fake value', "== ['set', 'of', 'values']"]
- expect(@provider.process_values(command)).to eq(true)
+ expect(provider.process_values(command)).to eq(true)
end
it 'returns false for an array non match' do
command = ['values', 'fake value', "== ['this', 'should', 'not', 'match']"]
- expect(@provider.process_values(command)).to eq(false)
+ expect(provider.process_values(command)).to eq(false)
end
it 'returns false for an array match with noteq' do
command = ['values', 'fake value', "!= ['set', 'of', 'values']"]
- expect(@provider.process_values(command)).to eq(false)
+ expect(provider.process_values(command)).to eq(false)
end
it 'returns true for an array non match with noteq' do
command = ['values', 'fake value', "!= ['this', 'should', 'not', 'match']"]
- expect(@provider.process_values(command)).to eq(true)
+ expect(provider.process_values(command)).to eq(true)
end
end
describe 'match filters' do
+ let(:augeas) { stub('augeas', match: %w[set of values]) }
+
before(:each) do
- augeas = stub('augeas', match: %w[set of values])
augeas.stubs('close')
- @provider = provider_class.new(@resource)
- @provider.aug = augeas
+ provider.aug = augeas
end
it 'returns true for size match' do
command = ['match', 'fake value', 'size == 3']
- expect(@provider.process_match(command)).to eq(true)
+ expect(provider.process_match(command)).to eq(true)
end
it 'returns false for a size non match' do
command = ['match', 'fake value', 'size < 3']
- expect(@provider.process_match(command)).to eq(false)
+ expect(provider.process_match(command)).to eq(false)
end
it 'returns true for includes match' do
command = ['match', 'fake value', 'include values']
- expect(@provider.process_match(command)).to eq(true)
+ expect(provider.process_match(command)).to eq(true)
end
it 'returns false for includes non match' do
command = ['match', 'fake value', 'include JarJar']
- expect(@provider.process_match(command)).to eq(false)
+ expect(provider.process_match(command)).to eq(false)
end
- it 'returns true for includes match' do
+ it 'returns true for not_includes non match' do
command = ['match', 'fake value', 'not_include JarJar']
- expect(@provider.process_match(command)).to eq(true)
+ expect(provider.process_match(command)).to eq(true)
end
- it 'returns false for includes non match' do
+ it 'returns false for not_includes match' do
command = ['match', 'fake value', 'not_include values']
- expect(@provider.process_match(command)).to eq(false)
+ expect(provider.process_match(command)).to eq(false)
end
it 'returns true for an array match' do
command = ['match', 'fake value', "== ['set', 'of', 'values']"]
- expect(@provider.process_match(command)).to eq(true)
+ expect(provider.process_match(command)).to eq(true)
end
it 'returns false for an array non match' do
command = ['match', 'fake value', "== ['this', 'should', 'not', 'match']"]
- expect(@provider.process_match(command)).to eq(false)
+ expect(provider.process_match(command)).to eq(false)
end
it 'returns false for an array match with noteq' do
command = ['match', 'fake value', "!= ['set', 'of', 'values']"]
- expect(@provider.process_match(command)).to eq(false)
+ expect(provider.process_match(command)).to eq(false)
end
it 'returns true for an array non match with noteq' do
command = ['match', 'fake value', "!= ['this', 'should', 'not', 'match']"]
- expect(@provider.process_match(command)).to eq(true)
+ expect(provider.process_match(command)).to eq(true)
end
end
describe 'need to run' do
+ let(:augeas) { stub('augeas') }
+
before(:each) do
- @augeas = stub('augeas')
- @augeas.stubs('close')
- @provider.aug = @augeas
+ augeas.stubs('close')
+ provider.aug = augeas
# These tests pretend to be an earlier version so the provider doesn't
# attempt to make the change in the need_to_run? method
- @provider.stubs(:get_augeas_version).returns('0.3.5')
+ provider.stubs(:get_augeas_version).returns('0.3.5')
end
it 'handles no filters' do
- @augeas.stubs('match').returns(%w[set of values])
- expect(@provider.need_to_run?).to eq(true)
+ augeas.stubs('match').returns(%w[set of values])
+ expect(provider.need_to_run?).to eq(true)
end
it 'returns true when a get filter matches' do
- @resource[:onlyif] = 'get path == value'
- @augeas.stubs('get').returns('value')
- expect(@provider.need_to_run?).to eq(true)
+ resource[:onlyif] = 'get path == value'
+ augeas.stubs('get').returns('value')
+ expect(provider.need_to_run?).to eq(true)
end
describe 'performing numeric comparisons (#22617)' do
it 'returns true when a get string compare is true' do
- @resource[:onlyif] = 'get bpath > a'
- @augeas.stubs('get').returns('b')
- expect(@provider.need_to_run?).to eq(true)
+ resource[:onlyif] = 'get bpath > a'
+ augeas.stubs('get').returns('b')
+ expect(provider.need_to_run?).to eq(true)
end
it 'returns false when a get string compare is false' do
- @resource[:onlyif] = 'get a19path > a2'
- @augeas.stubs('get').returns('a19')
- expect(@provider.need_to_run?).to eq(false)
+ resource[:onlyif] = 'get a19path > a2'
+ augeas.stubs('get').returns('a19')
+ expect(provider.need_to_run?).to eq(false)
end
it 'returns true when a get int gt compare is true' do
- @resource[:onlyif] = 'get path19 > 2'
- @augeas.stubs('get').returns('19')
- expect(@provider.need_to_run?).to eq(true)
+ resource[:onlyif] = 'get path19 > 2'
+ augeas.stubs('get').returns('19')
+ expect(provider.need_to_run?).to eq(true)
end
it 'returns true when a get int ge compare is true' do
- @resource[:onlyif] = 'get path19 >= 2'
- @augeas.stubs('get').returns('19')
- expect(@provider.need_to_run?).to eq(true)
+ resource[:onlyif] = 'get path19 >= 2'
+ augeas.stubs('get').returns('19')
+ expect(provider.need_to_run?).to eq(true)
end
it 'returns true when a get int lt compare is true' do
- @resource[:onlyif] = 'get path2 < 19'
- @augeas.stubs('get').returns('2')
- expect(@provider.need_to_run?).to eq(true)
+ resource[:onlyif] = 'get path2 < 19'
+ augeas.stubs('get').returns('2')
+ expect(provider.need_to_run?).to eq(true)
end
it 'returns false when a get int le compare is false' do
- @resource[:onlyif] = 'get path39 <= 4'
- @augeas.stubs('get').returns('39')
- expect(@provider.need_to_run?).to eq(false)
+ resource[:onlyif] = 'get path39 <= 4'
+ augeas.stubs('get').returns('39')
+ expect(provider.need_to_run?).to eq(false)
end
end
describe 'performing is_numeric checks (#22617)' do
it 'returns false for nil' do
- expect(@provider.is_numeric?(nil)).to eq(false)
+ expect(provider.is_numeric?(nil)).to eq(false)
end
it 'returns true for Integers' do
- expect(@provider.is_numeric?(9)).to eq(true)
+ expect(provider.is_numeric?(9)).to eq(true)
end
it 'returns true for numbers in Strings' do
- expect(@provider.is_numeric?('9')).to eq(true)
+ expect(provider.is_numeric?('9')).to eq(true)
end
it 'returns false for non-number Strings' do
- expect(@provider.is_numeric?('x9')).to eq(false)
+ expect(provider.is_numeric?('x9')).to eq(false)
end
it 'returns false for other types' do
- expect(@provider.is_numeric?([true])).to eq(false)
+ expect(provider.is_numeric?([true])).to eq(false)
end
end
it 'returns false when a get filter does not match' do
- @resource[:onlyif] = 'get path == another value'
- @augeas.stubs('get').returns('value')
- expect(@provider.need_to_run?).to eq(false)
+ resource[:onlyif] = 'get path == another value'
+ augeas.stubs('get').returns('value')
+ expect(provider.need_to_run?).to eq(false)
end
it 'returns true when a match filter matches' do
- @resource[:onlyif] = 'match path size == 3'
- @augeas.stubs('match').returns(%w[set of values])
- expect(@provider.need_to_run?).to eq(true)
+ resource[:onlyif] = 'match path size == 3'
+ augeas.stubs('match').returns(%w[set of values])
+ expect(provider.need_to_run?).to eq(true)
end
it 'returns false when a match filter does not match' do
- @resource[:onlyif] = 'match path size == 2'
- @augeas.stubs('match').returns(%w[set of values])
- expect(@provider.need_to_run?).to eq(false)
+ resource[:onlyif] = 'match path size == 2'
+ augeas.stubs('match').returns(%w[set of values])
+ expect(provider.need_to_run?).to eq(false)
end
# Now setting force to true
it 'setting force should not change the above logic' do
- @resource[:force] = true
- @resource[:onlyif] = 'match path size == 2'
- @augeas.stubs('match').returns(%w[set of values])
- expect(@provider.need_to_run?).to eq(false)
+ resource[:force] = true
+ resource[:onlyif] = 'match path size == 2'
+ augeas.stubs('match').returns(%w[set of values])
+ expect(provider.need_to_run?).to eq(false)
end
# Ticket 5211 testing
it 'returns true when a size != the provided value' do
- @resource[:onlyif] = 'match path size != 17'
- @augeas.stubs('match').returns(%w[set of values])
- expect(@provider.need_to_run?).to eq(true)
+ resource[:onlyif] = 'match path size != 17'
+ augeas.stubs('match').returns(%w[set of values])
+ expect(provider.need_to_run?).to eq(true)
end
# Ticket 5211 testing
it 'returns false when a size does equal the provided value' do
- @resource[:onlyif] = 'match path size != 3'
- @augeas.stubs('match').returns(%w[set of values])
- expect(@provider.need_to_run?).to eq(false)
+ resource[:onlyif] = 'match path size != 3'
+ augeas.stubs('match').returns(%w[set of values])
+ expect(provider.need_to_run?).to eq(false)
end
[true, false].product([true, false]) do |cfg, param|
@@ -454,34 +462,34 @@ describe provider_class do
before(:each) do
Puppet[:show_diff] = cfg
- @resource[:show_diff] = param
+ resource[:show_diff] = param
- @resource[:root] = ''
- @resource[:context] = '/files'
- @resource[:changes] = ["set #{file}/foo bar"]
+ resource[:root] = ''
+ resource[:context] = '/files'
+ resource[:changes] = ["set #{file}/foo bar"]
File.stubs(:delete)
- @provider.stubs(:get_augeas_version).returns('0.10.0')
- @provider.stubs('diff').with(file.to_s, "#{file}.augnew").returns('diff')
-
- @augeas.stubs(:set).returns(true)
- @augeas.stubs(:save).returns(true)
- @augeas.stubs(:match).with('/augeas/events/saved').returns(['/augeas/events/saved'])
- @augeas.stubs(:get).with('/augeas/events/saved').returns("/files#{file}")
- @augeas.stubs(:set).with('/augeas/save', 'newfile')
+ provider.stubs(:get_augeas_version).returns('0.10.0')
+ provider.stubs('diff').with(file.to_s, "#{file}.augnew").returns('diff')
+
+ augeas.stubs(:set).returns(true)
+ augeas.stubs(:save).returns(true)
+ augeas.stubs(:match).with('/augeas/events/saved').returns(['/augeas/events/saved'])
+ augeas.stubs(:get).with('/augeas/events/saved').returns("/files#{file}")
+ augeas.stubs(:set).with('/augeas/save', 'newfile')
end
if cfg && param
it 'displays a diff' do
- expect(@provider).to be_need_to_run
+ expect(provider).to be_need_to_run
- expect(@logs[0].message).to eq("\ndiff")
+ expect(logs[0].message).to eq("\ndiff")
end
else
it 'does not display a diff' do
- expect(@provider).to be_need_to_run
+ expect(provider).to be_need_to_run
- expect(@logs).to be_empty
+ expect(logs).to be_empty
end
end
end
@@ -491,31 +499,31 @@ describe provider_class do
describe 'and configured to show diffs' do
before(:each) do
Puppet[:show_diff] = true
- @resource[:show_diff] = true
+ resource[:show_diff] = true
- @resource[:root] = ''
- @provider.stubs(:get_augeas_version).returns('0.10.0')
- @augeas.stubs(:set).returns(true)
- @augeas.stubs(:save).returns(true)
+ resource[:root] = ''
+ provider.stubs(:get_augeas_version).returns('0.10.0')
+ augeas.stubs(:set).returns(true)
+ augeas.stubs(:save).returns(true)
end
it 'displays a diff when a single file is shown to have been changed' do
file = '/etc/hosts'
File.stubs(:delete)
- @resource[:loglevel] = 'crit'
- @resource[:context] = '/files'
- @resource[:changes] = ["set #{file}/foo bar"]
+ resource[:loglevel] = 'crit'
+ resource[:context] = '/files'
+ resource[:changes] = ["set #{file}/foo bar"]
- @augeas.stubs(:match).with('/augeas/events/saved').returns(['/augeas/events/saved'])
- @augeas.stubs(:get).with('/augeas/events/saved').returns("/files#{file}")
- @augeas.expects(:set).with('/augeas/save', 'newfile')
- @provider.expects('diff').with(file.to_s, "#{file}.augnew").returns('diff')
+ augeas.stubs(:match).with('/augeas/events/saved').returns(['/augeas/events/saved'])
+ augeas.stubs(:get).with('/augeas/events/saved').returns("/files#{file}")
+ augeas.expects(:set).with('/augeas/save', 'newfile')
+ provider.expects('diff').with(file.to_s, "#{file}.augnew").returns('diff')
- expect(@provider).to be_need_to_run
+ expect(provider).to be_need_to_run
- expect(@logs[0].message).to eq("\ndiff")
- expect(@logs[0].level).to eq(:crit)
+ expect(logs[0].message).to eq("\ndiff")
+ expect(logs[0].level).to eq(:crit)
end
it 'displays a diff for each file that is changed when changing many files' do
@@ -523,20 +531,20 @@ describe provider_class do
file2 = '/etc/resolv.conf'
File.stubs(:delete)
- @resource[:context] = '/files'
- @resource[:changes] = ["set #{file1}/foo bar", "set #{file2}/baz biz"]
+ resource[:context] = '/files'
+ resource[:changes] = ["set #{file1}/foo bar", "set #{file2}/baz biz"]
- @augeas.stubs(:match).with('/augeas/events/saved').returns(['/augeas/events/saved[1]', '/augeas/events/saved[2]'])
- @augeas.stubs(:get).with('/augeas/events/saved[1]').returns("/files#{file1}")
- @augeas.stubs(:get).with('/augeas/events/saved[2]').returns("/files#{file2}")
- @augeas.expects(:set).with('/augeas/save', 'newfile')
- @provider.expects(:diff).with(file1.to_s, "#{file1}.augnew").returns("diff #{file1}")
- @provider.expects(:diff).with(file2.to_s, "#{file2}.augnew").returns("diff #{file2}")
+ augeas.stubs(:match).with('/augeas/events/saved').returns(['/augeas/events/saved[1]', '/augeas/events/saved[2]'])
+ augeas.stubs(:get).with('/augeas/events/saved[1]').returns("/files#{file1}")
+ augeas.stubs(:get).with('/augeas/events/saved[2]').returns("/files#{file2}")
+ augeas.expects(:set).with('/augeas/save', 'newfile')
+ provider.expects(:diff).with(file1.to_s, "#{file1}.augnew").returns("diff #{file1}")
+ provider.expects(:diff).with(file2.to_s, "#{file2}.augnew").returns("diff #{file2}")
- expect(@provider).to be_need_to_run
+ expect(provider).to be_need_to_run
- expect(@logs.map(&:message)).to include("\ndiff #{file1}", "\ndiff #{file2}")
- expect(@logs.map(&:level)).to eq([:notice, :notice])
+ expect(logs.map(&:message)).to include("\ndiff #{file1}", "\ndiff #{file2}")
+ expect(logs.map(&:level)).to eq([:notice, :notice])
end
describe 'and resource[:root] is set' do
@@ -545,292 +553,293 @@ describe provider_class do
file = '/etc/hosts'
File.stubs(:delete)
- @resource[:context] = '/files'
- @resource[:changes] = ["set #{file}/foo bar"]
- @resource[:root] = root
+ resource[:context] = '/files'
+ resource[:changes] = ["set #{file}/foo bar"]
+ resource[:root] = root
- @augeas.stubs(:match).with('/augeas/events/saved').returns(['/augeas/events/saved'])
- @augeas.stubs(:get).with('/augeas/events/saved').returns("/files#{file}")
- @augeas.expects(:set).with('/augeas/save', 'newfile')
- @provider.expects(:diff).with("#{root}#{file}", "#{root}#{file}.augnew").returns('diff')
+ augeas.stubs(:match).with('/augeas/events/saved').returns(['/augeas/events/saved'])
+ augeas.stubs(:get).with('/augeas/events/saved').returns("/files#{file}")
+ augeas.expects(:set).with('/augeas/save', 'newfile')
+ provider.expects(:diff).with("#{root}#{file}", "#{root}#{file}.augnew").returns('diff')
- expect(@provider).to be_need_to_run
+ expect(provider).to be_need_to_run
- expect(@logs[0].message).to eq("\ndiff")
- expect(@logs[0].level).to eq(:notice)
+ expect(logs[0].message).to eq("\ndiff")
+ expect(logs[0].level).to eq(:notice)
end
end
it 'does not call diff if no files change' do
file = '/etc/hosts'
- @resource[:context] = '/files'
- @resource[:changes] = ["set #{file}/foo bar"]
+ resource[:context] = '/files'
+ resource[:changes] = ["set #{file}/foo bar"]
- @augeas.stubs(:match).with('/augeas/events/saved').returns([])
- @augeas.expects(:set).with('/augeas/save', 'newfile')
- @augeas.expects(:get).with('/augeas/events/saved').never
- @augeas.expects(:close)
+ augeas.stubs(:match).with('/augeas/events/saved').returns([])
+ augeas.expects(:set).with('/augeas/save', 'newfile')
+ augeas.expects(:get).with('/augeas/events/saved').never
+ augeas.expects(:close)
- @provider.expects(:diff).never
- expect(@provider).not_to be_need_to_run
+ provider.expects(:diff).never
+ expect(provider).not_to be_need_to_run
end
it 'cleanups the .augnew file' do
file = '/etc/hosts'
- @resource[:context] = '/files'
- @resource[:changes] = ["set #{file}/foo bar"]
+ resource[:context] = '/files'
+ resource[:changes] = ["set #{file}/foo bar"]
- @augeas.stubs(:match).with('/augeas/events/saved').returns(['/augeas/events/saved'])
- @augeas.stubs(:get).with('/augeas/events/saved').returns("/files#{file}")
- @augeas.expects(:set).with('/augeas/save', 'newfile')
- @augeas.expects(:close)
+ augeas.stubs(:match).with('/augeas/events/saved').returns(['/augeas/events/saved'])
+ augeas.stubs(:get).with('/augeas/events/saved').returns("/files#{file}")
+ augeas.expects(:set).with('/augeas/save', 'newfile')
+ augeas.expects(:close)
File.expects(:delete).with(file + '.augnew')
- @provider.expects(:diff).with(file.to_s, "#{file}.augnew").returns('')
- expect(@provider).to be_need_to_run
+ provider.expects(:diff).with(file.to_s, "#{file}.augnew").returns('')
+ expect(provider).to be_need_to_run
end
# Workaround for Augeas bug #264 which reports filenames twice
it 'handles duplicate /augeas/events/saved filenames' do
file = '/etc/hosts'
- @resource[:context] = '/files'
- @resource[:changes] = ["set #{file}/foo bar"]
+ resource[:context] = '/files'
+ resource[:changes] = ["set #{file}/foo bar"]
- @augeas.stubs(:match).with('/augeas/events/saved').returns(['/augeas/events/saved[1]', '/augeas/events/saved[2]'])
- @augeas.stubs(:get).with('/augeas/events/saved[1]').returns("/files#{file}")
- @augeas.stubs(:get).with('/augeas/events/saved[2]').returns("/files#{file}")
- @augeas.expects(:set).with('/augeas/save', 'newfile')
- @augeas.expects(:close)
+ augeas.stubs(:match).with('/augeas/events/saved').returns(['/augeas/events/saved[1]', '/augeas/events/saved[2]'])
+ augeas.stubs(:get).with('/augeas/events/saved[1]').returns("/files#{file}")
+ augeas.stubs(:get).with('/augeas/events/saved[2]').returns("/files#{file}")
+ augeas.expects(:set).with('/augeas/save', 'newfile')
+ augeas.expects(:close)
File.expects(:delete).with(file + '.augnew').once
- @provider.expects(:diff).with(file.to_s, "#{file}.augnew").returns('').once
- expect(@provider).to be_need_to_run
+ provider.expects(:diff).with(file.to_s, "#{file}.augnew").returns('').once
+ expect(provider).to be_need_to_run
end
it 'fails with an error if saving fails' do
file = '/etc/hosts'
- @resource[:context] = '/files'
- @resource[:changes] = ["set #{file}/foo bar"]
+ resource[:context] = '/files'
+ resource[:changes] = ["set #{file}/foo bar"]
- @augeas.stubs(:save).returns(false)
- @augeas.stubs(:match).with('/augeas/events/saved').returns([])
- @augeas.expects(:close)
+ augeas.stubs(:save).returns(false)
+ augeas.stubs(:match).with('/augeas/events/saved').returns([])
+ augeas.expects(:close)
- @provider.expects(:diff).never
- @provider.expects(:print_put_errors)
- expect { @provider.need_to_run? }.to raise_error(Puppet::Error)
+ provider.expects(:diff).never
+ provider.expects(:print_put_errors)
+ expect { provider.need_to_run? }.to raise_error(Puppet::Error)
end
end
end
describe 'augeas execution integration' do
+ let(:augeas) { stub('augeas', :load) }
+
before(:each) do
- @augeas = stub('augeas', :load)
- @augeas.stubs('close')
- @augeas.stubs(:match).with('/augeas/events/saved').returns([])
+ augeas.stubs('close')
+ augeas.stubs(:match).with('/augeas/events/saved').returns([])
- @provider.aug = @augeas
- @provider.stubs(:get_augeas_version).returns('0.3.5')
+ provider.aug = augeas
+ provider.stubs(:get_augeas_version).returns('0.3.5')
end
it 'handles set commands' do
- @resource[:changes] = 'set JarJar Binks'
- @resource[:context] = '/some/path/'
- @augeas.expects(:set).with('/some/path/JarJar', 'Binks').returns(true)
- @augeas.expects(:save).returns(true)
- @augeas.expects(:close)
- expect(@provider.execute_changes).to eq(:executed)
+ resource[:changes] = 'set JarJar Binks'
+ resource[:context] = '/some/path/'
+ augeas.expects(:set).with('/some/path/JarJar', 'Binks').returns(true)
+ augeas.expects(:save).returns(true)
+ augeas.expects(:close)
+ expect(provider.execute_changes).to eq(:executed)
end
it 'handles rm commands' do
- @resource[:changes] = 'rm /Jar/Jar'
- @augeas.expects(:rm).with('/Jar/Jar')
- @augeas.expects(:save).returns(true)
- @augeas.expects(:close)
- expect(@provider.execute_changes).to eq(:executed)
+ resource[:changes] = 'rm /Jar/Jar'
+ augeas.expects(:rm).with('/Jar/Jar')
+ augeas.expects(:save).returns(true)
+ augeas.expects(:close)
+ expect(provider.execute_changes).to eq(:executed)
end
it 'handles remove commands' do
- @resource[:changes] = 'remove /Jar/Jar'
- @augeas.expects(:rm).with('/Jar/Jar')
- @augeas.expects(:save).returns(true)
- @augeas.expects(:close)
- expect(@provider.execute_changes).to eq(:executed)
+ resource[:changes] = 'remove /Jar/Jar'
+ augeas.expects(:rm).with('/Jar/Jar')
+ augeas.expects(:save).returns(true)
+ augeas.expects(:close)
+ expect(provider.execute_changes).to eq(:executed)
end
it 'handles clear commands' do
- @resource[:changes] = 'clear Jar/Jar'
- @resource[:context] = '/foo/'
- @augeas.expects(:clear).with('/foo/Jar/Jar').returns(true)
- @augeas.expects(:save).returns(true)
- @augeas.expects(:close)
- expect(@provider.execute_changes).to eq(:executed)
+ resource[:changes] = 'clear Jar/Jar'
+ resource[:context] = '/foo/'
+ augeas.expects(:clear).with('/foo/Jar/Jar').returns(true)
+ augeas.expects(:save).returns(true)
+ augeas.expects(:close)
+ expect(provider.execute_changes).to eq(:executed)
end
describe 'touch command' do
it 'clears missing path' do
- @resource[:changes] = 'touch Jar/Jar'
- @resource[:context] = '/foo/'
- @augeas.expects(:match).with('/foo/Jar/Jar').returns([])
- @augeas.expects(:clear).with('/foo/Jar/Jar').returns(true)
- @augeas.expects(:save).returns(true)
- @augeas.expects(:close)
- expect(@provider.execute_changes).to eq(:executed)
+ resource[:changes] = 'touch Jar/Jar'
+ resource[:context] = '/foo/'
+ augeas.expects(:match).with('/foo/Jar/Jar').returns([])
+ augeas.expects(:clear).with('/foo/Jar/Jar').returns(true)
+ augeas.expects(:save).returns(true)
+ augeas.expects(:close)
+ expect(provider.execute_changes).to eq(:executed)
end
it 'does not change on existing path' do
- @resource[:changes] = 'touch Jar/Jar'
- @resource[:context] = '/foo/'
- @augeas.expects(:match).with('/foo/Jar/Jar').returns(['/foo/Jar/Jar'])
- @augeas.expects(:clear).never
- @augeas.expects(:save).returns(true)
- @augeas.expects(:close)
- expect(@provider.execute_changes).to eq(:executed)
+ resource[:changes] = 'touch Jar/Jar'
+ resource[:context] = '/foo/'
+ augeas.expects(:match).with('/foo/Jar/Jar').returns(['/foo/Jar/Jar'])
+ augeas.expects(:clear).never
+ augeas.expects(:save).returns(true)
+ augeas.expects(:close)
+ expect(provider.execute_changes).to eq(:executed)
end
end
it 'handles ins commands with before' do
- @resource[:changes] = 'ins Binks before Jar/Jar'
- @resource[:context] = '/foo'
- @augeas.expects(:insert).with('/foo/Jar/Jar', 'Binks', true)
- @augeas.expects(:save).returns(true)
- @augeas.expects(:close)
- expect(@provider.execute_changes).to eq(:executed)
+ resource[:changes] = 'ins Binks before Jar/Jar'
+ resource[:context] = '/foo'
+ augeas.expects(:insert).with('/foo/Jar/Jar', 'Binks', true)
+ augeas.expects(:save).returns(true)
+ augeas.expects(:close)
+ expect(provider.execute_changes).to eq(:executed)
end
it 'handles ins commands with after' do
- @resource[:changes] = 'ins Binks after /Jar/Jar'
- @resource[:context] = '/foo'
- @augeas.expects(:insert).with('/Jar/Jar', 'Binks', false)
- @augeas.expects(:save).returns(true)
- @augeas.expects(:close)
- expect(@provider.execute_changes).to eq(:executed)
+ resource[:changes] = 'ins Binks after /Jar/Jar'
+ resource[:context] = '/foo'
+ augeas.expects(:insert).with('/Jar/Jar', 'Binks', false)
+ augeas.expects(:save).returns(true)
+ augeas.expects(:close)
+ expect(provider.execute_changes).to eq(:executed)
end
it 'handles ins with no context' do
- @resource[:changes] = 'ins Binks after /Jar/Jar'
- @augeas.expects(:insert).with('/Jar/Jar', 'Binks', false)
- @augeas.expects(:save).returns(true)
- @augeas.expects(:close)
- expect(@provider.execute_changes).to eq(:executed)
+ resource[:changes] = 'ins Binks after /Jar/Jar'
+ augeas.expects(:insert).with('/Jar/Jar', 'Binks', false)
+ augeas.expects(:save).returns(true)
+ augeas.expects(:close)
+ expect(provider.execute_changes).to eq(:executed)
end
it 'handles multiple commands' do
- @resource[:changes] = ['ins Binks after /Jar/Jar', 'clear Jar/Jar']
- @resource[:context] = '/foo/'
- @augeas.expects(:insert).with('/Jar/Jar', 'Binks', false)
- @augeas.expects(:clear).with('/foo/Jar/Jar').returns(true)
- @augeas.expects(:save).returns(true)
- @augeas.expects(:close)
- expect(@provider.execute_changes).to eq(:executed)
+ resource[:changes] = ['ins Binks after /Jar/Jar', 'clear Jar/Jar']
+ resource[:context] = '/foo/'
+ augeas.expects(:insert).with('/Jar/Jar', 'Binks', false)
+ augeas.expects(:clear).with('/foo/Jar/Jar').returns(true)
+ augeas.expects(:save).returns(true)
+ augeas.expects(:close)
+ expect(provider.execute_changes).to eq(:executed)
end
it 'handles defvar commands' do
- @resource[:changes] = 'defvar myjar Jar/Jar'
- @resource[:context] = '/foo/'
- @augeas.expects(:defvar).with('myjar', '/foo/Jar/Jar').returns(true)
- @augeas.expects(:save).returns(true)
- @augeas.expects(:close)
- expect(@provider.execute_changes).to eq(:executed)
+ resource[:changes] = 'defvar myjar Jar/Jar'
+ resource[:context] = '/foo/'
+ augeas.expects(:defvar).with('myjar', '/foo/Jar/Jar').returns(true)
+ augeas.expects(:save).returns(true)
+ augeas.expects(:close)
+ expect(provider.execute_changes).to eq(:executed)
end
it 'passes through augeas variables without context' do
- @resource[:changes] = ['defvar myjar Jar/Jar', 'set $myjar/Binks 1']
- @resource[:context] = '/foo/'
- @augeas.expects(:defvar).with('myjar', '/foo/Jar/Jar').returns(true)
+ resource[:changes] = ['defvar myjar Jar/Jar', 'set $myjar/Binks 1']
+ resource[:context] = '/foo/'
+ augeas.expects(:defvar).with('myjar', '/foo/Jar/Jar').returns(true)
# this is the important bit, shouldn't be /foo/$myjar/Binks
- @augeas.expects(:set).with('$myjar/Binks', '1').returns(true)
- @augeas.expects(:save).returns(true)
- @augeas.expects(:close)
- expect(@provider.execute_changes).to eq(:executed)
+ augeas.expects(:set).with('$myjar/Binks', '1').returns(true)
+ augeas.expects(:save).returns(true)
+ augeas.expects(:close)
+ expect(provider.execute_changes).to eq(:executed)
end
it 'handles defnode commands' do
- @resource[:changes] = 'defnode newjar Jar/Jar[last()+1] Binks'
- @resource[:context] = '/foo/'
- @augeas.expects(:defnode).with('newjar', '/foo/Jar/Jar[last()+1]', 'Binks').returns(true)
- @augeas.expects(:save).returns(true)
- @augeas.expects(:close)
- expect(@provider.execute_changes).to eq(:executed)
+ resource[:changes] = 'defnode newjar Jar/Jar[last()+1] Binks'
+ resource[:context] = '/foo/'
+ augeas.expects(:defnode).with('newjar', '/foo/Jar/Jar[last()+1]', 'Binks').returns(true)
+ augeas.expects(:save).returns(true)
+ augeas.expects(:close)
+ expect(provider.execute_changes).to eq(:executed)
end
it 'handles mv commands' do
- @resource[:changes] = 'mv Jar/Jar Binks'
- @resource[:context] = '/foo/'
- @augeas.expects(:mv).with('/foo/Jar/Jar', '/foo/Binks').returns(true)
- @augeas.expects(:save).returns(true)
- @augeas.expects(:close)
- expect(@provider.execute_changes).to eq(:executed)
+ resource[:changes] = 'mv Jar/Jar Binks'
+ resource[:context] = '/foo/'
+ augeas.expects(:mv).with('/foo/Jar/Jar', '/foo/Binks').returns(true)
+ augeas.expects(:save).returns(true)
+ augeas.expects(:close)
+ expect(provider.execute_changes).to eq(:executed)
end
it 'handles rename commands' do
- @resource[:changes] = 'rename Jar/Jar Binks'
- @resource[:context] = '/foo/'
- @augeas.expects(:rename).with('/foo/Jar/Jar', 'Binks').returns(true)
- @augeas.expects(:save).returns(true)
- @augeas.expects(:close)
- expect(@provider.execute_changes).to eq(:executed)
+ resource[:changes] = 'rename Jar/Jar Binks'
+ resource[:context] = '/foo/'
+ augeas.expects(:rename).with('/foo/Jar/Jar', 'Binks').returns(true)
+ augeas.expects(:save).returns(true)
+ augeas.expects(:close)
+ expect(provider.execute_changes).to eq(:executed)
end
it 'handles setm commands' do
- @resource[:changes] = ['set test[1]/Jar/Jar Foo', 'set test[2]/Jar/Jar Bar', 'setm test Jar/Jar Binks']
- @resource[:context] = '/foo/'
- @augeas.expects(:respond_to?).with('setm').returns(true)
- @augeas.expects(:set).with('/foo/test[1]/Jar/Jar', 'Foo').returns(true)
- @augeas.expects(:set).with('/foo/test[2]/Jar/Jar', 'Bar').returns(true)
- @augeas.expects(:setm).with('/foo/test', 'Jar/Jar', 'Binks').returns(true)
- @augeas.expects(:save).returns(true)
- @augeas.expects(:close)
- expect(@provider.execute_changes).to eq(:executed)
+ resource[:changes] = ['set test[1]/Jar/Jar Foo', 'set test[2]/Jar/Jar Bar', 'setm test Jar/Jar Binks']
+ resource[:context] = '/foo/'
+ augeas.expects(:respond_to?).with('setm').returns(true)
+ augeas.expects(:set).with('/foo/test[1]/Jar/Jar', 'Foo').returns(true)
+ augeas.expects(:set).with('/foo/test[2]/Jar/Jar', 'Bar').returns(true)
+ augeas.expects(:setm).with('/foo/test', 'Jar/Jar', 'Binks').returns(true)
+ augeas.expects(:save).returns(true)
+ augeas.expects(:close)
+ expect(provider.execute_changes).to eq(:executed)
end
it 'throws error if setm command not supported' do
- @resource[:changes] = ['set test[1]/Jar/Jar Foo', 'set test[2]/Jar/Jar Bar', 'setm test Jar/Jar Binks']
- @resource[:context] = '/foo/'
- @augeas.expects(:respond_to?).with('setm').returns(false)
- @augeas.expects(:set).with('/foo/test[1]/Jar/Jar', 'Foo').returns(true)
- @augeas.expects(:set).with('/foo/test[2]/Jar/Jar', 'Bar').returns(true)
- expect { @provider.execute_changes }.to raise_error RuntimeError, %r{command 'setm' not supported}
+ resource[:changes] = ['set test[1]/Jar/Jar Foo', 'set test[2]/Jar/Jar Bar', 'setm test Jar/Jar Binks']
+ resource[:context] = '/foo/'
+ augeas.expects(:respond_to?).with('setm').returns(false)
+ augeas.expects(:set).with('/foo/test[1]/Jar/Jar', 'Foo').returns(true)
+ augeas.expects(:set).with('/foo/test[2]/Jar/Jar', 'Bar').returns(true)
+ expect { provider.execute_changes }.to raise_error RuntimeError, %r{command 'setm' not supported}
end
it 'handles clearm commands' do
- @resource[:changes] = ['set test[1]/Jar/Jar Foo', 'set test[2]/Jar/Jar Bar', 'clearm test Jar/Jar']
- @resource[:context] = '/foo/'
- @augeas.expects(:respond_to?).with('clearm').returns(true)
- @augeas.expects(:set).with('/foo/test[1]/Jar/Jar', 'Foo').returns(true)
- @augeas.expects(:set).with('/foo/test[2]/Jar/Jar', 'Bar').returns(true)
- @augeas.expects(:clearm).with('/foo/test', 'Jar/Jar').returns(true)
- @augeas.expects(:save).returns(true)
- @augeas.expects(:close)
- expect(@provider.execute_changes).to eq(:executed)
+ resource[:changes] = ['set test[1]/Jar/Jar Foo', 'set test[2]/Jar/Jar Bar', 'clearm test Jar/Jar']
+ resource[:context] = '/foo/'
+ augeas.expects(:respond_to?).with('clearm').returns(true)
+ augeas.expects(:set).with('/foo/test[1]/Jar/Jar', 'Foo').returns(true)
+ augeas.expects(:set).with('/foo/test[2]/Jar/Jar', 'Bar').returns(true)
+ augeas.expects(:clearm).with('/foo/test', 'Jar/Jar').returns(true)
+ augeas.expects(:save).returns(true)
+ augeas.expects(:close)
+ expect(provider.execute_changes).to eq(:executed)
end
it 'throws error if clearm command not supported' do
- @resource[:changes] = ['set test[1]/Jar/Jar Foo', 'set test[2]/Jar/Jar Bar', 'clearm test Jar/Jar']
- @resource[:context] = '/foo/'
- @augeas.expects(:respond_to?).with('clearm').returns(false)
- @augeas.expects(:set).with('/foo/test[1]/Jar/Jar', 'Foo').returns(true)
- @augeas.expects(:set).with('/foo/test[2]/Jar/Jar', 'Bar').returns(true)
- expect { @provider.execute_changes }.to raise_error(RuntimeError, %r{command 'clearm' not supported})
+ resource[:changes] = ['set test[1]/Jar/Jar Foo', 'set test[2]/Jar/Jar Bar', 'clearm test Jar/Jar']
+ resource[:context] = '/foo/'
+ augeas.expects(:respond_to?).with('clearm').returns(false)
+ augeas.expects(:set).with('/foo/test[1]/Jar/Jar', 'Foo').returns(true)
+ augeas.expects(:set).with('/foo/test[2]/Jar/Jar', 'Bar').returns(true)
+ expect { provider.execute_changes }.to raise_error(RuntimeError, %r{command 'clearm' not supported})
end
it 'throws error if saving failed' do
- @resource[:changes] = ['set test[1]/Jar/Jar Foo', 'set test[2]/Jar/Jar Bar', 'clearm test Jar/Jar']
- @resource[:context] = '/foo/'
- @augeas.expects(:respond_to?).with('clearm').returns(true)
- @augeas.expects(:set).with('/foo/test[1]/Jar/Jar', 'Foo').returns(true)
- @augeas.expects(:set).with('/foo/test[2]/Jar/Jar', 'Bar').returns(true)
- @augeas.expects(:clearm).with('/foo/test', 'Jar/Jar').returns(true)
- @augeas.expects(:save).returns(false)
- @provider.expects(:print_put_errors)
- @augeas.expects(:match).returns([])
- expect { @provider.execute_changes }.to raise_error(Puppet::Error)
+ resource[:changes] = ['set test[1]/Jar/Jar Foo', 'set test[2]/Jar/Jar Bar', 'clearm test Jar/Jar']
+ resource[:context] = '/foo/'
+ augeas.expects(:respond_to?).with('clearm').returns(true)
+ augeas.expects(:set).with('/foo/test[1]/Jar/Jar', 'Foo').returns(true)
+ augeas.expects(:set).with('/foo/test[2]/Jar/Jar', 'Bar').returns(true)
+ augeas.expects(:clearm).with('/foo/test', 'Jar/Jar').returns(true)
+ augeas.expects(:save).returns(false)
+ provider.expects(:print_put_errors)
+ augeas.expects(:match).returns([])
+ expect { provider.execute_changes }.to raise_error(Puppet::Error)
end
end
@@ -862,59 +871,60 @@ describe provider_class do
end
describe 'load/save failure reporting' do
+ let(:augeas) { stub('augeas') }
+
before(:each) do
- @augeas = stub('augeas')
- @augeas.stubs('close')
- @provider.aug = @augeas
+ augeas.stubs('close')
+ provider.aug = augeas
end
describe 'should find load errors' do
before(:each) do
- @augeas.expects(:match).with('/augeas//error').returns(['/augeas/files/foo/error'])
- @augeas.expects(:match).with('/augeas/files/foo/error/*').returns(['/augeas/files/foo/error/path', '/augeas/files/foo/error/message'])
- @augeas.expects(:get).with('/augeas/files/foo/error').returns('some_failure')
- @augeas.expects(:get).with('/augeas/files/foo/error/path').returns('/foo')
- @augeas.expects(:get).with('/augeas/files/foo/error/message').returns('Failed to...')
+ augeas.expects(:match).with('/augeas//error').returns(['/augeas/files/foo/error'])
+ augeas.expects(:match).with('/augeas/files/foo/error/*').returns(['/augeas/files/foo/error/path', '/augeas/files/foo/error/message'])
+ augeas.expects(:get).with('/augeas/files/foo/error').returns('some_failure')
+ augeas.expects(:get).with('/augeas/files/foo/error/path').returns('/foo')
+ augeas.expects(:get).with('/augeas/files/foo/error/message').returns('Failed to...')
end
it 'and output only to debug when no path supplied' do
- @provider.expects(:debug).times(5)
- @provider.expects(:warning).never
- @provider.print_load_errors(nil)
+ provider.expects(:debug).times(5)
+ provider.expects(:warning).never
+ provider.print_load_errors(nil)
end
it 'and output a warning and to debug when path supplied' do
- @augeas.expects(:match).with('/augeas/files/foo//error').returns(['/augeas/files/foo/error'])
- @provider.expects(:warning).once
- @provider.expects(:debug).times(4)
- @provider.print_load_errors('/augeas/files/foo//error')
+ augeas.expects(:match).with('/augeas/files/foo//error').returns(['/augeas/files/foo/error'])
+ provider.expects(:warning).once
+ provider.expects(:debug).times(4)
+ provider.print_load_errors('/augeas/files/foo//error')
end
it "and output only to debug when path doesn't match" do
- @augeas.expects(:match).with('/augeas/files/foo//error').returns([])
- @provider.expects(:warning).never
- @provider.expects(:debug).times(5)
- @provider.print_load_errors('/augeas/files/foo//error')
+ augeas.expects(:match).with('/augeas/files/foo//error').returns([])
+ provider.expects(:warning).never
+ provider.expects(:debug).times(5)
+ provider.print_load_errors('/augeas/files/foo//error')
end
end
it 'finds load errors from lenses' do
- @augeas.expects(:match).with('/augeas//error').twice.returns(['/augeas/load/Xfm/error'])
- @augeas.expects(:match).with('/augeas/load/Xfm/error/*').returns([])
- @augeas.expects(:get).with('/augeas/load/Xfm/error').returns(['Could not find lens php.aug'])
- @provider.expects(:warning).once
- @provider.expects(:debug).twice
- @provider.print_load_errors('/augeas//error')
+ augeas.expects(:match).with('/augeas//error').twice.returns(['/augeas/load/Xfm/error'])
+ augeas.expects(:match).with('/augeas/load/Xfm/error/*').returns([])
+ augeas.expects(:get).with('/augeas/load/Xfm/error').returns(['Could not find lens php.aug'])
+ provider.expects(:warning).once
+ provider.expects(:debug).twice
+ provider.print_load_errors('/augeas//error')
end
it 'finds save errors and output to debug' do
- @augeas.expects(:match).with("/augeas//error[. = 'put_failed']").returns(['/augeas/files/foo/error'])
- @augeas.expects(:match).with('/augeas/files/foo/error/*').returns(['/augeas/files/foo/error/path', '/augeas/files/foo/error/message'])
- @augeas.expects(:get).with('/augeas/files/foo/error').returns('some_failure')
- @augeas.expects(:get).with('/augeas/files/foo/error/path').returns('/foo')
- @augeas.expects(:get).with('/augeas/files/foo/error/message').returns('Failed to...')
- @provider.expects(:debug).times(5)
- @provider.print_put_errors
+ augeas.expects(:match).with("/augeas//error[. = 'put_failed']").returns(['/augeas/files/foo/error'])
+ augeas.expects(:match).with('/augeas/files/foo/error/*').returns(['/augeas/files/foo/error/path', '/augeas/files/foo/error/message'])
+ augeas.expects(:get).with('/augeas/files/foo/error').returns('some_failure')
+ augeas.expects(:get).with('/augeas/files/foo/error/path').returns('/foo')
+ augeas.expects(:get).with('/augeas/files/foo/error/message').returns('Failed to...')
+ provider.expects(:debug).times(5)
+ provider.print_put_errors
end
end
@@ -924,7 +934,7 @@ describe provider_class do
describe 'augeas lib initialisation', if: Puppet.features.augeas? do
# Expect lenses for fstab and hosts
it 'has loaded standard files by default' do
- aug = @provider.open_augeas
+ aug = provider.open_augeas
expect(aug).not_to eq(nil)
expect(aug.match('/files/etc/fstab')).to eq(['/files/etc/fstab'])
expect(aug.match('/files/etc/hosts')).to eq(['/files/etc/hosts'])
@@ -932,18 +942,18 @@ describe provider_class do
end
it 'reports load errors to debug only' do
- @provider.expects(:print_load_errors).with(nil)
- aug = @provider.open_augeas
+ provider.expects(:print_load_errors).with(nil)
+ aug = provider.open_augeas
expect(aug).not_to eq(nil)
end
# Only the file specified should be loaded
it 'loads one file if incl/lens used' do
- @resource[:incl] = '/etc/hosts'
- @resource[:lens] = 'Hosts.lns'
+ resource[:incl] = '/etc/hosts'
+ resource[:lens] = 'Hosts.lns'
- @provider.expects(:print_load_errors).with('/augeas//error')
- aug = @provider.open_augeas
+ provider.expects(:print_load_errors).with('/augeas//error')
+ aug = provider.open_augeas
expect(aug).not_to eq(nil)
expect(aug.match('/files/etc/fstab')).to eq([])
expect(aug.match('/files/etc/hosts')).to eq(['/files/etc/hosts'])
@@ -951,9 +961,9 @@ describe provider_class do
end
it 'alsoes load lenses from load_path' do
- @resource[:load_path] = my_fixture_dir
+ resource[:load_path] = my_fixture_dir
- aug = @provider.open_augeas
+ aug = provider.open_augeas
expect(aug).not_to eq(nil)
expect(aug.match('/files/etc/fstab')).to eq(['/files/etc/fstab'])
expect(aug.match('/files/etc/hosts')).to eq(['/files/etc/hosts'])
@@ -963,7 +973,7 @@ describe provider_class do
it "alsoes load lenses from pluginsync'd path" do
Puppet[:libdir] = my_fixture_dir
- aug = @provider.open_augeas
+ aug = provider.open_augeas
expect(aug).not_to eq(nil)
expect(aug.match('/files/etc/fstab')).to eq(['/files/etc/fstab'])
expect(aug.match('/files/etc/hosts')).to eq(['/files/etc/hosts'])
@@ -973,21 +983,21 @@ describe provider_class do
# Optimisations added for Augeas 0.8.2 or higher is available, see #7285
describe '>= 0.8.2 optimisations', if: Puppet.features.augeas? && Facter.value(:augeasversion) && Puppet::Util::Package.versioncmp(Facter.value(:augeasversion), '0.8.2') >= 0 do
it 'onlies load one file if relevant context given' do
- @resource[:context] = '/files/etc/fstab'
+ resource[:context] = '/files/etc/fstab'
- @provider.expects(:print_load_errors).with('/augeas/files/etc/fstab//error')
- aug = @provider.open_augeas
+ provider.expects(:print_load_errors).with('/augeas/files/etc/fstab//error')
+ aug = provider.open_augeas
expect(aug).not_to eq(nil)
expect(aug.match('/files/etc/fstab')).to eq(['/files/etc/fstab'])
expect(aug.match('/files/etc/hosts')).to eq([])
end
it 'onlies load one lens from load_path if context given' do
- @resource[:context] = '/files/etc/test'
- @resource[:load_path] = my_fixture_dir
+ resource[:context] = '/files/etc/test'
+ resource[:load_path] = my_fixture_dir
- @provider.expects(:print_load_errors).with('/augeas/files/etc/test//error')
- aug = @provider.open_augeas
+ provider.expects(:print_load_errors).with('/augeas/files/etc/test//error')
+ aug = provider.open_augeas
expect(aug).not_to eq(nil)
expect(aug.match('/files/etc/fstab')).to eq([])
expect(aug.match('/files/etc/hosts')).to eq([])
@@ -995,20 +1005,20 @@ describe provider_class do
end
it "loads standard files if context isn't specific" do
- @resource[:context] = '/files/etc'
+ resource[:context] = '/files/etc'
- @provider.expects(:print_load_errors).with(nil)
- aug = @provider.open_augeas
+ provider.expects(:print_load_errors).with(nil)
+ aug = provider.open_augeas
expect(aug).not_to eq(nil)
expect(aug.match('/files/etc/fstab')).to eq(['/files/etc/fstab'])
expect(aug.match('/files/etc/hosts')).to eq(['/files/etc/hosts'])
end
it 'does not optimise if the context is a complex path' do
- @resource[:context] = "/files/*[label()='etc']"
+ resource[:context] = "/files/*[label()='etc']"
- @provider.expects(:print_load_errors).with(nil)
- aug = @provider.open_augeas
+ provider.expects(:print_load_errors).with(nil)
+ aug = provider.open_augeas
expect(aug).not_to eq(nil)
expect(aug.match('/files/etc/fstab')).to eq(['/files/etc/fstab'])
expect(aug.match('/files/etc/hosts')).to eq(['/files/etc/hosts'])
@@ -1018,33 +1028,33 @@ describe provider_class do
describe 'get_load_path' do
it 'offers no load_path by default' do
- expect(@provider.get_load_path(@resource)).to eq('')
+ expect(provider.get_load_path(resource)).to eq('')
end
it 'offers one path from load_path' do
- @resource[:load_path] = '/foo'
- expect(@provider.get_load_path(@resource)).to eq('/foo')
+ resource[:load_path] = '/foo'
+ expect(provider.get_load_path(resource)).to eq('/foo')
end
it 'offers multiple colon-separated paths from load_path' do
- @resource[:load_path] = '/foo:/bar:/baz'
- expect(@provider.get_load_path(@resource)).to eq('/foo:/bar:/baz')
+ resource[:load_path] = '/foo:/bar:/baz'
+ expect(provider.get_load_path(resource)).to eq('/foo:/bar:/baz')
end
it 'offers multiple paths in array from load_path' do
- @resource[:load_path] = ['/foo', '/bar', '/baz']
- expect(@provider.get_load_path(@resource)).to eq('/foo:/bar:/baz')
+ resource[:load_path] = ['/foo', '/bar', '/baz']
+ expect(provider.get_load_path(resource)).to eq('/foo:/bar:/baz')
end
it 'offers pluginsync augeas/lenses subdir' do
Puppet[:libdir] = my_fixture_dir
- expect(@provider.get_load_path(@resource)).to eq("#{my_fixture_dir}/augeas/lenses")
+ expect(provider.get_load_path(resource)).to eq("#{my_fixture_dir}/augeas/lenses")
end
it 'offers both pluginsync and load_path paths' do
Puppet[:libdir] = my_fixture_dir
- @resource[:load_path] = ['/foo', '/bar', '/baz']
- expect(@provider.get_load_path(@resource)).to eq("/foo:/bar:/baz:#{my_fixture_dir}/augeas/lenses")
+ resource[:load_path] = ['/foo', '/bar', '/baz']
+ expect(provider.get_load_path(resource)).to eq("/foo:/bar:/baz:#{my_fixture_dir}/augeas/lenses")
end
end
end
diff --git a/spec/unit/type/augeas_spec.rb b/spec/unit/type/augeas_spec.rb
index ff4cd34..53196e6 100644
--- a/spec/unit/type/augeas_spec.rb
+++ b/spec/unit/type/augeas_spec.rb
@@ -1,4 +1,3 @@
-#! /usr/bin/env ruby
require 'spec_helper'
augeas = Puppet::Type.type(:augeas)