Merge pull request #8627 from briancain/maint/master/raise-exception-snapshot-unsupported

Raise exception for unsupported snapshot providers and improve snapshot plugin testing
This commit is contained in:
Brian Cain 2017-05-31 16:16:23 -07:00 committed by GitHub
commit 5c7ee0bc2a
6 changed files with 110 additions and 4 deletions

View File

@ -656,6 +656,10 @@ module Vagrant
error_key(:snapshot_force) error_key(:snapshot_force)
end end
class SnapshotNotSupported < VagrantError
error_key(:snapshot_not_supported)
end
class SSHAuthenticationFailed < VagrantError class SSHAuthenticationFailed < VagrantError
error_key(:ssh_authentication_failed) error_key(:ssh_authentication_failed)
end end

View File

@ -22,8 +22,7 @@ module VagrantPlugins
end end
if !vm.provider.capability?(:snapshot_list) if !vm.provider.capability?(:snapshot_list)
vm.ui.info(I18n.t("vagrant.commands.snapshot.not_supported")) raise Vagrant::Errors::SnapshotNotSupported
next
end end
snapshots = vm.provider.capability(:snapshot_list) snapshots = vm.provider.capability(:snapshot_list)

View File

@ -34,8 +34,7 @@ module VagrantPlugins
name = argv.pop name = argv.pop
with_target_vms(argv) do |vm| with_target_vms(argv) do |vm|
if !vm.provider.capability?(:snapshot_list) if !vm.provider.capability?(:snapshot_list)
vm.ui.info(I18n.t("vagrant.commands.snapshot.not_supported")) raise Vagrant::Errors::SnapshotNotSupported
next
end end
snapshot_list = vm.provider.capability(:snapshot_list) snapshot_list = vm.provider.capability(:snapshot_list)

View File

@ -1158,6 +1158,12 @@ en:
guest system. Please report a bug with your Vagrantfile and debug log. guest system. Please report a bug with your Vagrantfile and debug log.
snapshot_force: |- snapshot_force: |-
You must include the `--force` option to replace an existing snapshot. You must include the `--force` option to replace an existing snapshot.
snapshot_not_supported: |-
This provider doesn't support snapshots.
This may be intentional or this may be a bug. If this provider
should support snapshots, then please report this as a bug to the
maintainer of the provider.
ssh_authentication_failed: |- ssh_authentication_failed: |-
SSH authentication failed! This is typically caused by the public/private SSH authentication failed! This is typically caused by the public/private
keypair for the SSH user not being properly set on the guest VM. Please keypair for the SSH user not being properly set on the guest VM. Please

View File

@ -0,0 +1,83 @@
require File.expand_path("../../../../../base", __FILE__)
require Vagrant.source_root.join("plugins/commands/snapshot/command/list")
describe VagrantPlugins::CommandSnapshot::Command::List do
include_context "unit"
let(:iso_env) do
# We have to create a Vagrantfile so there is a root path
env = isolated_environment
env.vagrantfile("")
env.create_vagrant_env
end
let(:guest) { double("guest") }
let(:host) { double("host") }
let(:machine) { iso_env.machine(iso_env.machine_names[0], :dummy) }
let(:argv) { [] }
subject { described_class.new(argv, iso_env) }
before do
allow(machine.provider).to receive(:capability?).with(:snapshot_list).
and_return(true)
allow(machine.provider).to receive(:capability).with(:snapshot_list).
and_return([])
allow(subject).to receive(:with_target_vms) { |&block| block.call machine }
end
describe "execute" do
context "with an unsupported provider" do
let(:argv) { ["foo"] }
before do
allow(machine.provider).to receive(:capability?).with(:snapshot_list).
and_return(false)
end
it "raises an exception" do
machine.id = "foo"
expect { subject.execute }.
to raise_error(Vagrant::Errors::SnapshotNotSupported)
end
end
context "with a vm given" do
let(:argv) { ["foo"] }
it "prints a message if the vm does not exist" do
machine.id = nil
expect(iso_env.ui).to receive(:info).with { |message, _|
expect(message).to include("VM not created")
}
expect(machine).to_not receive(:action)
expect(subject.execute).to eq(0)
end
it "prints a message if no snapshots have been taken" do
machine.id = "foo"
expect(iso_env.ui).to receive(:output)
.with(/No snapshots have been taken yet!/, anything)
expect(subject.execute).to eq(0)
end
it "prints a list of snapshots" do
machine.id = "foo"
allow(machine.provider).to receive(:capability).with(:snapshot_list).
and_return(["foo", "bar", "baz"])
expect(iso_env.ui).to receive(:output).with(/foo/, anything)
expect(iso_env.ui).to receive(:output).with(/bar/, anything)
expect(iso_env.ui).to receive(:output).with(/baz/, anything)
expect(subject.execute).to eq(0)
end
end
end
end

View File

@ -38,6 +38,21 @@ describe VagrantPlugins::CommandSnapshot::Command::Save do
end end
end end
context "with an unsupported provider" do
let(:argv) { ["test"] }
before do
allow(machine.provider).to receive(:capability?).with(:snapshot_list).
and_return(false)
end
it "raises an exception" do
machine.id = "foo"
expect { subject.execute }.
to raise_error(Vagrant::Errors::SnapshotNotSupported)
end
end
context "with a snapshot name given" do context "with a snapshot name given" do
let(:argv) { ["test"] } let(:argv) { ["test"] }
it "calls snapshot_save with a snapshot name" do it "calls snapshot_save with a snapshot name" do