197 lines
5.7 KiB
Ruby
197 lines
5.7 KiB
Ruby
require File.expand_path("../../base", __FILE__)
|
|
|
|
require "pathname"
|
|
|
|
describe Vagrant::BoxCollection do
|
|
include_context "unit"
|
|
|
|
let(:box_class) { Vagrant::Box }
|
|
let(:environment) { isolated_environment }
|
|
let(:instance) { described_class.new(environment.boxes_dir) }
|
|
|
|
it "should tell us the directory it is using" do
|
|
instance.directory.should == environment.boxes_dir
|
|
end
|
|
|
|
describe "adding" do
|
|
it "should add a valid box to the system" do
|
|
box_path = environment.box2_file(:virtualbox)
|
|
|
|
# Add the box
|
|
box = instance.add(box_path, "foo", :virtualbox)
|
|
box.should be_kind_of(box_class)
|
|
box.name.should == "foo"
|
|
box.provider.should == :virtualbox
|
|
|
|
# Verify we can find it as well
|
|
box = instance.find("foo", :virtualbox)
|
|
box.should_not be_nil
|
|
end
|
|
|
|
it "should add a box without specifying a provider" do
|
|
box_path = environment.box2_file(:vmware)
|
|
|
|
# Add the box
|
|
box = instance.add(box_path, "foo")
|
|
box.should be_kind_of(box_class)
|
|
box.name.should == "foo"
|
|
box.provider.should == :vmware
|
|
end
|
|
|
|
it "should add a V1 box" do
|
|
# Create a V1 box.
|
|
box_path = environment.box1_file
|
|
|
|
# Add the box
|
|
box = instance.add(box_path, "foo")
|
|
box.should be_kind_of(box_class)
|
|
box.name.should == "foo"
|
|
box.provider.should == :virtualbox
|
|
end
|
|
|
|
it "should raise an exception if the box already exists" do
|
|
prev_box_name = "foo"
|
|
prev_box_provider = :virtualbox
|
|
|
|
# Create the box we're adding
|
|
environment.box2(prev_box_name, prev_box_provider)
|
|
|
|
# Attempt to add the box with the same name
|
|
box_path = environment.box2_file(prev_box_provider)
|
|
expect { instance.add(box_path, prev_box_name, prev_box_provider) }.
|
|
to raise_error(Vagrant::Errors::BoxAlreadyExists)
|
|
end
|
|
|
|
it "should raise an exception if the box already exists and no provider is given" do
|
|
# Create some box file
|
|
box_name = "foo"
|
|
box_path = environment.box2_file(:vmware)
|
|
|
|
# Add it once, successfully
|
|
expect { instance.add(box_path, box_name) }.to_not raise_error
|
|
|
|
# Add it again, and fail!
|
|
expect { instance.add(box_path, box_name) }.
|
|
to raise_error(Vagrant::Errors::BoxAlreadyExists)
|
|
end
|
|
|
|
it "should raise an exception if you're attempting to add a box that exists as a V1 box" do
|
|
prev_box_name = "foo"
|
|
|
|
# Create the V1 box
|
|
environment.box1(prev_box_name)
|
|
|
|
# Attempt to add some V2 box with the same name
|
|
box_path = environment.box2_file(:vmware)
|
|
expect { instance.add(box_path, prev_box_name) }.
|
|
to raise_error(Vagrant::Errors::BoxUpgradeRequired)
|
|
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
|
|
|
|
it "should raise an exception if you add an invalid box file" do
|
|
pending "I don't know how to generate an invalid tar."
|
|
end
|
|
end
|
|
|
|
describe "listing all" do
|
|
it "should return an empty array when no boxes are there" do
|
|
instance.all.should == []
|
|
end
|
|
|
|
it "should return the boxes and their providers" do
|
|
# Create some boxes
|
|
environment.box2("foo", :virtualbox)
|
|
environment.box2("foo", :vmware)
|
|
environment.box2("bar", :ec2)
|
|
|
|
# Verify some output
|
|
results = instance.all.sort
|
|
results.length.should == 3
|
|
results.should == [["foo", :virtualbox], ["foo", :vmware], ["bar", :ec2]].sort
|
|
end
|
|
|
|
it "should return V1 boxes as well" do
|
|
# Create some boxes, including a V1 box
|
|
environment.box1("bar")
|
|
environment.box2("foo", :vmware)
|
|
|
|
# Verify some output
|
|
results = instance.all.sort
|
|
results.should == [["bar", :virtualbox, :v1], ["foo", :vmware]]
|
|
end
|
|
end
|
|
|
|
describe "finding" do
|
|
it "should return nil if the box does not exist" do
|
|
instance.find("foo", :i_dont_exist).should be_nil
|
|
end
|
|
|
|
it "should return a box if the box does exist" do
|
|
# Create the "box"
|
|
environment.box2("foo", :virtualbox)
|
|
|
|
# Actual test
|
|
result = instance.find("foo", :virtualbox)
|
|
result.should_not be_nil
|
|
result.should be_kind_of(box_class)
|
|
result.name.should == "foo"
|
|
end
|
|
|
|
it "should throw an exception if it is a v1 box" do
|
|
# Create a V1 box
|
|
environment.box1("foo")
|
|
|
|
# Test!
|
|
expect { instance.find("foo", :virtualbox) }.
|
|
to raise_error(Vagrant::Errors::BoxUpgradeRequired)
|
|
end
|
|
end
|
|
|
|
describe "upgrading" do
|
|
it "should upgrade a V1 box to V2" do
|
|
# Create a V1 box
|
|
environment.box1("foo")
|
|
|
|
# Verify that only a V1 box exists
|
|
expect { instance.find("foo", :virtualbox) }.
|
|
to raise_error(Vagrant::Errors::BoxUpgradeRequired)
|
|
|
|
# Upgrade the box
|
|
instance.upgrade("foo").should be
|
|
|
|
# Verify the box exists
|
|
box = instance.find("foo", :virtualbox)
|
|
box.should_not be_nil
|
|
box.name.should == "foo"
|
|
end
|
|
|
|
it "should raise a BoxNotFound exception if a non-existent box is upgraded" do
|
|
expect { instance.upgrade("i-dont-exist") }.
|
|
to raise_error(Vagrant::Errors::BoxNotFound)
|
|
end
|
|
|
|
it "should return true if we try to upgrade a V2 box" do
|
|
# Create a V2 box
|
|
environment.box2("foo", :vmware)
|
|
|
|
instance.upgrade("foo").should be
|
|
end
|
|
end
|
|
end
|