diff --git a/.gitignore b/.gitignore
index 44708107f..76e452d49 100644
--- a/.gitignore
+++ b/.gitignore
@@ -5,6 +5,7 @@
.rvmrc
.bundle
.DS_Store
+.idea
coverage
doc/*
docs/_site/*
diff --git a/fog.gemspec b/fog.gemspec
index 5c98c3de3..70a9b5e3d 100644
--- a/fog.gemspec
+++ b/fog.gemspec
@@ -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")
diff --git a/lib/fog/core/errors.rb b/lib/fog/core/errors.rb
index 297d704c8..fc2884d69 100644
--- a/lib/fog/core/errors.rb
+++ b/lib/fog/core/errors.rb
@@ -54,6 +54,9 @@ An alternate file may be used by placing its path in the FOG_RC environment vari
:openstack_username:
:openstack_auth_url:
:openstack_tenant:
+ :ovirt_username:
+ :ovirt_password:
+ :ovirt_url:
:rackspace_api_key:
:rackspace_username:
:rackspace_servicenet:
diff --git a/lib/fog/ovirt/compute.rb b/lib/fog/ovirt/compute.rb
index 3397d02d4..f65e67896 100644
--- a/lib/fog/ovirt/compute.rb
+++ b/lib/fog/ovirt/compute.rb
@@ -18,22 +18,60 @@ module Fog
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={})
diff --git a/lib/fog/ovirt/models/compute/clusters.rb b/lib/fog/ovirt/models/compute/clusters.rb
index 1bf2306d6..41fc5c63c 100644
--- a/lib/fog/ovirt/models/compute/clusters.rb
+++ b/lib/fog/ovirt/models/compute/clusters.rb
@@ -1,6 +1,5 @@
require 'fog/core/collection'
require 'fog/ovirt/models/compute/cluster'
-require 'fog/ovirt/models/compute/helpers/collection_helper'
module Fog
module Compute
@@ -8,16 +7,14 @@ module Fog
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
diff --git a/lib/fog/ovirt/models/compute/helpers/collection_helper.rb b/lib/fog/ovirt/models/compute/helpers/collection_helper.rb
deleted file mode 100644
index 66a0a952a..000000000
--- a/lib/fog/ovirt/models/compute/helpers/collection_helper.rb
+++ /dev/null
@@ -1,32 +0,0 @@
-module Fog
- module Compute
- class Ovirt
- module Helpers
- module CollectionHelper
-
- # 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
- end
- end
- end
-end
diff --git a/lib/fog/ovirt/models/compute/server.rb b/lib/fog/ovirt/models/compute/server.rb
index 7059f30de..1b2109ee7 100644
--- a/lib/fog/ovirt/models/compute/server.rb
+++ b/lib/fog/ovirt/models/compute/server.rb
@@ -39,29 +39,36 @@ module Fog
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
diff --git a/lib/fog/ovirt/models/compute/servers.rb b/lib/fog/ovirt/models/compute/servers.rb
index d02b1a974..a0232ee81 100644
--- a/lib/fog/ovirt/models/compute/servers.rb
+++ b/lib/fog/ovirt/models/compute/servers.rb
@@ -1,6 +1,5 @@
require 'fog/core/collection'
require 'fog/ovirt/models/compute/server'
-require 'fog/ovirt/models/compute/helpers/collection_helper'
module Fog
module Compute
@@ -8,16 +7,14 @@ module Fog
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 = {})
diff --git a/lib/fog/ovirt/models/compute/templates.rb b/lib/fog/ovirt/models/compute/templates.rb
index f69d18a09..6a6bf906a 100644
--- a/lib/fog/ovirt/models/compute/templates.rb
+++ b/lib/fog/ovirt/models/compute/templates.rb
@@ -1,6 +1,5 @@
require 'fog/core/collection'
require 'fog/ovirt/models/compute/template'
-require 'fog/ovirt/models/compute/helpers/collection_helper'
module Fog
module Compute
@@ -8,16 +7,14 @@ module Fog
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
diff --git a/lib/fog/ovirt/requests/compute/create_vm.rb b/lib/fog/ovirt/requests/compute/create_vm.rb
new file mode 100644
index 000000000..b72505786
--- /dev/null
+++ b/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
diff --git a/lib/fog/ovirt/requests/compute/datacenters.rb b/lib/fog/ovirt/requests/compute/datacenters.rb
index 7978fef8d..4c94ba4d6 100644
--- a/lib/fog/ovirt/requests/compute/datacenters.rb
+++ b/lib/fog/ovirt/requests/compute/datacenters.rb
@@ -4,14 +4,17 @@ module Fog
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
diff --git a/lib/fog/ovirt/requests/compute/get_cluster.rb b/lib/fog/ovirt/requests/compute/get_cluster.rb
new file mode 100644
index 000000000..61d628d33
--- /dev/null
+++ b/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
diff --git a/lib/fog/ovirt/requests/compute/get_template.rb b/lib/fog/ovirt/requests/compute/get_template.rb
new file mode 100644
index 000000000..409537311
--- /dev/null
+++ b/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
\ No newline at end of file
diff --git a/lib/fog/ovirt/requests/compute/get_virtual_machine.rb b/lib/fog/ovirt/requests/compute/get_virtual_machine.rb
new file mode 100644
index 000000000..8896a5c13
--- /dev/null
+++ b/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
diff --git a/lib/fog/ovirt/requests/compute/list_clusters.rb b/lib/fog/ovirt/requests/compute/list_clusters.rb
new file mode 100644
index 000000000..4fdf0b93f
--- /dev/null
+++ b/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
diff --git a/lib/fog/ovirt/requests/compute/list_templates.rb b/lib/fog/ovirt/requests/compute/list_templates.rb
new file mode 100644
index 000000000..eb74d981c
--- /dev/null
+++ b/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
diff --git a/lib/fog/ovirt/requests/compute/list_virtual_machines.rb b/lib/fog/ovirt/requests/compute/list_virtual_machines.rb
new file mode 100644
index 000000000..a2d6251b5
--- /dev/null
+++ b/lib/fog/ovirt/requests/compute/list_virtual_machines.rb
@@ -0,0 +1,20 @@
+module Fog
+ module Compute
+ class Ovirt
+ class Real
+ def list_virtual_machines(filters = {})
+ client.vms(filters).map {|ovirt_obj| ovirt_attrs ovirt_obj}
+ end
+
+ end
+ class Mock
+ def list_virtual_machines(filters = {})
+ xml = read_xml 'vms.xml'
+ Nokogiri::XML(xml).xpath('/vms/vm').collect do |vm|
+ ovirt_attrs OVIRT::VM::new(self, vm)
+ end
+ end
+ end
+ end
+ end
+end
diff --git a/lib/fog/ovirt/requests/compute/mock_files/cluster.xml b/lib/fog/ovirt/requests/compute/mock_files/cluster.xml
new file mode 100644
index 000000000..51006eca0
--- /dev/null
+++ b/lib/fog/ovirt/requests/compute/mock_files/cluster.xml
@@ -0,0 +1,20 @@
+
+
+cluster1
+
+
+
+
+
+
+
+true
+
+
+
+
+
+migrate_highly_available
+
+
+
\ No newline at end of file
diff --git a/lib/fog/ovirt/requests/compute/mock_files/clusters.xml b/lib/fog/ovirt/requests/compute/mock_files/clusters.xml
new file mode 100644
index 000000000..0235f0313
--- /dev/null
+++ b/lib/fog/ovirt/requests/compute/mock_files/clusters.xml
@@ -0,0 +1,39 @@
+
+
+Cluster1
+The default server cluster
+
+
+
+
+
+
+
+true
+
+
+
+
+
+migrate
+
+
+
+Cluster2
+
+
+
+
+
+
+
+true
+
+
+
+
+
+migrate_highly_available
+
+
+
\ No newline at end of file
diff --git a/lib/fog/ovirt/requests/compute/mock_files/data_centers.xml b/lib/fog/ovirt/requests/compute/mock_files/data_centers.xml
new file mode 100644
index 000000000..cda1053dc
--- /dev/null
+++ b/lib/fog/ovirt/requests/compute/mock_files/data_centers.xml
@@ -0,0 +1,17 @@
+
+
+Datacenter1
+The first Data Center
+
+
+nfs
+v1
+
+
+
+
+
+up
+
+
+
\ No newline at end of file
diff --git a/lib/fog/ovirt/requests/compute/mock_files/storage_domains.xml b/lib/fog/ovirt/requests/compute/mock_files/storage_domains.xml
new file mode 100644
index 000000000..7eca19304
--- /dev/null
+++ b/lib/fog/ovirt/requests/compute/mock_files/storage_domains.xml
@@ -0,0 +1,36 @@
+
+
+covirt
+
+
+iso
+
+unattached
+
+false
+
+nfs
+ovirt.server.com
+/mnt/nfs
+
+0
+0
+0
+v1
+
+
+nfs
+
+data
+true
+
+nfs
+storage.server.com
+/volumes/path/for/ovirt
+
+40802189312
+66571993088
+75161927680
+v1
+
+
\ No newline at end of file
diff --git a/lib/fog/ovirt/requests/compute/mock_files/template.xml b/lib/fog/ovirt/requests/compute/mock_files/template.xml
new file mode 100644
index 000000000..64543bed6
--- /dev/null
+++ b/lib/fog/ovirt/requests/compute/mock_files/template.xml
@@ -0,0 +1,39 @@
+
+
+hwp_small
+hardware profile small
+
+
+
+
+server
+
+ok
+
+536870912
+
+
+
+
+
+
+
+
+
+
+2012-01-31T07:47:03.811Z
+rhev
+
+false
+1
+
+
+spice
+1
+
+false
+
+true
+
+
+
\ No newline at end of file
diff --git a/lib/fog/ovirt/requests/compute/mock_files/templates.xml b/lib/fog/ovirt/requests/compute/mock_files/templates.xml
new file mode 100644
index 000000000..4a3e7e4f8
--- /dev/null
+++ b/lib/fog/ovirt/requests/compute/mock_files/templates.xml
@@ -0,0 +1,110 @@
+
+
+Blank
+Blank template
+
+
+
+
+desktop
+
+ok
+
+536870912
+
+
+
+
+
+
+
+2008-04-01T00:00:00.000+01:00
+rhev
+
+false
+0
+
+
+spice
+1
+
+false
+
+true
+
+
+
+hwp_large
+hardware profile large
+
+
+
+
+server
+
+ok
+
+1073741824
+
+
+
+
+
+
+
+
+
+
+2012-01-31T07:53:19.047Z
+rhev
+
+false
+1
+
+
+spice
+1
+
+false
+
+true
+
+
+
+hwp_small
+hardware profile small
+
+
+
+
+server
+
+ok
+
+536870912
+
+
+
+
+
+
+
+
+
+
+2012-01-31T07:47:03.811Z
+rhev
+
+false
+1
+
+
+spice
+1
+
+false
+
+true
+
+
+
\ No newline at end of file
diff --git a/lib/fog/ovirt/requests/compute/mock_files/vm.xml b/lib/fog/ovirt/requests/compute/mock_files/vm.xml
new file mode 100644
index 000000000..14438e7d7
--- /dev/null
+++ b/lib/fog/ovirt/requests/compute/mock_files/vm.xml
@@ -0,0 +1,54 @@
+
+
+vm01
+
+
+
+
+
+
+
+server
+
+down
+
+805306368
+
+
+
+
+
+
+
+
+
+
+
+false
+1
+
+
+spice
+host
+5900
+5901
+1
+
+
+
+
+2012-02-05T11:00:33.222Z
+2012-01-31T07:21:10.667Z
+rhev
+false
+
+migratable
+
+
+536870912
+
+
+true
+
+
+
\ No newline at end of file
diff --git a/lib/fog/ovirt/requests/compute/mock_files/vms.xml b/lib/fog/ovirt/requests/compute/mock_files/vms.xml
new file mode 100644
index 000000000..0467e66e8
--- /dev/null
+++ b/lib/fog/ovirt/requests/compute/mock_files/vms.xml
@@ -0,0 +1,152 @@
+
+
+test-vm1
+
+
+
+
+
+
+
+server
+
+down
+
+1073741824
+
+
+
+
+
+
+
+
+
+
+false
+1
+
+
+spice
+1
+
+
+
+2012-02-06T10:47:32.214Z
+2012-01-31T07:45:13.068Z
+rhev
+false
+
+migratable
+
+
+536870912
+
+
+true
+
+
+
+fosdem
+
+
+
+
+
+
+
+server
+
+down
+
+536870912
+
+
+
+
+
+
+
+
+
+
+false
+1
+
+
+spice
+host
+5902
+5903
+1
+
+
+
+
+2012-02-05T11:04:39.217Z
+2012-02-05T10:53:30.484Z
+rhev
+false
+
+migratable
+
+
+536870912
+
+
+true
+
+
+
+vm01
+
+
+
+
+
+
+
+server
+
+down
+
+805306368
+
+
+
+
+
+
+
+
+
+
+
+false
+1
+
+
+spice
+host
+5900
+5901
+1
+
+
+
+
+2012-02-05T11:00:33.222Z
+2012-01-31T07:21:10.667Z
+rhev
+false
+
+migratable
+
+
+536870912
+
+
+true
+
+
+
\ No newline at end of file
diff --git a/lib/fog/ovirt/requests/compute/storage_domains.rb b/lib/fog/ovirt/requests/compute/storage_domains.rb
index 05380f9d3..0278696ff 100644
--- a/lib/fog/ovirt/requests/compute/storage_domains.rb
+++ b/lib/fog/ovirt/requests/compute/storage_domains.rb
@@ -4,14 +4,17 @@ module Fog
class Real
def storage_domains filter={}
- client.storage_domains(filter)
+ client.storagedomains(filter).map {|ovirt_obj| ovirt_attrs ovirt_obj}
end
end
class Mock
- def storage_domains filter={}
- [ "Storage", "Storage2", "Storage3" ]
+ def storage_domains(filters = {})
+ xml = read_xml 'storage_domains.xml'
+ Nokogiri::XML(xml).xpath('/storage_domains/storage_domain').collect do |sd|
+ ovirt_attrs OVIRT::StorageDomain::new(self, sd)
+ end
end
end
end
diff --git a/tests/ovirt/models/compute/cluster_tests.rb b/tests/ovirt/models/compute/cluster_tests.rb
new file mode 100644
index 000000000..004cce76b
--- /dev/null
+++ b/tests/ovirt/models/compute/cluster_tests.rb
@@ -0,0 +1,31 @@
+Shindo.tests('Fog::Compute[:ovirt] | cluster model', ['ovirt']) do
+
+ clusters = Fog::Compute[:ovirt].clusters
+ cluster = clusters.last
+
+ tests('The cluster model should') do
+ tests('have the action') do
+ test('reload') { cluster.respond_to? 'reload' }
+ %w{ networks }.each do |action|
+ test(action) { cluster.respond_to? action }
+ end
+ end
+ tests('have attributes') do
+ model_attribute_hash = cluster.attributes
+ attributes = [ :id,
+ :name]
+ tests("The cluster model should respond to") do
+ attributes.each do |attribute|
+ test("#{attribute}") { cluster.respond_to? attribute }
+ end
+ end
+ tests("The attributes hash should have key") do
+ attributes.each do |attribute|
+ test("#{attribute}") { model_attribute_hash.has_key? attribute }
+ end
+ end
+ end
+ test('be a kind of Fog::Compute::Ovirt::Cluster') { cluster.kind_of? Fog::Compute::Ovirt::Cluster }
+ end
+
+end
diff --git a/tests/ovirt/models/compute/clusters_tests.rb b/tests/ovirt/models/compute/clusters_tests.rb
new file mode 100644
index 000000000..4486b53ca
--- /dev/null
+++ b/tests/ovirt/models/compute/clusters_tests.rb
@@ -0,0 +1,9 @@
+Shindo.tests('Fog::Compute[:ovirt] | clusters collection', ['ovirt']) do
+
+ clusters = Fog::Compute[:ovirt].clusters
+
+ tests('The clusters collection') do
+ test('should be a kind of Fog::Compute::Ovirt::Clusters') { clusters.kind_of? Fog::Compute::Ovirt::Clusters }
+ end
+
+end
diff --git a/tests/ovirt/models/compute/server_tests.rb b/tests/ovirt/models/compute/server_tests.rb
index 86c147ebc..06c0d8846 100644
--- a/tests/ovirt/models/compute/server_tests.rb
+++ b/tests/ovirt/models/compute/server_tests.rb
@@ -6,9 +6,19 @@ Shindo.tests('Fog::Compute[:ovirt] | server model', ['ovirt']) do
tests('The server model should') do
tests('have the action') do
test('reload') { server.respond_to? 'reload' }
- %w{ stop start destroy reboot }.each do |action|
+ %w{ start stop destroy reboot suspend }.each do |action|
test(action) { server.respond_to? action }
end
+ %w{ start reboot suspend stop }.each do |action|
+ test("#{action} returns successfully") {
+ begin
+ server.send(action.to_sym) ? true : false
+ rescue OVIRT::OvirtException
+ #ovirt exceptions are acceptable for the above actions.
+ true
+ end
+ }
+ end
end
tests('have attributes') do
model_attribute_hash = server.attributes
@@ -17,14 +27,11 @@ Shindo.tests('Fog::Compute[:ovirt] | server model', ['ovirt']) do
:description,
:profile,
:display,
- :storage,
:creation_time,
:os,
- :ip,
:status,
:cores,
:memory,
- :host,
:cluster,
:template]
tests("The server model should respond to") do
@@ -41,5 +48,4 @@ Shindo.tests('Fog::Compute[:ovirt] | server model', ['ovirt']) do
test('be a kind of Fog::Compute::Ovirt::Server') { server.kind_of? Fog::Compute::Ovirt::Server }
end
- # currently not mock is not working..
-end if false
+end
diff --git a/tests/ovirt/models/compute/servers_tests.rb b/tests/ovirt/models/compute/servers_tests.rb
index 3da71fa85..b8aa378a3 100644
--- a/tests/ovirt/models/compute/servers_tests.rb
+++ b/tests/ovirt/models/compute/servers_tests.rb
@@ -3,7 +3,12 @@ Shindo.tests('Fog::Compute[:ovirt] | servers collection', ['ovirt']) do
servers = Fog::Compute[:ovirt].servers
tests('The servers collection') do
+ test('should not be empty') { not servers.empty? }
test('should be a kind of Fog::Compute::Ovirt::Servers') { servers.kind_of? Fog::Compute::Ovirt::Servers }
+ tests('should be able to reload itself').succeeds { servers.reload }
+ tests('should be able to get a model') do
+ tests('by instance uuid').succeeds { servers.get servers.first.id }
+ end
end
end
diff --git a/tests/ovirt/models/compute/template_tests.rb b/tests/ovirt/models/compute/template_tests.rb
new file mode 100644
index 000000000..b831c458e
--- /dev/null
+++ b/tests/ovirt/models/compute/template_tests.rb
@@ -0,0 +1,28 @@
+Shindo.tests('Fog::Compute[:ovirt] | template model', ['ovirt']) do
+
+ templates = Fog::Compute[:ovirt].templates
+ template = templates.last
+
+ tests('The template model should') do
+ tests('have the action') do
+ test('reload') { template.respond_to? 'reload' }
+ end
+ tests('have attributes') do
+ model_attribute_hash = template.attributes
+ attributes = [ :id,
+ :name]
+ tests("The template model should respond to") do
+ attributes.each do |attribute|
+ test("#{attribute}") { template.respond_to? attribute }
+ end
+ end
+ tests("The attributes hash should have key") do
+ attributes.each do |attribute|
+ test("#{attribute}") { model_attribute_hash.has_key? attribute }
+ end
+ end
+ end
+ test('be a kind of Fog::Compute::Ovirt::Template') { template.kind_of? Fog::Compute::Ovirt::Template }
+ end
+
+end
diff --git a/tests/ovirt/models/compute/templates_tests.rb b/tests/ovirt/models/compute/templates_tests.rb
new file mode 100644
index 000000000..e37a2cb81
--- /dev/null
+++ b/tests/ovirt/models/compute/templates_tests.rb
@@ -0,0 +1,9 @@
+Shindo.tests('Fog::Compute[:ovirt] | templates collection', ['ovirt']) do
+
+ templates = Fog::Compute[:ovirt].templates
+
+ tests('The templates collection') do
+ test('should be a kind of Fog::Compute::Ovirt::Templates') { templates.kind_of? Fog::Compute::Ovirt::Templates }
+ end
+
+end
diff --git a/tests/ovirt/requests/compute/create_vm_tests.rb b/tests/ovirt/requests/compute/create_vm_tests.rb
new file mode 100644
index 000000000..db0648427
--- /dev/null
+++ b/tests/ovirt/requests/compute/create_vm_tests.rb
@@ -0,0 +1,26 @@
+Shindo.tests("Fog::Compute[:ovirt] | vm_create request", 'ovirt') do
+
+ compute = Fog::Compute[:ovirt]
+ name_base = Time.now.to_i
+
+ tests("Create VM") do
+ response = compute.create_vm(:name => 'fog-'+name_base.to_s, :cluster_name => 'Default')
+ test("should be a kind of OVIRT::VM") { response.kind_of? OVIRT::VM}
+ end
+
+ tests("Create VM from template (clone)") do
+ response = compute.create_vm(:name => 'fog-'+(name_base+ 1).to_s, :template_name => 'hwp_small', :cluster_name => 'Default')
+ test("should be a kind of OVIRT::VM") { response.kind_of? OVIRT::VM}
+ end
+
+ tests("Fail Creating VM") do
+ begin
+ response = compute.create_vm(:name => 'fog-'+name_base.to_s, :cluster_name => 'Default')
+ test("should be a kind of OVIRT::VM") { response.kind_of? OVIRT::VM} #mock never raise exceptions
+ rescue => e
+ #should raise vm name already exist exception.
+ test("error should be a kind of OVIRT::OvirtException") { e.kind_of? OVIRT::OvirtException}
+ end
+ end
+
+end
diff --git a/tests/ovirt/requests/compute/destroy_vm_tests.rb b/tests/ovirt/requests/compute/destroy_vm_tests.rb
new file mode 100644
index 000000000..37a8d9fc0
--- /dev/null
+++ b/tests/ovirt/requests/compute/destroy_vm_tests.rb
@@ -0,0 +1,18 @@
+Shindo.tests('Fog::Compute[:ovirt] | vm_destroy request', ['ovirt']) do
+
+ compute = Fog::Compute[:ovirt]
+ if compute.servers.all(:search => 'fog-*').empty?
+ compute.create_vm(:name => 'fog-'+Time.now.to_i.to_s, :cluster_name => 'Default')
+ end
+ vm_id = compute.servers.all(:search => 'fog-*').last.id
+
+ tests('The response should') do
+ response = compute.destroy_vm(:id => vm_id)
+ test('be a success') { response ? true: false }
+ end
+
+ tests('The expected options') do
+ raises(ArgumentError, 'raises ArgumentError when id option is missing') { compute.destroy_vm }
+ end
+
+end
diff --git a/tests/ovirt/requests/compute/list_datacenters_tests.rb b/tests/ovirt/requests/compute/list_datacenters_tests.rb
new file mode 100644
index 000000000..4dd1022f6
--- /dev/null
+++ b/tests/ovirt/requests/compute/list_datacenters_tests.rb
@@ -0,0 +1,13 @@
+Shindo.tests('Fog::Compute[:ovirt] | datacenters request', ['ovirt']) do
+
+ compute = Fog::Compute[:ovirt]
+
+ tests("When listing all datacenters") do
+
+ response = compute.datacenters
+ tests("The response data format ...") do
+ test("it should be a kind of Array") { response.kind_of? Array }
+ test("be a kind of Hash") { response.first.kind_of? Hash }
+ end
+ end
+end
diff --git a/tests/ovirt/requests/compute/list_storage_domains_tests.rb b/tests/ovirt/requests/compute/list_storage_domains_tests.rb
new file mode 100644
index 000000000..3e54c4515
--- /dev/null
+++ b/tests/ovirt/requests/compute/list_storage_domains_tests.rb
@@ -0,0 +1,13 @@
+Shindo.tests('Fog::Compute[:ovirt] | storage_domains request', ['ovirt']) do
+
+ compute = Fog::Compute[:ovirt]
+
+ tests("When listing all storage_domains") do
+
+ response = compute.storage_domains
+ tests("The response data format ...") do
+ test("it should be a kind of Array") { response.kind_of? Array }
+ test("be a kind of Hash") { response.first.kind_of? Hash }
+ end
+ end
+end