You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@deltacloud.apache.org by mf...@apache.org on 2011/10/10 12:08:14 UTC
svn commit: r1180860 - in /incubator/deltacloud/trunk/server:
lib/deltacloud/hardware_profile.rb lib/deltacloud/validation.rb
lib/sinatra/rabbit.rb tests/common.rb tests/drivers/mock/instances_test.rb
tests/rabbit_test.rb
Author: mfojtik
Date: Mon Oct 10 10:08:13 2011
New Revision: 1180860
URL: http://svn.apache.org/viewvc?rev=1180860&view=rev
Log:
Core: Fixed hardware_profile validation engine
Modified:
incubator/deltacloud/trunk/server/lib/deltacloud/hardware_profile.rb
incubator/deltacloud/trunk/server/lib/deltacloud/validation.rb
incubator/deltacloud/trunk/server/lib/sinatra/rabbit.rb
incubator/deltacloud/trunk/server/tests/common.rb
incubator/deltacloud/trunk/server/tests/drivers/mock/instances_test.rb
incubator/deltacloud/trunk/server/tests/rabbit_test.rb
Modified: incubator/deltacloud/trunk/server/lib/deltacloud/hardware_profile.rb
URL: http://svn.apache.org/viewvc/incubator/deltacloud/trunk/server/lib/deltacloud/hardware_profile.rb?rev=1180860&r1=1180859&r2=1180860&view=diff
==============================================================================
--- incubator/deltacloud/trunk/server/lib/deltacloud/hardware_profile.rb (original)
+++ incubator/deltacloud/trunk/server/lib/deltacloud/hardware_profile.rb Mon Oct 10 10:08:13 2011
@@ -68,22 +68,21 @@ module Deltacloud
kind == :fixed
end
- def to_param
- return nil if kind == :fixed
- if kind == :range
- # FIXME: We can't validate ranges currently
- args = [param, :string, :optional]
- else
- args = [param, :string, :optional, values.collect { |v| v.to_s} ]
+ def valid?(v)
+ case kind
+ when :fixed then (v == @default.to_s)
+ when [:range, :enum] then (value.include?(v.to_i))
+ else false
end
- Validation::Param.new(args)
+ end
+
+ def to_param
+ Validation::Param.new([param, :string, :optional, []])
end
def include?(v)
if kind == :fixed
return v == value
- elsif kind == :range
- return v >= first && v <= last
else
return values.include?(v)
end
Modified: incubator/deltacloud/trunk/server/lib/deltacloud/validation.rb
URL: http://svn.apache.org/viewvc/incubator/deltacloud/trunk/server/lib/deltacloud/validation.rb?rev=1180860&r1=1180859&r2=1180860&view=diff
==============================================================================
--- incubator/deltacloud/trunk/server/lib/deltacloud/validation.rb (original)
+++ incubator/deltacloud/trunk/server/lib/deltacloud/validation.rb Mon Oct 10 10:08:13 2011
@@ -16,13 +16,12 @@
module Deltacloud::Validation
- class Failure < StandardError
+ class Failure < Deltacloud::ExceptionHandler::DeltacloudException
attr_reader :param
- def initialize(param, msg='')
- super(msg)
- @param = param
+ def initialize(e, message=nil)
+ message ||= e.message
+ super(400, e.class.name, message, [])
end
-
def name
param.name if @param
end
@@ -46,6 +45,19 @@ module Deltacloud::Validation
def optional?
type.eql?(:optional)
end
+
+ def valid_value?(value)
+ true if (options.kind_of?(Range) or options.kind_of?(Array)) and options.include?(value)
+ true if options.kind_of?(String) and not options.empty?
+ end
+
+ def valid_hwp_value?(profile, value)
+ profile.property(@name.to_s.gsub(/^hwp_/, '')).valid?(value)
+ end
+
+ def hwp_property?
+ true if name.to_s =~ /^hwp_(cpu|memory|storage|architecture)/
+ end
end
def param(*args)
@@ -72,15 +84,23 @@ module Deltacloud::Validation
params.each_value { |p| yield p }
end
- def validate(all_params, values)
+ def validate(all_params, values, credentials)
all_params.each_value do |p|
if p.required? and not values[p.name]
raise Failure.new(p, "Required parameter #{p.name} not found")
end
- if values[p.name] and not p.options.empty? and
- not p.options.include?(values[p.name])
- raise Failure.new(p, "Parameter #{p.name} has value #{values[p.name]} which is not in #{p.options.join(", ")}")
+ next unless values[p.name]
+ if p.hwp_property?
+ profile = driver.hardware_profile(credentials, values['hwp_id'])
+ unless p.valid_hwp_value?(profile, values[p.name])
+ raise Failure.new(p, "Hardware profile property #{p.name} has invalid value #{values[p.name]}")
+ end
+ else
+ if not p.options.empty? and p.valid_value?(values[p.name])
+ raise Failure.new(p, "Parameter #{p.name} has value #{values[p.name]} which is not in #{p.options.join(", ")}")
+ end
end
end
end
+
end
Modified: incubator/deltacloud/trunk/server/lib/sinatra/rabbit.rb
URL: http://svn.apache.org/viewvc/incubator/deltacloud/trunk/server/lib/sinatra/rabbit.rb?rev=1180860&r1=1180859&r2=1180860&view=diff
==============================================================================
--- incubator/deltacloud/trunk/server/lib/sinatra/rabbit.rb (original)
+++ incubator/deltacloud/trunk/server/lib/sinatra/rabbit.rb Mon Oct 10 10:08:13 2011
@@ -121,7 +121,7 @@ module Sinatra
@control = Proc.new do
op.collection.check_supported(driver)
op.check_capability(driver)
- op.validate(op.effective_params(driver), params)
+ op.validate(op.effective_params(driver), params, credentials)
instance_eval(&block)
end
end
Modified: incubator/deltacloud/trunk/server/tests/common.rb
URL: http://svn.apache.org/viewvc/incubator/deltacloud/trunk/server/tests/common.rb?rev=1180860&r1=1180859&r2=1180860&view=diff
==============================================================================
--- incubator/deltacloud/trunk/server/tests/common.rb (original)
+++ incubator/deltacloud/trunk/server/tests/common.rb Mon Oct 10 10:08:13 2011
@@ -100,7 +100,9 @@ module DeltacloudTestCommon
get(uri, params || {}, opts[:auth] ? authenticate(opts) : {})
if last_response.status.to_s =~ /5(\d{2})/
puts "============= [ ERROR ] ================"
- puts last_response.inspect
+ puts last_response.body
+ puts "============= [ RESPONSE ] ================"
+ puts last_response.errors
puts "========================================"
end
end
@@ -112,7 +114,9 @@ module DeltacloudTestCommon
get_url(uri, params, opts)
if last_response.status.to_s =~ /5(\d{2})/
puts "============= [ ERROR ] ================"
- puts last_response.inspect
+ puts last_response.body
+ puts "============= [ RESPONSE ] ================"
+ puts last_response.errors
puts "========================================"
end
end
@@ -127,7 +131,9 @@ module DeltacloudTestCommon
post(uri, params || {}, authenticate(opts))
if last_response.status.to_s =~ /5(\d{2})/
puts "============= [ ERROR ] ================"
- puts last_response.inspect
+ puts last_response.body
+ puts "============= [ RESPONSE ] ================"
+ puts last_response.errors
puts "========================================"
end
end
@@ -143,8 +149,9 @@ module DeltacloudTestCommon
delete(uri, params || {}, authenticate(opts))
if last_response.status.to_s =~ /5(\d{2})/
puts "============= [ ERROR ] ================"
- puts last_response.inspect
- puts "========================================"
+ puts last_response.body
+ puts "============= [ RESPONSE ] ================"
+ puts last_response.errors
end
end
end
@@ -159,8 +166,9 @@ module DeltacloudTestCommon
put(uri, params || {}, authenticate(opts))
if last_response.status.to_s =~ /5(\d{2})/
puts "============= [ ERROR ] ================"
- puts last_response.inspect
- puts "========================================"
+ puts last_response.body
+ puts "============= [ RESPONSE ] ================"
+ puts last_response.errors
end
end
end
Modified: incubator/deltacloud/trunk/server/tests/drivers/mock/instances_test.rb
URL: http://svn.apache.org/viewvc/incubator/deltacloud/trunk/server/tests/drivers/mock/instances_test.rb?rev=1180860&r1=1180859&r2=1180860&view=diff
==============================================================================
--- incubator/deltacloud/trunk/server/tests/drivers/mock/instances_test.rb (original)
+++ incubator/deltacloud/trunk/server/tests/drivers/mock/instances_test.rb Mon Oct 10 10:08:13 2011
@@ -109,18 +109,33 @@ module DeltacloudUnitTest
test_instance_attributes(last_xml_response/'instance')
end
- def test_it_create_a_new_instance_using_image_id_and_name_and_hwp
+ def test_it_create_a_new_instance_using_image_id_and_name_and_hwp_storage_and_hwp_cpu
params = {
:image_id => 'img1',
- :name => "unit_test_instance1",
- :hwp_id => "m1-xlarge"
+ :realm_id => '',
+ :name => "unit_test_instance3",
+ :hwp_id => "m1-small",
+ :hwp_storage => '160',
+ :hwp_memory => '1740.8',
+ :hwp_cpu => "1.0",
+ }
+ post_url '/api/instances', params
+ last_response.status.should == 400
+ end
+
+ def test_it_create_a_new_instance_using_image_id_and_name_and_hwp_storage
+ params = {
+ :image_id => 'img1',
+ :name => "unit_test_instance2",
+ :hwp_id => "m1-small",
+ :hwp_storage => "160"
}
post_url '/api/instances', params
last_response.status.should == 201
last_response.headers['Location'].should_not == nil
get_auth_url last_response.headers['Location'], {}
- (last_xml_response/'instance/name').text.should == 'unit_test_instance1'
- (last_xml_response/'instance/hardware_profile').first['id'].should == 'm1-xlarge'
+ (last_xml_response/'instance/name').text.should == 'unit_test_instance2'
+ (last_xml_response/'instance/hardware_profile').first['id'].should == 'm1-small'
add_created_instance (last_xml_response/'instance').first['id']
test_instance_attributes(last_xml_response/'instance')
end
Modified: incubator/deltacloud/trunk/server/tests/rabbit_test.rb
URL: http://svn.apache.org/viewvc/incubator/deltacloud/trunk/server/tests/rabbit_test.rb?rev=1180860&r1=1180859&r2=1180860&view=diff
==============================================================================
--- incubator/deltacloud/trunk/server/tests/rabbit_test.rb (original)
+++ incubator/deltacloud/trunk/server/tests/rabbit_test.rb Mon Oct 10 10:08:13 2011
@@ -44,7 +44,7 @@ module DeltacloudUnitTest
features.should =~ [:hardware_profiles, :user_name, :authentication_key, :user_data]
op = @app.collections[:instances].operations[:create]
- op.effective_params(@driver).keys.should =~ [:image_id, :hwp_memory, :hwp_id, :keyname, :name, :hwp_storage, :realm_id, :user_data]
+ op.effective_params(@driver).keys.should =~ [:image_id, :hwp_memory, :hwp_id, :keyname, :name, :hwp_storage, :realm_id, :user_data, :hwp_architecture, :hwp_cpu]
op.params.keys =~ [:realm_id, :image_id, :hwp_id]
end