So I have a simple class, for now, where I am trying to write RSPEC tests 
to check the following: 

1. Smart Parameter $current_version is in catalogue.
2. If $current_version = $installed_version (custom fact that will be 
stubbed as a :fact), that 'class foo' exits without doing anything. 
3. if $current_version != $installed_version a class foo::cleanup is 
called. 

I have looked all over to try to work this out and keep hitting posts about 
"can't check variables" but when I do a p catalogue.resources I see:

foo
[Stage[main]{:name=>"main"}, Class[Settings]{:name=>"Settings"}, 
Class[main]{:name=>"main"}, Class[Foo]{:name=>"Foo", 
:mypath=>"/opt/mypath", :current_ver=>"0.1.2"}]

In foo.pp: 
class foo ( $mypath="/usr/local/mypath", $current_version="0.1.2" ) {
  if $installed_version == $current_version { # Goodie. Nothing to do }
  else { include foo::cleanup }
  
}

In the spec file .spec/classes/init_spec.rb:
require 'spec_helper'
describe 'foo' do
   context 'foo current version' do 
   let :params do { 
       :mypath => '/opt/mypath', 
      # :current_version => '1.2.3', 
       } 
    end 

   it {p catalogue.resources}
   it do 
      is expected_to contain_class('foo').with(:current_version => "0.1.2" )
   end
end

While this is very basic, and I have tried multiple ways, it error out with:
     Failure/Error: should 
contain_class('epops_hyperic').with_current_version("0.1.2")
       expected that the catalogue would contain Class[epops_hyperic] with 
current_version set to "0.1.2" but it is set to nil

Yet the p catalogue.resources function shows the shows it correctly as 
noted in the Stage[main] above.

If I uncomment the parameter :current_version => '1.2.3'  the catalogue 
print has :current_version => "1.2.3" as expected (since it is overridden) 
and the test fails with the expected message :current_ver set to "0.1.2" 
but it is set to "1.2.3". This I know how to deal with, but that then 
causes the problems with 2 and 3 above. 

What I want to test in the spec is if current_ver == expected version, the 
module doesn't need to do anything and exits. If not it will call class 
foo::cleanup. I read a lot on this today and have seen various generalized 
suggestions about 3, but nothing about 2. 

How do I test if the class exits after finding nothing is needed to be done 
or it included the class to do a cleanup accordingly? 

All of the tutorials give basics, but I can't find anything digging more 
specific that seems to work. 

Can anyone point me to the right places to look to research this?  So far 
the spec files seem really good for TDD, but without a good reference to 
these sorts of non file, package, service checks it is confusing. 

Thanks! 

-- 
You received this message because you are subscribed to the Google Groups 
"Puppet Developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to puppet-dev+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/puppet-dev/aa734244-5887-485a-bb77-d88648b889de%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to