vaguerent/test/unit_legacy/vagrant/action/vm/share_folders_test.rb
2011-12-03 15:44:08 -08:00

145 lines
4.2 KiB
Ruby

require "test_helper"
class ShareFoldersVMActionTest < Test::Unit::TestCase
setup do
@klass = Vagrant::Action::VM::ShareFolders
@app, @env = action_env
@vm = mock("vm")
@vm.stubs(:name).returns("foo")
@vm.stubs(:ssh).returns(mock("ssh"))
@vm.stubs(:system).returns(mock("system"))
@env["vm"] = @vm
@env["vm.modify"] = mock("proc")
@internal_vm = mock("internal")
@vm.stubs(:vm).returns(@internal_vm)
# No validation for this test since its a nightmare due to all the
# nonexistent shared folders.
Vagrant::Config::Top.any_instance.stubs(:validate!)
@instance = @klass.new(@app, @env)
end
def stub_shared_folders(contents)
env = vagrant_env(vagrantfile(<<-vf))
config.vm.shared_folders.clear
#{contents}
vf
@env.stubs(:env).returns(env)
env.config.vm.shared_folders
end
context "calling" do
should "run the methods in the proper order" do
before_seq = sequence("before")
@instance.expects(:create_metadata).once.in_sequence(before_seq)
@app.expects(:call).with(@env).in_sequence(before_seq)
@instance.expects(:mount_shared_folders).once.in_sequence(before_seq)
@instance.call(@env)
end
end
context "collecting shared folders" do
should "return a hash of the shared folders" do
data = {
"foo" => %W[bar baz],
"bar" => %W[foo baz]
}
stub_shared_folders(<<-sf)
config.vm.share_folder("foo", "bar", "baz")
config.vm.share_folder("bar", "foo", "baz")
sf
result = @instance.shared_folders
assert_equal data.length, result.length
data.each do |name, value|
guest, host = value
assert_equal guest, result[name][:guestpath]
assert_equal host, result[name][:hostpath]
end
end
should "ignore disabled shared folders" do
stub_shared_folders(<<-sf)
config.vm.share_folder("v-foo", "/foo", "/foo")
config.vm.share_folder("v-root", "/vagrant", ".", :disabled => true)
config.vm.share_folder("v-bar", "/bar", "/bar")
sf
assert_equal 2, @instance.shared_folders.length
assert_equal %W[v-bar v-foo], @instance.shared_folders.keys.sort
end
should "not destroy original hash" do
@folders = stub_shared_folders(<<-sf)
config.vm.share_folder("foo", "bar", "baz", :sync => true)
sf
folder = @folders["foo"].dup
@instance.shared_folders
assert_equal folder, @env.env.config.vm.shared_folders["foo"]
end
end
context "setting up shared folder metadata" do
setup do
stub_shared_folders(<<-sf)
config.vm.share_folder("foo", "fooguest", "foohost")
config.vm.share_folder("bar", "barguest", "barhost")
sf
end
should "add all shared folders to the VM" do
shared_folders = []
data = %W[foo bar]
shared_folders.expects(:<<).times(data.length).with() do |sf|
hostpath = File.expand_path("#{sf.name}host", @env.env.root_path)
assert data.include?(sf.name)
assert_equal hostpath, sf.host_path
true
end
@internal_vm.stubs(:shared_folders).returns(shared_folders)
@env["vm.modify"].expects(:call).with() do |proc|
proc.call(@internal_vm)
true
end
@instance.create_metadata
end
end
context "mounting the shared folders" do
setup do
@folders = stub_shared_folders(<<-sf)
config.vm.share_folder("foo", "fooguest", "foohost", :owner => "yo", :group => "fo")
config.vm.share_folder("bar", "fooguest/foo", "barhost", :owner => "foo", :group => "bar")
config.vm.share_folder("foo_no_mount", nil, "foohost2")
sf
@ssh = mock("ssh")
@vm.ssh.stubs(:execute).yields(@ssh)
@vm.system.stubs(:mount_shared_folder)
end
should "mount all shared folders to the VM" do
mount_seq = sequence("mount_seq")
@folders.each do |name, data|
if data[:guestpath]
@vm.system.expects(:mount_shared_folder).with(@ssh, name, data[:guestpath], data[:owner], data[:group]).in_sequence(mount_seq)
else
@vm.system.expects(:mount_shared_folder).with(@ssh, name, anything, anything, anything).never
end
end
@instance.mount_shared_folders
end
end
end