Commit c1bbe7ea authored by Cédric de Saint Martin's avatar Cédric de Saint Martin Committed by Cédric Le Ninivin

KVM test: test all clones if specified.

parent 2ff20fcf
...@@ -32,7 +32,6 @@ from slapos.recipe.addresiliency.takeover import takeover ...@@ -32,7 +32,6 @@ from slapos.recipe.addresiliency.takeover import takeover
import slapos.slap import slapos.slap
import logging import logging
import argparse
import random import random
import string import string
import time import time
...@@ -46,6 +45,7 @@ def fetchMainInstanceIP(current_partition, software_release, instance_name): ...@@ -46,6 +45,7 @@ def fetchMainInstanceIP(current_partition, software_release, instance_name):
software_type='kvm-resilient', software_type='kvm-resilient',
partition_reference=instance_name).getConnectionParameter('ipv6') partition_reference=instance_name).getConnectionParameter('ipv6')
def setRandomKey(ip): def setRandomKey(ip):
""" """
Set a random key that will be stored inside of the virtual hard drive. Set a random key that will be stored inside of the virtual hard drive.
...@@ -85,9 +85,12 @@ def fetchKey(ip): ...@@ -85,9 +85,12 @@ def fetchKey(ip):
return new_key return new_key
def runTestSuite(server_url, key_file, cert_file, def runTestSuite(server_url, key_file, cert_file,
computer_id, partition_id, software, computer_id, partition_id, software,
namebase, kvm_rootinstance_name): namebase, kvm_rootinstance_name,
# Number of instances: main instance (exporter) + clones (importer).
total_instance_count="3"):
""" """
Run KVM Resiliency Test. Run KVM Resiliency Test.
Requires a specific KVM environment (virtual hard drive), see KVM SR for more Requires a specific KVM environment (virtual hard drive), see KVM SR for more
...@@ -106,6 +109,15 @@ def runTestSuite(server_url, key_file, cert_file, ...@@ -106,6 +109,15 @@ def runTestSuite(server_url, key_file, cert_file,
key = setRandomKey(ip) key = setRandomKey(ip)
logger.info('Key set for test in current KVM: %s.' % key) logger.info('Key set for test in current KVM: %s.' % key)
# In resilient stack, main instance (example with KVM) is named "kvm0",
# clones are named "kvm1", "kvm2", ...
clone_count = int(total_instance_count) - 1
# So first clone starts from 1.
current_clone = 1
# Test each clone
while current_clone <= clone_count:
logger.info('Testing kvm%s.' % current_clone)
# Wait for XX minutes so that replication is done # Wait for XX minutes so that replication is done
sleep_time = 60 * 15#2 * 60 * 60 sleep_time = 60 * 15#2 * 60 * 60
logger.info('Sleeping for %s seconds.' % sleep_time) logger.info('Sleeping for %s seconds.' % sleep_time)
...@@ -121,7 +133,7 @@ def runTestSuite(server_url, key_file, cert_file, ...@@ -121,7 +133,7 @@ def runTestSuite(server_url, key_file, cert_file,
partition_id=partition_id, partition_id=partition_id,
software_release=software, software_release=software,
namebase=namebase, namebase=namebase,
winner_instance_suffix='1', # XXX: hardcoded value. winner_instance_suffix=str(current_clone),
) )
logger.info('Done.') logger.info('Done.')
...@@ -138,34 +150,17 @@ def runTestSuite(server_url, key_file, cert_file, ...@@ -138,34 +150,17 @@ def runTestSuite(server_url, key_file, cert_file,
logger.info('Key on this new instance is %s' % new_key) logger.info('Key on this new instance is %s' % new_key)
# Compare with original key. If same: success. # Compare with original key. If same: success.
# XXX TODO
if new_key == key: if new_key == key:
logger.info('Success') logger.info('Success for clone %s.' % current_clone)
return True
else: else:
logger.error('Failure') logger.info('Failure for clone %s. Aborting.' % current_clone)
return False return False
# Used if launched as standalone script # Setup "new old ip" for next clone, so that it will test it is different
def parseArguments(): # from current clone
parser = argparse.ArgumentParser() ip = new_ip
parser.add_argument('--server-url', type=str)
parser.add_argument('--key-file', type=str) current_clone = current_clone + 1
parser.add_argument('--cert-file', type=str)
parser.add_argument('--computer-id', type=str)
parser.add_argument('--partition-id', type=str)
parser.add_argument('--software', type=str)
parser.add_argument('--namebase', type=str)
parser.add_argument('--kvm-rootinstance-name', type=str)
args = parser.parse_args()
return args
def main():
arguments = parseArguments()
runTestCase(arguments.server_url, arguments.key_file, arguments.cert_file,
arguments.computer_id, arguments.partition_id, arguments.software,
arguments.namebase, arguments.kvm_rootinstance_name)
if __name__ == '__main__':
main()
# All clones have been successfully tested: success.
return True
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment