Как смоделировать кукол validate_cmd в кукол с помощью rspec? - PullRequest
2 голосов
/ 04 мая 2019

У меня есть марионеточный тестовый образец 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? Любая помощь будет принята с благодарностью !!

1 Ответ

4 голосов
/ 04 мая 2019

Короткий ответ: это невозможно, и вам необходимо использовать такие инструменты, как стакан, тест-кухня и т. Д.

Для более длинного ответа я направлю вас к учебнику Rspec-puppet :

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

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

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

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

...