Persisting the dotfile middleware
This commit is contained in:
parent
c365a7ffac
commit
3e51a07a80
|
@ -7,6 +7,7 @@ module Vagrant
|
||||||
def self.builtin!
|
def self.builtin!
|
||||||
up = Builder.new do
|
up = Builder.new do
|
||||||
use VM::Import
|
use VM::Import
|
||||||
|
use VM::Persist
|
||||||
use VM::Customize
|
use VM::Customize
|
||||||
use VM::ForwardPorts
|
use VM::ForwardPorts
|
||||||
use VM::ShareFolders
|
use VM::ShareFolders
|
||||||
|
|
|
@ -0,0 +1,22 @@
|
||||||
|
module Vagrant
|
||||||
|
class Action
|
||||||
|
module VM
|
||||||
|
class Persist
|
||||||
|
def initialize(app, env)
|
||||||
|
@app = app
|
||||||
|
|
||||||
|
# Error the environment if the dotfile is not valid
|
||||||
|
env.error!(:dotfile_error, :env => env.env) if File.exist?(env.env.dotfile_path) &&
|
||||||
|
!File.file?(env.env.dotfile_path)
|
||||||
|
end
|
||||||
|
|
||||||
|
def call(env)
|
||||||
|
env.logger.info "Persisting the VM UUID (#{env["vm"].uuid})"
|
||||||
|
env.env.update_dotfile
|
||||||
|
|
||||||
|
@app.call(env)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -0,0 +1,50 @@
|
||||||
|
require File.join(File.dirname(__FILE__), '..', '..', '..', 'test_helper')
|
||||||
|
|
||||||
|
class PersistVMActionTest < Test::Unit::TestCase
|
||||||
|
setup do
|
||||||
|
@klass = Vagrant::Action::VM::Persist
|
||||||
|
@app, @env = mock_action_data
|
||||||
|
|
||||||
|
@vm = mock("vm")
|
||||||
|
@vm.stubs(:uuid).returns("123")
|
||||||
|
@env["vm"] = @vm
|
||||||
|
end
|
||||||
|
|
||||||
|
context "initializing" do
|
||||||
|
setup do
|
||||||
|
File.stubs(:file?).returns(true)
|
||||||
|
File.stubs(:exist?).returns(true)
|
||||||
|
@dotfile_path = "foo"
|
||||||
|
@env.env.stubs(:dotfile_path).returns(@dotfile_path)
|
||||||
|
end
|
||||||
|
|
||||||
|
should "error environment if dotfile exists but is not a file" do
|
||||||
|
File.expects(:file?).with(@env.env.dotfile_path).returns(false)
|
||||||
|
@klass.new(@app, @env)
|
||||||
|
assert @env.error?
|
||||||
|
assert_equal :dotfile_error, @env.error.first
|
||||||
|
end
|
||||||
|
|
||||||
|
should "initialize properly if dotfiles doesn't exist" do
|
||||||
|
File.expects(:exist?).with(@env.env.dotfile_path).returns(false)
|
||||||
|
@klass.new(@app, @env)
|
||||||
|
assert !@env.error?
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context "with an instance" do
|
||||||
|
setup do
|
||||||
|
File.stubs(:file?).returns(true)
|
||||||
|
File.stubs(:exist?).returns(true)
|
||||||
|
@instance = @klass.new(@app, @env)
|
||||||
|
end
|
||||||
|
|
||||||
|
should "persist the dotfile then continue chain" do
|
||||||
|
update_seq = sequence("update_seq")
|
||||||
|
@env.env.expects(:update_dotfile).in_sequence(update_seq)
|
||||||
|
@app.expects(:call).with(@env).in_sequence(update_seq)
|
||||||
|
|
||||||
|
@instance.call(@env)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in New Issue