On 14/09/12 18:13, Michal Fojtik wrote: > On Sep 14, 2012, at 4:48 PM, [email protected] wrote: > > Looks good to me. There is one extra failure on OPTIONS in /api > so make sure you fix it before push :-) > yes thanks - I forgot to add the 'credentials' param to the call to 'supported_collections' for the OPTIONS route in server.rb.
> Also it would be nice if you can move that commented tests into > base_driver tests and run it just to make sure everything works > as expected. sure - will have a go on monday. marios > > -- Michal > >> From: marios <[email protected]> >> >> (related https://issues.apache.org/jira/browse/DTACLOUD-316) >> >> Signed-off-by: marios <[email protected]> >> --- >> server/lib/deltacloud/drivers/base_driver.rb | 17 +++++++++++++++++ >> .../deltacloud/drivers/openstack/openstack_driver.rb | 18 >> ++++++++---------- >> server/lib/deltacloud/helpers/deltacloud_helper.rb | 16 ---------------- >> server/lib/deltacloud/server.rb | 9 +++------ >> server/tests/deltacloud/deltacloud_helper_test.rb | 18 >> ++++++++++-------- >> server/views/api/show.html.haml | 2 +- >> server/views/api/show.xml.haml | 2 +- >> 7 files changed, 40 insertions(+), 42 deletions(-) >> >> diff --git a/server/lib/deltacloud/drivers/base_driver.rb >> b/server/lib/deltacloud/drivers/base_driver.rb >> index 41b6923..3b37721 100644 >> --- a/server/lib/deltacloud/drivers/base_driver.rb >> +++ b/server/lib/deltacloud/drivers/base_driver.rb >> @@ -155,6 +155,23 @@ module Deltacloud >> (self.class.instance_methods - superclass_methods).include? method >> end >> >> + def supported_collections(credentials) >> + collection_arr = [] >> + Deltacloud::Collections.deltacloud_modules.each do |m| >> + m.collections.each do |c| >> + # Get the required capability for the :index operation (like >> 'realms' or 'instance_state_machine') >> + index_operation_capability = >> c.operation(:index).required_capability >> + # Then use this capability to check if the 'capability' lambda >> defined >> + # for the Sinatra::Base class evaluate to 'true' >> + next if m.settings.respond_to?(:capability) and >> !m.settings.capability(index_operation_capability) >> + yield c if block_given? >> + collection_arr << c >> + end >> + end >> + collection_arr >> + end >> + >> + >> ## Capabilities >> # The rabbit dsl supports declaring a capability that is required >> # in the backend driver for the call to succeed. A driver can >> diff --git a/server/lib/deltacloud/drivers/openstack/openstack_driver.rb >> b/server/lib/deltacloud/drivers/openstack/openstack_driver.rb >> index ca824bd..7e11258 100644 >> --- a/server/lib/deltacloud/drivers/openstack/openstack_driver.rb >> +++ b/server/lib/deltacloud/drivers/openstack/openstack_driver.rb >> @@ -40,17 +40,15 @@ module Deltacloud >> >> define_hardware_profile('default') >> >> - def respond_to?(capability)#, credentials) >> - if capability == :buckets >> - begin >> - client = new_client(Deltacloud.config["openstack_creds"], >> capability) >> - rescue Deltacloud::ExceptionHandler::NotImplemented >> #OpenStack::Exception::NotImplemented... >> - return false >> - end >> - return true >> - else >> - super(capability) >> + def supported_collections(credentials) >> + #get the collections as defined by 'capability' and 'respond_to?' >> blocks >> + super_collections = super >> + begin >> + client = new_client(credentials, :buckets) >> + rescue Deltacloud::ExceptionHandler::NotImplemented >> #OpenStack::Exception::NotImplemented... >> + return super_collections - [Sinatra::Rabbit::BucketsCollection] >> end >> + super_collections >> end >> >> def hardware_profiles(credentials, opts = {}) >> diff --git a/server/lib/deltacloud/helpers/deltacloud_helper.rb >> b/server/lib/deltacloud/helpers/deltacloud_helper.rb >> index 33fbe23..404e293 100644 >> --- a/server/lib/deltacloud/helpers/deltacloud_helper.rb >> +++ b/server/lib/deltacloud/helpers/deltacloud_helper.rb >> @@ -18,22 +18,6 @@ module Deltacloud::Helpers >> >> require 'benchmark' >> >> - def supported_collections >> - collection_arr = [] >> - Deltacloud::Collections.deltacloud_modules.each do |m| >> - m.collections.each do |c| >> - # Get the required capability for the :index operation (like >> 'realms' or 'instance_state_machine') >> - index_operation_capability = >> c.operation(:index).required_capability >> - # Then use this capability to check if the 'capability' lambda >> defined >> - # for the Sinatra::Base class evaluate to 'true' >> - next if m.settings.respond_to?(:capability) and >> !m.settings.capability(index_operation_capability) >> - yield c if block_given? >> - collection_arr << c >> - end >> - end >> - collection_arr >> - 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) >> diff --git a/server/lib/deltacloud/server.rb >> b/server/lib/deltacloud/server.rb >> index e2b2a8f..4ed527a 100644 >> --- a/server/lib/deltacloud/server.rb >> +++ b/server/lib/deltacloud/server.rb >> @@ -46,13 +46,10 @@ module Deltacloud >> set :config, Deltacloud[:deltacloud] >> >> get '/' do >> - if driver.name == "openstack" or params[:force_auth] >> + if params[:force_auth] >> return [401, 'Authentication failed'] unless >> driver.valid_credentials?(credentials) >> - if driver.name == "openstack" >> - Deltacloud.config["openstack_creds"] = credentials >> - #or here also works: Thread.current["openstack_creds"] = >> credentials >> - end >> end >> + @collections = driver.supported_collections(credentials) >> respond_to do |format| >> format.xml { haml :"api/show" } >> format.json { xml_to_json :"api/show" } >> @@ -61,7 +58,7 @@ module Deltacloud >> end >> >> options '/' do >> - headers 'Allow' => supported_collections { |c| c.collection_name >> }.join(',') >> + headers 'Allow' => driver.supported_collections { |c| >> c.collection_name }.join(',') >> end >> >> post '/' do >> diff --git a/server/tests/deltacloud/deltacloud_helper_test.rb >> b/server/tests/deltacloud/deltacloud_helper_test.rb >> index b7de3e6..060948b 100644 >> --- a/server/tests/deltacloud/deltacloud_helper_test.rb >> +++ b/server/tests/deltacloud/deltacloud_helper_test.rb >> @@ -13,14 +13,16 @@ describe Deltacloud::Helpers::Application do >> @helper = ApplicationHelper.new >> end >> >> - it 'provides list of supported collections for the current driver' do >> - @helper.supported_collections.wont_be_empty >> - @helper.supported_collections.must_include >> Sinatra::Rabbit::InstancesCollection >> - @helper.supported_collections.wont_include >> Sinatra::Rabbit::LoadBalancersCollection >> - Thread.current[:driver] = 'ec2' >> - @helper.supported_collections.must_include >> Sinatra::Rabbit::LoadBalancersCollection >> - Thread.current[:driver] = 'mock' >> - end >> + >> +#THIS TEST SHOULD BE MOVED TO server/tests/drivers/base/base_driver_test.rb >> ? >> +# it 'provides list of supported collections for the current driver' do >> +# @helper.supported_collections.wont_be_empty >> +# @helper.supported_collections.must_include >> Sinatra::Rabbit::InstancesCollection >> +# @helper.supported_collections.wont_include >> Sinatra::Rabbit::LoadBalancersCollection >> +# Thread.current[:driver] = 'ec2' >> +# @helper.supported_collections.must_include >> Sinatra::Rabbit::LoadBalancersCollection >> +# Thread.current[:driver] = 'mock' >> +# end >> >> it 'provides name for the authentication feature' do >> @helper.auth_feature_name.wont_be_nil >> diff --git a/server/views/api/show.html.haml >> b/server/views/api/show.html.haml >> index 541c388..15a3490 100644 >> --- a/server/views/api/show.html.haml >> +++ b/server/views/api/show.html.haml >> @@ -3,7 +3,7 @@ >> >> %div{ :'data-role' => :content, :'data-theme' => 'c'} >> %ul{ :'data-role' => :listview, :'data-inset' => 'true'} >> - - supported_collections do |c| >> + - @collections.each do |c| >> %li >> %a{ :href => url_for(c.collection_name), :'data-icon' => >> "arrow-r"}=c.collection_name.to_s.gsub('_', ' ').titlecase >> >> diff --git a/server/views/api/show.xml.haml b/server/views/api/show.xml.haml >> index 73e7171..c9d970e 100644 >> --- a/server/views/api/show.xml.haml >> +++ b/server/views/api/show.xml.haml >> @@ -1,5 +1,5 @@ >> %api{ :version => settings.version, :driver => driver_symbol, :provider => >> Thread.current[:provider] || ENV['API_PROVIDER'] } >> - - supported_collections do |c| >> + - @collections.each do |c| >> %link{ :rel => c.collection_name, :href => >> self.send(:"#{c.collection_name}_url")} >> - c.features.select { |f| driver.class.has_feature?(c.collection_name, >> f.name) }.each do |f| >> %feature{ :name => f.name } >> -- >> 1.7.11.4 >> > > Michal Fojtik > http://deltacloud.org > [email protected] > > >
