From 75d4aa42a1e34633928ccf32c04c23340ee5572b Mon Sep 17 00:00:00 2001 From: Brian Cain Date: Tue, 9 Apr 2019 13:11:19 -0700 Subject: [PATCH] Ensure non-existent machines do not attempt to list snapshots Prior to this commit, if a snapshot restore was run on an entire environment with some non-existent guests, Vagrant would attempt to list their snapshots with a nil id. This commit fixes that by returning an empty list of snapshots if the machine has not been created yet. --- plugins/providers/virtualbox/cap.rb | 1 + .../unit/plugins/providers/virtualbox/cap_test.rb | 15 +++++++++++++++ 2 files changed, 16 insertions(+) diff --git a/plugins/providers/virtualbox/cap.rb b/plugins/providers/virtualbox/cap.rb index 1c0512407..ab170b282 100644 --- a/plugins/providers/virtualbox/cap.rb +++ b/plugins/providers/virtualbox/cap.rb @@ -29,6 +29,7 @@ module VagrantPlugins # # @return [Array] Snapshot Name def self.snapshot_list(machine) + return [] if machine.id.nil? machine.provider.driver.list_snapshots(machine.id) end end diff --git a/test/unit/plugins/providers/virtualbox/cap_test.rb b/test/unit/plugins/providers/virtualbox/cap_test.rb index 351b40c5f..a4071b578 100644 --- a/test/unit/plugins/providers/virtualbox/cap_test.rb +++ b/test/unit/plugins/providers/virtualbox/cap_test.rb @@ -40,4 +40,19 @@ describe VagrantPlugins::ProviderVirtualBox::Cap do expect(described_class.forwarded_ports(machine)).to be(nil) end end + + describe "#snapshot_list" do + it "returns all the snapshots" do + allow(machine).to receive(:id).and_return("1234") + allow(driver).to receive(:list_snapshots).with(machine.id). + and_return(["backup", "old"]) + + expect(described_class.snapshot_list(machine)).to eq(["backup", "old"]) + end + + it "returns empty array when the machine is does not exist" do + allow(machine).to receive(:id).and_return(nil) + expect(described_class.snapshot_list(machine)).to eq([]) + end + end end