149 lines
3.9 KiB
Ruby
149 lines
3.9 KiB
Ruby
|
require 'spec_helper'
|
||
|
|
||
|
describe 'vagrant up' do
|
||
|
context 'given the machine has not been created yet' do
|
||
|
let(:output) { @output }
|
||
|
let(:containers) { @containers }
|
||
|
let(:users) { File.read '/var/lib/lxc/vagrant-container/rootfs/etc/passwd' }
|
||
|
let(:sudoers) { `sudo cat /var/lib/lxc/vagrant-container/rootfs/etc/sudoers` }
|
||
|
let(:rinetd_conf) { File.read('/etc/rinetd.conf') }
|
||
|
|
||
|
before :all do
|
||
|
destroy_container!
|
||
|
configure_box_with :ip => '10.0.3.121'
|
||
|
@output = provider_up
|
||
|
@containers = `sudo lxc-ls`.split
|
||
|
end
|
||
|
|
||
|
it 'outputs some debugging info' do
|
||
|
output.should =~ /INFO lxc: Creating container.../
|
||
|
output.should =~ /INFO lxc: Container started/
|
||
|
end
|
||
|
|
||
|
it 'creates an lxc container' do
|
||
|
containers.should include 'vagrant-container'
|
||
|
end
|
||
|
|
||
|
it 'sets up the vagrant user with passwordless sudo' do
|
||
|
users.should =~ /vagrant/
|
||
|
sudoers.should =~ /Defaults\s+exempt_group=admin/
|
||
|
sudoers.should =~ /%admin ALL=NOPASSWD:ALL/
|
||
|
end
|
||
|
|
||
|
it 'automagically shares the root folder' do
|
||
|
output.should =~ /Sharing \/vagrant\/tmp as \/vagrant/
|
||
|
end
|
||
|
|
||
|
it 'automagically redirects 2222 port to 22 on guest machine'
|
||
|
end
|
||
|
|
||
|
context 'given the machine was created and is down' do
|
||
|
let(:output) { @output }
|
||
|
let(:info) { @info }
|
||
|
|
||
|
before :all do
|
||
|
destroy_container!
|
||
|
provider_up
|
||
|
`sudo lxc-stop -n vagrant-container`
|
||
|
@output = provider_up
|
||
|
@info = `sudo lxc-info -n vagrant-container`
|
||
|
end
|
||
|
|
||
|
it 'outputs some debugging info' do
|
||
|
output.should =~ /INFO lxc: Container already created, moving on/
|
||
|
output.should =~ /INFO lxc: Container started/
|
||
|
end
|
||
|
|
||
|
it 'starts the container' do
|
||
|
info.should =~ /RUNNING/
|
||
|
end
|
||
|
end
|
||
|
|
||
|
context 'given the machine is up already' do
|
||
|
let(:output) { @output }
|
||
|
let(:containers) { @containers }
|
||
|
|
||
|
before :all do
|
||
|
destroy_container!
|
||
|
provider_up
|
||
|
@output = provider_up
|
||
|
end
|
||
|
|
||
|
it 'outputs some debugging info' do
|
||
|
output.should =~ /INFO lxc: Container already created, moving on/
|
||
|
output.should =~ /INFO lxc: Container already started/
|
||
|
end
|
||
|
end
|
||
|
|
||
|
context 'given an ip was specified' do
|
||
|
let(:ip) { '10.0.3.100' }
|
||
|
let(:output) { @output }
|
||
|
|
||
|
before :all do
|
||
|
destroy_container!
|
||
|
configure_box_with :ip => ip
|
||
|
@output = provider_up
|
||
|
end
|
||
|
|
||
|
it 'sets up container ip' do
|
||
|
`ping -c1 #{ip} > /dev/null && echo -n 'yes'`.should == 'yes'
|
||
|
end
|
||
|
end
|
||
|
|
||
|
context 'given a port was configured to be forwarded' do
|
||
|
let(:ip) { '10.0.3.101' }
|
||
|
let(:output) { @output }
|
||
|
let(:rinetd_conf) { File.read('/etc/rinetd.conf') }
|
||
|
|
||
|
before :all do
|
||
|
destroy_container!
|
||
|
configure_box_with :forwards => [[3333, 33]], :ip => ip
|
||
|
@output = provider_up
|
||
|
end
|
||
|
|
||
|
after :all do
|
||
|
restore_rinetd_conf!
|
||
|
end
|
||
|
|
||
|
it 'ouputs some debugging info' do
|
||
|
output.should =~ /Forwarding ports\.\.\./
|
||
|
output.should =~ /33 => 3333/
|
||
|
output.should =~ /Restarting rinetd/
|
||
|
end
|
||
|
|
||
|
it 'sets configs for rinetd' do
|
||
|
rinetd_conf.should =~ /0\.0\.0\.0\s+3333\s+#{Regexp.escape ip}\s+33/
|
||
|
end
|
||
|
end
|
||
|
|
||
|
context 'given a folder was configured to be shared' do
|
||
|
let(:ip) { '10.0.3.100' }
|
||
|
let(:output) { @output }
|
||
|
|
||
|
before :all do
|
||
|
destroy_container!
|
||
|
configure_box_with({
|
||
|
:ip => ip,
|
||
|
:shared_folders => [
|
||
|
{'source' => '/vagrant', 'destination' => '/tmp/vagrant-all'}
|
||
|
]
|
||
|
})
|
||
|
@output = provider_up
|
||
|
`rm -f /vagrant/tmp/file-from-spec`
|
||
|
end
|
||
|
|
||
|
after :all do
|
||
|
`rm -f /vagrant/tmp/file-from-spec`
|
||
|
end
|
||
|
|
||
|
it 'ouputs some debugging info' do
|
||
|
output.should =~ /Sharing \/vagrant as \/tmp\/vagrant\-all/
|
||
|
end
|
||
|
|
||
|
it 'mounts the folder on the right path' do
|
||
|
`echo 'IT WORKS' > /vagrant/tmp/file-from-spec`
|
||
|
provider_ssh('c' => 'cat /tmp/vagrant-all/tmp/file-from-spec').should include 'IT WORKS'
|
||
|
end
|
||
|
end
|
||
|
end
|