inspec/test/unit/inputs/input_registry_test.rb

152 lines
6 KiB
Ruby
Raw Normal View History

require "helper"
require "inspec/input_registry"
require "inspec/secrets"
describe Inspec::InputRegistry do
let(:registry) { Inspec::InputRegistry }
def setup
Inspec::InputRegistry.instance.__reset
end
describe "creating a profile input" do
it "creates an input without options" do
registry.find_or_register_input("test_input", "dummy_profile")
# confirm we get the dummy value
registry.find_or_register_input("test_input", "dummy_profile").value.class.must_equal Inspec::Input::NO_VALUE_SET
end
it "creates an input with a value" do
registry.find_or_register_input("color", "dummy_profile", value: "silver")
registry.find_or_register_input("color", "dummy_profile").value.must_equal "silver"
end
end
describe "creating a profile with a name alias" do
it "creates a value input on a profile with an alias" do
registry.register_profile_alias("old_profile", "new_profile")
registry.find_or_register_input("color", "new_profile", value: "blue")
registry.find_or_register_input("color", "new_profile").value.must_equal "blue"
registry.find_or_register_input("color", "old_profile").value.must_equal "blue"
end
end
describe "creating a profile and select it" do
it "creates a profile with inputs" do
registry.find_or_register_input("color", "dummy_profile", value: "silver")
registry.find_or_register_input("color2", "dummy_profile", value: "blue")
registry.find_or_register_input("color3", "dummy_profile", value: "green")
registry.list_inputs_for_profile("dummy_profile").size.must_equal 3
end
end
describe "validate the correct objects are getting created" do
it "creates a profile with inputs" do
registry.find_or_register_input("color", "dummy_profile", value: "silver").class.must_equal Inspec::Input
registry.list_inputs_for_profile("dummy_profile").size.must_equal 1
end
end
describe "validate find_or_register_input method" do
it "find an input which exist" do
input = registry.find_or_register_input("color", "dummy_profile")
input.value = "black"
registry.find_or_register_input("color", "dummy_profile").value.must_equal "black"
end
end
# =============================================================== #
# Loading inputs from --attrs
# =============================================================== #
describe "#bind_profile_inputs" do
before do
Inspec::InputRegistry.any_instance.stubs(:validate_inputs_file_readability!)
end
let(:seen_inputs) do
registry.bind_profile_inputs("test_fixture_profile", sources)
inputs = registry.list_inputs_for_profile("test_fixture_profile")
# Flatten Input objects down to their values
inputs.keys.each { |input_name| inputs[input_name] = inputs[input_name].value }
inputs
end
describe "when no CLI --attrs are specified" do
let(:sources) { { cli_input_files: [] } }
it "returns an empty hash" do
seen_inputs.must_equal({})
end
end
describe "when a CLI --attrs option is provided and does not resolve" do
let(:sources) { { cli_input_files: ["nope.jpg"] } }
it "raises an exception" do
Inspec::SecretsBackend.expects(:resolve).with("nope.jpg").returns(nil)
proc { seen_inputs }.must_raise Inspec::Exceptions::SecretsBackendNotFound
end
end
describe "when a CLI --attrs option is provided and has no inputs" do
let(:sources) { { cli_input_files: ["empty.yaml"] } }
it "returns an empty hash" do
secrets = mock
secrets.stubs(:inputs).returns(nil)
Inspec::SecretsBackend.expects(:resolve).with("empty.yaml").returns(secrets)
seen_inputs.must_equal({})
end
end
describe "when a CLI --attrs file is provided and has inputs" do
let(:sources) { { cli_input_files: ["file1.yaml"] } }
it "returns a hash containing the inputs" do
fixture_inputs = { "foo" => "bar" }
secrets = mock
secrets.stubs(:inputs).returns(fixture_inputs)
Inspec::SecretsBackend.expects(:resolve).with("file1.yaml").returns(secrets)
seen_inputs.must_equal(fixture_inputs)
end
end
describe "when multiple CLI --attrs option args are provided and one fails" do
let(:sources) { { cli_input_files: ["file1.yaml", "file2.yaml"] } }
it "raises an exception" do
secrets = mock
secrets.stubs(:inputs).returns(nil)
Inspec::SecretsBackend.expects(:resolve).with("file1.yaml").returns(secrets)
Inspec::SecretsBackend.expects(:resolve).with("file2.yaml").returns(nil)
proc { seen_inputs }.must_raise Inspec::Exceptions::SecretsBackendNotFound
end
end
describe "when multiple CLI --attrs option args are provided and one has no inputs" do
let(:sources) { { cli_input_files: ["file1.yaml", "file2.yaml"] } }
it "returns a hash containing the inputs from the valid files" do
inputs = { "foo" => "bar" }
secrets1 = mock
secrets1.stubs(:inputs).returns(nil)
secrets2 = mock
secrets2.stubs(:inputs).returns(inputs)
Inspec::SecretsBackend.expects(:resolve).with("file1.yaml").returns(secrets1)
Inspec::SecretsBackend.expects(:resolve).with("file2.yaml").returns(secrets2)
seen_inputs.must_equal(inputs)
end
end
describe "when multiple CLI --attrs option args are provided and all have inputs" do
let(:sources) { { cli_input_files: ["file1.yaml", "file2.yaml"] } }
it "returns a hash containing all the inputs" do
secrets1 = mock
secrets1.stubs(:inputs).returns({ "key1" => "value1" })
secrets2 = mock
secrets2.stubs(:inputs).returns({ "key2" => "value2" })
Inspec::SecretsBackend.expects(:resolve).with("file1.yaml").returns(secrets1)
Inspec::SecretsBackend.expects(:resolve).with("file2.yaml").returns(secrets2)
seen_inputs.must_equal({ "key1" => "value1", "key2" => "value2" })
end
end
end
end