blob: bb2ab69698e562536bbfe9e17ba320ebb4dbcac6 [file] [log] [blame]
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership. The
# ASF licenses this file to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance with the
# License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
# Add your own tasks in files placed in lib/tasks ending in .rake,
# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
require 'rake'
require 'rake/testtask'
require 'rubygems/package_task'
require 'require_relative' if RUBY_VERSION < '1.9'
$top_srcdir = File.dirname(__FILE__)
$:.unshift File.join($top_srcdir, 'lib')
begin
require 'yard'
YARD::Rake::YardocTask.new do |t|
t.files = ['lib/**/*.rb', '*.rb'] # optional
end
rescue LoadError
end
begin
spec = Gem::Specification.load('deltacloud-core.gemspec')
Gem::PackageTask.new(spec) do |pkg|
pkg.need_tar = true
end
rescue
end
namespace :generate do
desc 'Generate deltacloud-core.gemspec from Bundler'
task :gemspec do
require 'bundler'
require 'erb'
deps = {}
deps[:runtime] = Bundler.definition.dependencies.select { |d|
d.groups.include?(:default) && d.platforms.empty?
}
deps[:java] = Bundler.definition.dependencies.select { |d| d.platforms.include?(:jruby) }
deps[:mri] = Bundler.definition.dependencies.select { |d| d.platforms.include?(:mri) }
deps[:dev] = Bundler.definition.dependencies.select { |d| d.groups.include?(:test) }
gemspec_tpl = ERB.new(File.read('support/tools/deltacloud-core-gemspec.erb'))
puts gemspec_tpl.result(binding)
end
end
# Not meant for enduser consumption; make sure we run our initializers
task :initialize do
require_relative 'lib/initialize'
Bundler.require(:default, :test)
end
namespace :db do
desc 'Execute the database migrations'
task 'migrate' do
load File.join(File.dirname(__FILE__), 'bin', 'deltacloud-db-upgrade')
end
end
namespace :mock do
namespace :fixtures do
desc "Setup Mock driver fixtures"
task 'setup' => :initialize do
srcdir = File::join(File::dirname(__FILE__), "lib", "deltacloud", "drivers", "mock", "data")
data = Dir::glob(File::join(srcdir, "*"))
srcdir.gsub!(/^#{ENV["PWD"]}/, ".")
srcdir.gsub!(/^#{ENV["HOME"]}/, "~")
puts "Copy mock data to #{MOCK_STORAGE_DIR}"
puts " (from #{srcdir})"
FileUtils::cp_r(data, MOCK_STORAGE_DIR, :verbose => false)
end
desc "Remove Mock driver fixtures"
task 'clean' => :initialize do
puts "Remove mock data in #{MOCK_STORAGE_DIR}"
files = Dir::glob(File::join(MOCK_STORAGE_DIR, "*"))
FileUtils::rm_rf(files, :verbose => false)
end
desc "Reset Mock driver fixtures"
task 'reset' => :initialize do
["mock:fixtures:clean", "mock:fixtures:setup"].each do |t|
Rake::Task[t].reenable
Rake::Task[t].invoke
end
end
end
end
desc "List the routes defined by Rabbit"
[:cimi, :deltacloud].each do |frontend|
namespace frontend do
desc "Print all routes defined for #{frontend.to_s.capitalize}"
task :routes do
ENV['API_FRONTEND'] = frontend.to_s
require_relative './lib/initialize'
Deltacloud.generate_routes
f_class = (frontend == :cimi) ? CIMI : Deltacloud
f_class.collections.each do |c|
puts "\033[1;32;m#{c.name}\33[0m"
c.operations.each do |o|
puts "\033[1;37m%6s\033[0m :%-10s %-35s (%s)" % [
o.http_method.to_s.upcase,
o.operation_name,
o.full_path,
Sinatra::Rabbit.generate_url_helper_for(c, o)[1]
]
end
unless c.collections.empty?
puts
c.collections.each do |s|
puts "\033[1;32;m#{s.name}\33[0m"
s.operations.each do |o|
puts "\033[1;37m%6s\033[0m :%-10s %-35s (%s)" % [
o.http_method.to_s.upcase,
o.operation_name,
o.full_path,
o.description[0..100]
]
end
end
end
puts
end
end
end
end
desc 'List Deltacloud routes'
task :routes do
Rake::Task['deltacloud:routes'].invoke
end
# TODO: The 'google' driver tests are failing under jRuby
# need to investigate in future.
#
if RUBY_PLATFORM == 'java'
DRIVERS = [:mock, :ec2, :rhevm, :gogrid, :openstack, :fgcp]
else
DRIVERS = [:mock, :ec2, :rhevm, :google, :gogrid, :openstack, :fgcp, :profitbricks]
end
desc 'Run all tests'
task :test do
Rake::Task["mock:fixtures:reset"].invoke
puts "\n[ \033[1;37;mrake test:base\33[0m ]\n"
Rake::Task["test:base"].invoke
Rake::Task["mock:fixtures:reset"].invoke
puts "\n[ \033[1;37;mrake test:ec2\33[0m ]\n"
Rake::Task["test:ec2"].invoke
puts "\n[ \033[1;37;mrake test:cimi\33[0m ]\n"
Rake::Task["test:cimi"].invoke
DRIVERS.each do |driver|
#
# FIXME: Skip FGCP tests under jRuby as jRuby openssl lacks
# the OpenSSL::PKCS12::PKCS12Error class
#
next if RUBY_PLATFORM == 'java' and driver == :fgcp
puts "\n[ \033[1;37;mrake drivers:#{driver}\33[0m ]\n"
Rake::Task["test:drivers:#{driver}"].invoke
end
end
namespace :test do
desc "Run all tests and generate code coverage report"
task :coverage do
ENV['COVERAGE'] = '1'
puts "[ \033[1;37;mCoverage report will be generated to server/coverage\33[0m ]\n\n"
Rake::Task["test"].invoke
end
namespace :drivers do
DRIVERS.each do |driver|
Rake::TestTask.new(driver) do |t|
t.test_files = FileList["tests/drivers/#{driver}/*test.rb"]
end
end
end
Rake::TestTask.new(:base) do |t|
t.ruby_opts = ['-r./tests/test_helper']
t.test_files = FileList[
'tests/helpers/core_ext/*test.rb', # Deltacloud extensions (core_ext) and other helpers
'tests/helpers/rack/*test.rb', # Rack extensions Deltacloud use
'tests/drivers/base/*test.rb', # Deltacloud drivers API tests
'tests/drivers/models/*test.rb', # Deltacloud models tests
'tests/deltacloud/*test.rb', # Deltacloud internal API tests
'tests/deltacloud/collections/*test.rb', # Deltacloud collections
]
end
Rake::TestTask.new(:ec2) do |t|
t.ruby_opts = ['-r./tests/test_helper']
t.test_files = FileList[
'tests/ec2/*test.rb', # EC2 frontend internal API tests
]
end
Rake::TestTask.new(:cimi) do |t|
t.ruby_opts = ['-r./tests/test_helper']
t.test_files = FileList[
'tests/cimi/db/*test.rb', # CIMI frontend database tests
'tests/cimi/model/*spec.rb', # CIMI frontend serialization API tests
'tests/cimi/collections/*test.rb', # CIMI frontend API tests
]
end
end