blob: c9d50a7c523cf01764f3676b465901ae92187e2f [file] [log] [blame]
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
#All tests inherit from cloudstackTestCase
import unittest
from marvin.cloudstackTestCase import cloudstackTestCase
from marvin.cloudstackAPI import listHosts
from marvin.cloudstackException import CloudstackAPIException
from marvin.lib.base import (VirtualMachine,
Account,
GuestOSCategory,
GuestOS,
GuestOsMapping,
NetworkOffering,
Network)
from marvin.lib.common import get_test_template, get_zone, list_virtual_machines
from marvin.lib.utils import (validateList, cleanup_resources)
from nose.plugins.attrib import attr
from marvin.codes import PASS,FAIL
class Services:
def __init__(self):
self.services = {
}
class TestGuestOS(cloudstackTestCase):
@classmethod
def setUpClass(cls):
super(TestGuestOS, cls)
cls.api_client = cls.testClient.getApiClient()
cls.services = Services().services
cls.hypervisor = cls.get_hypervisor_type()
@classmethod
def setUp(self):
self.apiclient = self.testClient.getApiClient()
#build cleanup list
self.cleanup = []
@classmethod
def tearDown(self):
try:
cleanup_resources(self.apiclient, self.cleanup)
except Exception as e:
self.debug("Warning! Exception in tearDown: %s" % e)
@classmethod
def get_hypervisor_type(cls):
"""Return the hypervisor available in setup"""
cmd = listHosts.listHostsCmd()
cmd.type = 'Routing'
cmd.listall = True
hosts = cls.api_client.listHosts(cmd)
hosts_list_validation_result = validateList(hosts)
assert hosts_list_validation_result[0] == PASS, "host list validation failed"
return hosts_list_validation_result[1]
@attr(tags=['advanced', 'simulator', 'basic', 'sg'], required_hardware=False)
def test_CRUD_operations_guest_OS(self):
"""Test add, list, update operations on guest OS
1. Add a guest OS
2. List the guest OS
3. Delete the added guest OS
"""
list_os_categories = GuestOSCategory.list(self.apiclient, name="CentOS", listall=True)
self.assertNotEqual(
len(list_os_categories),
0,
"List OS categories was empty"
)
os_category = list_os_categories[0]
self.guestos1 = GuestOS.add(
self.apiclient,
osdisplayname="testCentOS",
oscategoryid=os_category.id
)
list_guestos = GuestOS.list(self.apiclient, id=self.guestos1.id, listall=True)
self.assertNotEqual(
len(list_guestos),
0,
"List guest OS was empty"
)
guestos = list_guestos[0]
self.assertEqual(
guestos.id,
self.guestos1.id,
"Guest os ids do not match"
)
GuestOS.remove(
self.apiclient,
id=self.guestos1.id
)
@attr(tags=['advanced', 'simulator', 'basic', 'sg'], required_hardware=False)
def test_CRUD_operations_guest_OS_mapping(self):
"""Test add, list, update operations on guest OS mapping
1. Add a guest OS
2. Add a guest OS mapping
3. Delete the added guest OS and mappings
"""
list_os_categories = GuestOSCategory.list(self.apiclient, name="CentOS", listall=True)
os_category = list_os_categories[0]
self.guestos1 = GuestOS.add(
self.apiclient,
osdisplayname="testCentOS",
oscategoryid=os_category.id
)
if self.hypervisor.hypervisor.lower() not in ["xenserver", "vmware"]:
raise unittest.SkipTest("OS name check with hypervisor is supported only on XenServer and VMware")
self.guestosmapping1 = GuestOsMapping.add(
self.apiclient,
ostypeid=self.guestos1.id,
hypervisor=self.hypervisor.hypervisor,
hypervisorversion=self.hypervisor.hypervisorversion,
osnameforhypervisor="testOSMappingName"
)
list_guestos_mapping = GuestOsMapping.list(self.apiclient, id=self.guestosmapping1.id, listall=True)
self.assertNotEqual(
len(list_guestos_mapping),
0,
"List guest OS mapping was empty"
)
guestosmapping = list_guestos_mapping[0]
self.assertEqual(
guestosmapping.id,
self.guestosmapping1.id,
"Guest os mapping ids do not match"
)
GuestOsMapping.remove(
self.apiclient,
id=self.guestosmapping1.id
)
GuestOS.remove(
self.apiclient,
id=self.guestos1.id
)
@attr(tags=['advanced', 'simulator', 'basic', 'sg'], required_hardware=False)
def test_guest_OS_mapping_check_with_hypervisor(self):
"""Test add, list, update operations on guest OS mapping
1. Add a guest OS
2. Add a guest OS mapping with osmappingcheckenabled true
3. Delete the added guest OS and mappings
"""
list_os_categories = GuestOSCategory.list(self.apiclient, name="CentOS", listall=True)
os_category = list_os_categories[0]
self.guestos1 = GuestOS.add(
self.apiclient,
osdisplayname="testOSname1",
oscategoryid=os_category.id
)
if self.hypervisor.hypervisor.lower() not in ["xenserver", "vmware"]:
raise unittest.SkipTest("OS name check with hypervisor is supported only on XenServer and VMware")
if self.hypervisor.hypervisor.lower() == "xenserver":
testosname="Debian Jessie 8.0"
else:
testosname="debian4_64Guest"
self.guestosmapping1 = GuestOsMapping.add(
self.apiclient,
ostypeid=self.guestos1.id,
hypervisor=self.hypervisor.hypervisor,
hypervisorversion=self.hypervisor.hypervisorversion,
osnameforhypervisor=testosname,
osmappingcheckenabled=True
)
list_guestos_mapping = GuestOsMapping.list(self.apiclient, id=self.guestosmapping1.id, listall=True)
self.assertNotEqual(
len(list_guestos_mapping),
0,
"List guest OS mapping was empty"
)
guestosmapping = list_guestos_mapping[0]
self.assertEqual(
guestosmapping.id,
self.guestosmapping1.id,
"Guest os mapping ids do not match"
)
GuestOsMapping.remove(
self.apiclient,
id=self.guestosmapping1.id
)
GuestOS.remove(
self.apiclient,
id=self.guestos1.id
)
@attr(tags=['advanced', 'simulator', 'basic', 'sg'], required_hardware=False)
def test_guest_OS_mapping_check_with_hypervisor_failure(self):
"""Test add, list, update operations on guest OS mapping
1. Add a guest OS
2. Add a guest OS mapping with osmappingcheckenabled true
3. Delete the added guest OS and mappings
"""
list_os_categories = GuestOSCategory.list(self.apiclient, name="CentOS", listall=True)
os_category = list_os_categories[0]
self.guestos1 = GuestOS.add(
self.apiclient,
osdisplayname="testOSname2",
oscategoryid=os_category.id
)
if self.hypervisor.hypervisor.lower() not in ["xenserver", "vmware"]:
raise unittest.SkipTest("OS name check with hypervisor is supported only on XenServer and VMware")
testosname = "incorrectOSname"
try:
self.guestosmapping1 = GuestOsMapping.add(
self.apiclient,
ostypeid=self.guestos1.id,
hypervisor=self.hypervisor.hypervisor,
hypervisorversion=self.hypervisor.hypervisorversion,
osnameforhypervisor=testosname,
osmappingcheckenabled=True
)
GuestOsMapping.remove(
self.apiclient,
id=self.guestosmapping1.id
)
self.fail("Since os mapping name is wrong, this API should fail")
except CloudstackAPIException as e:
self.debug("Addition guest OS mapping failed as expected %s " % e)
GuestOS.remove(
self.apiclient,
id=self.guestos1.id
)
return