5 from optparse import OptionParser
6 from random import Random
7 from time import localtime
8 from qa.utils import commands
10 from qa.Config import Config
11 from qa.tests.vserver_create import vserver_create
12 from qa.tests.vserver_delete import vserver_delete
13 from qa.tests.plc_configure import plc_configure
14 from qa.tests.plc_stop import plc_stop
15 from qa.tests.plc_start import plc_start
16 from qa.tests.add_test_data import add_test_data
17 from qa.tests.sync_person_key import sync_person_key
18 from qa.tests.boot_node import boot_node
19 from qa.tests.node_run_tests import node_run_tests
21 def run_system_tests(config, vserver_name, plc_name):
22 # configure the plc in this vserver
23 config.plcs[plc_name]['vserver'] = vserver_name
24 config.plcs[plc_name]['host'] = config.hostname
25 config.plcs[plc_name]['ip'] = config.ip
26 config.plcs[plc_name].update_ip()
28 plc_configure(config)(plc_name)
30 for service in ['API', 'WWW', 'BOOT',' DB']:
31 options['PLC_'+service+'_HOST'] = config.plcs[plc_name]['ip']
32 options['PLC_'+service+'_IP'] = config.plcs[plc_name]['ip']
33 plc_configure(config)(plc_name, options)
34 plc_start(config)(plc_name)
36 # Add test site, node, person and slice data
37 # Adds slice to node and person to slice
38 add_test_data(config)(plc_name)
39 plc_stop(config)(plc_name)
40 plc_start(config)(plc_name)
41 person_email = config.persons.values()[0]['email']
42 sync_person_key(config)(person_email)
44 # Boot test node and confirm boot state
45 nodelist = ['vm1.paris.cs.princeton.edu']
46 slice = config.slices['ts_slice1']
48 if not node in config.nodes.keys():
50 node = config.nodes[node]
51 node['vserver'] = config.plcs[plc_name]['vserver']
52 boot_node(config)(plc_name, node['hostname'])
54 node_run_tests(config)(node['hostname'], plc_name)
56 def create_vserver(vserver_name, vserver_home, mailto):
57 # create vserver for this system test if it doesnt already exist
58 if not os.path.isdir('%(vserver_home)s/%(vserver_name)s' % locals()):
59 vserver_create(config)(vserver_name, distro, mailto)
61 def cleanup_vservers(max_vservers, vserver_home, vserver_basename):
62 # only keep the newest MAX_VSERVERS
63 vservers = os.listdir("%(vserver_home)s" % locals())
64 valid_vservers = lambda vserver: vserver.startswith(vserver_basename) and os.path.isdir(vserver)
65 vservers = filter(valid_vservers, vservers)
68 expired_vservers = vservers[5:]
69 for vserver in expired_vservers:
70 utils.header("Deleting vserver: %(vserver)s" % locals())
71 #vserver_delete()(vserver)
74 Usage: %prog [options]
76 parser = OptionParser(usage=usage,add_help_option = False)
77 parser.add_option("-v", "--vserver", help = "Vserver where tests should run")
78 parser.add_option("-d", "--distro", help = "Fedora distro to use")
79 parser.add_option("-p", "--plcname", help = "Which plc do we use (from config file)")
80 parser.add_option("-m", "--mailto", help = "Vserver build mailto address")
82 (options, args) = parser.parse_args()
84 # choose which distros to use
85 if options.distro is not None: distros = [options.distro]
86 else: distros = ['f7']
87 # did the user specify a vserver or plc
88 vserver_name = options.vserver
89 if options.plcname is not None: plc_name = options.plcname
90 else: plc_name = 'TestPLC'
92 if options.mailto is not None: mailto = options.mailto
93 else: mailto = 'tmack@cs.princeton.edu'
96 # Determine vserver name, distribution and mailto
97 # The distribution and current date will be part of of the vserver name
99 VSERVER_HOME = '/vservers/'
100 VSERVER_BASENAME = 'plc'
102 # Setup configuration
104 config.load("qa/qa_config.py")
107 # run tests in vserver specified by user
108 create_vserver(vserver_name, VSERVER_HOME, mailto)
109 run_system_tests(config, vserver_name, plc_name)
112 # use todays date and defaults to determine which vservers to run tests in
113 year, month, day = localtime()[:3]
114 YEAR, MONTH, DAY = [str(x) for x in [year,month,day]]
115 DATE = ".".join([YEAR, MONTH, DAY])
116 for distro in distros:
117 vserver_name = "%(VSERVER_BASENAME)s-%(distro)s-%(DATE)s" % locals()
118 create_vserver(vserver_name, VSERVER_HOME, mailto)
120 run_system_tests(config, vserver_name, plc_name)
122 utils.header("ERROR %(vserver_name)s tests failed" % locals())
126 cleanup_vservers(MAX_VSERVERS, VSERVER_HOME, VSERVER_BASENAME)