Skip to content

Commit

Permalink
Initial Checkin of Server Manager Upgrade test.
Browse files Browse the repository at this point in the history
This is the initial checkin for the contrail upgrade feature test
through server manager which is introduced from R2.20.

Change-Id: I8877c70ab3c6a318c6a2b7f57d41f987a4228f1f
  • Loading branch information
ritamganguly committed Jul 9, 2015
1 parent 59c0447 commit 9cd777f
Show file tree
Hide file tree
Showing 9 changed files with 1,699 additions and 0 deletions.
1,352 changes: 1,352 additions & 0 deletions fixtures/smgr_common.py

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions scripts/smgr/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
"""Server Manager Tests."""
Binary file added scripts/smgr/__init__.pyc
Binary file not shown.
58 changes: 58 additions & 0 deletions scripts/smgr/base.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
import test
import fixtures
import sys
import os
from common.contrail_test_init import ContrailTestInit
from smgr_common import SmgrFixture


class ServerManagerTest(test.BaseTestCase):


@classmethod
def setUpClass(self):
super(ServerManagerTest, self).setUpClass()
if 'PARAMS_FILE' in os.environ:
self.ini_file = os.environ.get('PARAMS_FILE')
else:
self.ini_file = 'sanity_params.ini'

if 'TESTBED_FILE' in os.environ:
self.testbed_py = os.environ.get('TESTBED_FILE')
else:
self.testbed_py = 'testbed.py'

if 'SMGR_FILE' in os.environ:
self.smgr_file = os.environ.get('SMGR_FILE')
else:
self.smgr_file = 'smgr_input.ini'

self.inputs = '1'
self.logger.info("Configuring setup for smgr tests.")
self.smgr_fixture = SmgrFixture(self.inputs, \
testbed_py=self.testbed_py, \
smgr_config_ini=self.smgr_file, \
test_local=False,logger = self.logger)
self.logger.info("Adding Server to smgr DB")
self.smgr_fixture.svrmgr_add_all()
print "SKIRANH.................................................completed init..............."

# end setUpClass

@classmethod
def tearDownClass(self):
super(ServerManagerTest, self).tearDownClass()
#end tearDownClass

def verify(self):
"""verfiy common resources."""
self.logger.debug("Verify the common resources")
pass

def remove_from_cleanups(self, fix):
for cleanup in self._cleanups:
if fix.cleanUp in cleanup:
self._cleanups.remove(cleanup)
break
#end remove_from_cleanups

Binary file added scripts/smgr/base.pyc
Binary file not shown.
188 changes: 188 additions & 0 deletions scripts/smgr/smgr_upgrade_tests.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,188 @@
import os
import sys
from base import ServerManagerTest
import test
import fixtures
from smgr_common import SmgrFixture
import time
import json
import pdb
import random
import string

# Build image id from the image name.
def image_name_to_id(self, image_name=None):
if image_name is None:
self.logger.error("No image name received...")
return False
release_major=image_name.split("/")[-1].split("_")[1].split("-")[0].split(".")[0]
release_minor=image_name.split("/")[-1].split("_")[1].split("-")[0].split(".")[1]
build=image_name.split("/")[-1].split("_")[1].split("-")[1].split("~")[0]
stack=image_name.split("/")[-1].split("_")[1].split("-")[1].split("~")[1]
image_id='r'+ release_major + release_minor + 'b' + build + stack
image_id=image_id + ''.join(random.choice(string.ascii_lowercase + string.digits) for _ in range(3))
self.logger.info("Image id is :: %s" % image_id)
return image_id
#end image_name_to_id

# Check if the server-manager installer version is less than or equal to R2.1
def check_if_SM_base_img_is_leq_R21(self, image_name=None):
if image_name is None:
self.logger.error("No image name received...")
return False
release_major=image_name.split("/")[-1].split("_")[1].split("-")[0].split(".")[0]
release_minor=image_name.split("/")[-1].split("_")[1].split("-")[0].split(".")[1]
if((release_major == '2') and (int(release_minor) < 20)):
return True
return False
#end check_if_SM_base_img_is_leq_R21

# Accross release contrail upgrade with server-manager upgrade.
def AR_upgrade_test_with_SM_upgrade(self):
result = True
self.logger.info("Running AR_upgrade_test_with_SM_upgrade.....")
self.smgr_fixture.uninstall_sm()
self.smgr_fixture.install_sm(SM_installer_file_path=os.environ['SM_BASE_IMG'])

pkg_file=None
try:
pkg_file=self.smgr_fixture.params['pkg_file']
except:
self.logger.error("Package file information doesn't exist in smgr_input.ini file")
return result

assert self.smgr_fixture.backup_file(pkg_file)
with open(pkg_file, 'r') as pkgf:
data = json.load(pkgf)
pkgf.close()
base_package_id=image_name_to_id(self, os.environ['AR_BASE_DEB'])
data['image'][0]['id']=base_package_id
data['image'][0]['version']=base_package_id
data['image'][0]['path']=os.environ['AR_BASE_DEB']
with open(pkg_file, 'w') as pkgf:
json.dump(data, pkgf)
pkgf.close()
self.smgr_fixture.add_pkg()

if check_if_SM_base_img_is_leq_R21(self, os.environ['SM_BASE_IMG']):
cluster_file=None
try:
cluster_file=self.smgr_fixture.params['cluster_file']
except:
self.logger.error("Cluster file information doesn't exist in smgr_input.ini file")
return result
assert self.smgr_fixture.backup_file(cluster_file)
with open(cluster_file, 'r') as clf:
data=json.load(clf)
clf.close()
data['cluster'][0]['parameters']['sequence_provisioning']='false'
with open(cluster_file, 'w') as clf:
json.dump(data, clf)
clf.close()

server_file=None
try:
server_file=self.smgr_fixture.params['server_file']
except:
self.logger.error("Server file information doesn't exist in smgr_input.ini file")
return result
with open(server_file, 'r') as sef:
data=json.load(sef)
sef.close()
for each_server in range(len(data['server'])):
self.smgr_fixture.delete_server_id_based(data['server'][each_server]['id'])
with open(cluster_file, 'r') as clf:
data=json.load(clf)
clf.close()
self.smgr_fixture.delete_cluster_id_based(data['cluster'][0]['id'])
self.smgr_fixture.add_cluster()
self.smgr_fixture.add_server()

#Reimage and Provision the servers with the base release for upgrade test to follow
assert self.smgr_fixture.setup_cluster()

self.smgr_fixture.uninstall_sm()
self.smgr_fixture.install_sm(SM_installer_file_path=os.environ['SM_UPGD_IMG'])

with open(pkg_file, 'r') as pkgf:
data = json.load(pkgf)
pkgf.close()
base_package_id=image_name_to_id(self, os.environ['AR_UPGD_DEB'])
data['image'][0]['id']=base_package_id
data['image'][0]['version']=base_package_id
data['image'][0]['path']=os.environ['AR_UPGD_DEB']
with open(pkg_file, 'w') as pkgf:
json.dump(data, pkgf)
pkgf.close()
self.smgr_fixture.add_pkg()

if check_if_SM_base_img_is_leq_R21(self, os.environ['SM_BASE_IMG']):
self.smgr_fixture.restore_file('cluster_file')
server_file=None
try:
server_file=self.smgr_fixture.params['server_file']
except:
self.logger.error("Server file information doesn't exist in smgr_input.ini file")
return result
with open(server_file, 'r') as sef:
data=json.load(sef)
sef.close()
for each_server in range(len(data['server'])):
self.smgr_fixture.delete_server_id_based(data['server'][each_server]['id'])
with open(cluster_file, 'r') as clf:
data=json.load(clf)
clf.close()
self.smgr_fixture.delete_cluster_id_based(data['cluster'][0]['id'])
self.smgr_fixture.add_cluster()
self.smgr_fixture.add_server()

#Provision to upgrade the servers with the target release for upgrade test to follow
assert self.smgr_fixture.setup_cluster(provision_only=True)

return result


# Accross release contrail upgrade without server-manager upgrade.
def AR_upgrade_test_without_SM_upgrade(self):
result = True
self.logger.info("Running AR_upgrade_test_with_SM_upgrade.....")

pkg_file=None
try:
pkg_file=self.smgr_fixture.params['pkg_file']
except:
self.logger.error("Package file information doesn't exist in smgr_input.ini file")
return result

assert self.smgr_fixture.backup_file(pkg_file)
with open(pkg_file, 'r') as pkgf:
data = json.load(pkgf)
pkgf.close()
base_package_id=image_name_to_id(self, os.environ['AR_BASE_DEB'])
data['image'][0]['id']=base_package_id
data['image'][0]['version']=base_package_id
data['image'][0]['path']=os.environ['AR_BASE_DEB']
with open(pkg_file, 'w') as pkgf:
json.dump(data, pkgf)
pkgf.close()
self.smgr_fixture.add_pkg()

#Reimage and Provision the servers with the base release for upgrade test to follow
assert self.smgr_fixture.setup_cluster()

with open(pkg_file, 'r') as pkgf:
data = json.load(pkgf)
pkgf.close()
base_package_id=image_name_to_id(self, os.environ['AR_UPGD_DEB'])
data['image'][0]['id']=base_package_id
data['image'][0]['version']=base_package_id
data['image'][0]['path']=os.environ['AR_UPGD_DEB']
with open(pkg_file, 'w') as pkgf:
json.dump(data, pkgf)
pkgf.close()
self.smgr_fixture.add_pkg()

#Provision to upgrade the servers with the target release for upgrade test to follow
assert self.smgr_fixture.setup_cluster(provision_only=True)

return result
Binary file added scripts/smgr/smgr_upgrade_tests.pyc
Binary file not shown.
100 changes: 100 additions & 0 deletions scripts/smgr/test_smgr_regression.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
from tcutils.wrappers import preposttest_wrapper
import os
import sys
from base import ServerManagerTest
import test
import fixtures
import unittest
import testtools
from common.contrail_test_init import ContrailTestInit
from smgr_common import SmgrFixture
import smgr_upgrade_tests
from fabric.api import settings, run
import time
import pdb

class SmgrRegressionTests(ServerManagerTest):

@classmethod
def setUpClass(self):
super(SmgrRegressionTests, self).setUpClass()
#end setUpClass

@classmethod
def tearDownClass(self):
super(SmgrRegressionTests, self).setUpClass()
#end tearDownClass

def runTest(self):
pass

def test_setup_cluster(self):
"""Verify setup cluster using server Manager"""
self.logger.info("Verify setup cluster using server manager ")
assert self.smgr_fixture.setup_cluster()
return True

def test_setup_cluster_with_no_pkg_during_reimage(self):
"""Verify setup cluster using server manager. Reimage with base os only."""
self.logger.info("Verify setup cluster using server manager. Reimage with base os only. ")
assert self.smgr_fixture.setup_cluster(no_reimage_pkg=True)
return True

def test_restart(self):
"""Verify restart server using server Manager"""
self.logger.info("Verify cluster_restart using server manager ")
assert self.smgr_fixture.reimage(no_pkg=True, restart_only=True)
return True

def test_node_add_delete(self):
"""Verify node add delete using server Manager"""
self.logger.info("Verify setup cluster using server manager ")
assert self.smgr_fixture.verify_node_add_delete(no_reimage_pkg=True)
return True

def test_accross_release_upgrade(self):
"""Verify accross release upgrade using Server Manager"""
self.logger.info("Verify accross release upgrade using Server Manager.")
result=False
SM_base_img=None
SM_upgd_img=None
AR_base_img=None
AR_upgd_img=None
try:
SM_base_img=os.environ['SM_BASE_IMG']
self.logger.info("%s" % SM_base_img)
except:
self.logger.error("SM_BASE_IMG is not specified as environment variable.")
self.logger.error("Exiting test")
return False
try:
SM_upgd_img=os.environ['SM_UPGD_IMG']
self.logger.info("%s" % SM_upgd_img)
except:
self.logger.error("SM_UPGD_IMG is not specified as environment variable.")
self.logger.error("Exiting test")
return False

try:
AR_base_img=os.environ['AR_BASE_DEB']
self.logger.info("%s" % AR_base_img)
except:
self.logger.error("AR_BASE_DEB is not specified as environment variable.")
self.logger.error("Exiting test")
return False
try:
AR_upgd_img=os.environ['AR_UPGD_DEB']
self.logger.info("%s" % AR_upgd_img)
except:
self.logger.error("AR_UPGD_DEB is not specified as environment variable.")
self.logger.error("Exiting test")
return False

if((SM_base_img is None) or (SM_base_img == SM_upgd_img)):
self.logger.info("Running Across release test without SM upgrade")
result=smgr_upgrade_tests.AR_upgrade_test_without_SM_upgrade(self)
else:
self.logger.info("Running Across release test with SM upgrade")
result=smgr_upgrade_tests.AR_upgrade_test_with_SM_upgrade(self)
return True

Binary file added scripts/smgr/test_smgr_regression.pyc
Binary file not shown.

0 comments on commit 9cd777f

Please sign in to comment.