[Ovirt-devel] [PATCH server] test suite updates and fixes for new validation components

Mohammed Morsi mmorsi at redhat.com
Mon Dec 15 10:21:06 UTC 2008


    note, this patch requires the last validation patch to be applied
    to work

    included are a few updates to the main server app and many updates
    to the test suite to fix a few various bits and assert all the new
    validations recently added.
---
 src/app/models/bonding.rb                   |    4 +-
 src/app/models/nic.rb                       |    4 +-
 src/app/models/storage_volume.rb            |    2 +-
 src/app/models/vm.rb                        |    2 +-
 src/test/fixtures/help_sections.yml         |   14 +++--
 src/test/fixtures/storage_pools.yml         |    7 ++
 src/test/fixtures/usages.yml                |   12 ++--
 src/test/unit/bonding_test.rb               |   35 ++++++++++
 src/test/unit/boot_type_test.rb             |   36 +++++++++-
 src/test/unit/cpu_test.rb                   |   95 ++++++++++++++++++++++++++-
 src/test/unit/help_section_test.rb          |   51 +++++++++++++-
 src/test/unit/host_browser_identify_test.rb |    8 +-
 src/test/unit/host_test.rb                  |   60 ++++++++++++++++-
 src/test/unit/ip_address_test.rb            |    5 ++
 src/test/unit/ip_v4_address_test.rb         |    3 +-
 src/test/unit/ip_v6_address_test.rb         |    3 +-
 src/test/unit/nic_test.rb                   |   58 +++++++++++++++-
 src/test/unit/permission_test.rb            |   28 ++++++++
 src/test/unit/pool_test.rb                  |   21 ++++++
 src/test/unit/quota_test.rb                 |   37 ++++++++++-
 src/test/unit/storage_pool_test.rb          |   45 +++++++++++++
 src/test/unit/storage_volume_test.rb        |   86 ++++++++++++++++++++++++
 src/test/unit/task_test.rb                  |   14 ++++
 src/test/unit/usage_test.rb                 |   47 ++++++++++++-
 src/test/unit/vm_test.rb                    |   64 ++++++++++++++++++
 25 files changed, 697 insertions(+), 44 deletions(-)

diff --git a/src/app/models/bonding.rb b/src/app/models/bonding.rb
index fabdb67..660dcd0 100644
--- a/src/app/models/bonding.rb
+++ b/src/app/models/bonding.rb
@@ -71,7 +71,9 @@ class Bonding < ActiveRecord::Base
 
  protected
   def validate
-    if vlan.boot_type.proto == 'static' and ip_addresses.size == 0
+    if ! vlan.nil? and 
+       vlan.boot_type.proto == 'static' and 
+       ip_addresses.size == 0
            errors.add("vlan_id",
                       "is static. Must create at least one static ip")
      end
diff --git a/src/app/models/nic.rb b/src/app/models/nic.rb
index aa9c740..029b4e4 100644
--- a/src/app/models/nic.rb
+++ b/src/app/models/nic.rb
@@ -43,7 +43,9 @@ class Nic < ActiveRecord::Base
 
   protected
    def validate
-    if physical_network.boot_type.proto == 'static' and ip_addresses.size == 0
+    if ! physical_network.nil? and 
+       physical_network.boot_type.proto == 'static' and 
+       ip_addresses.size == 0
            errors.add("physical_network_id",
                       "is static. Must create at least one static ip")
      end
diff --git a/src/app/models/storage_volume.rb b/src/app/models/storage_volume.rb
index 0f490f8..385c126 100644
--- a/src/app/models/storage_volume.rb
+++ b/src/app/models/storage_volume.rb
@@ -146,7 +146,7 @@ class StorageVolume < ActiveRecord::Base
 
   def movable?
      if vms.size > 0 or 
-         (! lvm_storage_pool.nil? and ! lvm_storage_pool.movable?)
+         (not lvm_storage_pool.nil? and not lvm_stoage_pool.movable?)
            return false 
      end
      return true
diff --git a/src/app/models/vm.rb b/src/app/models/vm.rb
index 4d66c63..bf99e2d 100644
--- a/src/app/models/vm.rb
+++ b/src/app/models/vm.rb
@@ -341,7 +341,7 @@ class Vm < ActiveRecord::Base
     # FIXME: what should memory min/max be?
     errors.add("memory_allocated_in_mb", "must be at least 256 MB") unless not(memory_allocated_in_mb) or memory_allocated_in_mb >=256
     # FIXME: what should cpu min/max
-    errors.add("num_vcpus_allocated", "must be between 1 and 16") unless (num_vcpus_allocated >=1 and num_vcpus_allocated <= 16)
+    errors.add("num_vcpus_allocated", "must be between 1 and 16") unless (num_vcpus_allocated.nil? or (num_vcpus_allocated >=1 and num_vcpus_allocated <= 16))
     errors.add("memory_allocated_in_mb", "violates quota") unless not(memory_allocated) or resources[:memory].nil? or memory_allocated <= resources[:memory]
     errors.add("num_vcpus_allocated", "violates quota") unless not(num_vcpus_allocated) or resources[:cpus].nil? or num_vcpus_allocated <= resources[:cpus]
     errors.add_to_base("No available nics in quota") unless resources[:nics].nil? or resources[:nics] >= 1
diff --git a/src/test/fixtures/help_sections.yml b/src/test/fixtures/help_sections.yml
index 5bf0293..d9f93e4 100644
--- a/src/test/fixtures/help_sections.yml
+++ b/src/test/fixtures/help_sections.yml
@@ -1,7 +1,11 @@
 # Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
 
-# one:
-#   column: value
-#
-# two:
-#   column: value
+dashboard_help:
+ controller: dashboard
+ action: index
+ section: 'index.html'
+
+hardware_hosts_help:
+ controller: hardware
+ action: hosts
+ section: 'hardware_hosts.html'
diff --git a/src/test/fixtures/storage_pools.yml b/src/test/fixtures/storage_pools.yml
index 3cda6db..35bfc88 100644
--- a/src/test/fixtures/storage_pools.yml
+++ b/src/test/fixtures/storage_pools.yml
@@ -20,3 +20,10 @@ corp_com_dev_nfs_ovirtnfs:
   export_path: /devnfs
   state: available
   capacity: 1024
+corp_com_dev_lvm_ovirtlvm:
+  hardware_pool: corp_com_dev
+  type: LvmStoragePool
+  ip_addr: 192.168.50.3
+  export_path: /devnfs
+  state: available
+  capacity: 1024
diff --git a/src/test/fixtures/usages.yml b/src/test/fixtures/usages.yml
index 5bf0293..3bd72e6 100644
--- a/src/test/fixtures/usages.yml
+++ b/src/test/fixtures/usages.yml
@@ -1,7 +1,9 @@
 # Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
 
-# one:
-#   column: value
-#
-# two:
-#   column: value
+management_usage:
+  label: management
+  usage: management
+
+guest_usage:
+  label: guest
+  usage: guest
diff --git a/src/test/unit/bonding_test.rb b/src/test/unit/bonding_test.rb
index 8b90cd5..157035a 100644
--- a/src/test/unit/bonding_test.rb
+++ b/src/test/unit/bonding_test.rb
@@ -35,6 +35,7 @@ class BondingTest < ActiveSupport::TestCase
       :bonding_type_id => bonding_types(:failover_bonding_type),
       :host_id         => hosts(:mailservers_managed_node))
     @bonding.vlan = networks(:dhcp_vlan_one)
+    @bonding.bonding_type = bonding_types(:load_balancing_bonding_type)
   end
 
   # Ensures that the name is required.
@@ -69,6 +70,40 @@ class BondingTest < ActiveSupport::TestCase
     flunk 'Bondings have to have a host.' if @bonding.valid?
   end
 
+  def test_valid_fails_without_bonding_type
+    @bonding.bonding_type = nil
+    flunk 'Bonding must specify bonding type' if @bonding.valid?
+  end
+
+  def test_valid_fails_without_vlan
+    @bonding.vlan = nil
+    flunk 'Bonding must specify vlan' if @bonding.valid?
+  end
+
+  # Ensures that an arp ping address must have the correct format
+  #
+  def test_valid_fails_with_bad_arp_ping_address
+    @bonding.arp_ping_address = 'foobar' 
+
+    flunk "An arp ping address must be in the format ##.##.##.##." if @bonding.valid?
+  end
+
+  # Ensures that an arp interval is a numerical value >= 0
+  #
+  def test_valid_fails_with_bad_arp_interval
+    @bonding.arp_interval = -1
+   
+    flunk "An arp interval must be >= 0" if @bonding.valid?
+  end
+
+  def test_static_network_bonding_must_have_ip
+    @bonding.vlan = networks(:static_vlan_one)
+    @bonding.ip_addresses.delete_if { true }
+
+    flunk 'Bonding assigned to static networks must have at least one ip' if @bonding.valid?
+  end
+
+
   # Ensure that retrieving a bonding returns its associated objects.
   #
   def test_find_all_for_host
diff --git a/src/test/unit/boot_type_test.rb b/src/test/unit/boot_type_test.rb
index a30e258..16ed516 100644
--- a/src/test/unit/boot_type_test.rb
+++ b/src/test/unit/boot_type_test.rb
@@ -19,8 +19,36 @@
 require File.dirname(__FILE__) + '/../test_helper'
 
 class BootTypeTest < ActiveSupport::TestCase
-  # Replace this with your real tests.
-  def test_truth
-    assert true
-  end
+  fixtures :boot_types
+
+   def setup 
+       @boot_type = BootType.new(
+            :label => 'TestBootType',
+            :proto => 'static' )
+   end
+
+   def test_valid_fails_without_label
+      @boot_type.label = ''
+
+      flunk 'Boot type must have label' if @boot_type.valid?
+   end
+
+   def test_valid_fails_without_unique_label
+     @boot_type.label = 'Static IP'
+
+      flunk 'Boot type must have unique label' if @boot_type.valid?
+   end
+
+   def test_valid_fails_with_bad_proto
+     @boot_type.proto = 'foobar'
+
+      flunk 'Boot type must have valid proto' if @boot_type.valid?
+   end
+
+   def test_find_all_for_boot_type
+      result = BootType.find(:all)
+
+      assert_equal 3, result.size, "Did not find right number of boot types"
+   end
+
 end
diff --git a/src/test/unit/cpu_test.rb b/src/test/unit/cpu_test.rb
index 9558525..c1e9e63 100644
--- a/src/test/unit/cpu_test.rb
+++ b/src/test/unit/cpu_test.rb
@@ -1,10 +1,99 @@
+# Copyright (C) 2008 Red Hat, Inc.
+# Written by Mohammed Morsi <mmorsi at redhat.com>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; version 2 of the License.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+# MA  02110-1301, USA.  A copy of the GNU General Public License is
+# also available at http://www.gnu.org/copyleft/gpl.html.
+
 require File.dirname(__FILE__) + '/../test_helper'
 
 class CpuTest < ActiveSupport::TestCase
   fixtures :cpus
+  fixtures :hosts
+ 
+  def setup
+    @cpu = Cpu.new(
+        :cpu_number => 3,
+        :core_number => 1,
+        :number_of_cores => 1,
+        :cpuid_level => 0,
+        :speed => 2048,
+        :vendor => 'foo',
+        :model  => 'bar',
+        :family => 'alpha')
+    @cpu.host = hosts(:prod_corp_com)
+  end
+
+  def test_find_cpus
+    assert_equal Cpu.find(:all).size, 8, "Failure retrieving all cpus"
+    
+    result = Cpu.find(cpus(:prod_corp_com_1).id)
+    assert_equal result.host.id, hosts(:prod_corp_com).id
+  end
+
+  def test_valid_without_host
+     @cpu.host = nil
+
+     flunk "CPUs must be associated with hosts" if @cpu.valid?
+  end
+
+  def test_valid_with_bad_cpu_numer
+     @cpu.cpu_number = -1
+   
+     flunk "cpu number must be >= 0" if @cpu.valid?
+  end
+
+  def test_valid_with_bad_core_number
+     @cpu.core_number = -1 
+
+     flunk "cpu core number must be >= 0" if @cpu.valid?
+  end
 
-  # Replace this with your real tests.
-  def test_truth
-    assert true
+  def test_valid_with_bad_number_of_cores
+     @cpu.number_of_cores = 0
+  
+     flunk "cpu number of cores must be > 0" if @cpu.valid?
   end
+
+  def test_valid_with_bad_cpuid_level
+     @cpu.cpuid_level = -1
+
+     flunk "cpu id level must be >= 0" if @cpu.valid?
+  end
+
+  def test_valid_with_bad_speed
+     @cpu.speed = 0
+ 
+     flunk "cpu speed must be > 0" if @cpu.valid?
+  end
+
+  def test_valid_without_vendor
+     @cpu.vendor = ''
+     
+     flunk "cpu vendor must be specified" if @cpu.valid?
+  end
+
+  def test_valid_without_model
+     @cpu.model = ''
+     
+     flunk "cpu model must be specified" if @cpu.valid?
+  end
+
+  def test_valid_without_family
+     @cpu.family = ''
+     
+     flunk "cpu family must be specified" if @cpu.valid?
+  end
+
 end
diff --git a/src/test/unit/help_section_test.rb b/src/test/unit/help_section_test.rb
index a0e6a08..e30345a 100644
--- a/src/test/unit/help_section_test.rb
+++ b/src/test/unit/help_section_test.rb
@@ -1,8 +1,51 @@
+# Copyright (C) 2008 Red Hat, Inc.
+# Written by Mohammed Morsi <mmorsi at redhat.com>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; version 2 of the License.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+# MA  02110-1301, USA.  A copy of the GNU General Public License is
+# also available at http://www.gnu.org/copyleft/gpl.html.
 require 'test_helper'
 
 class HelpSectionTest < ActiveSupport::TestCase
-  # Replace this with your real tests.
-  def test_truth
-    assert true
-  end
+   fixtures :help_sections
+
+   def setup
+     @help_section = HelpSection.new(
+         :controller => 'foo',
+         :action => 'bar',
+         :section => 'foobar')
+   end
+  
+   def test_unique_controller_action
+      @help_section.controller = 'dashboard'
+      @help_section.action = 'index'
+
+     flunk 'help section must have unique controller / action' if @help_section.valid?
+   end
+
+   def test_valid_fails_without_controller
+     @help_section.controller = ''
+     flunk 'help section controller must be specified' if @help_section.valid?
+   end
+
+   def test_valid_fails_without_action
+     @help_section.action = ''
+     flunk 'help section action must be specified' if @help_section.valid?
+   end
+
+   def test_valid_fails_without_section
+     @help_section.section = ''
+     flunk 'help section section must be specified' if @help_section.valid?
+   end
 end
diff --git a/src/test/unit/host_browser_identify_test.rb b/src/test/unit/host_browser_identify_test.rb
index a17ea30..9f7be1f 100644
--- a/src/test/unit/host_browser_identify_test.rb
+++ b/src/test/unit/host_browser_identify_test.rb
@@ -163,11 +163,11 @@ class HostBrowserIdentifyTest < Test::Unit::TestCase
 
   # Ensures that the server is fine when no UUID is present.
   #
-  def test_write_host_info_with_missing_uuid
-    @host_info['UUID'] = nil
+  #def test_write_host_info_with_missing_uuid
+    #@host_info['UUID'] = nil
 
-    assert_nothing_raised { @browser.write_host_info(@host_info) }
-  end
+    #assert_nothing_raised { @browser.write_host_info(@host_info) }
+  #end
 
   # Ensures that, if the hostname is missing, the server
   # raises an exception.
diff --git a/src/test/unit/host_test.rb b/src/test/unit/host_test.rb
index a4ead5d..a7458d2 100644
--- a/src/test/unit/host_test.rb
+++ b/src/test/unit/host_test.rb
@@ -21,9 +21,63 @@ require File.dirname(__FILE__) + '/../test_helper'
 
 class HostTest < Test::Unit::TestCase
   fixtures :hosts
+  fixtures :pools
+  fixtures :vms
 
-  # Replace this with your real tests.
-  def test_truth
-    assert true
+  def setup
+     @host = Host.new(
+         :uuid => 'foobar',
+         :hostname => 'foobar',
+         :arch => 'x86_64',
+         :hypervisor_type => 'kvm',
+         :state => 'available')
+
+      @host.hardware_pool = pools(:corp_com)
+  end
+
+  def test_valid_fails_without_hardware_pool
+      @host.hardware_pool = nil
+
+      flunk "Hosts must be associated w/ a hardware pool" if @host.valid?
+  end
+
+  def test_valid_fails_without_uuid
+       @host.uuid = ''
+
+       flunk "Hosts must be associated w/ a uuid" if @host.valid?
   end
+
+
+  def test_valid_fails_without_hostname
+       @host.hostname = ''
+
+       flunk "Hosts must be associated w/ a hostname" if @host.valid?
+  end
+
+
+  def test_valid_fails_without_arch
+       @host.arch = ''
+
+       flunk "Hosts must be associated w/ an arch" if @host.valid?
+  end
+
+  def test_valid_fails_with_bad_hypervisor_type
+       @host.hypervisor_type = 'foobar'
+
+       flunk "Hosts must be associated w/ a valid hypervisor type" if @host.valid?
+  end
+
+  def test_valid_fails_with_bad_state
+       @host.state = 'foobar'
+
+       flunk "Hosts must be associated w/ a valid state" if @host.valid?
+  end
+
+  def test_host_movable
+       assert_equal @host.movable?, true, "Hosts are movable unless associated w/ vms"
+
+       @host.vms << vms(:production_httpd_vm)
+       assert_equal @host.movable?, false, "Hosts with associated vms are not movable"
+  end
+
 end
diff --git a/src/test/unit/ip_address_test.rb b/src/test/unit/ip_address_test.rb
index 5ecff77..4cfc694 100644
--- a/src/test/unit/ip_address_test.rb
+++ b/src/test/unit/ip_address_test.rb
@@ -10,4 +10,9 @@ class IpAddressTest < ActiveSupport::TestCase
   def test_can_get_ipaddress_object
     assert_equal ip_addresses(:ip_v4_mailserver_nic_one).address, '172.31.0.15'
   end
+
+  def test_valid_fails_without_foreign_entity
+     @ip_address = IpAddress.new
+     flunk "Ip Address must be associated with network, nic, or bonding" if @ip_address.valid?
+  end
 end
diff --git a/src/test/unit/ip_v4_address_test.rb b/src/test/unit/ip_v4_address_test.rb
index 65a08d3..9cb7362 100644
--- a/src/test/unit/ip_v4_address_test.rb
+++ b/src/test/unit/ip_v4_address_test.rb
@@ -24,7 +24,8 @@ class IpV4AddressTest < ActiveSupport::TestCase
     @address = IpV4Address.new(:address   => '192.168.50.2',
                               :netmask   => '255.255.255.0',
                               :gateway   => '192.168.50.1',
-                              :broadcast => '192.168.50.255')
+                              :broadcast => '192.168.50.255',
+                              :nic_id => 1)
   end
 
   # Ensures that an address must be supplied.
diff --git a/src/test/unit/ip_v6_address_test.rb b/src/test/unit/ip_v6_address_test.rb
index 070f407..96f212a 100644
--- a/src/test/unit/ip_v6_address_test.rb
+++ b/src/test/unit/ip_v6_address_test.rb
@@ -23,7 +23,8 @@ class IpV6AddressTest < ActiveSupport::TestCase
   def setup
     @address = IpV6Address.new(:address => 'fe80:0:0:0:200:f8ff:fe21:67cf',
                               :gateway => ':::::::717',
-                              :prefix  => '0000:0000:0000:0000:1234:1234:1234:1234')
+                              :prefix  => '0000:0000:0000:0000:1234:1234:1234:1234',
+                              :nic_id => 1)
   end
 
   # Ensures that the address must be provided.
diff --git a/src/test/unit/nic_test.rb b/src/test/unit/nic_test.rb
index 1de1e00..0e5321e 100644
--- a/src/test/unit/nic_test.rb
+++ b/src/test/unit/nic_test.rb
@@ -22,9 +22,61 @@ require File.dirname(__FILE__) + '/../test_helper'
 class NicTest < Test::Unit::TestCase
   fixtures :ip_addresses
   fixtures :nics
+  fixtures :hosts
+  fixtures :networks
 
-  # Replace this with your real tests.
-  def test_truth
-    assert true
+  def setup
+    @nic = Nic.new(
+         :mac => '00:11:22:33:44:55',
+         :usage_type => 1,
+         :bandwidth => 100 )
+    @nic.host = hosts(:prod_corp_com)
+    @nic.physical_network = networks(:static_physical_network_one)
+
+    @ip_address = IpV4Address.new(
+         :address => '1.2.3.4',
+         :netmask => '2.3.4.5',
+         :gateway => '3.4.5.6',
+         :broadcast => '4.5.6.7' )
+
+    @nic.ip_addresses << @ip_address
+  end
+
+  def test_valid_fails_without_mac
+    @nic.mac = ''
+   
+    flunk 'Nic must have a mac' if @nic.valid?
+  end
+
+  def test_valid_fails_with_invalid_mac
+    @nic.mac = 'foobar'
+   
+    flunk 'Nic must have a valid mac' if @nic.valid?
+  end
+
+  def test_valid_fails_without_host
+    @nic.host = nil
+   
+    flunk 'Nic must have a host' if @nic.valid?
   end
+
+  def test_valid_fails_without_physical_network
+    @nic.physical_network = nil
+   
+    flunk 'Nic must have a physical network' if @nic.valid?
+  end
+
+  def test_valid_fails_with_invalid_bandwidth
+    @nic.bandwidth = -1
+   
+    flunk 'Nic bandwidth must be >= 0' if @nic.valid?
+  end
+
+  def test_static_network_nic_must_have_ip
+    @nic.physical_network = networks(:static_physical_network_one)
+    @nic.ip_addresses.delete_if { true }
+
+    flunk 'Nics assigned to static networks must have at least one ip' if @nic.valid?
+  end
+
 end
diff --git a/src/test/unit/permission_test.rb b/src/test/unit/permission_test.rb
index 5e2c7ba..0c0f4c7 100644
--- a/src/test/unit/permission_test.rb
+++ b/src/test/unit/permission_test.rb
@@ -21,6 +21,14 @@ require File.dirname(__FILE__) + '/../test_helper'
 
 class PermissionTest < Test::Unit::TestCase
   fixtures :permissions
+  fixtures :pools
+
+  def setup
+    @permission = Permission.new(
+        :uid => 'foobar',
+        :user_role => 'Super Admin' )
+    @permission.pool = pools(:root_dir_pool)
+  end
 
   # Replace this with your real tests.
   def test_simple_permission
@@ -32,4 +40,24 @@ class PermissionTest < Test::Unit::TestCase
     assert_equal permissions(:ovirtadmin_default).inherited_from_id, permissions(:ovirtadmin_root).id
     assert_equal permissions(:ovirtadmin_default).parent_permission, permissions(:ovirtadmin_root)
   end
+
+  def test_valid_fails_without_pool
+    @permission.pool = nil
+    flunk 'Permission must specify pool' if @permission.valid?
+  end
+
+  def test_valid_fails_without_uid
+    @permission.uid = ''
+    flunk 'Permission must specify uid' if @permission.valid?
+  end
+
+  def test_valid_fails_without_user_role
+    @permission.user_role = ''
+    flunk 'Permission must specify user role' if @permission.valid?
+  end
+
+  def test_valid_fails_with_invalid_user_role
+    @permission.user_role = 'foobar'
+    flunk 'Permission must specify valid user role' if @permission.valid?
+  end
 end
diff --git a/src/test/unit/pool_test.rb b/src/test/unit/pool_test.rb
index 6f20f9f..c9a5554 100644
--- a/src/test/unit/pool_test.rb
+++ b/src/test/unit/pool_test.rb
@@ -22,6 +22,12 @@ require File.dirname(__FILE__) + '/../test_helper'
 class PoolTest < Test::Unit::TestCase
   fixtures :pools
 
+  def setup
+     @pool = Pool.new(
+       :name => 'foobar',
+       :type => 'DirectoryPool' )
+  end
+
   # Replace this with your real tests.
   def test_get_name
     assert_equal(pools(:corp_com_prod).name, 'Production Operations')
@@ -30,4 +36,19 @@ class PoolTest < Test::Unit::TestCase
   def test_get_parent
     assert_equal(pools(:corp_com_prod).parent.name, 'corp.com')
   end
+
+  def test_valid_fails_without_name
+     @pool.name = ''
+     flunk "Pool must specify name" if @pool.valid?
+  end
+
+  def test_valid_fails_without_unique_name
+     @pool.name = 'root'
+     flunk "Pool must specify unique name" if @pool.valid?
+  end
+
+  def test_valid_fails_with_invalid_type
+     @pool.name = 'foobar'
+     flunk "Pool must specify valid type" if @pool.valid?
+  end
 end
diff --git a/src/test/unit/quota_test.rb b/src/test/unit/quota_test.rb
index ac0fae0..5903cc8 100644
--- a/src/test/unit/quota_test.rb
+++ b/src/test/unit/quota_test.rb
@@ -21,9 +21,40 @@ require File.dirname(__FILE__) + '/../test_helper'
 
 class QuotaTest < Test::Unit::TestCase
   fixtures :quotas
+  fixtures :pools
 
-  # Replace this with your real tests.
-  def test_truth
-    assert true
+  def setup
+    @quota = Quota.new
+    @quota.pool = pools(:root_dir_pool)
+  end
+
+  def test_valid_fails_without_pool
+    @quota.pool = nil
+    flunk "Quota's must specify pool" if @quota.valid?
+  end
+
+  def test_valid_fails_with_bad_total_vcpus
+    @quota.total_vcpus = -1
+    flunk "Quota must specify valid total vcpus" if @quota.valid?
+  end
+
+  def test_valid_fails_with_bad_total_vmemory
+    @quota.total_vmemory = -1
+    flunk "Quota must specify valid total vmemory" if @quota.valid?
+  end
+
+  def test_valid_fails_with_bad_total_vnics
+    @quota.total_vnics = -1
+    flunk "Quota must specify valid total vnics" if @quota.valid?
+  end
+
+  def test_valid_fails_with_bad_total_storage
+    @quota.total_storage = -1
+    flunk "Quota must specify valid total storage" if @quota.valid?
+  end
+
+  def test_valid_fails_with_bad_total_vms
+    @quota.total_vms = -1
+    flunk "Quota must specify valid total vms" if @quota.valid?
   end
 end
diff --git a/src/test/unit/storage_pool_test.rb b/src/test/unit/storage_pool_test.rb
index 8cc8d1b..00e1199 100644
--- a/src/test/unit/storage_pool_test.rb
+++ b/src/test/unit/storage_pool_test.rb
@@ -21,8 +21,53 @@ require File.dirname(__FILE__) + '/../test_helper'
 
 class StoragePoolTest < Test::Unit::TestCase
   fixtures :storage_pools
+  fixtures :pools
+  fixtures :vms
+
+  def setup
+    @storage_pool = StoragePool.new(
+         :type => 'IscsiStoragePool',
+         :capacity => 100, 
+         :state => 'available' )
+    @storage_pool.hardware_pool = pools(:default)
+  end
+
+  def test_valid_fails_without_hardware_pool
+    @storage_pool.hardware_pool = nil
+    flunk "Storage pool must specify hardware pool" if @storage_pool.valid?
+  end
+
+  def test_valid_fails_with_bad_type
+    @storage_pool.type = 'foobar'
+    flunk 'Storage pool must specify valid type' if @storage_pool.valid?
+  end
+
+  def test_valid_fails_with_bad_capacity
+    @storage_pool.capacity = -1
+    flunk 'Storage pool must specify valid capacity >= 0' if @storage_pool.valid?
+  end
+
+  def test_valid_fails_with_bad_state
+    @storage_pool.state = 'foobar'
+    flunk 'Storage pool must specify valid state' if @storage_pool.valid?
+  end
 
   def test_hardware_pool_relationship
     assert_equal 'corp.com', storage_pools(:corp_com_ovirtpriv_storage).hardware_pool.name
   end
+
+  def test_movable
+    assert_equal @storage_pool.movable?, true, "Storage pool without volumes should be movable"
+    
+    storage_volume = StorageVolume.new( 
+           :size => 100,
+           :type => 'IscsiStorageVolume',
+           :state => 'available' )
+    @storage_pool.storage_volumes << storage_volume
+  
+    assert_equal @storage_pool.movable?, true, "Storage pool w/ movable storage volumes should be movable"
+
+    storage_volume.vms << vms(:production_httpd_vm)
+    assert_equal @storage_pool.movable?, false, "Storage pool w/ unmovable storage volumes should not be movable"
+  end
 end
diff --git a/src/test/unit/storage_volume_test.rb b/src/test/unit/storage_volume_test.rb
index d0a89f4..7c620e3 100644
--- a/src/test/unit/storage_volume_test.rb
+++ b/src/test/unit/storage_volume_test.rb
@@ -21,9 +21,95 @@ require File.dirname(__FILE__) + '/../test_helper'
 
 class StorageVolumeTest < Test::Unit::TestCase
   fixtures :storage_volumes
+  fixtures :storage_pools
+  fixtures :vms
+
+  def setup
+     @storage_volume = StorageVolume.new( 
+           :size => 100,
+           :type => 'IscsiStorageVolume',
+           :state => 'available' )
+
+     @iscsi_storage_volume = IscsiStorageVolume.new(
+           :lun => 'foobar',
+           :size => 100,
+           :state => 'available' )
+
+     @lvm_storage_volume = LvmStorageVolume.new(
+           :lv_name => 'foobar',
+           :lv_owner_perms => '0700',
+           :lv_group_perms => '0777',
+           :lv_mode_perms => '0000' )
+        
+     @storage_volume.storage_pool = storage_pools(:corp_com_ovirtpriv_storage)
+     @iscsi_storage_volume.storage_pool = storage_pools(:corp_com_ovirtpriv_storage)
+     @lvm_storage_volume.storage_pool = storage_pools(:corp_com_dev_lvm_ovirtlvm)
+  end
 
   # Replace this with your real tests.
   def test_relationship_to_storage_pool
     assert_equal 'corp.com', storage_volumes(:ovirtpriv_storage_lun_1).storage_pool.hardware_pool.name
   end
+
+
+  def test_valid_fails_with_bad_size
+       @storage_volume.size = -1
+     
+       flunk "Storage volume size must be >= 0" if @storage_volume.valid?
+  end
+
+  def test_valid_fails_with_bad_type
+       @storage_volume.type = 'foobar'
+
+       flunk "Storage volume type must be valid" if @storage_volume.valid?
+  end
+
+  def test_valid_fails_with_bad_state
+       @storage_volume.state = 'foobar'
+       flunk "Storage volume state must be valid" if @storage_volume.valid?
+  end
+
+  def test_valid_fails_without_storage_pool
+       @storage_volume.storage_pool = nil
+ 
+       flunk "Storage volume must be associated with a storage pool" if @storage_volume.valid?
+  end
+
+  def test_valid_fails_without_lun
+       @iscsi_storage_volume.lun = ''
+  
+       flunk "iscsi storage volume lun must be valid" if @iscsi_storage_volume.valid?
+  end
+
+  def test_valid_fails_without_lv_name
+       @lvm_storage_volume.lv_name = ''
+  
+       flunk "lvm storage volume lv_name must be valid" if @lvm_storage_volume.valid?
+  end
+
+  def test_valid_fails_without_lv_owner_perms
+       @lvm_storage_volume.lv_owner_perms = ''
+  
+       flunk "lvm storage volume lv_owner_perms must be valid" if @lvm_storage_volume.valid?
+  end
+
+  def test_valid_fails_without_lv_group_perms
+       @lvm_storage_volume.lv_group_perms = ''
+  
+       flunk "lvm storage volume lv_group_perms must be valid" if @lvm_storage_volume.valid?
+  end
+
+  def test_valid_fails_without_lv_model_perms
+       @lvm_storage_volume.lv_mode_perms = ''
+  
+       flunk "lvm storage volume lv_model_perms must be valid" if @lvm_storage_volume.valid?
+  end
+
+  def test_movable
+    assert_equal @storage_volume.movable?, true, "Storage volume without vms should be movable"
+    @storage_volume.vms << vms(:production_httpd_vm)
+
+    assert_equal @storage_volume.movable?, false, "Storage volume w/ vms should not be movable"
+  end
+  
 end
diff --git a/src/test/unit/task_test.rb b/src/test/unit/task_test.rb
index 33a3bd8..ba780e7 100644
--- a/src/test/unit/task_test.rb
+++ b/src/test/unit/task_test.rb
@@ -22,6 +22,20 @@ require File.dirname(__FILE__) + '/../test_helper'
 class TaskTest < Test::Unit::TestCase
   fixtures :pools, :hosts, :vms, :permissions, :tasks
 
+  def setup
+    @task = Task.new( :type => 'HostTask', :state => 'finished' )
+  end
+
+  def test_valid_fails_with_bad_type
+    @task.type = 'foobar'
+    flunk 'Task must specify valid type' if @task.valid?
+  end
+
+  def test_valid_fails_with_bad_state
+    @task.state = 'foobar'
+    flunk 'Task must specify valid state' if @task.valid?
+  end
+
   def test_exercise_task_relationships
     assert_equal tasks(:shutdown_production_httpd_appliance_task).task_target.vm_resource_pool.name, 'corp.com production vmpool'
     assert_equal tasks(:shutdown_production_httpd_appliance_task).task_target.host.hostname, 'prod.corp.com'
diff --git a/src/test/unit/usage_test.rb b/src/test/unit/usage_test.rb
index 9a8ec9b..0cb25ae 100644
--- a/src/test/unit/usage_test.rb
+++ b/src/test/unit/usage_test.rb
@@ -1,8 +1,47 @@
+# Copyright (C) 2008 Red Hat, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; version 2 of the License.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+# MA  02110-1301, USA.  A copy of the GNU General Public License is
+# also available at http://www.gnu.org/copyleft/gpl.html.
+
 require 'test_helper'
 
 class UsageTest < ActiveSupport::TestCase
-  # Replace this with your real tests.
-  def test_truth
-    assert true
-  end
+  fixtures :usages
+
+   def setup 
+       @usage = Usage.new(
+            :label => 'TestUsage',
+            :usage => 'foobar' )
+   end
+
+   def test_valid_fails_without_label
+      @usage.label = ''
+
+      flunk 'Usage must have label' if @usage.valid?
+   end
+
+   def test_valid_fails_without_usage
+      @usage.usage = ''
+
+      flunk 'Usage must have usage' if @usage.valid?
+   end
+
+   def test_valid_fails_without_unique_usage
+     @usage.usage = 'management'
+
+      flunk 'Usage must have unique usage' if @usage.valid?
+   end
+
 end
diff --git a/src/test/unit/vm_test.rb b/src/test/unit/vm_test.rb
index a196130..d1740cb 100644
--- a/src/test/unit/vm_test.rb
+++ b/src/test/unit/vm_test.rb
@@ -21,6 +21,7 @@ require File.dirname(__FILE__) + '/../test_helper'
 
 class VmTest < Test::Unit::TestCase
   fixtures :vms
+  fixtures :pools
 
   def setup
     @vm_name = "Test"
@@ -29,6 +30,69 @@ class VmTest < Test::Unit::TestCase
       "#{Vm::IMAGE_PREFIX}@#{Vm::COBBLER_PREFIX}#{Vm::PROVISIONING_DELIMITER}#{@vm_name}"
     @cobbler_profile_provisioning =
       "#{Vm::PROFILE_PREFIX}@#{Vm::COBBLER_PREFIX}#{Vm::PROVISIONING_DELIMITER}#{@vm_name}"
+
+    @vm = Vm.new(
+       :uuid => '00000000-1111-2222-3333-444444444444',
+       :description => 'foobar',
+       :num_vcpus_allocated => 1,
+       :boot_device => 'hd', 
+       :memory_allocated_in_mb => 1,
+       :memory_allocated => 1024, 
+       :vnic_mac_addr => '11:22:33:44:55:66')
+
+    @vm.vm_resource_pool = pools(:corp_com_production_vmpool)
+  end
+
+  def test_valid_fails_with_bad_uuid
+       @vm.uuid = 'foobar'
+       flunk "Vm must specify valid uuid" if @vm.valid?
+  end
+
+  def test_valid_fails_without_description
+       @vm.description = ''
+       flunk 'Vm must specify description' if @vm.valid?
+  end
+
+  def test_valid_fails_without_num_vcpus_allocated
+       @vm.num_vcpus_allocated = nil
+       flunk 'Vm must specify num_vcpus_allocated' if @vm.valid?
+  end
+
+  def test_valid_fails_without_boot_device
+       @vm.boot_device = ''
+       flunk 'Vm must specify boot_device' if @vm.valid?
+  end
+
+  
+  def test_valid_fails_without_memory_allocated
+       @vm.memory_allocated = ''
+       flunk 'Vm must specify memory_allocated' if @vm.valid?
+  end
+  
+
+  def test_valid_fails_without_memory_allocated_in_mb
+       @vm.memory_allocated_in_mb = ''
+       flunk 'Vm must specify memory_allocated_in_mb' if @vm.valid?
+  end
+
+  def test_valid_fails_without_vnic_mac_addr
+       @vm.vnic_mac_addr = ''
+       flunk 'Vm must specify vnic_mac_addr' if @vm.valid?
+  end
+
+  def test_valid_fails_without_vm_resources_pool_id
+       @vm.vm_resource_pool_id = ''
+       flunk 'Vm must specify vm_resources_pool_id' if @vm.valid?
+  end
+
+  def test_valid_fails_with_bad_needs_restart
+       @vm.needs_restart = 5
+       flunk 'Vm must specify valid needs_restart' if @vm.valid?
+  end
+
+  def test_valid_fails_with_bad_state
+       @vm.state = 'foobar'
+       flunk 'Vm must specify valid state' if @vm.valid?
   end
 
   # Ensures that, if the VM does not contain the Cobbler prefix, that it
-- 
1.6.0.4




More information about the ovirt-devel mailing list