diff options
author | Josh Cooper <josh@puppet.com> | 2018-06-27 23:23:54 -0700 |
---|---|---|
committer | Josh Cooper <josh@puppet.com> | 2018-06-27 23:34:52 -0700 |
commit | e2a0a5a03e0789534c3fc45ceaab442f13fc20d9 (patch) | |
tree | 0570036b206f062cba49bcb7f3305cc12d317509 | |
parent | df20c08345fba0b43833eef47c4da2fdd78523e9 (diff) | |
download | puppet-augeas_core-e2a0a5a03e0789534c3fc45ceaab442f13fc20d9.tar.gz puppet-augeas_core-e2a0a5a03e0789534c3fc45ceaab442f13fc20d9.tar.bz2 |
Use rspec let instead of instance variables
Also remove shebang line, as they are not executable via ruby.
-rw-r--r-- | spec/unit/provider/augeas/augeas_spec.rb | 832 | ||||
-rw-r--r-- | spec/unit/type/augeas_spec.rb | 1 |
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) |