Test that an added box provider must match expected.
This commit is contained in:
parent
c2151681ec
commit
9cb0015b6e
|
@ -46,8 +46,24 @@ module Vagrant
|
||||||
Archive::Tar::Minitar.unpack(path.to_s, box_dir.to_s)
|
Archive::Tar::Minitar.unpack(path.to_s, box_dir.to_s)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Find the box we just added
|
||||||
|
box = find(name, provider)
|
||||||
|
|
||||||
|
# Verify that the provider matches. If not, then we need to rollback
|
||||||
|
box_provider = box.metadata["provider"]
|
||||||
|
if box_provider.to_sym != provider
|
||||||
|
@logger.error("Added box provider doesnt match expected: #{box_provider}")
|
||||||
|
|
||||||
|
# Delete the directory
|
||||||
|
@logger.debug("Deleting the added box directory...")
|
||||||
|
box_dir.rmtree
|
||||||
|
|
||||||
|
# Raise an exception
|
||||||
|
raise Errors::BoxProviderDoesntMatch, :expected => provider, :actual => box_provider
|
||||||
|
end
|
||||||
|
|
||||||
# Return the box
|
# Return the box
|
||||||
find(name, provider)
|
box
|
||||||
end
|
end
|
||||||
|
|
||||||
# This returns an array of all the boxes on the system, given by
|
# This returns an array of all the boxes on the system, given by
|
||||||
|
|
|
@ -113,6 +113,10 @@ module Vagrant
|
||||||
error_key(:not_specified, "vagrant.actions.vm.check_box")
|
error_key(:not_specified, "vagrant.actions.vm.check_box")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
class BoxProviderDoesntMatch < VagrantError
|
||||||
|
error_key(:box_provider_doesnt_match)
|
||||||
|
end
|
||||||
|
|
||||||
class BoxSpecifiedDoesntExist < VagrantError
|
class BoxSpecifiedDoesntExist < VagrantError
|
||||||
status_code(23)
|
status_code(23)
|
||||||
error_key(:does_not_exist, "vagrant.actions.vm.check_box")
|
error_key(:does_not_exist, "vagrant.actions.vm.check_box")
|
||||||
|
|
|
@ -16,6 +16,11 @@ en:
|
||||||
errors:
|
errors:
|
||||||
base_vm_not_found: The base VM with the name '%{name}' was not found.
|
base_vm_not_found: The base VM with the name '%{name}' was not found.
|
||||||
box_not_found: Box '%{name}' could not be found.
|
box_not_found: Box '%{name}' could not be found.
|
||||||
|
box_provider_doesnt_match: |-
|
||||||
|
The box you attempted to add doesn't match the provider you specified.
|
||||||
|
|
||||||
|
Provider expected: %{expected}
|
||||||
|
Provider of box: %{actual}
|
||||||
box_upgrade_required: |-
|
box_upgrade_required: |-
|
||||||
The box '%{name}' is still stored on disk in the Vagrant 1.0.x
|
The box '%{name}' is still stored on disk in the Vagrant 1.0.x
|
||||||
format. This box must be upgraded in order to work properly with
|
format. This box must be upgraded in order to work properly with
|
||||||
|
|
|
@ -75,12 +75,11 @@ module Unit
|
||||||
box_dir
|
box_dir
|
||||||
end
|
end
|
||||||
|
|
||||||
# This creates a "box" file with the given name and provider.
|
# This creates a "box" file with the given provider.
|
||||||
#
|
#
|
||||||
# @param [String] name Name of the box.
|
|
||||||
# @param [Symbol] provider Provider for the box.
|
# @param [Symbol] provider Provider for the box.
|
||||||
# @return [Pathname] Path to the newly created box.
|
# @return [Pathname] Path to the newly created box.
|
||||||
def box2_file(name, provider)
|
def box2_file(provider)
|
||||||
# This is the metadata we want to store in our file
|
# This is the metadata we want to store in our file
|
||||||
metadata = {
|
metadata = {
|
||||||
"type" => "v2_box",
|
"type" => "v2_box",
|
||||||
|
|
|
@ -11,7 +11,7 @@ describe Vagrant::BoxCollection2 do
|
||||||
|
|
||||||
describe "adding" do
|
describe "adding" do
|
||||||
it "should add a valid box to the system" do
|
it "should add a valid box to the system" do
|
||||||
box_path = environment.box2_file("foo", :virtualbox)
|
box_path = environment.box2_file(:virtualbox)
|
||||||
|
|
||||||
# Add the box
|
# Add the box
|
||||||
box = instance.add(box_path, "foo", :virtualbox)
|
box = instance.add(box_path, "foo", :virtualbox)
|
||||||
|
@ -23,6 +23,23 @@ describe Vagrant::BoxCollection2 do
|
||||||
box = instance.find("foo", :virtualbox)
|
box = instance.find("foo", :virtualbox)
|
||||||
box.should_not be_nil
|
box.should_not be_nil
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it "should raise an exception and not add the box if the provider doesn't match" do
|
||||||
|
box_name = "foo"
|
||||||
|
good_provider = :virtualbox
|
||||||
|
bad_provider = :vmware
|
||||||
|
|
||||||
|
# Create a VirtualBox box file
|
||||||
|
box_path = environment.box2_file(good_provider)
|
||||||
|
|
||||||
|
# Add the box but with an invalid provider, verify we get the proper
|
||||||
|
# error.
|
||||||
|
expect { instance.add(box_path, box_name, bad_provider) }.
|
||||||
|
to raise_error(Vagrant::Errors::BoxProviderDoesntMatch)
|
||||||
|
|
||||||
|
# Verify the box doesn't exist
|
||||||
|
instance.find(box_name, bad_provider).should be_nil
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "listing all" do
|
describe "listing all" do
|
||||||
|
|
Loading…
Reference in New Issue