remove unnecessary print
[tests.git] / qaapi / system-test.py
1 #!/usr/bin/python
2 import commands
3 import os
4 import sys
5 import traceback
6 from optparse import OptionParser
7 from random import Random
8 from time import localtime
9 from qa.utils import commands
10 from qa import utils 
11 from qa.Config import Config 
12 from qa.tests.vserver_create import vserver_create
13 from qa.tests.vserver_delete import vserver_delete
14 from qa.tests.plc_configure import plc_configure
15 from qa.tests.plc_stop import plc_stop
16 from qa.tests.plc_start import plc_start
17 from qa.tests.add_test_data import add_test_data
18 from qa.tests.api_unit_test import api_unit_test
19 from qa.tests.sync_person_key import sync_person_key
20 from qa.tests.boot_node import boot_node
21 from qa.tests.node_run_tests import node_run_tests
22
23 def run_system_tests(config, vserver_name, plc_name):
24     # configure the plc in this vserver
25     config.plcs[plc_name]['vserver'] = vserver_name
26     config.plcs[plc_name]['host'] = config.hostname
27     config.plcs[plc_name]['ip'] = config.ip
28     config.plcs[plc_name].update_ip()
29         
30     plc_configure(config)(plc_name)
31     options = {}
32     for service in ['API', 'WWW', 'BOOT',' DB']:
33         options['PLC_'+service+'_HOST'] = config.plcs[plc_name]['ip']
34         options['PLC_'+service+'_IP'] = config.plcs[plc_name]['ip']
35     plc_configure(config)(plc_name, options)
36     plc_start(config)(plc_name)
37
38     # Add test site, node, person and slice data
39     # Adds slice to node and person to slice 
40     add_test_data(config)(plc_name)
41     plc_start(config)(plc_name)
42     person_email = config.persons.values()[0]['email']
43     sync_person_key(config)(person_email)
44
45     # Api unit test
46     try: api_unit_test(config)(plc_name)
47     except: utils.header("Error: %s" % traceback.format_exc(), logfile = config.logfile)
48          
49     # Boot test node and confirm boot state
50     nodelist = ['vm1.paris.cs.princeton.edu', 'vm41.test.org']
51     slice = config.slices['ts_slice1']  
52     for node in nodelist:
53         if not node in config.nodes.keys():
54             continue
55         node = config.nodes[node]
56         node['vserver'] = config.plcs[plc_name]['vserver']
57         try:
58             boot_node(config)(plc_name, node['hostname'])
59             if node.is_ready():
60                 node_run_tests(config)(node['hostname'], plc_name)      
61         except:
62             utils.header("Error: %s" % traceback.format_exc(), logfile = config.logfile)                    
63 def create_vserver(vserver_name, vserver_home, mailto):
64     # create vserver for this system test if it doesnt already exist
65     if not os.path.isdir('%(vserver_home)s/%(vserver_name)s' % locals()):
66         vserver_create(config)(vserver_name, distro, mailto)
67
68 def cleanup_vservers(max_vservers, vserver_home, vserver_basename):
69     # only keep the newest MAX_VSERVERS 
70     vservers = os.listdir("%(vserver_home)s" % locals())
71     valid_vservers = lambda vserver: vserver.startswith(vserver_basename) and os.path.isdir(vserver)
72     vservers = filter(valid_vservers, vservers)
73     vservers.sort()
74     vservers.reverse()
75     expired_vservers = vservers[max_vservers:]
76     for vserver in expired_vservers:
77         utils.header("Deleting vserver: %(vserver)s" % locals(), logfile = config.logfile)
78         #vserver_delete()(vserver)
79
80 usage="""
81 Usage: %prog [options]   
82 """
83 parser = OptionParser(usage=usage,add_help_option = False)
84 parser.add_option("-v", "--vserver", help = "Vserver where tests should run")
85 parser.add_option("-d", "--distro", help = "Fedora distro to use")
86 parser.add_option("-p", "--plcname", help = "Which plc do we use (from config file)")
87 parser.add_option("-m", "--mailto", help = "Vserver build mailto address")
88
89 # Define globals
90 # Determine vserver name, distribution and mailto
91 # The distribution and current date will be part of of the vserver name  
92 MAX_VSERVERS =  3
93 VSERVER_HOME = '/vservers/'
94 VSERVER_BASENAME = 'plc'
95 distro = 'f8' 
96 # use todays date and defaults to determine which vservers to run tests in 
97 year, month, day = localtime()[:3]
98 YEAR, MONTH, DAY = [str(x) for x in [year,month,day]]
99 DATE = ".".join([YEAR, MONTH, DAY])
100 vserver_name = "%(VSERVER_BASENAME)s-%(distro)s-%(DATE)s" % locals()
101
102 (options, args) = parser.parse_args()
103 # choose which distros to use 
104 if options.distro is not None:  distros = [options.distro]
105 else: distros = ['f8']
106
107 # did the user specify a vserver or plc
108 if options.vserver is not None: vserver_name = options.vserver
109
110 if options.plcname is not None: plc_name = options.plcname
111 else: plc_name = 'TestPLC' 
112
113 # who gets emailed
114 if options.mailto is not None: mailto = options.mailto
115 else: mailto = 'tmack@cs.princeton.edu'     
116
117 # Setup configuration 
118 logfile_dir = "/var/log/qaapi/%(vserver_name)s" % locals()
119 config = Config(logdir = logfile_dir)
120 config.load("qa/qa_config.py")  
121
122 if options.vserver:
123     # run tests in vserver specified by user
124     create_vserver(vserver_name, VSERVER_HOME, mailto)  
125     run_system_tests(config, vserver_name, plc_name)
126 else:
127     for distro in distros:
128         try:    
129             vserver_name = "%(VSERVER_BASENAME)s-%(distro)s-%(DATE)s" % locals()
130             create_vserver(vserver_name, VSERVER_HOME, mailto)  
131             run_system_tests(config, vserver_name, plc_name)
132         except:
133             utils.header("ERROR %(vserver_name)s tests failed" % locals(), logfile = config.logfile)    
134             utils.header("%s" % traceback.format_exc(), logfile = config.logfile)
135
136 # remove old vsevers
137 cleanup_vservers(MAX_VSERVERS, VSERVER_HOME, VSERVER_BASENAME)
138