From 17f30c60cfdbd6b4f7a68f93ad0f9b6f0d8c52f5 Mon Sep 17 00:00:00 2001 From: Mark Reynolds Date: May 20 2016 21:23:34 +0000 Subject: Ticket 48795 - Make various improvements to create_test.py Description: Made the following improvements to the create_test.py script: - Added a new line at the end of the generated script (pep8) - Fixed the way replication agreement names were generated - Added docstrings where needed (sphinx documentation) - Added a new DEBUGGING flag that if set stops instances instead of removing them, sets "verbose=True" for Dirsrv objects, and adds an area where debugging steps can be set. https://fedorahosted.org/389/ticket/48795 Reviewed by: spichugi(Thanks!) --- diff --git a/dirsrvtests/create_test.py b/dirsrvtests/create_test.py index 7b06fdb..46c8217 100755 --- a/dirsrvtests/create_test.py +++ b/dirsrvtests/create_test.py @@ -1,7 +1,7 @@ #!/usr/bin/python # # --- BEGIN COPYRIGHT BLOCK --- -# Copyright (C) 2015 Red Hat, Inc. +# Copyright (C) 2016 Red Hat, Inc. # All rights reserved. # # License: GPL (version 3 or any later version). @@ -21,6 +21,7 @@ non-interesting parts of a test script: def displayUsage(): + """Display the usage""" print ('\nUsage:\ncreate_ticket.py -t|--ticket ' + '-s|--suite ' + '[ i|--instances ' + @@ -36,29 +37,43 @@ def displayUsage(): def writeFinalizer(): - """Write the finalizer function - delete each instance""" + """Write the finalizer function - delete/stop each instance""" + + def writeInstanceOp(action): + """Write instance finializer action""" + if repl_deployment: + for idx in range(masters): + idx += 1 + TEST.write(' master' + str(idx) + '.' + action + + '()\n') + for idx in range(hubs): + idx += 1 + TEST.write(' hub' + str(idx) + '.' + action + + '()\n') + for idx in range(consumers): + idx += 1 + TEST.write(' consumer' + str(idx) + '.' + action + + '()\n') + else: + for idx in range(instances): + idx += 1 + if idx == 1: + idx = '' + else: + idx = str(idx) + TEST.write(' standalone' + idx + '.' + action + + '()\n') - TEST.write(' # Delete each instance in the end\n') TEST.write(' def fin():\n') - if repl_deployment: - for idx in range(masters): - idx += 1 - TEST.write(' master' + str(idx) + '.delete()\n') - for idx in range(hubs): - idx += 1 - TEST.write(' hub' + str(idx) + '.delete()\n') - for idx in range(consumers): - idx += 1 - TEST.write(' consumer' + str(idx) + '.delete()\n') - else: - for idx in range(instances): - idx += 1 - if idx == 1: - idx = '' - else: - idx = str(idx) - TEST.write(' standalone' + idx + '.delete()\n') - TEST.write(' request.addfinalizer(fin)') + TEST.write(' """') + TEST.write('If we are debugging just stop the instances, ' + + 'otherwise remove\n them\n') + TEST.write(' """\n') + TEST.write(' if DEBUGGING:\n') + writeInstanceOp('stop') + TEST.write(' else:\n') + writeInstanceOp('delete') + TEST.write('\n request.addfinalizer(fin)') TEST.write('\n\n') @@ -170,13 +185,14 @@ if len(sys.argv) > 0: 'from lib389.tasks import *\nfrom lib389.utils import *\n\n') # - # Set the logger and installation prefix + # Set the logger and other settings # - TEST.write('logging.getLogger(__name__).setLevel(logging.DEBUG)\n') - TEST.write('log = logging.getLogger(__name__)\n\n') - - # We don't need the prefix anymore, it's worked out in lib389 - # TEST.write('installation1_prefix = None\n\n\n') + TEST.write('DEBUGGING = False\n\n') + TEST.write('if DEBUGGING:\n') + TEST.write(' logging.getLogger(__name__).setLevel(logging.DEBUG)\n') + TEST.write('else:\n') + TEST.write(' logging.getLogger(__name__).setLevel(logging.INFO)\n\n\n') + TEST.write('log = logging.getLogger(__name__)\n\n\n') # # Write the replication or standalone classes @@ -189,6 +205,7 @@ if len(sys.argv) > 0: repl_deployment = True TEST.write('class TopologyReplication(object):\n') + TEST.write(' """The Replication Topology Class"""\n') TEST.write(' def __init__(self') for idx in range(masters): TEST.write(', master' + str(idx + 1)) @@ -197,6 +214,7 @@ if len(sys.argv) > 0: for idx in range(consumers): TEST.write(', consumer' + str(idx + 1)) TEST.write('):\n') + TEST.write(' """Init"""\n') for idx in range(masters): TEST.write(' master' + str(idx + 1) + '.open()\n') @@ -216,6 +234,7 @@ if len(sys.argv) > 0: # Write the standalone class # TEST.write('class TopologyStandalone(object):\n') + TEST.write(' """The DS Topology Class"""\n') TEST.write(' def __init__(self') for idx in range(instances): idx += 1 @@ -225,7 +244,7 @@ if len(sys.argv) > 0: idx = str(idx) TEST.write(', standalone' + idx) TEST.write('):\n') - + TEST.write(' """Init"""\n') for idx in range(instances): idx += 1 if idx == 1: @@ -242,19 +261,19 @@ if len(sys.argv) > 0: # TEST.write('@pytest.fixture(scope="module")\n') TEST.write('def topology(request):\n') - #TEST.write(' global installation1_prefix\n') - #TEST.write(' if installation1_prefix:\n') - #TEST.write(' args_instance[SER_DEPLOYED_DIR] = ' + - # 'installation1_prefix\n\n') if repl_deployment: # # Create the replication instances # + TEST.write(' """Create Replication Deployment"""\n\n') for idx in range(masters): idx = str(idx + 1) TEST.write(' # Creating master ' + idx + '...\n') - TEST.write(' master' + idx + ' = DirSrv(verbose=False)\n') + TEST.write(' if DEBUGGING:\n') + TEST.write(' master' + idx + ' = DirSrv(verbose=True)\n') + TEST.write(' else:\n') + TEST.write(' master' + idx + ' = DirSrv(verbose=False)\n') TEST.write(' args_instance[SER_HOST] = HOST_MASTER_' + idx + '\n') TEST.write(' args_instance[SER_PORT] = PORT_MASTER_' + idx + @@ -278,7 +297,10 @@ if len(sys.argv) > 0: for idx in range(hubs): idx = str(idx + 1) TEST.write(' # Creating hub ' + idx + '...\n') - TEST.write(' hub' + idx + ' = DirSrv(verbose=False)\n') + TEST.write(' if DEBUGGING:\n') + TEST.write(' hub' + idx + ' = DirSrv(verbose=True)\n') + TEST.write(' else:\n') + TEST.write(' hub' + idx + ' = DirSrv(verbose=False)\n') TEST.write(' args_instance[SER_HOST] = HOST_HUB_' + idx + '\n') TEST.write(' args_instance[SER_PORT] = PORT_HUB_' + idx + '\n') TEST.write(' args_instance[SER_SERVERID_PROP] = SERVERID_HUB_' + @@ -300,7 +322,10 @@ if len(sys.argv) > 0: for idx in range(consumers): idx = str(idx + 1) TEST.write(' # Creating consumer ' + idx + '...\n') - TEST.write(' consumer' + idx + ' = DirSrv(verbose=False)\n') + TEST.write(' if DEBUGGING:\n') + TEST.write(' consumer' + idx + ' = DirSrv(verbose=True)\n') + TEST.write(' else:\n') + TEST.write(' consumer' + idx + ' = DirSrv(verbose=False)\n') TEST.write(' args_instance[SER_HOST] = HOST_CONSUMER_' + idx + '\n') TEST.write(' args_instance[SER_PORT] = PORT_CONSUMER_' + idx + @@ -340,13 +365,15 @@ if len(sys.argv) > 0: continue TEST.write(' # Creating agreement from master ' + str(master_idx) + ' to master ' + str(idx) + '\n') - TEST.write(" properties = {RA_NAME: " + - "r'meTo_$host:$port',\n") - TEST.write(" RA_BINDDN: " + + TEST.write(" properties = {RA_NAME: " + + "'meTo_' + master" + str(idx) + + ".host + ':' + str(master" + str(idx) + + ".port),\n") + TEST.write(" RA_BINDDN: " + "defaultProperties[REPLICATION_BIND_DN],\n") - TEST.write(" RA_BINDPW: " + + TEST.write(" RA_BINDPW: " + "defaultProperties[REPLICATION_BIND_PW],\n") - TEST.write(" RA_METHOD: " + + TEST.write(" RA_METHOD: " + "defaultProperties[REPLICATION_BIND_METHOD],\n") TEST.write(" RA_TRANSPORT_PROT: " + "defaultProperties[REPLICATION_TRANSPORT]}\n") @@ -371,13 +398,15 @@ if len(sys.argv) > 0: # TEST.write(' # Creating agreement from master ' + str(master_idx) + ' to hub ' + str(idx) + '\n') - TEST.write(" properties = {RA_NAME: " + - "r'meTo_$host:$port',\n") - TEST.write(" RA_BINDDN: " + + TEST.write(" properties = {RA_NAME: " + + "'meTo_' + hub" + str(idx) + + ".host + ':' + str(hub" + str(idx) + + ".port),\n") + TEST.write(" RA_BINDDN: " + "defaultProperties[REPLICATION_BIND_DN],\n") - TEST.write(" RA_BINDPW: " + + TEST.write(" RA_BINDPW: " + "defaultProperties[REPLICATION_BIND_PW],\n") - TEST.write(" RA_METHOD: " + + TEST.write(" RA_METHOD: " + "defaultProperties[REPLICATION_BIND_METHOD],\n") TEST.write(" RA_TRANSPORT_PROT: " + "defaultProperties[REPLICATION_TRANSPORT]}\n") @@ -410,13 +439,15 @@ if len(sys.argv) > 0: # TEST.write(' # Creating agreement from hub ' + str(hub_idx) + ' to consumer ' + str(idx) + '\n') - TEST.write(" properties = {RA_NAME: " + - "r'meTo_$host:$port',\n") - TEST.write(" RA_BINDDN: " + + TEST.write(" properties = {RA_NAME: " + + "'meTo_' + consumer" + str(idx) + + ".host + ':' + str(consumer" + str(idx) + + ".port),\n") + TEST.write(" RA_BINDDN: " + "defaultProperties[REPLICATION_BIND_DN],\n") - TEST.write(" RA_BINDPW: " + + TEST.write(" RA_BINDPW: " + "defaultProperties[REPLICATION_BIND_PW],\n") - TEST.write(" RA_METHOD: " + + TEST.write(" RA_METHOD: " + "defaultProperties[REPLICATION_BIND_METHOD],\n") TEST.write(" RA_TRANSPORT_PROT: " + "defaultProperties[REPLICATION_TRANSPORT]}\n") @@ -451,13 +482,15 @@ if len(sys.argv) > 0: TEST.write(' # Creating agreement from master ' + str(master_idx) + ' to consumer ' + str(idx) + '\n') - TEST.write(" properties = {RA_NAME: " + - "r'meTo_$host:$port',\n") - TEST.write(" RA_BINDDN: " + + TEST.write(" properties = {RA_NAME: " + + "'meTo_' + consumer" + str(idx) + + ".host + ':' + str(consumer" + str(idx) + + ".port),\n") + TEST.write(" RA_BINDDN: " + "defaultProperties[REPLICATION_BIND_DN],\n") - TEST.write(" RA_BINDPW: " + + TEST.write(" RA_BINDPW: " + "defaultProperties[REPLICATION_BIND_PW],\n") - TEST.write(" RA_METHOD: " + + TEST.write(" RA_METHOD: " + "defaultProperties[REPLICATION_BIND_METHOD],\n") TEST.write(" RA_TRANSPORT_PROT: " + "defaultProperties[REPLICATION_TRANSPORT]}\n") @@ -575,6 +608,7 @@ if len(sys.argv) > 0: # # Args for the standalone instance + TEST.write(' """Create DS Deployment"""\n\n') for idx in range(instances): idx += 1 if idx == 1: @@ -582,7 +616,12 @@ if len(sys.argv) > 0: else: idx = str(idx) TEST.write(' # Creating standalone instance ' + idx + '...\n') - TEST.write(' standalone' + idx + ' = DirSrv(verbose=False)\n') + TEST.write(' if DEBUGGING:\n') + TEST.write(' standalone' + idx + + ' = DirSrv(verbose=True)\n') + TEST.write(' else:\n') + TEST.write(' standalone' + idx + + ' = DirSrv(verbose=False)\n') TEST.write(' args_instance[SER_HOST] = HOST_STANDALONE' + idx + '\n') TEST.write(' args_instance[SER_PORT] = PORT_STANDALONE' + @@ -630,7 +669,7 @@ if len(sys.argv) > 0: if ticket: TEST.write('def test_ticket' + ticket + '(topology):\n') if repl_deployment: - TEST.write(' """Write your replication testcase here.\n\n') + TEST.write(' """Write your replication test here.\n\n') TEST.write(' To access each DirSrv instance use: ' + 'topology.master1, topology.master2,\n' + ' ..., topology.hub1, ..., topology.consumer1' + @@ -643,17 +682,21 @@ if len(sys.argv) > 0: TEST.write(' Also, if you need any testcase initialization,\n') TEST.write(' please, write additional fixture for that' + '(include finalizer).\n') - TEST.write(' """\n\n') - TEST.write(" log.info('Test complete')\n") - TEST.write('\n\n') + TEST.write('\n """\n\n') + else: # Write the first initial empty test function - TEST.write('def test_' + suite + '_#####(topology):\n') + TEST.write('def test_' + suite + '(topology):\n') TEST.write(' """Write a single test here...\n\n') TEST.write(' Also, if you need any test suite initialization,\n') TEST.write(' please, write additional fixture for that(include ' + - 'finalizer).\n') - TEST.write(' """\n\n return\n\n\n') + 'finalizer).\n """\n') + + TEST.write(' if DEBUGGING:\n') + TEST.write(' # Add debugging steps(if any)...\n') + TEST.write(' pass\n\n') + TEST.write(" log.info('Test PASSED')\n") + TEST.write('\n\n') # # Write the main function @@ -662,7 +705,7 @@ if len(sys.argv) > 0: TEST.write(' # Run isolated\n') TEST.write(' # -s for DEBUG mode\n') TEST.write(' CURRENT_FILE = os.path.realpath(__file__)\n') - TEST.write(' pytest.main("-s %s" % CURRENT_FILE)\n') + TEST.write(' pytest.main("-s %s" % CURRENT_FILE)\n\n') # # Done, close things up