import repository from arizona
[raven.git] / tools / testnodes / testnodes.py
1 import os, sys, time
2 import plcapilib
3
4 # Parse additional options
5 shortopts = "t:s:c"
6 longopts = ["slicename=","test=","continuous","rebootdelay=","resultfile=","reboot"]
7 moreusage = """
8 usage: %s [OPTION]...
9
10 Shell options:
11         -s (--slicename) slicename      Slice name to reset
12         -t (--test) test                Name of local shell script test to run
13         -c (--continuous)               Run tests continuously
14         -b (--reboot)                   Reboot slice before each pass
15            (--rebootdelay)              Reboot delay in seconds
16            (--resultfile) fn            Name of file to store results in
17 """ % sys.argv[0]
18
19 passes = 1
20 reset = False
21 startup = False
22 slicename = None
23 continuous = False
24 reboot = False
25 testname = "getsshkeys"
26 testfile = None
27 resultfile = None
28 rebootdelay = 60*30
29
30 def appendfile(text):
31     f = file(resultfile, "a")
32     f.write(text + ",time=" + str(time.time()) + "\n")
33     f.close()
34
35 def rebootslice(slicename, delay):
36    appendfile("status=startdelete")
37
38    slicenodes = SliceNodesList(slicename)
39    print "deleting " + str(len(slicenodes)) + " nodes from " + slicename
40    delresult = SliceNodesDel(slicename, slicenodes)
41    print "delete result = " + str(delresult)
42
43    appendfile("status=donedelete,result=" + str(delresult))
44
45    print "sleep for " + str(delay) + " seconds"
46    time.sleep(delay)
47
48    appendfile("status=startadd")
49
50    nodes = AdmGetNodes()
51    hostnames = [node['hostname'] for node in nodes]
52    addresult = SliceNodesAdd(slicename, hostnames)
53    print "add result = " + str(addresult)
54
55    appendfile("status=doneadd,result=" + str(addresult))
56
57    print "sleep for " + str(delay) + " seconds"
58    time.sleep(delay)
59
60
61 def main():
62    global reset, startup, slicename, continuous, reboot, testname, passes, rebootdelay
63    global testfile, resultfile
64
65    (plcapi, moreopts, argv) = plcapilib.plcapi(globals(), sys.argv, shortopts, longopts, moreusage)
66    for opt, optval in moreopts.iteritems():
67        if opt == "-s" or opt == "--slicename":
68            slicename = optval
69        if opt == "-t" or opt == "--test":
70            testname = optval
71        if opt == "-c" or opt == "--continuous":
72            passes = 1000000
73        if opt == "-b" or opt == "--reboot":
74            reboot = True
75        if opt == "--rebootdelay":
76            rebootdelay = int(optval)
77        if opt == "--resultfile":
78            resultfile = optval
79
80    if not slicename:
81        print "must use --slicename"
82        sys.exit(1)
83
84    testfile = "test_" + testname + ".sh"
85
86    if not resultfile:
87       resultfile = "results_" + testname + ".txt"
88
89    passnum = 0
90    while passnum<passes:
91       passnum = passnum +1
92
93       if reboot:
94           rebootslice(slicename, rebootdelay)
95
96       appendfile("status=runtests")
97
98       slicenodes = SliceNodesList(slicename)
99       #slicenodes = ["planetlab1.cs.northwestern.edu"]
100       for node in slicenodes:
101          print "testing " + node
102          cmd = "./" + testfile + " " + slicename + " " + node + " " + resultfile + "&"
103          os.system(cmd)
104          time.sleep(0.1)
105
106       appendfile("status=donetests")
107
108 if __name__ == "__main__":
109    main()