json ресурс
Используйте json ресурс проверки Chef InSpec для проверки данных в файле JSON.
Доступность
Установка
Этот ресурс распространяется вместе с самим Chef InSpec. Вы можете использовать его автоматически.
Версия
Этот ресурс впервые стал доступен в версии v1.0.0 InSpec.
Синтаксис
Блок ресурса json объявляет данные, которые будут проверены. Предположим, что у вас есть следующий файл JSON:
{
"name" : "hello",
"meta" : {
"creator" : "John Doe"
},
"array": [
"zero",
"one"
]
}
Этот файл можно запросить с помощью:
describe json('/path/to/name.json') do
its('name') { should eq 'hello' }
its(['meta','creator']) { should eq 'John Doe' }
its(['array', 1]) { should eq 'one' }
end
где
-
name— это параметр конфигурации в файле JSON -
should eq 'foo'проверяет значениеnameиз файла JSON по сравнению со значением, объявленным в тесте
Ресурс json также можно использовать с выходными данными в формате JSON из команды. Используя тот же JSON, что и в предыдущем примере, его можно запросить с помощью:
describe json({ command: 'retrieve_data.py --json'}) do
its('name') { should eq 'hello' }
its(['meta','creator']) { should eq 'John Doe' }
its(['array', 1]) { should eq 'one' }
end
Наконец, содержимое можно передать напрямую в ресурс:
describe json({ content: '{\"item1\": { \"status\": \"available\" } }' }) do
its(['item1', 'status']) { should cmp 'available' }
end
Примеры
В следующих примерах показано, как использовать этот ресурс проверки Chef InSpec.
имя
Сопоставитель name проверяет значение имени файла, считанного из файла JSON, по сравнению со значением, объявленным в тесте:
its('name') { should eq '/tmp/example.json' }
Проверка версии кулинарной книги в файле policyfile.lock.json
describe json('policyfile.lock.json') do
its(['cookbook_locks', 'omnibus', 'version']) { should eq('2.2.0') }
end
Проверка JSON-вывода из HTTP-API
Наш пример API имеет конечную точку /health, которая выглядит так:
{
"service": {
"port": 3000,
"status": "ok"
}
}
Пример теста:
describe json(content: http('http://localhost:3000/health').body) do
its(['service', 'port']) { should eq 3000 }
its(['service', 'status']) { should eq 'ok' }
end
Сопоставители
Полный список доступных сопоставителей вы найдете на нашей странице сопоставителей.
© Chef Software, Inc.
Licensed under the Creative Commons Attribution 3.0 Unported License.
The Chef™ Mark and Chef Logo are either registered trademarks/service marks or trademarks/servicemarks of Chef, in the United States and other countries and are used with Chef Inc's permission.
We are not affiliated with, endorsed or sponsored by Chef Inc.
https://docs.chef.io/inspec/resources/json/