systemadmin.es > Programación > Testing con rspec de modulos de puppet

Testing con rspec de modulos de puppet

Mediante rspec podemos realizar pruebas sobre modulos de puppet para asegurarnos que tienen (y mantienen) el comportamiento que esperamos. Dichas pruebas se hacen sobre lo que aplicaría puppet en caso de ejecutarse

Dado un modulo generado con puppet module generate deberemos añadir el fichero .fixtures.yml en la base del modulo para indicar de dónde sacar sus dependencias:

fixtures:
  repositories:
    stdlib: git://github.com/puppetlabs/puppetlabs-stdlib.git
  symlinks:
    apparmor: "#{source_dir}"

A continuación ya podemos escribir los tests dentro de spec/classes que deberán llamarse <loquesea>_spec.rb. Vamos a ver unos ejemplos de un módulo que gestiona apparmor:

  • spec/classes/init_spec.rb:
    require 'spec_helper'
    describe 'apparmor', :type => 'class' do
    
      context 'with defaults for all parameters' do
        let :facts do
        {
                :osfamily => 'Debian',
                :operatingsystem => 'Ubuntu',
                :operatingsystemrelease => '14.0',
        }
        end
    
        it { should contain_class('apparmor') }
      end
    end
    
  • spec/classes/apparmor_utils_spec.rb:
     
    require 'spec_helper'
    describe 'apparmor', :type => 'class' do
    
      context 'apparmor-utils are installed' do
        let :facts do
        {
                :osfamily => 'Debian',
                :operatingsystem => 'Ubuntu',
                :operatingsystemrelease => '14.0',
        }
        end
    
        it {
                should contain_package('apparmor-utils')
        }
      end
    end
    
  • spec/classes/supported_os_spec.rb:
    require 'spec_helper'
    describe 'apparmor', :type => 'class' do
    
      context 'Ubuntu 14' do
        let :facts do
        {
                :osfamily => 'Debian',
                :operatingsystem => 'Ubuntu',
                :operatingsystemrelease => '14.0',
        }
        end
    
        it { should contain_class('apparmor') }
      end
    
      context 'RH' do
        let :facts do
        {
                :osfamily => 'RedHat',
        }
        end
    
        it {
                expect { should raise_error(Puppet::Error) }
        }
      end
    
      context 'best OS ever' do
        let :facts do
        {
                :osfamily => 'SOFriki',
        }
        end
    
        it {
                expect { should raise_error(Puppet::Error) }
        }
      end
    
      context 'noOS defined' do
        it {
                expect { should raise_error(Puppet::Error) }
        }
      end
    end
    

Mediante rake spec en la base del modulo podemos ejecutar los tests:

$ rake spec
HEAD is now at e815da5 Merge pull request #483 from nibalizer/load_metadata_json
/usr/bin/ruby1.9.1 -S rspec spec/classes/apparmor_utils_spec.rb spec/classes/init_spec.rb spec/classes/supported_os_spec.rb --color
......

Finished in 1.27 seconds
6 examples, 0 failures

Deja un comentario:

XHTML - Tags permitidos:<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>