cloudstack/tools/marvin/marvin/testSetupSuccess.py

128 lines
5.0 KiB
Python

# 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.
from marvin.cloudstackTestCase import cloudstackTestCase
from marvin.cloudstackAPI import listSystemVms, listZones, listTemplates
from marvin.lib.vcenter import Vcenter
from marvin.lib.common import verifyVCenterPortGroups
from marvin.codes import (PUBLIC_TRAFFIC,
MANAGEMENT_TRAFFIC,
STORAGE_TRAFFIC,
PASS,
VMWAREDVS)
from time import sleep as delay
class TestSetupSuccess(cloudstackTestCase):
"""
Test to verify if the cloudstack is ready to launch tests upon
1. Verify that system VMs are up and running in all zones
2. Verify that built-in templates are Ready in all zones
"""
@classmethod
def setUpClass(cls):
testClient = super(TestSetupSuccess, cls).getClsTestClient()
cls.apiClient = testClient.getApiClient()
cls.hypervisor = testClient.getHypervisorInfo()
zones = listZones.listZonesCmd()
cls.zones_list = cls.apiClient.listZones(zones)
cls.retry = 50
def test_systemVmReady(self):
"""
system VMs need to be ready and Running for each zone in cloudstack
"""
for z in self.zones_list:
retry = self.retry
while retry != 0:
self.debug("looking for system VMs in zone: %s, %s" %
(z.id, z.name))
sysvms = listSystemVms.listSystemVmsCmd()
sysvms.zoneid = z.id
sysvms.state = 'Running'
sysvms_list = self.apiClient.listSystemVms(sysvms)
if sysvms_list is not None and len(sysvms_list) == 2:
assert len(sysvms_list) == 2
self.debug("found %d system VMs running {%s}" %
(len(sysvms_list), sysvms_list))
break
retry = retry - 1
delay(60) # wait a minute for retry
self.assertNotEqual(retry, 0,
"system VMs not Running in zone %s" %
z.name)
def test_templateBuiltInReady(self):
"""
built-in templates CentOS to be ready
"""
for z in self.zones_list:
retry = self.retry
while retry != 0:
self.debug("Looking for at least one ready builtin template")
templates = listTemplates.listTemplatesCmd()
templates.templatefilter = 'featured'
templates.listall = 'true'
templates_list = self.apiClient.listTemplates(templates)
if templates_list is not None:
builtins = [tmpl
for tmpl in templates_list
if tmpl.templatetype == 'BUILTIN'
and tmpl.isready]
if len(builtins) > 0:
self.debug("Found %d builtins ready for use %s" %
(len(builtins), builtins))
break
retry = retry - 1
delay(60) # wait a minute for retry
self.assertNotEqual(retry, 0,
"builtIn templates not ready in zone %s" %
z.name)
def test_VCenterPorts(self):
""" Test if correct VCenter ports are created for all traffic types """
if self.hypervisor.lower() != "vmware":
self.skipTest("This test is intended only for vmware")
zoneDict = {}
for zone in self.config.zones:
zoneDict[zone.name] = zone.vmwaredc
for zone in self.zones_list:
vmwaredc = zoneDict[zone.name]
vcenterObj = Vcenter(
vmwaredc.vcenter,
vmwaredc.username,
vmwaredc.password)
response = verifyVCenterPortGroups(
self.apiClient,
vcenterObj,
traffic_types_to_validate=[
PUBLIC_TRAFFIC,
MANAGEMENT_TRAFFIC,
STORAGE_TRAFFIC],
zoneid=zone.id,
switchTypes=[VMWAREDVS])
self.assertEqual(response[0], PASS, response[1])
@classmethod
def tearDownClass(cls):
pass