mirror of
https://github.com/inspec/inspec
synced 2024-12-24 12:03:23 +00:00
d051c8bdf1
Generated duplicate messages due to the way that examples are aggregated in RSpec. Make sure we never show any duplicate test result messages, as they offer not value to any user. Signed-off-by: Dominik Richter <dominik.richter@gmail.com>
74 lines
2.4 KiB
Ruby
74 lines
2.4 KiB
Ruby
# encoding: utf-8
|
|
# author: Dominik Richter
|
|
# author: Christoph Hartmann
|
|
|
|
require 'functional/helper'
|
|
require 'jsonschema'
|
|
|
|
describe 'inspec exec' do
|
|
include FunctionalHelper
|
|
|
|
it 'can execute a profile with the mini json formatter and validate its schema' do
|
|
out = inspec('exec ' + example_profile + ' --format json-min --no-create-lockfile')
|
|
out.stderr.must_equal ''
|
|
out.exit_status.must_equal 0
|
|
data = JSON.parse(out.stdout)
|
|
sout = inspec('schema exec-jsonmin')
|
|
schema = JSON.parse(sout.stdout)
|
|
JSON::Schema.validate(data, schema)
|
|
end
|
|
|
|
it 'can execute a simple file with the mini json formatter and validate its schema' do
|
|
out = inspec('exec ' + example_control + ' --format json-min --no-create-lockfile')
|
|
out.stderr.must_equal ''
|
|
out.exit_status.must_equal 0
|
|
data = JSON.parse(out.stdout)
|
|
sout = inspec('schema exec-jsonmin')
|
|
schema = JSON.parse(sout.stdout)
|
|
JSON::Schema.validate(data, schema)
|
|
end
|
|
|
|
it 'does not contain any dupilcate results with describe.one' do
|
|
out = inspec("shell -c 'describe.one do describe 1 do it { should cmp 2 } end end' --format=json-min")
|
|
out.stderr.must_equal ''
|
|
data = JSON.parse(out.stdout)
|
|
data['controls'].length.must_equal 1
|
|
data['controls'][0]['message'].must_equal "\nexpected: 2\n got: 1\n\n(compared using `cmp` matcher)\n"
|
|
end
|
|
|
|
describe 'execute a profile with mini json formatting' do
|
|
let(:json) { JSON.load(inspec('exec ' + example_profile + ' --format json-min --no-create-lockfile').stdout) }
|
|
let(:controls) { json['controls'] }
|
|
let(:ex1) { controls.find{|x| x['id'] == 'tmp-1.0'} }
|
|
let(:ex2) { controls.find{|x| x['id'] =~ /generated/} }
|
|
let(:ex3) { controls.find{|x| x['id'] == 'gordon-1.0'} }
|
|
|
|
it 'must have 5 examples' do
|
|
json['controls'].length.must_equal 5
|
|
end
|
|
|
|
it 'has an id' do
|
|
controls.find { |ex| !ex.key? 'id' }.must_be :nil?
|
|
end
|
|
|
|
it 'has a profile_id' do
|
|
controls.find { |ex| !ex.key? 'profile_id' }.must_be :nil?
|
|
end
|
|
|
|
it 'has a code_desc' do
|
|
ex1['code_desc'].must_equal 'File /tmp should be directory'
|
|
controls.find { |ex| !ex.key? 'code_desc' }.must_be :nil?
|
|
end
|
|
|
|
it 'has a status' do
|
|
ex1['status'].must_equal 'passed'
|
|
ex3['status'].must_equal 'skipped'
|
|
end
|
|
|
|
it 'has a skip_message' do
|
|
ex1['skip_message'].must_be :nil?
|
|
ex3['skip_message'].must_equal "Can't find file \"/tmp/gordon/config.yaml\""
|
|
end
|
|
end
|
|
|
|
end
|