2013-03-02 15:17:04 +00:00
|
|
|
require 'unit_helper'
|
|
|
|
|
2013-04-05 06:10:38 +00:00
|
|
|
require 'vagrant'
|
2013-04-09 01:06:13 +00:00
|
|
|
require 'vagrant-lxc/errors'
|
2013-03-02 15:17:04 +00:00
|
|
|
require 'vagrant-lxc/action/handle_box_metadata'
|
|
|
|
|
|
|
|
describe Vagrant::LXC::Action::HandleBoxMetadata do
|
|
|
|
let(:app) { mock(:app, call: true) }
|
2013-03-11 03:13:48 +00:00
|
|
|
let(:env) { {machine: machine, ui: stub(info: true)} }
|
2013-04-05 06:10:38 +00:00
|
|
|
let(:machine) { mock(:machine, box: box) }
|
|
|
|
let(:box) { mock(:box, name: 'box-name', metadata: metadata, directory: box_directory) }
|
|
|
|
let(:box_directory) { Pathname.new('/path/to/box') }
|
2013-04-09 01:06:13 +00:00
|
|
|
let(:version) { '2' }
|
|
|
|
let(:metadata) { {'template-opts' => {'--foo' => 'bar'}, 'version' => version} }
|
2013-04-05 06:10:38 +00:00
|
|
|
let(:vagrant_key) { Vagrant.source_root.join('keys', 'vagrant.pub').expand_path.to_s }
|
2013-03-02 15:17:04 +00:00
|
|
|
|
|
|
|
subject { described_class.new(app, env) }
|
|
|
|
|
2013-04-09 01:06:13 +00:00
|
|
|
context 'with valid contents' do
|
|
|
|
before do
|
|
|
|
File.stub(exists?: true)
|
|
|
|
subject.call(env)
|
|
|
|
end
|
2013-03-02 15:17:04 +00:00
|
|
|
|
2013-04-09 01:06:13 +00:00
|
|
|
it 'sets the tarball argument for the template' do
|
|
|
|
env[:lxc_template_opts].should include(
|
|
|
|
'--tarball' => box_directory.join('rootfs.tar.gz').to_s
|
|
|
|
)
|
|
|
|
end
|
2013-03-02 15:17:04 +00:00
|
|
|
|
2013-04-09 01:06:13 +00:00
|
|
|
it 'sets the auth key argument for the template' do
|
|
|
|
env[:lxc_template_opts].should include(
|
|
|
|
'--auth-key' => vagrant_key
|
|
|
|
)
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'sets the template options from metadata on env hash' do
|
|
|
|
env[:lxc_template_opts].should include(metadata['template-opts'])
|
|
|
|
end
|
2013-03-02 15:17:04 +00:00
|
|
|
|
2013-04-09 01:06:13 +00:00
|
|
|
it 'sets the template source path on env hash' do
|
|
|
|
env[:lxc_template_src].should == box_directory.join('lxc-template').to_s
|
|
|
|
end
|
2013-04-05 06:10:38 +00:00
|
|
|
end
|
2013-03-08 03:54:15 +00:00
|
|
|
|
2013-04-09 01:06:13 +00:00
|
|
|
describe 'with invalid contents' do
|
|
|
|
before { File.stub(exists?: true) }
|
|
|
|
|
|
|
|
it 'raises an error if the version is != 2' do
|
|
|
|
metadata['version'] = '1'
|
|
|
|
expect {
|
|
|
|
subject.call(env)
|
2013-06-08 05:01:50 +00:00
|
|
|
}.to raise_error(Vagrant::LXC::Errors::IncompatibleBox)
|
2013-04-09 01:06:13 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
it 'raises an error if the rootfs tarball cant be found' do
|
|
|
|
File.stub(:exists?).with(box_directory.join('rootfs.tar.gz').to_s).and_return(false)
|
|
|
|
expect {
|
|
|
|
subject.call(env)
|
|
|
|
}.to raise_error(Vagrant::LXC::Errors::RootFSTarballMissing)
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'raises an error if the lxc-template script cant be found' do
|
|
|
|
File.stub(:exists?).with(box_directory.join('lxc-template').to_s).and_return(false)
|
|
|
|
expect {
|
|
|
|
subject.call(env)
|
|
|
|
}.to raise_error(Vagrant::LXC::Errors::TemplateFileMissing)
|
|
|
|
end
|
2013-03-02 15:17:04 +00:00
|
|
|
end
|
|
|
|
end
|