Skip to content

Commit

Permalink
add 1.8.1 upgrade tests
Browse files Browse the repository at this point in the history
Change-Id: I407cf1f6407f5b00d634b5dacdce7ed279b21b0c
Reviewed-on: http://review.couchbase.org/14367
Reviewed-by: Keith Batten <kbatten@gmail.com>
Tested-by: Keith Batten <kbatten@gmail.com>
  • Loading branch information
kbatten committed Mar 28, 2012
1 parent 03c9501 commit 9b21ecf
Show file tree
Hide file tree
Showing 4 changed files with 116 additions and 18 deletions.
18 changes: 14 additions & 4 deletions TestInput.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,10 +37,20 @@ def _parse_param(value):
try:
return int(value)
except ValueError:
try:
return float(value)
except ValueError:
return value
pass

try:
return float(value)
except ValueError:
pass

if value.lower() == "false":
return False

if value.lower() == "true":
return True

return value


class TestInputServer(object):
Expand Down
19 changes: 19 additions & 0 deletions conf/py-linux-upgrade.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
upgradetests.SingleNodeUpgradeTests:
test_upgrade,initial_version=1.7.0,initialize_cluster=true,create_buckets=true,insert_data=true
test_upgrade,initial_version=1.7.1,initialize_cluster=true,create_buckets=true,insert_data=true
test_upgrade,initial_version=1.7.1.1,initialize_cluster=true,create_buckets=true,insert_data=true
test_upgrade,initial_version=1.8.0r-55,initialize_cluster=true,create_buckets=true,insert_data=true

upgradetests.MultipleNodeUpgradeTests:
test_upgrade,initial_version=1.6.5.4,create_buckets=True,insert_data=True,start_upgraded_first=True,load_ratio=10,online_upgrade=False,upgrade_path=1.7.0
test_upgrade,initial_version=1.6.5.4,create_buckets=True,insert_data=True,start_upgraded_first=True,load_ratio=10,online_upgrade=False,upgrade_path=1.7.1.1
test_upgrade,initial_version=1.6.5.4,create_buckets=True,insert_data=True,start_upgraded_first=True,load_ratio=10,online_upgrade=False,upgrade_path=1.7.1.1,1.7.2
test_upgrade,initial_version=1.6.5.4,create_buckets=True,insert_data=True,start_upgraded_first=True,load_ratio=10,online_upgrade=False,upgrade_path=1.7.0,1.7.2
test_upgrade,initial_version=1.7.0,create_buckets=True,insert_data=True,start_upgraded_first=True,load_ratio=10,online_upgrade=False,upgrade_path=1.7.1.1,1.7.2,1.8.0r-55
test_upgrade,initial_version=1.7.0,create_buckets=True,insert_data=True,start_upgraded_first=False,load_ratio=10,online_upgrade=False,upgrade_path=1.7.1.1,1.7.2,1.8.0r-55

upgradetests.MultipleNodeUpgradeTests:
test_upgrade,initial_version=1.7.2,create_buckets=True,insert_data=True,start_upgraded_first=False,load_ratio=10,online_upgrade=True
test_upgrade,initial_version=1.7.2,create_buckets=True,insert_data=True,start_upgraded_first=True,load_ratio=10,online_upgrade=True
test_upgrade,initial_version=1.8.0r-55,create_buckets=True,insert_data=True,start_upgraded_first=False,load_ratio=10,online_upgrade=True
test_upgrade,initial_version=1.8.0r-55,create_buckets=True,insert_data=True,start_upgraded_first=True,load_ratio=10,online_upgrade=True
95 changes: 82 additions & 13 deletions pytests/upgradetests.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,9 @@ def _get_build(master, version, is_amazon=False):
builds, changes = BuildQuery().get_all_builds()
log.info("finding build {0} for machine {1}".format(version, master))
result = re.search('r', version)
product = 'membase-server-enterprise'
if re.search('1.8',version):
if version.startswith("1.6") or version.startswith("1.7"):
product = 'membase-server-enterprise'
else:
product = 'couchbase-server-enterprise'

if result is None:
Expand Down Expand Up @@ -75,22 +76,37 @@ def _install_and_upgrade(self, initial_version='1.6.5.3',
servers = input.servers
server = servers[0]
save_upgrade_config = False
if re.search('1.8',input.test_params['version']):
if initial_version.startswith("1.7") and input.test_params['version'].startswith("1.8"):
save_upgrade_config = True
is_amazon = False
if input.test_params.get('amazon',False):
is_amazon = True
if initial_version.startswith("1.6") or initial_version.startswith("1.7"):
product = 'membase-server-enterprise'
else:
product = 'couchbase-server-enterprise'
remote = RemoteMachineShellConnection(server)
rest = RestConnection(server)
info = remote.extract_remote_info()
remote.membase_uninstall()
remote.couchbase_uninstall()
builds, changes = BuildQuery().get_all_builds()
older_build = BuildQuery().find_membase_release_build(deliverable_type=info.deliverable_type,
os_architecture=info.architecture_type,
build_version=initial_version,
product='membase-server-enterprise', is_amazon=is_amazon)
remote.execute_command('/etc/init.d/membase-server stop')
# check to see if we are installing from latestbuilds or releases
# note: for newer releases (1.8.0) even release versions can have the
# form 1.8.0r-55
if re.search('r', initial_version):
builds, changes = BuildQuery().get_all_builds()
older_build = BuildQuery().find_membase_build(builds, deliverable_type=info.deliverable_type,
os_architecture=info.architecture_type,
build_version=initial_version,
product=product, is_amazon=is_amazon)
else:
older_build = BuildQuery().find_membase_release_build(deliverable_type=info.deliverable_type,
os_architecture=info.architecture_type,
build_version=initial_version,
product=product, is_amazon=is_amazon)
remote.stop_membase()
remote.stop_couchbase()
remote.download_build(older_build)
#now let's install ?
remote.membase_install(older_build)
Expand Down Expand Up @@ -355,6 +371,18 @@ def test_single_node_upgrade_s5(self):

#TODO : expect a message like 'package membase-server-1.7~basestar-1.x86_64 is already installed'

def test_upgrade(self):
# singlenode paramaterized install
input = TestInputSingleton.input
initial_version = input.param('initial_version', '1.6.5.3')
initialize_cluster = input.param('initialize_cluster', True)
create_buckets = input.param('create_buckets', True)
insert_data = input.param('insert_data', True)
self._install_and_upgrade(initial_version=initial_version,
initialize_cluster=initialize_cluster,
create_buckets=create_buckets,
insert_data=insert_data)


class MultipleNodeUpgradeTests(unittest.TestCase):
#in a 3 node cluster with no buckets shut down all the nodes update all
Expand Down Expand Up @@ -534,6 +562,27 @@ def test_multiple_version_upgrade_start_all_9(self):
upgrade_path = ['1.7.2']
self._install_and_upgrade('1.7.1.1', True, True, False, 10, False, upgrade_path)

def test_upgrade(self):
# multinode paramaterized install
input = TestInputSingleton.input
initial_version = input.param('initial_version', '1.6.5.3')
create_buckets = input.param('create_buckets', True)
insert_data = input.param('insert_data', True)
start_upgraded_first = input.param('start_upgraded_first', True)
load_ratio = input.param('load_ratio', -1)
online_upgrade = input.param('online_upgrade', False)
upgrade_path = input.param('upgrade_path', [])
if upgrade_path:
upgrade_path = upgrade_path.split(",")

self._install_and_upgrade(initial_version=initial_version,
create_buckets=create_buckets,
insert_data=insert_data,
start_upgraded_first=start_upgraded_first,
load_ratio=load_ratio,
roll_upgrade=online_upgrade,
upgrade_path=upgrade_path)

#do some bucket/init related operation
#now only option x nodes
#power on upgraded ones first and then the non-upgraded ones
Expand All @@ -551,27 +600,43 @@ def _install_and_upgrade(self, initial_version='1.6.5.3',
inserted_keys = []
log = logger.Logger.get_logger()
if roll_upgrade:
log.info("performing a rolling upgrade")
log.info("performing an online upgrade")
input = TestInputSingleton.input
rest_settings = input.membase_settings
servers = input.servers
save_upgrade_config = False
is_amazon = False
if input.test_params.get('amazon',False):
is_amazon = True
if initial_version.startswith("1.6") or initial_version.startswith("1.7"):
product = 'membase-server-enterprise'
else:
product = 'couchbase-server-enterprise'
# install older build on all nodes
for server in servers:
remote = RemoteMachineShellConnection(server)
rest = RestConnection(server)
info = remote.extract_remote_info()
older_build = BuildQuery().find_membase_release_build(deliverable_type=info.deliverable_type,
# check to see if we are installing from latestbuilds or releases
# note: for newer releases (1.8.0) even release versions can have the
# form 1.8.0r-55
if re.search('r', initial_version):
builds, changes = BuildQuery().get_all_builds()
older_build = BuildQuery().find_membase_build(builds, deliverable_type=info.deliverable_type,
os_architecture=info.architecture_type,
build_version=initial_version,
product='membase-server-enterprise', is_amazon=is_amazon)
product=product, is_amazon=is_amazon)

else:
older_build = BuildQuery().find_membase_release_build(deliverable_type=info.deliverable_type,
os_architecture=info.architecture_type,
build_version=initial_version,
product=product, is_amazon=is_amazon)

remote.membase_uninstall()
remote.couchbase_uninstall()
remote.execute_command('/etc/init.d/membase-server stop')
remote.stop_membase()
remote.stop_couchbase()
remote.download_build(older_build)
#now let's install ?
remote.membase_install(older_build)
Expand Down Expand Up @@ -614,15 +679,19 @@ def _install_and_upgrade(self, initial_version='1.6.5.3',

input_version = input.test_params['version']
node_upgrade_path.append(input_version)
current_version = initial_version
previous_version = current_version
#if we dont want to do roll_upgrade ?
log.info("Upgrade path: {0} -> {1}".format(initial_version, node_upgrade_path))
log.info("List of servers {0}".format(servers))
if not roll_upgrade:
for version in node_upgrade_path:
previous_version = current_version
current_version = version
if version is not initial_version:
log.info("Upgrading to version {0}".format(version))
self._stop_membase_servers(servers)
if re.search('1.8', version):
if previous_version.startswith("1.7") and current_version.startswith("1.8"):
save_upgrade_config = True

appropriate_build = _get_build(servers[0], version, is_amazon=is_amazon)
Expand Down
2 changes: 1 addition & 1 deletion testrunner
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@ def parse_runlist(tests, filename):
name = stripped
if line.startswith(" ") and prefix:
name = prefix + "." + name
prefix = ".".join(name.split(".")[0:-1])
prefix = ".".join(name.split(",")[0].split('.')[0:-1])
append_test(tests, name)


Expand Down

0 comments on commit 9b21ecf

Please sign in to comment.