116 lines
2.5 KiB
Ruby
116 lines
2.5 KiB
Ruby
# Copyright (c) HashiCorp, Inc.
|
|
# SPDX-License-Identifier: BUSL-1.1
|
|
|
|
require File.expand_path("../../../../base", __FILE__)
|
|
|
|
require Vagrant.source_root.join("plugins/kernel_v2/config/cloud_init")
|
|
|
|
describe VagrantPlugins::Kernel_V2::VagrantConfigCloudInit do
|
|
include_context "unit"
|
|
|
|
subject { described_class.new(:user_data) }
|
|
|
|
let(:provider) { double("provider") }
|
|
let(:machine) { double("machine", name: "rspec", provider: provider,
|
|
env: Vagrant::Environment.new) }
|
|
|
|
|
|
def assert_invalid
|
|
errors = subject.validate(machine)
|
|
if errors.empty?
|
|
raise "No errors: #{errors.inspect}"
|
|
end
|
|
end
|
|
|
|
def assert_valid
|
|
errors = subject.validate(machine)
|
|
if !errors.empty?
|
|
raise "Errors: #{errors.inspect}"
|
|
end
|
|
end
|
|
|
|
before do
|
|
env = double("env")
|
|
|
|
subject.content_type = "text/cloud-config"
|
|
subject.inline = <<-CONFIG
|
|
package_update: true
|
|
CONFIG
|
|
end
|
|
|
|
describe "#validate" do
|
|
context "with defaults" do
|
|
it "is a valid config" do
|
|
subject.finalize!
|
|
assert_valid
|
|
end
|
|
|
|
it "sets a content_type" do
|
|
subject.finalize!
|
|
expect(subject.content_type).to eq("text/cloud-config")
|
|
end
|
|
|
|
context "with no type set" do
|
|
let(:type_subject) { described_class.new }
|
|
|
|
before do
|
|
type_subject.content_type = "text/cloud-config"
|
|
type_subject.inline = <<-CONFIG
|
|
package_update: true
|
|
CONFIG
|
|
end
|
|
|
|
it "defaults to a type" do
|
|
type_subject.finalize!
|
|
expect(type_subject.type).to eq(:user_data)
|
|
end
|
|
end
|
|
end
|
|
|
|
context "with an invalid option set" do
|
|
before do
|
|
subject.content_type = "text/not-real-option"
|
|
end
|
|
|
|
it "is an invalid config" do
|
|
subject.finalize!
|
|
assert_invalid
|
|
end
|
|
end
|
|
|
|
context "with both path and inline set" do
|
|
before do
|
|
subject.path = "path/to/option"
|
|
subject.inline = "package_update: true"
|
|
end
|
|
|
|
it "is an invalid config" do
|
|
subject.finalize!
|
|
assert_invalid
|
|
end
|
|
end
|
|
|
|
context "with inline set as an invalid type" do
|
|
before do
|
|
subject.path = :i_am_a_symbol
|
|
end
|
|
|
|
it "is an invalid config" do
|
|
subject.finalize!
|
|
assert_invalid
|
|
end
|
|
end
|
|
|
|
context "with path set as an invalid type" do
|
|
before do
|
|
subject.inline = :i_am_a_symbol
|
|
end
|
|
|
|
it "is an invalid config" do
|
|
subject.finalize!
|
|
assert_invalid
|
|
end
|
|
end
|
|
end
|
|
end
|