From: Michal Fojtik <[email protected]>
Signed-off-by: Michal fojtik <[email protected]> --- server/lib/deltacloud/helpers/deltacloud_helper.rb | 5 +++ server/lib/deltacloud/helpers/url_helper.rb | 4 +-- server/lib/deltacloud/models/instance.rb | 4 +++ server/views/instances/show.xml.haml | 4 +-- tests/ec2/api.feature | 3 +- tests/ec2/step_definitions/api_steps.rb | 37 ++++++++++---------- tests/ec2/support/env.rb | 31 ++++++++-------- tests/mock/api.feature | 1 - tests/mock/images.feature | 2 ++ tests/mock/step_definitions/images_steps.rb | 14 ++++---- tests/mock/storage_snapshots.feature | 1 + 11 files changed, 58 insertions(+), 48 deletions(-) diff --git a/server/lib/deltacloud/helpers/deltacloud_helper.rb b/server/lib/deltacloud/helpers/deltacloud_helper.rb index ee9decc..2fc2a59 100644 --- a/server/lib/deltacloud/helpers/deltacloud_helper.rb +++ b/server/lib/deltacloud/helpers/deltacloud_helper.rb @@ -26,6 +26,11 @@ module Deltacloud::Helpers end end + def auth_feature_name + return 'key' if driver.class.has_feature?(:instances, :authentication_key) + return 'password' if driver.class.has_feature?(:instances, :authentication_password) + end + def instance_action_method(action) action_method(action, Sinatra::Rabbit::InstancesCollection) end diff --git a/server/lib/deltacloud/helpers/url_helper.rb b/server/lib/deltacloud/helpers/url_helper.rb index fd71f43..b35c714 100644 --- a/server/lib/deltacloud/helpers/url_helper.rb +++ b/server/lib/deltacloud/helpers/url_helper.rb @@ -79,7 +79,7 @@ module Sinatra def url_for url_fragment, mode=:path_only case mode when :path_only - base = request.script_name + base = request.script_name.empty? ? API_ROOT_URL : request.script_name when :full scheme = request.scheme port = request.port @@ -96,7 +96,7 @@ module Sinatra else port = ":#{port}" end - base = "#{scheme}://#{request_host}#{port}#{request.script_name}" + base = "#{scheme}://#{request_host}#{port}#{request.script_name.empty? ? API_ROOT_URL : request.script_name}" else raise TypeError, "Unknown url_for mode #{mode}" end diff --git a/server/lib/deltacloud/models/instance.rb b/server/lib/deltacloud/models/instance.rb index c2cc0e3..9db5b4b 100644 --- a/server/lib/deltacloud/models/instance.rb +++ b/server/lib/deltacloud/models/instance.rb @@ -34,6 +34,10 @@ class Instance < BaseModel attr_accessor :firewalls attr_accessor :storage_volumes + def storage_volumes + @storage_volumes || [] + end + def can_create_image? self.create_image end diff --git a/server/views/instances/show.xml.haml b/server/views/instances/show.xml.haml index 3a62ed3..a91c0c5 100644 --- a/server/views/instances/show.xml.haml +++ b/server/views/instances/show.xml.haml @@ -45,8 +45,8 @@ %storage_volumes< - @instance.storage_volumes.each do |volume| %storage_volume{:href=> storage_volume_url(volume.keys.first), :id => volume.keys.first, :device => volume.values.first} - - if driver.class.has_feature?(:authentication_key) or driver.class.has_feature?(:authentication_password) - %authentication{ :type => driver_auth_feature_name } + - if driver.class.has_feature?(:instances, :authentication_key) or driver.class.has_feature?(:instances, :authentication_password) + %authentication{ :type => auth_feature_name } - if @instance.authn_feature_failed? %error #{@instance.authn_error} - else diff --git a/tests/ec2/api.feature b/tests/ec2/api.feature index 2dcd1b2..9d53722 100644 --- a/tests/ec2/api.feature +++ b/tests/ec2/api.feature @@ -26,6 +26,7 @@ Feature: Accessing API entry points | storage_volumes | | addresses | | firewalls | + | metrics | And this URI should be available in XML, JSON, HTML format Scenario: Following entry points @@ -46,6 +47,7 @@ Feature: Accessing API entry points | storage_volumes | | addresses | | firewalls | + | metrics | And each link should have 'rel' attribute with valid name And each link should have 'href' attribute with valid URL When client follow this attribute @@ -61,4 +63,3 @@ Feature: Accessing API entry points | user_data | | instance_count | | firewalls | - | hardware_profiles | diff --git a/tests/ec2/step_definitions/api_steps.rb b/tests/ec2/step_definitions/api_steps.rb index c42af6f..27172e8 100644 --- a/tests/ec2/step_definitions/api_steps.rb +++ b/tests/ec2/step_definitions/api_steps.rb @@ -8,11 +8,11 @@ end Given /^URI ([\w\/\-_]+) exists in (.+) format$/ do |uri, format| @uri = uri case format.downcase - when 'xml': + when 'xml' then header 'Accept', 'application/xml;q=9' - when 'json' + when 'json' then header 'Accept', 'application/json;q=9' - when 'html' + when 'html' then header 'Accept', 'application/xml+xhtml;q=9' end get @uri, {} @@ -52,11 +52,11 @@ Then /^this URI should be available in (.+) format$/ do |formats| @no_header = true formats.split(',').each do |format| case format.downcase - when 'xml': + when 'xml' then header 'Accept', 'application/xml;q=9' - when 'json' + when 'json' then header 'Accept', 'application/json;q=9' - when 'html' + when 'html' then header 'Accept', 'application/xml+xhtml;q=9' end get @uri, {} @@ -75,15 +75,15 @@ end Then /^each (\w+) should have '(.+)' attribute with valid (.+)$/ do |el, attr, t| case el - when 'link': + when 'link' then path = '/api/link' - when 'image': + when 'image' then path = '/images/image' - when 'instance': + when 'instance' then path = '/instances/instance' - when 'key': + when 'key' then path = '/keys/key' - when 'realm': + when 'realm' then path = '/realms/realm' end output_xml.xpath(path).each do |entry_point| @@ -97,11 +97,11 @@ end Then /^each ([\w\-]+) should have '(.+)' attribute set to '(.+)'$/ do |el, attr, v| case el - when 'image': + when 'image' then path = "/images/image" - when 'hardware_profile': + when 'hardware_profile' then path = "/hardware_profiles/hardware_profile" - when 'instance': + when 'instance' then path = "/instances/instance" end output_xml.xpath(path).each do |element| @@ -111,11 +111,11 @@ end Then /^each ([\w\-]+) should have '(.+)' element set to '(.+)'$/ do |el, child, v| case el - when 'image': + when 'image' then path = "/images/image" - when 'hardware_profile': + when 'hardware_profile' then path = "/hardware_profiles/hardware_profile" - when 'instance': + when 'instance' then path = "/instances/instance" end output_xml.xpath(path).each do |element| @@ -126,7 +126,7 @@ end Then /^each ([\w\-]+) should have '(.+)' property set to '(.+)'$/ do |el, property, v| case el - when 'hardware_profile': + when 'hardware_profile' then path = "/hardware_profiles/hardware_profile" end output_xml.xpath(path).each do |element| @@ -143,6 +143,7 @@ When /^client follow this attribute$/ do end Then /^client should get a valid response$/ do + puts last_response.body last_response.status.should_not == 500 end diff --git a/tests/ec2/support/env.rb b/tests/ec2/support/env.rb index 5245bb1..5eb006a 100644 --- a/tests/ec2/support/env.rb +++ b/tests/ec2/support/env.rb @@ -1,21 +1,20 @@ -SERVER_DIR = File::expand_path(File::join(File::dirname(__FILE__), "../../../server")) +require 'rubygems' +require 'nokogiri' +SERVER_DIR = File::expand_path(File::join(File::dirname(__FILE__), "../../../server")) $top_srcdir = SERVER_DIR $:.unshift File::join($top_srcdir, 'lib') - Dir.chdir(SERVER_DIR) -ENV['API_DRIVER'] = 'ec2' +API_VERSION = "9.9.9" +API_ROOT_URL = "/api" -require 'rubygems' -require 'nokogiri' -require 'deltacloud/server' -require 'rack/test' +ENV['API_DRIVER'] = 'ec2' +ENV.delete('API_VERBOSE') -Sinatra::Application.set :environment, :test -Sinatra::Application.set :root, SERVER_DIR +load File.join($top_srcdir, 'lib', 'deltacloud', 'server.rb') -require '../server/lib/deltacloud/base_driver/mock_driver' +require 'rack/test' CONFIG = { :username => 'mockuser', @@ -26,13 +25,11 @@ World do include Rack::Test::Methods def app - @app = Rack::Builder.new do - set :environment => :test - set :loggining => true - set :raise_errors => true - set :show_exceptions => false - run Sinatra::Application - end + @app = Rack::URLMap.new( + "/" => Deltacloud::API.new, + "/stylesheets" => Rack::Directory.new( "public/stylesheets" ), + "/javascripts" => Rack::Directory.new( "public/javascripts" ) + ) end def output_xml diff --git a/tests/mock/api.feature b/tests/mock/api.feature index d7fb044..59d00d1 100644 --- a/tests/mock/api.feature +++ b/tests/mock/api.feature @@ -53,4 +53,3 @@ Feature: Accessing API entry points | user_name | | user_data | | authentication_key | - | hardware_profiles | diff --git a/tests/mock/images.feature b/tests/mock/images.feature index 0bae93d..0094548 100644 --- a/tests/mock/images.feature +++ b/tests/mock/images.feature @@ -12,6 +12,7 @@ Feature: Listing and showing images | architecture | | owner_id | | state | + | hardware_profiles | | actions | And each image should have 'href' attribute with valid URL And this URI should be available in XML, JSON, HTML format @@ -29,6 +30,7 @@ Feature: Listing and showing images | name | | description | | architecture | + | hardware_profiles | | owner_id | | state | | actions | diff --git a/tests/mock/step_definitions/images_steps.rb b/tests/mock/step_definitions/images_steps.rb index 323778c..46963bb 100644 --- a/tests/mock/step_definitions/images_steps.rb +++ b/tests/mock/step_definitions/images_steps.rb @@ -27,17 +27,17 @@ end When /^client want to show first (.+)$/ do |element| case element - when 'image': + when 'image' then path = '/images/image' - when 'instance': + when 'instance' then path = '/instances/instance' - when 'realm': + when 'realm' then path = '/realms/realm' - when 'hardware_profile' + when 'hardware_profile' then path = '/hardware_profiles/hardware_profile' - when 'storage_volume': + when 'storage_volume' then path = '/storage_volumes/storage_volume' - when 'storage_snapshot': + when 'storage_snapshot' then path = '/storage_snapshots/storage_snapshot' end @element = output_xml.xpath(path).first @@ -58,7 +58,7 @@ Then /^client follow (\w+) attribute in first (.+)$/ do |attr, el| end Then /^client should get this (.+)$/ do |el| - last_response.status.should == 200 + last_response.status.to_s =~ /2(\d{2})/ end diff --git a/tests/mock/storage_snapshots.feature b/tests/mock/storage_snapshots.feature index fdaff9c..350a2a3 100644 --- a/tests/mock/storage_snapshots.feature +++ b/tests/mock/storage_snapshots.feature @@ -23,4 +23,5 @@ Feature: Accessing storage snapshots Then client should get this storage_snapshot And this storage_snapshot should have: | created | + | name | | storage_volume | -- 1.7.10.1
