У меня есть кулинарная книга Chef, которая устанавливает «git версии 2.5.2». Я использую CentOS 6.4 vm для применения этой кулинарной книги и написал тест для проверки версии git.
Фрагмент выглядит так:
# Test if git exists
describe command('git --version') do
its(:stdout) { should match "git version 2.5.2" }
end
Когда я запускаю проверку кухни, тест выполняется, но возвращает другую версию git, чем я ожидал, что приводит к сбою теста.
Вот ошибка:
2) Command "git --version" stdout should match "git version 2.5.2"
Failure/Error: its(:stdout) { should match "git version 2.5.2" }
expected "git version 1.7.1\n" to match "git version 2.5.2"
Diff:
@@ -1,2 +1,2 @@
-git version 2.5.2
+git version 1.7.1
/bin/sh -c git\ --version
git version 1.7.1
На виртуальной машине установлена версия git 1.7.1 в каталоге /usr/bin. Рецепт устанавливает git версии 2.5.2 в каталог /usr/local/bin. Когда я вхожу в виртуальную машину с помощью команды «кухонный вход», я подключаюсь как бродячий пользователь. Каталог /usr/local/bin находится выше в PATH, чем /usr/bin, поэтому, когда я запускаю «git --version», я получаю «git version 2.5.2» в качестве вывода. Однако, когда я запускаю проверку кухни, мои тесты будут выполняться с пользователем root. PATH пользователя root не включает /usr/local/bin, но имеет /usr/bin, поэтому он возвращает «git version 1.7.1».
Как я могу контролировать, какой пользователь на виртуальной машине, которую проверяет кухня, будет использовать при выполнении тестов?
Я попытался использовать команду «su -c» в таком тесте:
describe command('su -c "whoami" vagrant') do
its(:stdout) { should match "vagrant" }
end
Результат был ожидаемым:
Command "su -c "whoami" vagrant"
stdout
should match "vagrant"
Внесение изменений с помощью команды git:
describe command('su -c "git --version" vagrant') do
its(:stdout) { should match "git version 2.5.2" }
end
Результат:
1) Command "su -c "git --version" vagrant" stdout should match "git version 2.5.2"
Failure/Error: its(:stdout) { should match "git version 2.5.2" }
expected "" to match "git version 2.5.2"
/bin/sh -c su\ -c\ \"git\ --version\"\ vagrant
Проверка бродячего пути пользователя:
describe command('su -c "echo $PATH" vagrant') do
its(:stdout) { should match "" }
end
В этом случае тест проходит успешно. Путь не устанавливается для бродячего пользователя, поэтому простая команда «git --version» не будет работать.
su -c "git --version" vagrant
- person Draco Ater   schedule 29.10.2015--login
кsu
приведет к инициализации$PATH
. - person Draco Ater   schedule 29.10.2015