harness: cleanup tests to not override is_finished() where possible
[barrelfish] / tools / harness / tests / basicNetwork.py
1 ##########################################################################
2 # Copyright (c) 2009, ETH Zurich.
3 # All rights reserved.
4 #
5 # This file is distributed under the terms in the attached LICENSE file.
6 # If you do not find this file, copies can be found by writing to:
7 # ETH Zurich D-INFK, Haldeneggsteig 4, CH-8092 Zurich. Attn: Systems Group.
8 ##########################################################################
9
10 import re, socket, httplib, traceback, os, subprocess, select, datetime, glob, time
11 import tests, debug, siteconfig
12 from shutil import copyfile
13 from common import TestCommon, TimeoutError, select_timeout
14 from results import ResultsBase, PassFailResult, RowResults
15
16
17 WEBSERVER_TEST_FILES=['index.html', 'barrelfish.gif', 'barrelfish_sosp09.pdf']
18 WEBSERVER_TIMEOUT=5 # seconds
19 TEST_LOG_NAME = 'testlog.txt'
20 TRACE_LOG_NAME = 'tracelog.txt'
21
22 HTTPERF_BASE_ARGS='--hog --close-with-reset --timeout 2 '
23 HTTPERF_URI = '/index.html'
24
25 # desired duration of an httperf test run (seconds)
26 HTTPERF_DURATION = 20
27
28 # sleep time between runs (seconds)
29 HTTPERF_SLEEPTIME = 20
30
31 # timeout for a complete run, including setup etc.
32 HTTPERF_TIMEOUT = datetime.timedelta(seconds=(HTTPERF_DURATION + 30))
33
34 # connection rates across all client machines
35 HTTPERF_STARTRATE = 1000 # initial rate
36 HTTPERF_RATEINCREMENT = 1000 # amount to increment by for each new run
37
38
39 class NetCommon(TestCommon):
40
41     def setup(self, build, machine, testdir):
42         super(NetCommon, self).setup(build, machine, testdir)
43         self.testdir = testdir
44         self.ip = None
45         self.traceLogsON = False
46         self.traceLogs = []
47         self.build_path = build.build_dir
48
49     def get_modules(self, build, machine):
50         cardName = "e1000"
51         modules = super(NetCommon, self).get_modules(build, machine)
52         modules.add_module("e1000n", ["auto"])
53         modules.add_module("NGD_mng", ["auto"])
54         modules.add_module("netd", ["auto"])
55         nfsip = socket.gethostbyname(siteconfig.get('WEBSERVER_NFS_HOST'))
56         modules.add_module("webserver", ["core=%d" % machine.get_coreids()[0], #2
57                                 cardName, nfsip,
58                                 siteconfig.get('WEBSERVER_NFS_TEST_PATH')])
59
60         return modules
61
62     def process_line(self, line):
63         m = re.match(r'Interface up! IP address (\d+\.\d+\.\d+\.\d+)', line)
64         if m:
65             self.ip = m.group(1)
66
67         if line.startswith('dump trac buffers: Start') :
68             self.traceLogsON = True
69         elif line.startswith('dump trac buffers: Stop') :
70             self.traceLogsON = False
71         elif  self.traceLogsON :
72             self.traceLogs.append(line);
73
74     def get_finish_string(self):
75         return 'dump trac buffers: Stop'
76
77 @tests.add_test
78 class NetdTraceTest(NetCommon):
79     '''tests netd and generates tracing output'''
80     name = "netdTrace"
81
82     def setup(self, *args):
83         super(NetdTraceTest, self).setup(*args)
84         self.testlog = None
85
86
87     def process_data(self, testdir, rawiter):
88
89         tracelogFilePath = os.path.join(self.testdir, TRACE_LOG_NAME)
90         tracelogFile = open(tracelogFilePath, 'w')
91
92         passed = None
93         traceLogsStarted = False
94         traceLogsFinished = False
95         #testlog = open(os.path.join(testdir, TEST_LOG_NAME), 'r')
96         for line in rawiter:
97             if line.startswith('dump trac buffers: Start') :
98                 traceLogsStarted = True
99             elif line.startswith('dump trac buffers: Stop') :
100                 traceLogsStarted = False
101             elif traceLogsStarted :
102                 tracelogFile.write(line);
103                 passed = True
104         #testlog.close()
105         tracelogFile.close()
106         print "Tracefile: " +  tracelogFilePath
107         JASONFILENAME = 'trace_defs.json'
108         # copy trace_defs.json files
109         jsonFilePath = os.path.join(self.build_path,
110                 "x86_64", "trace_definitions", JASONFILENAME)
111         print "json file is at " + jsonFilePath
112         destFile =  os.path.join(self.testdir, JASONFILENAME)
113         copyfile(jsonFilePath, destFile)
114
115         return PassFailResult(passed == True)
116
117
118