2013-04-20 20:02:25 +00:00
|
|
|
require 'acceptance_helper'
|
|
|
|
|
2013-04-20 22:19:11 +00:00
|
|
|
class TestUI < Vagrant::UI::Interface
|
|
|
|
attr_reader :messages
|
|
|
|
|
|
|
|
METHODS = [:clear_line, :report_progress, :warn, :error, :info, :success]
|
|
|
|
|
|
|
|
def initialize(resource = nil)
|
|
|
|
super
|
|
|
|
@messages = METHODS.each_with_object({}) { |m, h| h[m] = [] }
|
|
|
|
end
|
|
|
|
|
|
|
|
def ask(*args)
|
|
|
|
super
|
|
|
|
# Automated tests should not depend on user input, obviously.
|
|
|
|
raise Errors::UIExpectsTTY
|
|
|
|
end
|
|
|
|
|
|
|
|
METHODS.each do |method|
|
|
|
|
define_method(method) do |message, *opts|
|
|
|
|
@messages[method].push message
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
# Monkey patch vagrant in order to reuse the UI test object that is set on
|
|
|
|
# our Vagrant::Environments
|
|
|
|
#
|
|
|
|
# TODO: Find out if this makes sense to be on vagrant core itself
|
|
|
|
require 'vagrant/machine'
|
|
|
|
Vagrant::Machine.class_eval do
|
|
|
|
alias :old_action :action
|
|
|
|
|
|
|
|
define_method :action do |name, extra_env = nil|
|
|
|
|
extra_env = { ui: @env.ui }.merge(extra_env || {})
|
|
|
|
old_action name, extra_env
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2013-04-20 20:02:25 +00:00
|
|
|
describe 'Sanity check' do
|
|
|
|
context 'running a `vagrant up` from scratch' do
|
|
|
|
before(:all) do
|
|
|
|
destroy_container
|
|
|
|
vagrant_up
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'creates a the container'
|
|
|
|
|
|
|
|
it 'starts the newly created container'
|
|
|
|
|
|
|
|
it 'mounts shared folders with the right permissions'
|
|
|
|
|
|
|
|
it 'provisions the container based on Vagrantfile configs'
|
|
|
|
|
|
|
|
it 'forwards configured ports'
|
|
|
|
|
|
|
|
it "is able to be SSH'ed"
|
|
|
|
end
|
|
|
|
|
|
|
|
context '`vagrant halt` on a running container' do
|
|
|
|
before(:all) do
|
|
|
|
destroy_container
|
|
|
|
vagrant_up
|
|
|
|
vagrant_halt
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'shuts down container'
|
|
|
|
|
|
|
|
it 'clears forwarded ports'
|
|
|
|
end
|
|
|
|
|
|
|
|
context '`vagrant destroy`' do
|
|
|
|
before(:all) do
|
|
|
|
destroy_container
|
|
|
|
vagrant_up
|
|
|
|
vagrant_destroy
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'destroys the underlying container'
|
|
|
|
end
|
|
|
|
|
|
|
|
def destroy_container
|
|
|
|
`sudo lxc-shutdown -n \`cat /vagrant/spec/.vagrant/machines/default/lxc/id\``
|
|
|
|
`sudo lxc-wait -n \`cat /vagrant/spec/.vagrant/machines/default/lxc/id\` --state STOPPED`
|
|
|
|
`sudo lxc-destroy -n \`cat /vagrant/spec/.vagrant/machines/default/lxc/id\``
|
|
|
|
end
|
|
|
|
|
|
|
|
def vagrant_up
|
|
|
|
opts = { cwd: 'spec' }
|
|
|
|
env = Vagrant::Environment.new(opts)
|
|
|
|
env.cli('up', '--provider', 'lxc')
|
2013-04-20 22:19:11 +00:00
|
|
|
env.unload
|
2013-04-20 20:02:25 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
def vagrant_halt
|
|
|
|
opts = { cwd: 'spec' }
|
|
|
|
env = Vagrant::Environment.new(opts)
|
|
|
|
env.cli('halt')
|
2013-04-20 22:19:11 +00:00
|
|
|
env.unload
|
2013-04-20 20:02:25 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
def vagrant_destroy
|
|
|
|
opts = { cwd: 'spec' }
|
|
|
|
env = Vagrant::Environment.new(opts)
|
|
|
|
env.cli('destroy', '-f')
|
2013-04-20 22:19:11 +00:00
|
|
|
env.unload
|
|
|
|
end
|
|
|
|
|
|
|
|
def vagrant_ssh(cmd)
|
|
|
|
opts = { cwd: 'spec', ui_class: TestUI }
|
|
|
|
env = Vagrant::Environment.new(opts)
|
|
|
|
result = env.cli('ssh', '-c', cmd)
|
|
|
|
if result.to_i != 0
|
|
|
|
raise "SSH command failed: '#{cmd}'\n#{env.ui.messages.inspect}"
|
|
|
|
end
|
|
|
|
output = env.ui.messages[:info].join("\n").chomp
|
|
|
|
env.unload
|
|
|
|
output
|
2013-04-20 20:02:25 +00:00
|
|
|
end
|
|
|
|
end
|