vagrant/test/unit/plugins/synced_folders/rsync/synced_folder_test.rb

98 lines
2.9 KiB
Ruby

require_relative "../../../base"
require Vagrant.source_root.join("plugins/synced_folders/rsync/synced_folder")
describe VagrantPlugins::SyncedFolderRSync::SyncedFolder do
include_context "unit"
let(:iso_env) do
# We have to create a Vagrantfile so there is a root path
env = isolated_environment
env.vagrantfile("")
env.create_vagrant_env
end
let(:guest) { double("guest") }
let(:host) { double("host") }
let(:machine) { iso_env.machine(iso_env.machine_names[0], :dummy) }
let(:helper_class) { VagrantPlugins::SyncedFolderRSync::RsyncHelper }
before do
allow(machine.env).to receive(:host).and_return(host)
allow(machine).to receive(:guest).and_return(guest)
end
describe "#usable?" do
it "is usable if rsync can be found" do
expect(Vagrant::Util::Which).to receive(:which).with("rsync").and_return(true)
expect(subject.usable?(machine)).to be(true)
end
it "is not usable if rsync cant be found" do
expect(Vagrant::Util::Which).to receive(:which).with("rsync").and_return(false)
expect(subject.usable?(machine)).to be(false)
end
it "raises an exception if asked to" do
expect(Vagrant::Util::Which).to receive(:which).with("rsync").and_return(false)
expect { subject.usable?(machine, true) }.
to raise_error(Vagrant::Errors::RSyncNotFound)
end
end
describe "#enable" do
let(:ssh_info) {{
private_key_path: [],
}}
before do
allow(machine).to receive(:ssh_info).and_return(ssh_info)
allow(guest).to receive(:capability?).with(:rsync_installed)
end
it "rsyncs each folder" do
folders = [
[:one, {}],
[:two, {}],
]
folders.each do |_, opts|
expect(helper_class).to receive(:rsync_single).
with(machine, ssh_info, opts).
ordered
end
subject.enable(machine, folders, {})
end
it "installs rsync if capable" do
folders = [ [:foo, {}] ]
allow(helper_class).to receive(:rsync_single)
allow(guest).to receive(:capability?).with(:rsync_installed).and_return(true)
allow(guest).to receive(:capability?).with(:rsync_install).and_return(true)
expect(guest).to receive(:capability).with(:rsync_installed).and_return(false)
expect(guest).to receive(:capability).with(:rsync_install)
subject.enable(machine, folders, {})
end
it "errors if rsync not installable" do
folders = [ [:foo, {}] ]
allow(helper_class).to receive(:rsync_single)
allow(guest).to receive(:capability?).with(:rsync_installed).and_return(true)
allow(guest).to receive(:capability?).with(:rsync_install).and_return(false)
expect(guest).to receive(:capability).with(:rsync_installed).and_return(false)
expect { subject.enable(machine, folders, {}) }.
to raise_error(Vagrant::Errors::RSyncNotInstalledInGuest)
end
end
end