Невозможно запустить тесты chefspec с пакетами данных

Я пытаюсь запустить модульные тесты с помощью chefspec. Я добавил пакеты данных в свой рецепт. Без багов данных, тест Chefspec проходит нормально. После добавления багов данных Chefspec показывает следующую ошибку:

 1) database::prerequisites installs a package
     Failure/Error: let(:chef_run) { ChefSpec::ServerRunner.new(platform: 'oracle', version: '7.2').converge(described_recipe) }
 Net::HTTPServerException:
   404 "Not Found "
 # /tmp/chefspec20170616-8187-olziw2file_cache_path/cookbooks/database/recipes/prerequisites.rb:9:in `from_file'
 # ./prerequisites_spec.rb:4:in `block (2 levels) in <top (required)>'
 # ./prerequisites_spec.rb:25:in `block (2 levels) in <top (required)>'

Я не знаю, как обрабатывать пакеты данных в chefspec. Когда я выполняю рецепт с помощью клиента-повара на рабочей станции, он работает нормально. но испытания шеф-повара проваливаются.

файл спецификации рецепта:

require 'chefspec'

describe 'database::prerequisites' do
  let(:chef_run) { ChefSpec::ServerRunner.new(platform: 'oracle', version: '7.2').converge(described_recipe) }



    before(:each) do
      stub_command("cat /etc/oracle-release | grep 7.*").and_return(true)
    end

    before(:each) do
      stub_command("cat /etc/oracle-release | grep 6.*").and_return(true)
    end

     before(:each) do
      stub_command("cat /etc/selinux/config | grep SELINUX=disabled").and_return(true)
    end

    before(:each) do
      stub_command("sestatus | grep enabled").and_return(true)
    end

  it 'installs a package ' do
    expect(chef_run).to install_package('oracle-rdbms-server-12cR1-preinstall')
    expect(chef_run).to install_package('net-tools')
    expect(chef_run).to install_package('xorg-x11-apps')

  end

   it 'creates a directory with the default action' do
    expect(chef_run).to create_directory('/u01/app/oraInventory')
    expect(chef_run).to create_directory('/oradata')
  end  

end

файл рецепта:

my_secret_key = Chef::EncryptedDataBagItem.load_secret("/etc/secret_key")
passwords = Chef::EncryptedDataBagItem.load("databags", "databag_passwords", my_secret_key)

Не могли бы вы подсказать, как решить эту проблему. Я провожу тесты только на своей рабочей станции шеф-повара.


person Naveen kumar    schedule 16.06.2017    source источник
comment
Почему бы не использовать DSL-метод data_bag_item рецепта (Документация здесь)?   -  person Tensibai    schedule 16.06.2017
comment
Спасибо за предложение. Но все же я получил ту же ошибку. Запуск рецепта шеф-повара прошел нормально. но тестирование дает ту же ошибку.   -  person Naveen kumar    schedule 16.06.2017


Ответы (1)


Вам необходимо создать пакеты данных на тестовом сервере, https://github.com/chefspec/chefspec#dsl показывает, как это сделать с помощью ServerRunner, или вы можете использовать rspec-mocks и имитировать методы load_secret и load. Я предпочитаю последний, так как он быстрее (с точки зрения времени выполнения теста) и более удобен, но решать вам.

person coderanger    schedule 17.06.2017