60 lines
1.9 KiB
Ruby
60 lines
1.9 KiB
Ruby
# Copyright (c) HashiCorp, Inc.
|
|
# SPDX-License-Identifier: BUSL-1.1
|
|
|
|
require File.expand_path("../../../../base", __FILE__)
|
|
|
|
describe Vagrant::Action::Builtin::CloudInitWait do
|
|
|
|
let(:app) { lambda { |env| } }
|
|
let(:config) { double("config", :vm => vm) }
|
|
let(:comm) { double("comm") }
|
|
let(:machine) { double("machie", :config => config, :communicate => comm, :name => "test") }
|
|
let(:ui) { Vagrant::UI::Silent.new }
|
|
let(:env) { { machine: machine, ui: ui} }
|
|
|
|
let(:subject) { described_class.new(app, env) }
|
|
|
|
describe "#call" do
|
|
|
|
context "cloud init configuration exists" do
|
|
|
|
let(:vm) { double("vm", cloud_init_configs: ["some config"]) }
|
|
|
|
before do
|
|
allow(comm).to receive(:test).with("command -v cloud-init").and_return(true)
|
|
end
|
|
|
|
it "waits for cloud init to be executed" do
|
|
expect(comm).to receive(:sudo).with("cloud-init status --wait", any_args).and_return(0)
|
|
subject.call(env)
|
|
end
|
|
|
|
it "raises an error when cloud init not installed" do
|
|
allow(comm).to receive(:test).with("command -v cloud-init").and_return(false)
|
|
expect { subject.call(env) }.
|
|
to raise_error(Vagrant::Errors::CloudInitNotFound)
|
|
end
|
|
|
|
it "raises an error when cloud init command fails" do
|
|
expect(comm).to receive(:sudo).with("cloud-init status --wait", any_args).and_return(1)
|
|
expect { subject.call(env) }.
|
|
to raise_error(Vagrant::Errors::CloudInitCommandFailed)
|
|
end
|
|
end
|
|
|
|
context "no cloud init configuration" do
|
|
|
|
let(:vm) { double("vm", cloud_init_configs: []) }
|
|
|
|
before do
|
|
allow(comm).to receive(:test).with("command -v cloud-init").and_return(true)
|
|
end
|
|
|
|
it "does not wait for cloud init if there are no cloud init configs" do
|
|
expect(comm).to_not receive(:sudo).with("cloud-init status --wait", any_args)
|
|
subject.call(env)
|
|
end
|
|
end
|
|
end
|
|
end
|