2014-11-11 6 views
0

Во-первых, я использую serverspec 2.3.1 и 2.4.2, specinfra с Рубином 1.9.3p550Первый «должен be_installed» в тест всегда терпит неудачу на Windows,

Я до сих пор исследования проблемы, но я понял, Я бы постарался спросить здесь, если кто-то столкнулся с проблемой раньше (а если нет, и я понял это, возможно, следующий человек, столкнувшийся с ней, найдет этот ответ в Google).

Цель состоит в том, чтобы иметь спецификационный файл со всеми программными обеспечением, которые должны быть установлены в тестовой системе. Что странно, но это то, что независимо от того, что я пишу, в первый раз, когда я делаю it { should be_installed }, это провалится. Никаких исключений.

Приведенный ниже код показывает, что я имею в виду:

require 'acceptance_helper' 

describe package('7-Zip 9.22 (x64 edition)') do 
    it { should be_installed } 
end 

describe package('7-Zip 9.22 (x64 edition)') do 
    it { should be_installed } 
end 

describe package('Zend Server') do 
    it { should be_installed } 
end 

describe package('SQL Server 2012 Management Studio') do 
    it { should be_installed } 
end 

describe package('Microsoft SQL Server 2012 (64-bit)') do 
    it { should be_installed } 
end 

Когда я запускаю этот файл, я получить первый тест, который говорит, что 7-Zip не установлен и второй тест будет сказать это. Все, что я ставлю в качестве первого теста, делает то же самое.

Package "7-Zip 9.22 (x64 edition)" 
    should be installed (FAILED - 1) 

Package "7-Zip 9.22 (x64 edition)" 
    should be installed 

Package "Zend Server" 
    should be installed 

Package "SQL Server 2012 Management Studio" 
    should be installed 

Package "Microsoft SQL Server 2012 (64-bit)" 
    should be installed 

Failures: 

    1) Package "7-Zip 9.22 (x64 edition)" should be installed 
    Failure/Error: it { should be_installed } 
    TypeError: 
     can't convert Symbol into Integer 
     uname -s 
     #< CLIXML 
<Objs Version="1.1.0.1" xmlns="http://schemas.microsoft.com/powershell/2004/04"><S S="Error">The term 'uname' is not recognized as the name of a cmdlet, function, script fi_x000D__x000A_</S><S S="Error">le, or operable program. Check the spelling of the name, or if a path was inclu_x000D__x000A_</S><S S="Error">ded, verify that the path is correct and try again._x000D__x000A_</S><S S="Error">At line:1 char:6_x000D__x000A_</S><S S="Error">+ uname &lt;&lt;&lt;&lt; -s_x000D__x000A_</S><S S="Error"> + CategoryInfo   : ObjectNotFound: (uname:String) [], CommandNotFou _x000D__x000A_</S><S S="Error"> ndException_x000D__x000A_</S><S S="Error"> + FullyQualifiedErrorId : CommandNotFoundException_x000D__x000A_</S><S S="Error"> _x000D__x000A_</S></Objs> 
# ./spec/acceptance/192.168.0.70/all_required_applications_are_installed_spec.rb:4:in `block (2 levels) in <top (required)>' 

Finished in 25.96 seconds (files took 0.99763 seconds to load) 
5 examples, 1 failure 

Failed examples: 

rspec ./spec/acceptance/192.168.0.70/all_required_applications_are_installed_spec.rb:4 # Package "7-Zip 9.22 (x64 edition)" should be installed 

Что нереально для меня является то, что только первый тест потерпит неудачу, так что я действительно не знаю, что могло произойти. Я буду исследовать и обновлять этот пост, поскольку я иду, но если кто-нибудь когда-либо сталкивался с этим, мне бы очень хотелось услышать, как/если вы это исправили!

Редактировать: С сообщением об ошибке и способом тестирования ServerSpecs для пакетов в Windows, я думал, что команда была плохо выполнена, но оказывается, что ошибка происходит даже до запуска этой команды. По крайней мере, похоже, что в Intellij IDEA, когда я поставил точку останова в строке 7 specinfra/command/windows/base/package.rb (exec "(FindInstalledApplication -appName '#{package}' #{version_selection}) -eq $true"), точка останова никогда не была достигнута, тест не прошел, и он переходит к следующему тесту.

Редактировать 2: Удалено, чтобы изолировать проблему немного больше, похоже, что это происходит в specinfra\helper\os.rb. Я новичок в Ruby, поэтому его немного сложно отлаживать, но я предполагаю, что что-то не инициализируется должным образом при первом запуске независимо от того, использует ли ServerSpec/SpecInfra для обнаружения ОС.

ответ

3

Ну, оказывается, я глуп и не могу правильно прочитать документацию. В документации Serverspec говорится, что ОС Windows необходимо указать в spec_helper, и я только копировал/вставлял пример хелпера из своего Windows doc.

Это мой помощник файл теперь обратите внимание на set :os линии

require 'serverspec' 
require 'winrm' 
require 'yaml' 

set :backend, :winrm 
set :os, :family => 'windows', :release => '2008', :arch => 'x64' 

base_path = File.dirname(File.expand_path(__FILE__)) 
config = YAML.load_file(File.join(base_path, 'config.yml')) 

user = 'vagrant' 
pass = 'vagrant' 
endpoint = "http://#{config['host_ip']}:5985/wsman" 

winrm = ::WinRM::WinRMWebService.new(endpoint, :ssl, :user => user, :pass => pass, :basic_auth_only => true) 
winrm.set_timeout 300 # 5 minutes max timeout for any operation 
Specinfra.configuration.winrm = winrm 
+1

Я видел подобный вопрос с тестами, относящихся к файлам, где бы периодически выпадать с сообщением, что 'uname' не может быть найден , Установка ОС и семейства явно в spec_helper.rb, похоже, устранила проблему. Спасибо, что опубликовали это. Я посмотрю, смогу ли я открыть PR для них, чтобы обновить документацию. – sworisbreathing

+0

https://github.com/serverspec/serverspec/pull/494 – sworisbreathing

+0

Я рад, что это помогло! Спасибо за PR (я должен был это сделать, я не знаю, почему я об этом не думал), я уверен, что это поможет многим людям! – gCardinal

Смежные вопросы