Как требовать библиотеки кулинарных книг в тестах спецификации сервера на кухне

В кулинарной книге я определил класс Rds::Checks, который использует общие методы для создания unix-команд для ресурсов bash/execute и Guards. Пример файла library/checks.rb:

module Rds
 class Checks
   class << self

     def ssh_config_entry_present host, config_file, key_name
       "cat #{config_file} | grep #{key_name}"   
     end

     def redmine_migrated user, pass, name
       "if [ `mysql -u#{user} -p#{pass} -e 'select count(id) FROM #{name}.users;' | sed -n '2 p'` -gt 0 ]; then echo '0'; else echo '1'; fi"
     end

   end
 end
end 

На провайдерах LWPR, рецептах и ​​тестах chefspec файл загружается без проблем, но когда я использую его внутри serverspec через kitchen verify, возникает ошибка.

paolo@tower:~/cookbooks/rds$ cat test/integration/install/serverspec/localhost/install_spec.rb
...
    it 'do migrations' do
      cmd = Rds::Checks.redmine_migrated 
      expect(command(cmd).stdout).to eq 0
    end
...


paolo@tower:~/cookbooks/rds$ kitchen verify

...

    NameError:
      uninitialized constant Rds

Мне бы очень хотелось сохранить методы, которые создают команды bash/sh на общем уровне, чтобы я мог тестировать их отдельно и не беспокоиться о них в модульных и интеграционных тестах.


person sekipaolo    schedule 28.11.2014    source источник


Ответы (1)


Вам придется загружать его очень вручную, возможно, добавьте временную папку, содержащую данные поваренной книги, в путь загрузки, я думаю, что она находится под /tmp/kitchen/cookbooks. Добавьте правильную папку libraries/, а затем потребуйте, как обычно. В целом этапы конвергенции и проверки никак не связаны друг с другом, поскольку test-kitchen можно использовать не только с Chef, но и с другими вещами.

Возможно, вы захотите взглянуть на что-то вроде минитест-обработчика, который запускает тесты в контексте конвергенции Chef, или предложение по режиму аудита, которое делает аналогичные вещи.

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

person coderanger    schedule 28.11.2014
comment
может быть решение поделиться этой библиотекой как драгоценным камнем и добавить их в Gemfile? - person sekipaolo; 28.11.2014
comment
Конечно, это намного больше работы. Вы можете заставить busser-serverspec устанавливать такие пользовательские драгоценные камни, но это не очень просто. - person coderanger; 28.11.2014
comment
busser-rspec и busser-serverspec принимают Gemfile, поэтому было бы неплохо заставить их установить собственный гем. - person Martin; 28.11.2014