inspec/test/unit/profiles/profile_resource_exceptions_test.rb

74 lines
2.2 KiB
Ruby
Raw Normal View History

require "helper"
require "inspec/profile_context"
require "inspec/runner_mock"
describe "resource exception" do
let(:profile) do
profile = MockLoader.load_profile("profile-with-resource-exceptions")
profile.load_libraries
profile.collect_tests # TODO: bad name?
profile
end
let(:checks) do
profile.runner_context.rules.map do |_, rule|
Inspec::Rule.prepare_checks(rule)
end
end
def assert_check(nth, skipped, failed, msg = nil)
nth = [nth, 0, 1, 0] unless Array === nth
result = checks.dig(*nth)
if msg
_(result.resource_exception_message).must_equal msg
else
_(result.resource_exception_message).must_be_nil
end
_(result.resource_failed?).must_equal failed
_(result.resource_skipped?).must_equal skipped
end
def assert_skipped(nth, msg) # skips resource when `Inspec::Exceptions::ResourceSkipped` is raised
assert_check nth, true, false, msg
end
def assert_failed(nth, msg) # fails resource when `Inspec::Exceptions::ResourceFailed` is raised
assert_check nth, false, true, msg
end
it "within initialize" do
assert_skipped 0, "Skipping because reasons"
assert_failed 1, "Failing because reasons"
assert_check 2, false, false # does not affect other tests
end
it "within a matcher" do
assert_failed 3, "Failing inside matcher"
assert_skipped 4, "Skipping inside matcher"
end
it "within a control" do
idx = [5, 1, 1, 0]
assert_skipped 5, "Skipping because reasons"
assert_failed idx, "Failing because reasons"
end
it "within FilterTable" do
assert_skipped 6, "Skipping inside FilterTable"
assert_failed 7, "Failing inside FilterTable"
end
it "within FilterTable when multiple filters are used" do
assert_skipped 8, "Skipping inside FilterTable"
assert_failed 9, "Failing inside FilterTable"
# does not halt the run/fail all tests when an incorrect filter is used:
assert_skipped 10, "Skipping inside FilterTable"
assert_failed 11, "Failing inside FilterTable"
end
it "within FilterTable does not affect regular FilterTable usage" do
_(checks.dig(12, 0, 1, 0).another_filter).must_equal ["example"]
end
end