CLOUDSTACK-5674: Added few fixes for CLOUDSTACK-5674

This commit is contained in:
Santhosh Edukulla 2014-03-26 10:36:13 -07:00 committed by Girish Shilamkar
parent afb58b37a3
commit e4053bc32b
3 changed files with 253 additions and 209 deletions

View File

@ -5,9 +5,9 @@
# 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
@ -17,7 +17,7 @@
"""Common functions
"""
#Import Local Modules
# Import Local Modules
from marvin.cloudstackAPI import (listConfigurations,
listPhysicalNetworks,
listRegions,
@ -58,13 +58,13 @@ from marvin.cloudstackAPI import (listConfigurations,
listResourceLimits,
listVPCOfferings)
from marvin.lib.base import (Configurations,
NetScaler,
Template,
Resources,
PhysicalNetwork,
Host)
NetScaler,
Template,
Resources,
PhysicalNetwork,
Host)
from marvin.lib.utils import (get_process_status,
xsplit)
xsplit)
from marvin.sshClient import SshClient
import random
@ -73,7 +73,7 @@ from base import *
from marvin.codes import PASS
from marvin.lib.utils import validateList
#Import System modules
# Import System modules
import time
@ -83,9 +83,14 @@ def is_config_suitable(apiclient, name, value):
@return: true if value is set, else false
"""
configs = Configurations.list(apiclient, name=name)
assert(configs is not None and isinstance(configs, list) and len(configs) > 0)
assert(
configs is not None and isinstance(
configs,
list) and len(
configs) > 0)
return configs[0].value == value
def wait_for_cleanup(apiclient, configs=None):
"""Sleeps till the cleanup configs passed"""
@ -109,6 +114,7 @@ def wait_for_cleanup(apiclient, configs=None):
time.sleep(int(config_desc.value))
return
def add_netscaler(apiclient, zoneid, NSservice):
""" Adds Netscaler device and enables NS provider"""
@ -116,11 +122,11 @@ def add_netscaler(apiclient, zoneid, NSservice):
cmd.zoneid = zoneid
physical_networks = apiclient.listPhysicalNetworks(cmd)
if isinstance(physical_networks, list):
physical_network = physical_networks[0]
physical_network = physical_networks[0]
cmd = listNetworkServiceProviders.listNetworkServiceProvidersCmd()
cmd.name = 'Netscaler'
cmd.physicalnetworkid=physical_network.id
cmd.physicalnetworkid = physical_network.id
nw_service_providers = apiclient.listNetworkServiceProviders(cmd)
if isinstance(nw_service_providers, list):
@ -132,18 +138,19 @@ def add_netscaler(apiclient, zoneid, NSservice):
netscaler_provider = apiclient.addNetworkServiceProvider(cmd1)
netscaler = NetScaler.add(
apiclient,
NSservice,
physicalnetworkid=physical_network.id
)
apiclient,
NSservice,
physicalnetworkid=physical_network.id
)
if netscaler_provider.state != 'Enabled':
cmd = updateNetworkServiceProvider.updateNetworkServiceProviderCmd()
cmd.id = netscaler_provider.id
cmd.state = 'Enabled'
apiclient.updateNetworkServiceProvider(cmd)
cmd = updateNetworkServiceProvider.updateNetworkServiceProviderCmd()
cmd.id = netscaler_provider.id
cmd.state = 'Enabled'
apiclient.updateNetworkServiceProvider(cmd)
return netscaler
def get_region(apiclient, region_id=None, region_name=None):
'''
@name : get_region
@ -181,9 +188,9 @@ def get_domain(apiclient, domain_id=None, domain_name=None):
cmd.id = domain_id
cmd_out = apiclient.listDomains(cmd)
if validateList(cmd_out)[0] != PASS:
return FAILED
if (domain_id is None and domain_name is None):
return FAILED
if (domain_id is None and domain_name is None):
return cmd_out[0]
else:
return cmd_out
@ -206,18 +213,18 @@ def get_zone(apiclient, zone_name=None, zone_id=None):
cmd_out = apiclient.listZones(cmd)
if validateList(cmd_out)[0] != PASS: return FAILED
if validateList(cmd_out)[0] != PASS:
return FAILED
'''
Check if input zone name and zone id is None,
then return first element of List Zones command
'''
if (zone_name is None and zone_id is None):
if (zone_name is None and zone_id is None):
return cmd_out[0]
else:
return cmd_out
def get_pod(apiclient, zone_id=None, pod_id=None, pod_name=None):
'''
@name : get_pod
@ -239,20 +246,23 @@ def get_pod(apiclient, zone_id=None, pod_id=None, pod_name=None):
cmd_out = apiclient.listPods(cmd)
if validateList(cmd_out)[0] != PASS: return FAILED
if (pod_id is None and pod_name is None):
if validateList(cmd_out)[0] != PASS:
return FAILED
if (pod_id is None and pod_name is None):
return cmd_out[0]
else:
return cmd_out
def get_template(apiclient, zone_id=None, ostype_desc=None, template_filter="featured", template_type='BUILTIN',
template_id=None, template_name=None, account=None, domain_id=None, project_id=None,
hypervisor=None):
def get_template(
apiclient, zone_id=None, ostype_desc=None, template_filter="featured", template_type='BUILTIN',
template_id=None, template_name=None, account=None, domain_id=None, project_id=None,
hypervisor=None):
'''
@Name : get_template
@Desc : Retrieves the template Information based upon inputs provided
Template is retrieved based upon either of the inputs matched
Template is retrieved based upon either of the inputs matched
condition
@Input : returns a template"
@Output : FAILED in case of any failure
@ -279,15 +289,14 @@ def get_template(apiclient, zone_id=None, ostype_desc=None, template_filter="fea
Get the Templates pertaining
'''
list_templatesout = apiclient.listTemplates(cmd)
if validateList(list_templatesout)[0] != PASS: return FAILED
if validateList(list_templatesout)[0] != PASS:
return FAILED
for template in list_templatesout:
if template.isready and template.templatetype == template_type:
return template
'''
Return Failed if None of the templates matched
'''
return FAILED
return list_templatesout[0]
def download_systemplates_sec_storage(server, services):
"""Download System templates on sec storage"""
@ -295,29 +304,29 @@ def download_systemplates_sec_storage(server, services):
try:
# Login to management server
ssh = SshClient(
server["ipaddress"],
server["port"],
server["username"],
server["password"]
)
server["ipaddress"],
server["port"],
server["username"],
server["password"]
)
except Exception:
raise Exception("SSH access failed for server with IP address: %s" %
server["ipaddess"])
server["ipaddess"])
# Mount Secondary Storage on Management Server
cmds = [
"mkdir -p %s" % services["mnt_dir"],
"mount -t nfs %s:/%s %s" % (
services["sec_storage"],
services["path"],
services["mnt_dir"]
),
"%s -m %s -u %s -h %s -F" % (
services["command"],
services["mnt_dir"],
services["download_url"],
services["hypervisor"]
)
]
"mkdir -p %s" % services["mnt_dir"],
"mount -t nfs %s:/%s %s" % (
services["sec_storage"],
services["path"],
services["mnt_dir"]
),
"%s -m %s -u %s -h %s -F" % (
services["command"],
services["mnt_dir"],
services["download_url"],
services["hypervisor"]
)
]
for c in cmds:
result = ssh.execute(c)
@ -339,84 +348,86 @@ def wait_for_ssvms(apiclient, zoneid, podid, interval=60):
time.sleep(interval)
timeout = 40
while True:
list_ssvm_response = list_ssvms(
apiclient,
systemvmtype='secondarystoragevm',
zoneid=zoneid,
podid=podid
)
ssvm = list_ssvm_response[0]
if ssvm.state != 'Running':
# Sleep to ensure SSVMs are Up and Running
time.sleep(interval)
timeout = timeout - 1
elif ssvm.state == 'Running':
break
elif timeout == 0:
raise Exception("SSVM failed to come up")
break
list_ssvm_response = list_ssvms(
apiclient,
systemvmtype='secondarystoragevm',
zoneid=zoneid,
podid=podid
)
ssvm = list_ssvm_response[0]
if ssvm.state != 'Running':
# Sleep to ensure SSVMs are Up and Running
time.sleep(interval)
timeout = timeout - 1
elif ssvm.state == 'Running':
break
elif timeout == 0:
raise Exception("SSVM failed to come up")
break
timeout = 40
while True:
list_ssvm_response = list_ssvms(
apiclient,
systemvmtype='consoleproxy',
zoneid=zoneid,
podid=podid
)
cpvm = list_ssvm_response[0]
if cpvm.state != 'Running':
# Sleep to ensure SSVMs are Up and Running
time.sleep(interval)
timeout = timeout - 1
elif cpvm.state == 'Running':
break
elif timeout == 0:
raise Exception("CPVM failed to come up")
break
list_ssvm_response = list_ssvms(
apiclient,
systemvmtype='consoleproxy',
zoneid=zoneid,
podid=podid
)
cpvm = list_ssvm_response[0]
if cpvm.state != 'Running':
# Sleep to ensure SSVMs are Up and Running
time.sleep(interval)
timeout = timeout - 1
elif cpvm.state == 'Running':
break
elif timeout == 0:
raise Exception("CPVM failed to come up")
break
return
def get_builtin_template_info(apiclient, zoneid):
"""Returns hypervisor specific infor for templates"""
list_template_response = Template.list(
apiclient,
templatefilter='featured',
zoneid=zoneid,
)
apiclient,
templatefilter='featured',
zoneid=zoneid,
)
for b_template in list_template_response:
if b_template.templatetype == 'BUILTIN':
break
if b_template.templatetype == 'BUILTIN':
break
extract_response = Template.extract(apiclient,
b_template.id,
'HTTP_DOWNLOAD',
zoneid)
b_template.id,
'HTTP_DOWNLOAD',
zoneid)
return extract_response.url, b_template.hypervisor, b_template.format
def download_builtin_templates(apiclient, zoneid, hypervisor, host,
linklocalip, interval=60):
linklocalip, interval=60):
"""After setup wait till builtin templates are downloaded"""
# Change IPTABLES Rules
get_process_status(
host["ipaddress"],
host["port"],
host["username"],
host["password"],
linklocalip,
"iptables -P INPUT ACCEPT"
)
host["ipaddress"],
host["port"],
host["username"],
host["password"],
linklocalip,
"iptables -P INPUT ACCEPT"
)
time.sleep(interval)
# Find the BUILTIN Templates for given Zone, Hypervisor
list_template_response = list_templates(
apiclient,
hypervisor=hypervisor,
zoneid=zoneid,
templatefilter='self'
)
apiclient,
hypervisor=hypervisor,
zoneid=zoneid,
templatefilter='self'
)
if not isinstance(list_template_response, list):
raise Exception("Failed to download BUILTIN templates")
@ -425,18 +436,18 @@ def download_builtin_templates(apiclient, zoneid, hypervisor, host,
templateid = None
for template in list_template_response:
if template.templatetype == "BUILTIN":
templateid = template.id
templateid = template.id
# Sleep to ensure that template is in downloading state after adding
# Sec storage
time.sleep(interval)
while True:
template_response = list_templates(
apiclient,
id=templateid,
zoneid=zoneid,
templatefilter='self'
)
apiclient,
id=templateid,
zoneid=zoneid,
templatefilter='self'
)
template = template_response[0]
# If template is ready,
# template.status = Download Complete
@ -455,7 +466,7 @@ def download_builtin_templates(apiclient, zoneid, hypervisor, host,
def update_resource_limit(apiclient, resourcetype, account=None,
domainid=None, max=None, projectid=None):
domainid=None, max=None, projectid=None):
"""Updates the resource limit to 'max' for given account"""
cmd = updateResourceLimit.updateResourceLimitCmd()
@ -729,6 +740,7 @@ def list_resource_limits(apiclient, **kwargs):
[setattr(cmd, k, v) for k, v in kwargs.items()]
return(apiclient.listResourceLimits(cmd))
def list_vpc_offerings(apiclient, **kwargs):
""" Lists VPC offerings """
@ -736,62 +748,66 @@ def list_vpc_offerings(apiclient, **kwargs):
[setattr(cmd, k, v) for k, v in kwargs.items()]
return(apiclient.listVPCOfferings(cmd))
def update_resource_count(apiclient, domainid, accountid=None,
projectid=None, rtype=None):
"""updates the resource count
0 - VM
1 - Public IP
2 - Volume
3 - Snapshot
4 - Template
5 - Projects
6 - Network
7 - VPC
8 - CPUs
9 - RAM
10 - Primary (shared) storage (Volumes)
11 - Secondary storage (Snapshots, Templates & ISOs)
"""
"""updates the resource count
0 - VM
1 - Public IP
2 - Volume
3 - Snapshot
4 - Template
5 - Projects
6 - Network
7 - VPC
8 - CPUs
9 - RAM
10 - Primary (shared) storage (Volumes)
11 - Secondary storage (Snapshots, Templates & ISOs)
"""
Resources.updateCount(apiclient,
domainid=domainid,
account=accountid if accountid else None,
projectid=projectid if projectid else None,
resourcetype=rtype if rtype else None
)
return
Resources.updateCount(apiclient,
domainid=domainid,
account=accountid if accountid else None,
projectid=projectid if projectid else None,
resourcetype=rtype if rtype else None
)
return
def find_suitable_host(apiclient, vm):
"""Returns a suitable host for VM migration"""
"""Returns a suitable host for VM migration"""
hosts = Host.list(apiclient,
virtualmachineid=vm.id,
listall=True)
hosts = Host.list(apiclient,
virtualmachineid=vm.id,
listall=True)
if isinstance(hosts, list):
assert len(hosts) > 0, "List host should return valid response"
else:
raise Exception("Exception: List host should return valid response")
return hosts[0]
if isinstance(hosts, list):
assert len(hosts) > 0, "List host should return valid response"
else:
raise Exception("Exception: List host should return valid response")
return hosts[0]
def get_resource_type(resource_id):
"""Returns resource type"""
"""Returns resource type"""
lookup = { 0: "VM",
1: "Public IP",
2: "Volume",
3: "Snapshot",
4: "Template",
5: "Projects",
6: "Network",
7: "VPC",
8: "CPUs",
9: "RAM",
10: "Primary (shared) storage (Volumes)",
11: "Secondary storage (Snapshots, Templates & ISOs)"
}
lookup = {0: "VM",
1: "Public IP",
2: "Volume",
3: "Snapshot",
4: "Template",
5: "Projects",
6: "Network",
7: "VPC",
8: "CPUs",
9: "RAM",
10: "Primary (shared) storage (Volumes)",
11: "Secondary storage (Snapshots, Templates & ISOs)"
}
return lookup[resource_id]
return lookup[resource_id]
def get_portable_ip_range_services(config):
""" Reads config values related to portable ip and fills up
@ -828,6 +844,7 @@ def get_portable_ip_range_services(config):
return services
def get_free_vlan(apiclient, zoneid):
"""
Find an unallocated VLAN outside the range allocated to the physical network.
@ -837,23 +854,25 @@ def get_free_vlan(apiclient, zoneid):
@return: physical_network, shared_vlan_tag
"""
list_physical_networks_response = PhysicalNetwork.list(
apiclient,
zoneid=zoneid
)
apiclient,
zoneid=zoneid
)
assert isinstance(list_physical_networks_response, list)
assert len(list_physical_networks_response) > 0, "No physical networks found in zone %s" % zoneid
assert len(
list_physical_networks_response) > 0, "No physical networks found in zone %s" % zoneid
physical_network = list_physical_networks_response[0]
networks = list_networks(apiclient, zoneid= zoneid, type='Shared')
networks = list_networks(apiclient, zoneid=zoneid, type='Shared')
usedVlanIds = []
if isinstance(networks, list) and len(networks) > 0:
usedVlanIds = [int(nw.vlan) for nw in networks if nw.vlan!="untagged"]
usedVlanIds = [int(nw.vlan)
for nw in networks if nw.vlan != "untagged"]
if hasattr(physical_network, "vlan") is False:
while True:
shared_ntwk_vlan = random.randrange(1,4095)
shared_ntwk_vlan = random.randrange(1, 4095)
if shared_ntwk_vlan in usedVlanIds:
continue
else:
@ -862,9 +881,11 @@ def get_free_vlan(apiclient, zoneid):
vlans = xsplit(physical_network.vlan, ['-', ','])
assert len(vlans) > 0
assert int(vlans[0]) < int(vlans[-1]), "VLAN range %s was improperly split" % physical_network.vlan
assert int(vlans[0]) < int(
vlans[-1]), "VLAN range %s was improperly split" % physical_network.vlan
retriesCount = 20 #Assuming random function will give different integer each time
# Assuming random function will give different integer each time
retriesCount = 20
shared_ntwk_vlan = None
@ -886,6 +907,7 @@ def get_free_vlan(apiclient, zoneid):
return physical_network, shared_ntwk_vlan
def setNonContiguousVlanIds(apiclient, zoneid):
"""
Form the non contiguous ranges based on currently assigned range in physical network
@ -898,14 +920,16 @@ def setNonContiguousVlanIds(apiclient, zoneid):
zoneid=zoneid
)
assert isinstance(list_physical_networks_response, list)
assert len(list_physical_networks_response) > 0, "No physical networks found in zone %s" % zoneid
assert len(
list_physical_networks_response) > 0, "No physical networks found in zone %s" % zoneid
for physical_network in list_physical_networks_response:
vlans = xsplit(physical_network.vlan, ['-', ','])
assert len(vlans) > 0
assert int(vlans[0]) < int(vlans[-1]), "VLAN range %s was improperly split" % physical_network.vlan
assert int(vlans[0]) < int(
vlans[-1]), "VLAN range %s was improperly split" % physical_network.vlan
# Keep some gap between existing vlan and the new vlans which we are going to add
# So that they are non contiguous
@ -914,30 +938,38 @@ def setNonContiguousVlanIds(apiclient, zoneid):
non_contig_start_vlan_id = int(vlans[0]) - 6
# Form ranges which are consecutive to existing ranges but not immediately contiguous
# There should be gap in between existing range and new non contiguous ranage
# There should be gap in between existing range and new non contiguous
# ranage
# If you can't add range after existing range, because it's crossing 4095, then
# select VLAN ids before the existing range such that they are greater than 0, and
# then add this non contiguoud range
vlan = { "partial_range": ["",""], "full_range": ""}
vlan = {"partial_range": ["", ""], "full_range": ""}
if non_contig_end_vlan_id < 4095:
vlan["partial_range"][0] = str(non_contig_end_vlan_id - 4) + '-' + str(non_contig_end_vlan_id - 3)
vlan["partial_range"][1] = str(non_contig_end_vlan_id - 1) + '-' + str(non_contig_end_vlan_id)
vlan["full_range"] = str(non_contig_end_vlan_id - 4) + '-' + str(non_contig_end_vlan_id)
vlan["partial_range"][0] = str(
non_contig_end_vlan_id - 4) + '-' + str(non_contig_end_vlan_id - 3)
vlan["partial_range"][1] = str(
non_contig_end_vlan_id - 1) + '-' + str(non_contig_end_vlan_id)
vlan["full_range"] = str(
non_contig_end_vlan_id - 4) + '-' + str(non_contig_end_vlan_id)
NonContigVlanIdsAcquired = True
elif non_contig_start_vlan_id > 0:
vlan["partial_range"][0] = str(non_contig_start_vlan_id) + '-' + str(non_contig_start_vlan_id + 1)
vlan["partial_range"][1] = str(non_contig_start_vlan_id + 3) + '-' + str(non_contig_start_vlan_id + 4)
vlan["full_range"] = str(non_contig_start_vlan_id) + '-' + str(non_contig_start_vlan_id + 4)
vlan["partial_range"][0] = str(
non_contig_start_vlan_id) + '-' + str(non_contig_start_vlan_id + 1)
vlan["partial_range"][1] = str(
non_contig_start_vlan_id + 3) + '-' + str(non_contig_start_vlan_id + 4)
vlan["full_range"] = str(
non_contig_start_vlan_id) + '-' + str(non_contig_start_vlan_id + 4)
NonContigVlanIdsAcquired = True
else:
NonContigVlanIdsAcquired = False
# If failed to get relevant vlan ids, continue to next physical network
# else break from loop as we have hot the non contiguous vlan ids for the test purpose
# else break from loop as we have hot the non contiguous vlan ids for
# the test purpose
if not NonContigVlanIdsAcquired:
continue

View File

@ -36,7 +36,7 @@ from marvin.codes import(
NO,
SUCCESS,
FAILED
)
)
import sys
import time
import os
@ -47,6 +47,7 @@ from sys import exit
class MarvinInit:
def __init__(self, config_file,
deploy_dc_flag=None,
test_mod_name="deploydc",
@ -59,7 +60,7 @@ class MarvinInit:
self.__testClient = None
self.__tcResultFile = None
self.__testDataFilePath = None
self.__zoneForTests = None
self.__zoneForTests = zone
self.__parsedConfig = None
def __parseConfig(self):
@ -71,11 +72,13 @@ class MarvinInit:
'''
try:
if not os.path.isfile(self.__configFile):
print "\n=== Marvin Parse Config Init Failed ==="
return FAILED
self.__parsedConfig = configGenerator.\
getSetupConfig(self.__configFile)
print "\n=== Marvin Parse Config Successful ==="
return SUCCESS
except Exception, e:
except Exception as e:
print "\nException Occurred Under __parseConfig : " \
"%s" % GetDetailExceptionInfo(e)
return FAILED
@ -123,7 +126,7 @@ class MarvinInit:
(self.__deployDC() != FAILED)):
return SUCCESS
return FAILED
except Exception, e:
except Exception as e:
print "\n Exception Occurred Under init " \
"%s" % GetDetailExceptionInfo(e)
return FAILED
@ -150,9 +153,10 @@ class MarvinInit:
if ret != FAILED:
self.__logFolderPath = log_obj.getLogFolderPath()
self.__tcRunLogger = log_obj.getLogger()
print "\n=== Marvin Init Logging Sccessful==="
return SUCCESS
return FAILED
except Exception, e:
except Exception as e:
print "\n Exception Occurred Under __initLogging " \
":%s" % GetDetailExceptionInfo(e)
return FAILED
@ -176,7 +180,7 @@ class MarvinInit:
return self.__testClient.createTestClient()
else:
return FAILED
except Exception, e:
except Exception as e:
print "\n Exception Occurred Under __createTestClient : %s" % \
GetDetailExceptionInfo(e)
return FAILED
@ -191,8 +195,9 @@ class MarvinInit:
if ((self.__parsedConfig.TestData is not None) and
(self.__parsedConfig.TestData.Path is not None)):
self.__testDataFilePath = self.__parsedConfig.TestData.Path
print "\n=== Marvin TestData Successful==="
return SUCCESS
except Exception, e:
except Exception as e:
print "\nException Occurred Under __setTestDataPath : %s" % \
GetDetailExceptionInfo(e)
return FAILED
@ -215,7 +220,7 @@ class MarvinInit:
else:
print "Deploy DC Failed"
return ret
except Exception, e:
except Exception as e:
print "\n Exception Occurred Under __deployDC : %s" % \
GetDetailExceptionInfo(e)
return FAILED

View File

@ -61,6 +61,7 @@ class MarvinPlugin(Plugin):
self.__startTime = None
self.__testName = None
self.__tcRunLogger = None
self.__testModName = None
Plugin.__init__(self)
def configure(self, options, conf):
@ -80,7 +81,7 @@ class MarvinPlugin(Plugin):
self.__zoneForTests = options.zone
self.conf = conf
if self.startMarvin() == FAILED:
print "\nExiting Marvin. Please Check"
print "\nStarting Marvin Failed, exiting. Please Check"
exit(1)
def options(self, parser, env):
@ -147,9 +148,9 @@ class MarvinPlugin(Plugin):
self._injectClients(cls)
def beforeTest(self, test):
#self.__testModName = test.__str__()
self.__testName = test.__str__().split()[0]
self.__testClient.identifier = '-'.\
join([self.__identifier, self.__testName])
self.__testClient.identifier = '-'.join([self.__identifier, self.__testName])
if self.__tcRunLogger:
self.__tcRunLogger.name = test.__str__()
@ -164,7 +165,7 @@ class MarvinPlugin(Plugin):
self.__startTime = time.time()
def printMsg(self, status, tname, err):
if self.__tcRunLogger:
if status in [FAILED, EXCEPTION] and self.__tcRunLogger:
self.__tcRunLogger.\
fatal("%s: %s: %s" % (status,
tname,
@ -173,11 +174,11 @@ class MarvinPlugin(Plugin):
self.__resultStream.write(write_str)
print write_str
def addSuccess(test):
def addSuccess(self, test, capt):
'''
Adds the Success Messages to logs
'''
printMsg(SUCCESS, self.__testName, "Test Case Passed")
self.printMsg(SUCCESS, self.__testName, "Test Case Passed")
self.__testresult = SUCCESS
def handleError(self, test, err):
@ -222,19 +223,19 @@ class MarvinPlugin(Plugin):
'''
try:
obj_marvininit = MarvinInit(self.__configFile,
self.__deployDcFlag,
None,
self.__zoneForTests)
self.__deployDcFlag,
None,
self.__zoneForTests)
if obj_marvininit and obj_marvininit.init() == SUCCESS:
self.__testClient = temp_obj.getTestClient()
self.__tcRunLogger = temp_obj.getLogger()
self.__parsedConfig = temp_obj.getParsedConfig()
self.__resultStream = temp_obj.getResultFile()
self.__logFolderPath = temp_obj.getLogFolderPath()
self.__testClient = obj_marvininit.getTestClient()
self.__tcRunLogger = obj_marvininit.getLogger()
self.__parsedConfig = obj_marvininit.getParsedConfig()
self.__resultStream = obj_marvininit.getResultFile()
self.__logFolderPath = obj_marvininit.getLogFolderPath()
self.__testRunner = nose.core.\
TextTestRunner(stream=self.__resultStream,
descriptions=True,
verbosity=2)
TextTestRunner(stream=self.__resultStream,
descriptions=True,
verbosity=2)
return SUCCESS
return FAILED
except Exception as e:
@ -274,3 +275,9 @@ class MarvinPlugin(Plugin):
self.__testClient.getUserApiClient(test.UserName,
test.DomainName,
test.AcctType)
def finalize(self, result):
src = self.__logFolderPath.strip("//")
dst = os.path.split(src)[0] + "/" + self.__testModName
os.system("mv " + src + " " + dst)
print "===Final Results: %s===" % str(dst)