Как издеваться над куклой validate_cmd в марионетке с помощью rspec?

У меня есть образец теста rspec для кукольной кулинарной книги, как показано ниже.

it {
  is_expected.to contain_file('/etc/resolv.conf')
    .with(
      'ensure' => 'file',
      'owner' => 'root',
      'group' => 'root',
      'mode' => '0444',
      'validate_cmd' => '/var/tmp/checkdns_nameservers.sh',
    )
    .with_content(resolvconf_contents)
    .that_notifies('Service[sshd]')
    .that_notifies('Service[nscd]')
}

Проблема в том, что это просто проверяет наличие validate_cmd в манифесте.

Я должен издеваться над функцией validate_cmd и возвращает true/false, и на основании этого я должен проверить содержимое вновь созданного файла. Как я могу смоделировать команду validate_cmd с помощью модуля rspec? Любая помощь будет высоко ценится !!


person melvil james    schedule 04.05.2019    source источник


Ответы (1)


Короткий ответ: это невозможно, и вам нужно будет использовать такие инструменты, как Beaker, Test Kitchen и т. д.

Чтобы получить более подробный ответ, я направляю вас к руководству по Rspec-puppet:

Многих смущает назначение этих тестов, поскольку они не могут проверить результат манифеста на работающей системе. Суть rspec-puppet не в этом. Тесты Rspec-puppet предназначены для проверки поведения Puppet, когда он компилирует ваши манифесты в каталог ресурсов Puppet.

Ключевым моментом является то, что Rspec-puppet никогда не применяет каталог, который он компилирует; он только проверяет составленный каталог и позволяет вам делать утверждения о том, что там есть. Но чтобы наблюдать за поведением в ответ на различия в том, что делает ваш validate_cmd, вам необходимо применить каталог к ​​реальной системе.

Конечно, будет непросто настроить системы в Beaker или Test Kitchen таким образом, чтобы ваш скрипт также возвращал два разных значения. Кроме того, что бы вы действительно тестировали. Разве вы не проверяете, выполняет ли Puppet то, что обещает? Если это так, вам действительно не следует пытаться это проверить.

Или это сценарий, который вы написали сами? Если это так, рассмотрите возможность использования среды модульного тестирования Bash, такой как shunit2 или BATS вместо этого. Вместо этого докажите, что ваш сценарий оболочки ведет себя так, как вы ожидаете, в ответ на действия ОС.

person Alex Harvey    schedule 04.05.2019
comment
Или, другими словами: модульное тестирование! = приемочное тестирование. Кроме того, фреймворки Beaker и т. д. потенциально избыточны для этого теста. Упаковщика было бы достаточно, и он был бы намного легче. - person Matt Schuchard; 04.05.2019