#
# 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.

require 'rake/testtask'

namespace :test do
  desc "Run tests for the Deltacloud API frontend."
  Rake::TestTask.new(:deltacloud) do |t|
    t.test_files = FileList["deltacloud/*_test.rb"]
  end

  namespace :deltacloud do
    ["addresses", "base_api", "buckets", "drivers", "firewalls", "images", "instances", "instance_states", "keys", "load_balancers", "metrics", "realms", "storage_volumes", "storage_snapshots", "hardware_profiles"].each do |col|
      Rake::TestTask.new(col) do |t|
        t.test_files = FileList["deltacloud/#{col}_test.rb"]
      end
    end
  end

  Rake::TestTask.new(:serverblackbox) do |t|
    t.test_files = FileList["../server/tests/deltacloud/launcher_test.rb"]
  end

  Rake::TestTask.new(:cimi) do |t|
    t.test_files = FileList["cimi/*_test.rb"]
  end

  Rake::TestTask.new(:cimiplan) do |t|
    t.test_files = FileList["cimi/part*_test.rb", "cimi/cep_test.rb"]
  end

  Rake::TestTask.new(:cimiplan_pf2) do |t|
    t.test_files =FileList["cimi/system1_test.rb", "cimi/rmd*_test.rb", "cimi/machex*_test.rb"]
  end

end
