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.access_slice import access_slice
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']
47 if not node in config.nodes.keys():
49 node = config.nodes[node]
50 node['vserver'] = config.plcs[plc_name]['vserver']
51 boot_node(config)(plc_name, node['hostname'])
53 def create_vserver(vserver_name, vserver_home, mailto):
54 # create vserver for this system test if it doesnt already exist
55 if not os.path.isdir('%(vserver_home)s/%(vserver_name)s' % locals()):
56 vserver_create(config)(vserver_name, distro, mailto)
58 def cleanup_vservers(max_vservers, vserver_home, vserver_basename):
59 # only keep the newest MAX_VSERVERS
60 vservers = os.listdir("%(vserver_home)s" % locals())
61 valid_vservers = lambda vserver: vserver.startswith(vserver_basename)
62 vservers = filter(valid_vservers, vservers)
65 expired_vservers = vservers[5:]
66 for vserver in expired_vservers:
67 utils.header("Deleting vserver: %(vserver)s" % locals())
68 #vserver_delete()(vserver)
71 Usage: %prog [options]
73 parser = OptionParser(usage=usage,add_help_option = False)
74 parser.add_option("-v", "--vserver", help = "Vserver where tests should run")
75 parser.add_option("-d", "--distro", help = "Fedora distro to use")
76 parser.add_option("-p", "--plcname", help = "Which plc do we use (from config file)")
77 parser.add_option("-m", "--mailto", help = "Vserver build mailto address")
79 (options, args) = parser.parse_args()
81 # choose which distros to use
82 if options.distro is not None: distros = [options.distro]
83 else: distros = ['f7']
84 # did the user specify a vserver or plc
85 vserver_name = options.vserver
86 if options.plcname is not None: plc_name = options.plcname
87 else: plc_name = 'TestPLC'
89 if options.mailto is not None: mailto = options.mailto
90 else: mailto = 'tmack@cs.princeton.edu'
93 # Determine vserver name, distribution and mailto
94 # The distribution and current date will be part of of the vserver name
96 VSERVER_HOME = '/vservers/'
97 VSERVER_BASENAME = 'plc'
101 config.load("qa/qa_config.py")
104 # run tests in vserver specified by user
105 create_vserver(vserver_name, VSERVER_HOME, mailto)
106 run_system_tests(config, vserver_name, plc_name)
109 # use todays date and defaults to determine which vservers to run tests in
110 year, month, day = localtime()[:3]
111 YEAR, MONTH, DAY = [str(x) for x in [year,month,day]]
112 DATE = ".".join([YEAR, MONTH, DAY])
113 for distro in distros:
114 vserver_name = "%(VSERVER_BASENAME)s-%(distro)s-%(DATE)s" % locals()
115 create_vserver(vserver_name, VSERVER_HOME, mailto)
117 run_system_tests(config, vserver_name, plc_name)
119 utils.header("ERROR %(vserver_name)s tests failed" % locals())
123 cleanup_vservers(MAX_VSERVERS, VSERVER_HOME, VSERVER_BASENAME)