forked from rvm/rvm
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Rakefile
74 lines (63 loc) · 1.75 KB
/
Rakefile
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