Skip to content

Commit

Permalink
oVirt: Added tests to work on both real and mock.
Browse files Browse the repository at this point in the history
Signed-off-by: Ohad Levy <ohadlevy@gmail.com>
  • Loading branch information
abenari authored and geemus committed Feb 8, 2012
1 parent 4a9bfe5 commit 905c69d
Show file tree
Hide file tree
Showing 36 changed files with 842 additions and 69 deletions.
1 change: 1 addition & 0 deletions .gitignore
Expand Up @@ -5,6 +5,7 @@
.rvmrc
.bundle
.DS_Store
.idea
coverage
doc/*
docs/_site/*
Expand Down
2 changes: 1 addition & 1 deletion fog.gemspec
Expand Up @@ -54,10 +54,10 @@ Gem::Specification.new do |s|
s.add_development_dependency('rdoc')
s.add_development_dependency('thor')
s.add_development_dependency('rspec', '~>1.3.1')
s.add_development_dependency('rbovirt', '>=0.0.5')
s.add_development_dependency('shindo', '~>0.3.4')
s.add_development_dependency('virtualbox', '~>0.9.1')
# s.add_development_dependency('ruby-libvirt','~>0.4.0')
s.add_development_dependency('rbovirt', '>=0.0.5')

s.files = `git ls-files`.split("\n")
s.test_files = `git ls-files -- {spec,tests}/*`.split("\n")
Expand Down
3 changes: 3 additions & 0 deletions lib/fog/core/errors.rb
Expand Up @@ -54,6 +54,9 @@ def self.missing_credentials
:openstack_username:
:openstack_auth_url:
:openstack_tenant:
:ovirt_username:
:ovirt_password:
:ovirt_url:
:rackspace_api_key:
:rackspace_username:
:rackspace_servicenet:
Expand Down
42 changes: 40 additions & 2 deletions lib/fog/ovirt/compute.rb
Expand Up @@ -18,22 +18,60 @@ class Ovirt < Fog::Service

request :vm_action
request :destroy_vm
request :create_vm
request :datacenters
request :storage_domains
request :list_virtual_machines
request :get_virtual_machine
request :list_templates
request :get_template
request :list_clusters
request :get_cluster

module Shared
# converts an OVIRT object into an hash for fog to consume.
def ovirt_attrs obj
opts = {:raw => obj}
obj.instance_variables.each do |v|
key = v.gsub("@","").to_sym
value = obj.instance_variable_get(v)
#ignore nil values
next if value.nil?

opts[key] = case value.class
when OVIRT::Link
value.id
when Hash
value
else
value.to_s.strip
end
end
opts
end
end

class Mock
include Shared
attr_reader :client

def initialize(options={})
require 'rbovirt'
username = options[:ovirt_username]
password = options[:ovirt_password]
url = options[:ovirt_url]

#@client = OVIRT::Client.new(username, password, url)
end

private
#read mocks xml
def read_xml(file_name)
file_path = File.join(File.dirname(__FILE__),"requests","compute","mock_files",file_name)
File.read(file_path)
end
end

class Real
include Shared
attr_reader :client

def initialize(options={})
Expand Down
7 changes: 2 additions & 5 deletions lib/fog/ovirt/models/compute/clusters.rb
@@ -1,23 +1,20 @@
require 'fog/core/collection'
require 'fog/ovirt/models/compute/cluster'
require 'fog/ovirt/models/compute/helpers/collection_helper'

module Fog
module Compute
class Ovirt

class Clusters < Fog::Collection

include Fog::Compute::Ovirt::Helpers::CollectionHelper
model Fog::Compute::Ovirt::Cluster

def all(filters = {})
attrs = connection.client.clusters(filters).map { |cluster| ovirt_attrs(cluster) }
load attrs
load connection.list_clusters(filters)
end

def get(id)
new ovirt_attrs(connection.client.cluster(id))
new connection.get_cluster(id)
end

end
Expand Down
32 changes: 0 additions & 32 deletions lib/fog/ovirt/models/compute/helpers/collection_helper.rb

This file was deleted.

19 changes: 13 additions & 6 deletions lib/fog/ovirt/models/compute/server.rb
Expand Up @@ -39,29 +39,36 @@ def mac
end

def start(options = {})
connection.client.vm_action(id, :start)
connection.vm_action(:id =>id, :action => :start)
reload
end

def stop(options = {})
connection.client.vm_action(id, :stop)
connection.vm_action(:id =>id, :action => :stop)
reload
end

def reboot(options = {})
connection.client.vm_action(id, :reboot)
stop unless stopped?
wait_for { stopped? }
connection.vm_action(:id =>id, :action => :start)
reload
end

def suspend(options = {})
connection.vm_action(:id =>id, :action => :suspend)
reload
end

def destroy(options = {})
stop unless stopped?
(stop unless stopped?) rescue nil #ignore failure, destroy the machine anyway.
wait_for { stopped? }
connection.client.destroy_vm(id)
connection.destroy_vm(:id => id)
end

def save
raise Fog::Errors::Error.new('Resaving an existing object may create a duplicate') if identity
self.id = connection.client.create_vm(attributes).id
self.id = connection.create_vm(attributes).id
reload
end

Expand Down
7 changes: 2 additions & 5 deletions lib/fog/ovirt/models/compute/servers.rb
@@ -1,23 +1,20 @@
require 'fog/core/collection'
require 'fog/ovirt/models/compute/server'
require 'fog/ovirt/models/compute/helpers/collection_helper'

module Fog
module Compute
class Ovirt

class Servers < Fog::Collection

include Fog::Compute::Ovirt::Helpers::CollectionHelper
model Fog::Compute::Ovirt::Server

def all(filters = {})
attrs = connection.client.vms(filters).map { |server| ovirt_attrs(server) }
load attrs
load connection.list_virtual_machines(filters)
end

def get(id)
new ovirt_attrs(connection.client.vm(id))
new connection.get_virtual_machine(id)
end

def bootstrap(new_attributes = {})
Expand Down
7 changes: 2 additions & 5 deletions lib/fog/ovirt/models/compute/templates.rb
@@ -1,23 +1,20 @@
require 'fog/core/collection'
require 'fog/ovirt/models/compute/template'
require 'fog/ovirt/models/compute/helpers/collection_helper'

module Fog
module Compute
class Ovirt

class Templates < Fog::Collection

include Fog::Compute::Ovirt::Helpers::CollectionHelper
model Fog::Compute::Ovirt::Template

def all(filters = {})
attrs = connection.client.templates(filters).map { |template| ovirt_attrs(template) }
load attrs
load connection.list_templates(filters)
end

def get(id)
new ovirt_attrs(connection.client.template(id))
new connection.get_template(id)
end

end
Expand Down
20 changes: 20 additions & 0 deletions lib/fog/ovirt/requests/compute/create_vm.rb
@@ -0,0 +1,20 @@
module Fog
module Compute
class Ovirt

class Real
def create_vm(attrs)
client.create_vm(attrs)
end
end

class Mock
def create_vm(attrs)
xml = read_xml('vm.xml')
OVIRT::VM::new(self, Nokogiri::XML(xml).root)
end

end
end
end
end
11 changes: 7 additions & 4 deletions lib/fog/ovirt/requests/compute/datacenters.rb
Expand Up @@ -4,14 +4,17 @@ class Ovirt
class Real

def datacenters filter={}
client.datacenters(filter)
client.datacenters(filter).map {|ovirt_obj| ovirt_attrs ovirt_obj}
end

end

class Mock
def datacenters filter={}
[ "Solutions", "Solutions2", "Solutions3" ]
class Mock
def datacenters(filters = {})
xml = read_xml 'data_centers.xml'
Nokogiri::XML(xml).xpath('/data_centers/data_center').collect do |dc|
ovirt_attrs OVIRT::DataCenter::new(self, dc)
end
end
end
end
Expand Down
18 changes: 18 additions & 0 deletions lib/fog/ovirt/requests/compute/get_cluster.rb
@@ -0,0 +1,18 @@
module Fog
module Compute
class Ovirt
class Real
def get_cluster(id)
ovirt_attrs client.cluster(id)
end

end
class Mock
def get_cluster(id)
xml = read_xml('cluster.xml')
ovirt_attrs OVIRT::Cluster::new(self, Nokogiri::XML(xml).root)
end
end
end
end
end
18 changes: 18 additions & 0 deletions lib/fog/ovirt/requests/compute/get_template.rb
@@ -0,0 +1,18 @@
module Fog
module Compute
class Ovirt
class Real
def get_template(id)
ovirt_attrs client.template(id)
end

end
class Mock
def get_template(id)
xml = read_xml 'template.xml'
ovirt_attrs OVIRT::Template::new(self, Nokogiri::XML(xml).root)
end
end
end
end
end
18 changes: 18 additions & 0 deletions lib/fog/ovirt/requests/compute/get_virtual_machine.rb
@@ -0,0 +1,18 @@
module Fog
module Compute
class Ovirt
class Real
def get_virtual_machine(id)
ovirt_attrs client.vm(id)
end

end
class Mock
def get_virtual_machine(id)
xml = read_xml 'vm.xml'
ovirt_attrs OVIRT::VM::new(self, Nokogiri::XML(xml).root)
end
end
end
end
end
20 changes: 20 additions & 0 deletions lib/fog/ovirt/requests/compute/list_clusters.rb
@@ -0,0 +1,20 @@
module Fog
module Compute
class Ovirt
class Real
def list_clusters(filters = {})
client.clusters(filters).map {|ovirt_obj| ovirt_attrs ovirt_obj}
end

end
class Mock
def list_clusters(filters = {})
xml = read_xml 'clusters.xml'
Nokogiri::XML(xml).xpath('/clusters/cluster').collect do |cl|
ovirt_attrs OVIRT::Cluster::new(self, cl)
end
end
end
end
end
end
20 changes: 20 additions & 0 deletions lib/fog/ovirt/requests/compute/list_templates.rb
@@ -0,0 +1,20 @@
module Fog
module Compute
class Ovirt
class Real
def list_templates(filters = {})
client.templates(filters).map {|ovirt_obj| ovirt_attrs ovirt_obj}
end

end
class Mock
def list_templates(filters = {})
xml = read_xml 'templates.xml'
Nokogiri::XML(xml).xpath('/templates/template').collect do |t|
ovirt_attrs OVIRT::Template::new(self, t)
end
end
end
end
end
end

0 comments on commit 905c69d

Please sign in to comment.