Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fetching contributors…

Octocat-spinner-32-eaf2f5

Cannot retrieve contributors at this time

file 75 lines (63 sloc) 1.787 kb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
#!/usr/bin/env ruby
require "rubygems"

#
# VirtualBox Helpers
#

# Matches a host declaration in a ssh config file.
HOST_REGEXP = /^\s*Host\s+([^\s#*]+)/
SNAPSHOT = (ENV['SNAPSHOT'] || 'CURRENT').upcase
SSH_CONFIG_FILE = ENV['SSH_CONFIG_FILE'] || File.expand_path('../config/ssh', __FILE__)

def shell(cmd)
  puts "$ #{cmd}"
  system(cmd)
end

def hosts
  @hosts ||= begin
    hosts = []

    File.open(SSH_CONFIG_FILE) do |io|
      io.each_line do |line|
        next unless line =~ HOST_REGEXP
        hosts << $1
      end
    end

    hosts
  end
end

namespace :vbox do
  desc "start each vm"
  task :start => :stop do
    hosts.each do |host|
      shell "VBoxManage -q snapshot #{host} restore #{SNAPSHOT}"
      shell "VBoxManage -q startvm #{host} --type headless"
      shell "ssh -MNf -F '#{SSH_CONFIG_FILE}' '#{host}' >/dev/null 2>&1 </dev/null"
    end
  end

  desc "stop each vm"
  task :stop do
    hosts.each do |host|
      if `VBoxManage -q list runningvms`.include?(host)
        shell "VBoxManage -q controlvm #{host} poweroff"
      end
    end
  end

  desc 'Run the tests remotely on each VM'
  task :test do
    begin
      Rake::Task["vbox:start"].invoke
      Rake::Task["vbox:remote_test"].invoke
    ensure
      Rake::Task["vbox:stop"].execute(nil)
    end
  end

  desc 'Run the tests remotely (assuming each VM is running)'
  task :remote_test do
    local_dir = File.expand_path("..", __FILE__)
    remote_dir = "$(pwd)/rvm"
    remote_script = "vboxtest/test_suite.sh"
    sh "'#{File.expand_path("../vboxtest.sh", __FILE__)}' -L '#{local_dir}' -R '#{remote_dir}' -S '#{remote_script}' #{hosts.join(' ')}"
  end

  desc 'Run the tests locally'
  task :local_test do
    sh File.expand_path("../vboxtest/test_suite.sh", __FILE__)
  end
end
Something went wrong with that request. Please try again.