Я написал тест serverspec, который предназначен для проверки того, что объем оперативной памяти на сервере больше или равен монтированию, указанному в файле свойств.
describe command('perl -n -e "if (/MemTotal:\s+(\d+)/) { print \$1; last; }" /proc/meminfo') do
its(:stdout){ should be >= "#{property['ram']}"}
end
На тестируемой машине по команде выдает "7539944"
Если для свойства ram установлено значение «888», то тест завершается ошибкой, так как при сравнении строк «888» больше, чем «7539944».
Могу ли я каким-то образом провести числовое сравнение строкового типа в спецификации сервера?
Этот сеанс irb показывает, как, по моему мнению, ведет себя Ruby и как я хотел бы, чтобы он вел себя
$ irb
1.9.3-p484 :001 > prop="888"
=> "888"
1.9.3-p484 :002 > command="7539944"
=> "7539944"
1.9.3-p484 :003 > command > prop
=> false
1.9.3-p484 :004 > command.to_i > prop.to_i
=> true
Если я изменю описание на это
describe command('perl -n -e "if (/MemTotal:\s+(\d+)/) { print \$1; last; }" /proc/meminfo') do
its(:stdout){ should be >= "#{property['ram']}".to_i}
end
я получаю эту ошибку
Failures:
1) std Command "perl -n -e "if (/MemTotal:\s+(\d+)/) { print \$1; last; }" /proc/meminfo" stdout should be >= 888
On host `foo.bar.org'
Failure/Error: its(:stdout){ should be >= "#{property['ram']}".to_i}
ArgumentError:
comparison of String with 888 failed
sudo -p 'Password: ' /bin/sh -c perl\ -n\ -e\ \"if\ \(/MemTotal:\\s\+\(\\d\+\)/\)\ \{\ print\ \\\$1\;\ last\;\ \}\"\ /proc/meminfo
7539944
Shared Example Group: "ram::init" called from ./spec/std/spec.rb:5
# ./spec/shared/ram/init.rb:4:in `block (3 levels) in <top (required)>'
.to_i
. - person zwippie   schedule 30.10.2015should be >= property['ram'].to_i
; это работает? - person illusionist   schedule 30.10.2015>= property['ram'].to_i
подходит для RHS, но выдает ошибку типа, так как LHS — это строка - person Vorsprung   schedule 30.10.2015