blob: 1883b72f057d9223868be77a0b34bbd8498a6770 [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.
$:.unshift File.join(File.dirname(__FILE__), '..')
require "deltacloud/test_setup.rb"
IMAGES = "/images"
describe 'Deltacloud API Images collection' do
include Deltacloud::Test::Methods
need_collection :images
def each_image_xml(&block)
res = get(IMAGES)
(res.xml/'images/image').each do |r|
image_res = get(IMAGES + '/' + r[:id])
yield image_res.xml
end
end
#Run the 'common' tests for all collections defined in common_tests_collections.rb
CommonCollectionsTest::run_collection_and_member_tests_for("images")
#Now run the images-specific tests:
it 'should have the "owner_id", "description", "architecure" and "state" element for each image' do
each_image_xml do |image_xml|
(image_xml/'state').wont_be_empty
(image_xml/'owner_id').wont_be_empty
(image_xml/'architecture').wont_be_empty
(image_xml/'description').wont_be_empty
end
end
it 'should include the list of compatible hardware_profiles for each image' do
each_image_xml do |image_xml|
(image_xml/'hardware_profiles/hardware_profile').wont_be_empty
(image_xml/'hardware_profiles/hardware_profile').each do |hwp|
hwp[:href].wont_be_nil
hwp[:href].must_match /^http/
hwp[:id].wont_be_nil
hwp[:href].must_match /\/#{hwp[:id]}$/
hwp[:rel].must_equal 'hardware_profile'
end
end
end
it 'should advertise the list of actions that can be executed for each image' do
each_image_xml do |image_xml|
(image_xml/'actions/link').wont_be_empty
(image_xml/'actions/link').each do |l|
l[:href].wont_be_nil
l[:href].must_match /^http/
l[:method].wont_be_nil
l[:rel].wont_be_nil
end
end
end
it 'should be able to filter images list by owner_id attribute' do
#get an image - either random or from "preferred" section of config.yaml:
image_id = get_a("image")
image = get(IMAGES+"/#{image_id}")
owner_id = (image.xml/"image/owner_id").text
filtered_image_list = get(IMAGES, {:owner_id=>owner_id})
#check owner_id of each:
(filtered_image_list.xml/"images/image").each do |img|
(img/"owner_id").text.must_equal owner_id
end
end
it 'should be able to filter images list by architecture attribute' do
#get an image - either random or from "preferred" section of config.yaml:
image_id = get_a("image")
image = get(IMAGES+"/#{image_id}")
arch = (image.xml/"image/architecture").text
filtered_image_list = get(IMAGES, {:architecture=>arch})
#check architecture of each:
(filtered_image_list.xml/"images/image").each do |img|
(img/"architecture").text.must_equal arch
end
end
end