Модульный тест rspec-puppet для определения типа с использованием ресурса

Я написал определяемый пользователем тип, который загружает файл с помощью wget и сохраняет его в /root. Для этого я использовал тип exec. код хорошо работает с puppet apply, теперь, когда я пытаюсь написать тест rspec для того же, я сталкиваюсь с проблемами и получаю сообщения об ошибках. Please find the site.pp, download.pp, init_spec.rb file.

Я новичок в rspec и puppet и не могу найти решение для этого, пожалуйста, помогите с предложением о том, как написать тест rspec для этого типа определения.

манифест/site.pp

$link='https://rpm.nodesource.com/pub_8.x/el/7/x86_64/'
$rpm = 'nodejs-8.0.0-1nodesource.el7.centos.x86_64.rpm'

node_js::download{'execute wget':
                comm=>'/usr/bin/wget',
                url=>"${link}${rpm}",
                path=>'/root',
            }

modules/node_js/manifests/download.pp

define node_js::download($comm=undef,
                         $url=undef,
                         $path=undef){

$validate= "nodejs-8.0.0-1nodesource.el7.centos.x86_64.rpm"

    exec { 'execute wget':
    command => "${comm} ${url}",
        cwd => "${path}",
     unless => "/usr/bin/ls  ${path} | grep ${validate}",

    }
}

тестовый файл rspec

modules/node_js/spec/define/init_spec.rb

require 'spec_helper'
describe 'node_js::download', :type => 'define' do

  let(:title) { 'node_js::download' }


  it {
    is_expected.to contain_exec('/usr/bin/wget h*tps://rpm.nodesource.com/pub_8.x/el/7/x86_64/nodejs-8.0.0-1nodesource.el7.centos.x86_64.rpm').with({
         'cwd' => '/root/' ,
    })
  }

end

отображаемое сообщение об ошибке выполнения rspec

[root@puppet node_js]# rspec spec/defines/init_spec.rb
F

Failures:

  1) node_js::download should contain Exec[/usr/bin/wget https://rpm.nodesource.com/pub_8.x/el/7/x86_64/nodejs-8.0.0-1nodesource.el7.centos.x86_64.rpm] with cwd => "/root/"
should contain Exec[/usr/bin/wget h*tps://rpm.nodesource.com/pub_8.x/el/7/x86_64/nodejs-8.0.0-1nodesource.el7.centos.x86_64.rpm] with cwd => "/root/"
     Failure/Error:
       is_expected.to contain_exec('/usr/bin/wget h*tps://rpm.nodesource.com/pub_8.x/el/7/x86_64/nodejs-8.0.0-1nodesource.el7.centos.x86_64.rpm').with({
         'cwd' => '/root/' ,
       })

       expected that the catalogue would contain Exec[/usr/bin/wget https://rpm.nodesource.com/pub_8.x/el/7/x86_64/nodejs-8.0.0-1nodesource.el7.centos.x86_64.rpm]
     # ./spec/defines/init_spec.rb:8:in `block (2 levels) in <top (required)>'

Finished in 0.69964 seconds (files took 8.81 seconds to load)
1 example, 1 failure

Failed examples:

rspec ./spec/defines/init_spec.rb:7 # node_js::download should contain Exec[/usr/bin/wget ht*ps://rpm.nodesource.com/pub_8.x/el/7/x86_64/nodejs-8.0.0-1nodesource.el7.centos.x86_64.rpm] with cwd => "/root/"

[root@puppet node_js]#

person shailesh    schedule 15.08.2017    source источник


Ответы (1)


Похоже, вы на правильном пути.

Вот что у вас должно быть в init_spec.rb:

require 'spec_helper'

describe 'node_js::download', :type => 'define' do
  let(:title) { 'node_js::download' }
  let(:params) do
    {
      :comm => '/usr/bin/wget',
      :path => '/root/',
      :url  => 'https://rpm.nodesource.com/pub_8.x/el/7/x86_64/nodejs-8.0.0-1nodesource.el7.centos.x86_64.rpm',
    }
  end

  it {
    is_expected.to contain_exec('execute wget').with({
      'command' => '/usr/bin/wget https://rpm.nodesource.com/pub_8.x/el/7/x86_64/nodejs-8.0.0-1nodesource.el7.centos.x86_64.rpm',
      'cwd'     => '/root/',
    })
  }
end

Вы правильно установили заголовок тестируемого типа, используя let(:title) { ... }, но не установили входные параметры. Я добавил входные параметры, которые вы, видимо, и предполагали.

Во-вторых, вы ожидаете, что ресурс Exec будет иметь заголовок, содержащий команду, тогда как фактический заголовок будет execute wget, в зависимости от того, что у вас есть в download.pp.

В противном случае это выглядит хорошо.

person Alex Harvey    schedule 15.08.2017
comment
Код работал в соответствии с предложенными изменениями. Спасибо, Алекс. - person shailesh; 16.08.2017