I need some help here. I have a simple augeas resource that changes a line 
in the /etc/sysconfig/iptables-config file. I am trying to write an rspec 
test for this and it's not working.

 

RHEL7, pdk 1.10. I do not have any augeas packages installed, only using 
what is bundled with pdk 1.10. 

 

If my augeas resource specifies the incl and lens attributes, the test 
doesn't work at all, complaining that Shellvars.lns cannot be found.

 

If my augeas resource specifies the context attribute and does not specify 
a lens (augeas uses Shellvars for this file by default anyway), the 
execute.with_change fails, but verifying the changes via aug_get and 
checking execute.idempotently both succeed.

 

Below I have the four combinations of the above and the output generated. 
At the very bottom is my spec_helper.rb file.


The IPTABLES_MODULES value is "" in the iptables-config file in the 
spec/fixtures/augeas/etc/sysconfig directory.

 
1. Augeas resource specifying both incl and lens in manifest. Checking if 
resource executes with change. 

 

Augeas resource:

  augeas { 'set_iptables_modules':

    incl    => '/etc/sysconfig/iptables-config',

    lens    => 'Shellvars.lns',

    changes => [

      "set IPTABLES_MODULES '\"iptable_nat ip_conntrack nf_nat_tftp 
nf_conntrack_ipv4\"'"

    ]

  }

 

 

Spec test:

  describe_augeas 'set_iptables_modules', :lens => 'Shellvars', :target => 
'etc/sysconfig/iptables-config' do

    it 'specifies the kernel modules to load in the iptables configuration' do

      is_expected.to <https://secure.ice/?http://is_expected.to> 
execute.with_change

      expect(aug_get('IPTABLES_MODULES')) == '"iptable_nat ip_conntrack 
nf_nat_tftp nf_conntrack_ipv4"'

      is_expected.to <https://secure.ice/?http://is_expected.to> 
execute.idempotently

    end

  end

 

 

Output:

bsirinek@mydevhost $ pdk test unit

pdk (INFO): Using Ruby 2.4.5

pdk (INFO): Using Puppet 5.5.12

[✔] Preparing to run the unit tests.

[✖] Running unit tests.

Run options: exclude {:bolt=>true}

  Evaluated 18 tests in 9.488949739 seconds: 1 failures, 0 pending.

failed: rspec: ./spec/classes/init_spec.rb:29: Augeas[set_iptables_modules] 
fails when executing:

debug: Opening augeas with root /tmp/rspec-puppet-augeas20190625-14571-apd4ov, 
lens path , flags 64

debug: Augeas version 1.8.1 is installed

warning: Loading failed for one or more files, see debug for /augeas//error 
output

debug: /augeas/load/Xfm/error = Can not find lens Shellvars.lns

debug: Will attempt to save and only run if files changed

debug: sending command 'set' with params 
["/files/etc/sysconfig/iptables-config/IPTABLES_MODULES", "\"iptable_nat 
ip_conntrack nf_nat_tftp nf_conntrack_ipv4\""]

debug: Closed the augeas connection

err: Could not evaluate: Saving failed, see debug

  sebastion Augeas[set_iptables_modules] specifies the kernel modules to load 
in the iptables configuration

  Failure/Error:

 

    describe_augeas 'set_iptables_modules', :lens => 'Shellvars', :target => 
'etc/sysconfig/iptables-config' do

      it 'specifies the kernel modules to load in the iptables configuration' do

        is_expected.to <https://secure.ice/?http://is_expected.to> 
execute.with_change

        expect(aug_get('IPTABLES_MODULES')) == '"iptable_nat ip_conntrack 
nf_nat_tftp nf_conntrack_ipv4"'

 

Total resources:   13

Touched resources: 13

Resource coverage: 100.00%

 

 

 

 

 
2. Augeas resource specifying only context and no lens in manifest. 
Checking if resource executes with change. 

 

Augeas resource:

  augeas { 'set_iptables_modules':

    context => '/files/etc/sysconfig/iptables-config',

    changes => [

      "set IPTABLES_MODULES '\"iptable_nat ip_conntrack nf_nat_tftp 
nf_conntrack_ipv4\"'"

    ]

  }

 

 

Spec test:

  describe_augeas 'set_iptables_modules', :lens => 'Shellvars', :target => 
'etc/sysconfig/iptables-config' do

    it 'specifies the kernel modules to load in the iptables configuration' do

      is_expected.to <https://secure.ice/?http://is_expected.to> 
execute.with_change

      expect(aug_get('IPTABLES_MODULES')) == '"iptable_nat ip_conntrack 
nf_nat_tftp nf_conntrack_ipv4"'

      is_expected.to <https://secure.ice/?http://is_expected.to> 
execute.idempotently

    end

  end

 

 

Output:

bsirinek@mydevhost $ pdk test unit

pdk (INFO): Using Ruby 2.4.5

pdk (INFO): Using Puppet 5.5.12

[✔] Preparing to run the unit tests.

[✖] Running unit tests.

Run options: exclude {:bolt=>true}

  Evaluated 18 tests in 9.104591825 seconds: 1 failures, 0 pending.

failed: rspec: ./spec/classes/init_spec.rb:29: Augeas[set_iptables_modules] 
doesn't change when executed:

debug: Opening augeas with root /tmp/rspec-puppet-augeas20190625-16038-6r286s, 
lens path , flags 32

debug: Augeas version 1.8.1 is installed

debug: Will attempt to save and only run if files changed

debug: sending command 'set' with params 
["/etc/sysconfig/iptables-config/IPTABLES_MODULES", "\"iptable_nat ip_conntrack 
nf_nat_tftp nf_conntrack_ipv4\""]

debug: Skipping because no files were changed

debug: Closed the augeas connection

  sebastion Augeas[set_iptables_modules] specifies the kernel modules to load 
in the iptables configuration

  Failure/Error:

 

    describe_augeas 'set_iptables_modules', :lens => 'Shellvars', :target => 
'etc/sysconfig/iptables-config' do

      it 'specifies the kernel modules to load in the iptables configuration' do

        is_expected.to <https://secure.ice/?http://is_expected.to> 
execute.with_change

        expect(aug_get('IPTABLES_MODULES')) == '"iptable_nat ip_conntrack 
nf_nat_tftp nf_conntrack_ipv4"'

 

Total resources:   13

Touched resources: 13

Resource coverage: 100.00%

 

 
3. Augeas resource specifying both incl and lens in manifest. Not checking 
if resource executes with change. 

 

Augeas resource:

  augeas { 'set_iptables_modules':

    incl    => '/etc/sysconfig/iptables-config',

    lens    => 'Shellvars.lns',

    changes => [

      "set IPTABLES_MODULES '\"iptable_nat ip_conntrack nf_nat_tftp 
nf_conntrack_ipv4\"'"

    ]

  }

 

 

Spec test:

  describe_augeas 'set_iptables_modules', :lens => 'Shellvars', :target => 
'etc/sysconfig/iptables-config' do

    it 'specifies the kernel modules to load in the iptables configuration' do

      #is_expected.to <https://secure.ice/?http://is_expected.to> 
execute.with_change

      expect(aug_get('IPTABLES_MODULES')) == '"iptable_nat ip_conntrack 
nf_nat_tftp nf_conntrack_ipv4"'

      is_expected.to <https://secure.ice/?http://is_expected.to> 
execute.idempotently

    end

  end

 

 

Output:

bsirinek@mydevhost $ pdk test unit

pdk (INFO): Using Ruby 2.4.5

pdk (INFO): Using Puppet 5.5.12

[✔] Preparing to run the unit tests.

[✖] Running unit tests.

Run options: exclude {:bolt=>true}

  Evaluated 18 tests in 8.827282266 seconds: 1 failures, 0 pending.

failed: rspec: ./spec/classes/init_spec.rb:29: Augeas[set_iptables_modules] 
fails when executing:

debug: Opening augeas with root /tmp/rspec-puppet-augeas20190625-18357-10z5g08, 
lens path , flags 64

debug: Augeas version 1.8.1 is installed

warning: Loading failed for one or more files, see debug for /augeas//error 
output

debug: /augeas/load/Xfm/error = Can not find lens Shellvars.lns

debug: Will attempt to save and only run if files changed

debug: sending command 'set' with params 
["/files/etc/sysconfig/iptables-config/IPTABLES_MODULES", "\"iptable_nat 
ip_conntrack nf_nat_tftp nf_conntrack_ipv4\""]

debug: Closed the augeas connection

err: Could not evaluate: Saving failed, see debug

  sebastion Augeas[set_iptables_modules] specifies the kernel modules to load 
in the iptables configuration

  Failure/Error:

 

    describe_augeas 'set_iptables_modules', :lens => 'Shellvars', :target => 
'etc/sysconfig/iptables-config' do

      it 'specifies the kernel modules to load in the iptables configuration' do

        #is_expected.to <https://secure.ice/?http://is_expected.to> 
execute.with_change

        expect(aug_get('IPTABLES_MODULES')) == '"iptable_nat ip_conntrack 
nf_nat_tftp nf_conntrack_ipv4"'

 

Total resources:   13

Touched resources: 13

Resource coverage: 100.00%

 

 
4. Augeas resource specifying only context and no lens in manifest. Not 
checking if resource executes with change. 

 

Augeas resource:

  augeas { 'set_iptables_modules':

    context => '/files/etc/sysconfig/iptables-config',

    changes => [

      "set IPTABLES_MODULES '\"iptable_nat ip_conntrack nf_nat_tftp 
nf_conntrack_ipv4\"'"

    ]

  }

 

 

Spec test:

  describe_augeas 'set_iptables_modules', :lens => 'Shellvars', :target => 
'etc/sysconfig/iptables-config' do

    it 'specifies the kernel modules to load in the iptables configuration' do

      #is_expected.to <https://secure.ice/?http://is_expected.to> 
execute.with_change

      expect(aug_get('IPTABLES_MODULES')) == '"iptable_nat ip_conntrack 
nf_nat_tftp nf_conntrack_ipv4"'

      is_expected.to <https://secure.ice/?http://is_expected.to> 
execute.idempotently

    end

  end

 

 

Output:

bsirinek@mydevhost $ pdk test unit

pdk (INFO): Using Ruby 2.4.5

pdk (INFO): Using Puppet 5.5.12

[✔] Preparing to run the unit tests.

[✔] Running unit tests.

Run options: exclude {:bolt=>true}

  Evaluated 18 tests in 9.325532779 seconds: 0 failures, 0 pending.

 

Total resources:   13

Touched resources: 13

Resource coverage: 100.00%

 
spec/spec_helper.rb 

 

RSpec.configure do |c|

  c.mock_with :rspec

end

 

require 'puppetlabs_spec_helper/module_spec_helper'

require 'rspec-puppet-facts'

 

require 'spec_helper_local' if File.file?(File.join(File.dirname(__FILE__), 
'spec_helper_local.rb'))

 

include RspecPuppetFacts

 

default_facts = {

  puppetversion: Puppet.version,

  facterversion: Facter.version,

}

 

default_fact_files = [

  File.expand_path(File.join(File.dirname(__FILE__), 'default_facts.yml')),

  File.expand_path(File.join(File.dirname(__FILE__), 
'default_module_facts.yml')),

]

 

default_fact_files.each do |f|

  next unless File.exist?(f) && File.readable?(f) && File.size?(f)

 

  begin

    default_facts.merge!(YAML.safe_load(File.read(f), [], [], true))

  rescue => e

    RSpec.configuration.reporter.message "WARNING: Unable to load #{f}: #{e}"

  end

end

 

RSpec.configure do |c|

  c.default_facts = default_facts

  c.hiera_config = 'spec/fixtures/hiera/hiera.yaml'

  c.before :each do

    # set to strictest setting for testing

    # by default Puppet runs at warning level

    Puppet.settings[:strict] = :warning

  end

  c.filter_run_excluding(bolt: true) unless ENV['GEM_BOLT']

  c.after(:suite) do

    RSpec::Puppet::Coverage.report!(0)

  end

end

 

def ensure_module_defined(module_name)

  module_name.split('::').reduce(Object) do |last_module, next_module|

    last_module.const_set(next_module, Module.new) unless 
last_module.const_defined?(next_module, false)

    last_module.const_get(next_module, false)

  end

end

 

# 'spec_overrides' from sync.yml will appear below this line

require 'rspec-puppet-augeas'

require 'octofacts'

RSpec.configure do |c|

c.default_formatter = 'doc'

c.augeas_fixtures = File.join(File.dirname(File.expand_path(__FILE__)), 
'fixtures', 'augeas')

end

require 'puppetlabs_spec_helper/module_spec_helper'

ENV["OCTOFACTS_FIXTURE_PATH"] ||= File.expand_path("fixtures/facts/octofacts", 
File.dirname(__FILE__))

ENV["OCTOFACTS_INDEX_PATH"]   ||= 
File.expand_path("fixtures/facts/octofacts-index.yaml", File.dirname(__FILE__))

 

-- 
You received this message because you are subscribed to the Google Groups 
"Puppet Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to puppet-users+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/puppet-users/5ba280dc-ba0c-45ec-bde0-aaeb3bd9f86b%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to