-
Notifications
You must be signed in to change notification settings - Fork 47
/
Rakefile
131 lines (108 loc) · 3.2 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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
require 'fileutils'
require 'tmpdir'
def em_mongo_version
File.read("VERSION").strip
end
def root_dir
File.dirname(__FILE__)
end
task :default => 'spec:integration:default'
class MongoRunner
def self.run(options={})
auth = "--auth" if options[:auth]
dir = Dir.tmpdir + "/em-mongo-tests-#$$"
FileUtils.mkdir dir
pidf = "#{dir}/mongod.pid"
logf = "#{dir}/mongo.log"
begin
system "mongod run #{auth} --fork -vvvvvvv --dbpath #{dir} --pidfilepath #{pidf} --logpath #{logf} >> /dev/null "
yield if block_given?
ensure
if File.exists?(pidf) and File.read(pidf).to_i != 0
Process.kill("KILL", File.read(pidf).to_i)
FileUtils.rm_r dir unless options[:noclean]
end
end
end
end
spec = eval(File.read('em-mongo.gemspec'))
namespace :bundle do
task :install do
if `bundle check` =~ /bundle install/
system("bundle install --path vendor/gems")
end
end
end
namespace :gem do
desc "build gem"
task :build do
puts "Building em-mongo #{em_mongo_version}"
system "gem build em-mongo.gemspec -q"
end
desc "release gem"
task :release do
system "gem push em-mongo-#{em_mongo_version}.gem"
end
end
namespace :spec do
namespace :gem do
desc "bundler tests"
task :bundler do
MongoRunner.run do
print "Testing Bundler integration ... "
if system "cd spec/gem && bundle install --quiet && ./bundler.rb"
puts "SUCCESS."
else
puts "FAILURE."
end
end
end
desc "rubygems tests"
task :rubygems do
MongoRunner.run do
print "Testing Rubygems integration ... "
steps =[]
steps << "cd spec/gem"
if `gem list -i em-mongo` == 'true'
steps << "gem uninstall --force -a em-mongo >/dev/null"
end
steps << "gem install #{root_dir}/em-mongo-#{em_mongo_version}.gem >/dev/null "
steps << "./rubygems.rb"
if system steps.join(" && ")
puts "SUCCESS."
else
puts "FAILURE."
end
end
end
desc "all gem tests"
task :all => [:bundler, :rubygems]
end
namespace :integration do
desc "default tests"
task :default => ['bundle:install'] do
MongoRunner.run do
files = spec.test_files.select{|x| x =~ /integration/}.join(' ')
system "bundle exec spec #{files} -t -b -fs -color"
end
end
desc "exhaustive tests"
task :exhaustive => ['bundle:install'] do
MongoRunner.run({:noclean => true}) do
files = spec.test_files.select{|x| x =~ /integration/}.join(' ')
system "bundle exec spec #{files} -t -b -fs -color"
end
MongoRunner.run({:auth => true}) do
files = spec.test_files.select{|x| x =~ /integration/}.join(' ')
system "bundle exec spec #{files} -t -b -fs -color"
end
end
desc "default tests, but don't start mongodb for me"
task :no_mongo => ['bundle:install'] do
files = spec.test_files.select{|x| x =~ /integration/}.join(' ')
system "bundle exec spec #{files} -t -b -fs -color"
end
end
desc "release testing"
task :release => ['spec:integration:default','gem:build','spec:gem:bundler','spec:gem:rubygems']
end