system testing

This commit is contained in:
John Bender 2010-05-18 23:34:32 -07:00
parent ce6d95c131
commit 007ecc5f1c
4 changed files with 66 additions and 9 deletions

View File

@ -57,16 +57,16 @@ module Vagrant
:scriptname => config.vm.rsync_script))
ssh.exec!("sudo mkdir -p #{opts[:rsyncpath]}")
ssh.exec!("sudo chmod +x #{config.vm.rsync_script}")
chown(ssh, opts[:rsyncpath])
ssh.exec!("sudo echo \"#{crontab_entry}\" >> #{config.vm.rsync_crontab_entry_file}")
ssh.exec!("crontab #{config.vm.rsync_crontab_entry_file}")
chown(ssh, opts[:rsyncpath])
end
def prepare_rsync(ssh)
logger.info "Preparing system for rsync..."
vm.env.ssh.upload!(StringIO.new(render_rsync), config.vm.rsync_script)
ssh.exec!('sudo rm #{config.vm.rsync_crontab_entry_file}')
ssh.exec!("sudo chmod +x #{config.vm.rsync_script}")
ssh.exec!("sudo rm #{config.vm.rsync_crontab_entry_file}")
end
#-------------------------------------------------------------------

View File

@ -43,6 +43,8 @@ class Test::Unit::TestCase
config.vm.shared_folder_uid = nil
config.vm.shared_folder_gid = nil
config.vm.system = :linux
config.vm.rsync_script = "/foo"
config.vm.rsync_crontab_entry_file = "/tmp/foo"
config.package.name = 'vagrant'
config.package.extension = '.box'

View File

@ -129,7 +129,7 @@ class SharedFoldersActionTest < Test::Unit::TestCase
end
context "with rsyncd folders" do
# TODO
# TODO prevented by odd configuration swapping when stubbing ssh.execute
should "prepare the system for rsync if necessary" do
end
end

View File

@ -3,15 +3,16 @@ require File.join(File.dirname(__FILE__), '..', '..', 'test_helper')
class LinuxSystemTest < Test::Unit::TestCase
setup do
@klass = Vagrant::Systems::Linux
@vm = mock_vm
@ssh = mock("ssh")
@mock_env = mock_environment
@vm = mock("vm")
@vm.stubs(:env).returns(@mock_env)
@instance = @klass.new(@vm)
end
context "halting" do
setup do
@ssh_session = mock("ssh_session")
@ssh = mock("ssh")
@ssh.stubs(:execute).yields(@ssh_session)
@vm.stubs(:ssh).returns(@ssh)
@ -28,7 +29,6 @@ class LinuxSystemTest < Test::Unit::TestCase
context "mounting shared folders" do
setup do
@ssh = mock("ssh")
@name = "foo"
@guestpath = "/bar"
end
@ -43,12 +43,67 @@ class LinuxSystemTest < Test::Unit::TestCase
end
end
context "preparing rsync" do
setup do
@ssh.stubs(:exec!)
@vm.env.stubs(:ssh).returns(@ssh)
@vm.env.ssh.stubs(:upload!)
end
should "upload the rsync template" do
@vm.env.ssh.expects(:upload!).with do |string_io, guest_path|
string_io.string =~ /#!\/bin\/sh/ && guest_path == @mock_env.config.vm.rsync_script
end
@instance.prepare_rsync(@ssh)
end
should "remove old crontab entries file" do
@ssh.expects(:exec!).with("sudo rm #{@mock_env.config.vm.rsync_crontab_entry_file}")
@instance.prepare_rsync(@ssh)
end
should "prepare the rsync template for execution" do
@ssh.expects(:exec!).with("sudo chmod +x #{@mock_env.config.vm.rsync_script}")
@instance.prepare_rsync(@ssh)
end
end
context "setting up an rsync folder" do
setup do
@ssh.stubs(:exec!)
end
should "create the new rysnc destination directory" do
rsync_path = 'foo'
@ssh.expects(:exec!).with("sudo mkdir -p #{rsync_path}")
@instance.create_rsync(@ssh, :rsyncpath => "foo")
end
should "add an entry to the crontab file" do
@instance.expects(:render_crontab_entry).returns('foo')
@ssh.expects(:exec!).with do |cmd|
cmd =~ /echo/ && cmd =~ /foo/ && cmd =~ /#{@mock_env.config.vm.rsync_crontab_entry_file}/
end
@instance.create_rsync(@ssh, {})
end
should "use the crontab entry file to define vagrant users cron entries" do
@ssh.expects(:exec!).with("crontab #{@mock_env.config.vm.rsync_crontab_entry_file}")
@instance.create_rsync(@ssh, {})
end
should "chown the rsync directory" do
@instance.expects(:chown).with(@ssh, "foo")
@instance.create_rsync(@ssh, :rsyncpath => "foo")
end
end
#-------------------------------------------------------------------
# "Private" methods tests
#-------------------------------------------------------------------
context "mounting the main folder" do
setup do
@ssh = mock("ssh")
@name = "foo"
@guestpath = "bar"
@sleeptime = 0