blob: 3972b523bf25ad13d42da8589caef2e38a22975b [file]
require 'rubygems'
require 'require_relative' if RUBY_VERSION < '1.9'
require_relative 'common'
require_relative '../../../lib/deltacloud/drivers/base_driver'
describe Deltacloud::BaseDriver do
before do
class TestDriver < Deltacloud::BaseDriver
define_hardware_profile('t1.micro') do
cpu 1
memory 613
storage 160
architecture ['i386','x86_64']
end
feature :instances, :user_data
feature :instances, :user_name do
{ :max_length => 50 }
end
define_instance_states do
start.to( :pending ) .automatically
pending.to( :running ) .automatically
pending.to( :stopping ) .on( :stop )
pending.to( :stopped ) .automatically
stopped.to( :running ) .on( :start )
running.to( :running ) .on( :reboot )
running.to( :stopping ) .on( :stop )
stopping.to(:stopped) .automatically
stopping.to(:finish) .automatically
stopped.to( :finish ) .automatically
end
def realms(credentials, opts={}); end
def supported_collections(credentials)
collections = super
#lets add images/instances just for testing of method override from base
collections + [Deltacloud::Rabbit::ImagesCollection, Deltacloud::Rabbit::InstancesCollection]
end
end
@driver = TestDriver.new
end
describe 'supported driver collections' do
it 'provides list of supported collections' do
current_driver = Thread.current[:driver]
#change to test driver, mock defined in common.rb
Thread.current[:driver] = 'test'
credentials = OpenStruct.new(:user => 'unkown', :password => 'wrong')
@driver.supported_collections(credentials).wont_be_empty
@driver.supported_collections(credentials).must_include Deltacloud::Rabbit::InstancesCollection
#check override of supported_collections, we added Images above
@driver.supported_collections(credentials).must_include Deltacloud::Rabbit::ImagesCollection
@driver.supported_collections(credentials).wont_include Deltacloud::Rabbit::KeysCollection
#switch driver, check supported_collections
Thread.current[:driver] = 'mock'
@driver.supported_collections(credentials).must_include Deltacloud::Rabbit::KeysCollection
#restore driver to not impact other tests
Thread.current[:driver] = current_driver
end
end
describe 'when creating a new driver' do
it 'must return the proper driver name' do
@driver.name.must_equal 'test'
TestDriver.name.must_equal 'TestDriver'
end
end
describe 'hardware profiles' do
it 'must allow to define custom hardware profiles' do
TestDriver.must_respond_to :define_hardware_profile
end
it 'should not allow to create duplicated profile' do
TestDriver.define_hardware_profile('t1.micro').must_be_nil
TestDriver.hardware_profiles.size.must_equal 1
end
it 'should return all defined hardware profiles' do
TestDriver.must_respond_to :hardware_profiles
TestDriver.hardware_profiles.wont_be_empty
end
it 'should allow to filter hardware profiles' do
@driver.filter_hardware_profiles(TestDriver.hardware_profiles, :architecture => 'i386').wont_be_empty
@driver.filter_hardware_profiles(TestDriver.hardware_profiles, :architecture => 'unknown').must_be_empty
@driver.filter_hardware_profiles(TestDriver.hardware_profiles, :id => 't1.micro').wont_be_empty
@driver.filter_hardware_profiles(TestDriver.hardware_profiles, :id => 'm1.unknown').must_be_empty
end
end
describe 'features' do
it 'should return all defined features' do
TestDriver.features.must_be_kind_of Hash
TestDriver.features.keys.must_include :instances
TestDriver.features[:instances].must_be_kind_of Array
TestDriver.features[:instances].must_include :user_data
end
it 'must have method to check if feature is defined' do
TestDriver.must_respond_to :'has_feature?'
TestDriver.has_feature?(:instances, :user_data).must_equal true
TestDriver.has_feature?(:instances, :user_unknown).must_equal false
end
it 'must return feature defined constraints' do
TestDriver.must_respond_to :'constraints'
TestDriver.constraints.must_be_kind_of Hash
TestDriver.constraints[:instances].must_be_kind_of Hash
TestDriver.constraints[:instances][:user_name].must_be_kind_of Hash
TestDriver.constraints[:instances][:user_name][:max_length].must_equal 50
TestDriver.constraints(:collection => :instances, :feature => :user_name).must_be_kind_of Hash
TestDriver.constraints(:collection => :instances, :feature => :user_name)[:max_length].must_equal 50
end
end
describe 'instance states' do
it 'should return defined instance state machine' do
TestDriver.must_respond_to :instance_state_machine
TestDriver.instance_state_machine.must_be_kind_of Deltacloud::StateMachine
end
it 'should return actions for given state' do
@driver.must_respond_to :instance_actions_for
@driver.instance_actions_for('RUNNING').must_be_kind_of Array
@driver.instance_actions_for('RUNNING').must_include :stop
end
end
describe 'capabilities' do
it 'should return if driver has given capability' do
@driver.has_capability?(:realms).must_equal true
@driver.has_capability?(:images).must_equal false
end
end
end