net_sockets: change service so it can be used for all the NICS.
[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("net_sockets_server", ["auto"])
53         nfsip = socket.gethostbyname(siteconfig.get('WEBSERVER_NFS_HOST'))
54         modules.add_module("webserver", ["core=%d" % machine.get_coreids()[0], #2
55                                 cardName, nfsip,
56                                 siteconfig.get('WEBSERVER_NFS_TEST_PATH')])
57
58         return modules
59
60     def process_line(self, line):
61         m = re.match(r'Interface up! IP address (\d+\.\d+\.\d+\.\d+)', line)
62         if m:
63             self.ip = m.group(1)
64
65         if line.startswith('dump trac buffers: Start') :
66             self.traceLogsON = True
67         elif line.startswith('dump trac buffers: Stop') :
68             self.traceLogsON = False
69         elif  self.traceLogsON :
70             self.traceLogs.append(line);
71
72     def get_finish_string(self):
73         return 'dump trac buffers: Stop'
74
75 @tests.add_test
76 class NetdTraceTest(NetCommon):
77     '''tests netd and generates tracing output'''
78     name = "netdTrace"
79
80     def setup(self, *args):
81         super(NetdTraceTest, self).setup(*args)
82         self.testlog = None
83
84
85     def process_data(self, testdir, rawiter):
86
87         tracelogFilePath = os.path.join(self.testdir, TRACE_LOG_NAME)
88         tracelogFile = open(tracelogFilePath, 'w')
89
90         passed = None
91         traceLogsStarted = False
92         traceLogsFinished = False
93         #testlog = open(os.path.join(testdir, TEST_LOG_NAME), 'r')
94         for line in rawiter:
95             if line.startswith('dump trac buffers: Start') :
96                 traceLogsStarted = True
97             elif line.startswith('dump trac buffers: Stop') :
98                 traceLogsStarted = False
99             elif traceLogsStarted :
100                 tracelogFile.write(line);
101                 passed = True
102         #testlog.close()
103         tracelogFile.close()
104         print "Tracefile: " +  tracelogFilePath
105         JASONFILENAME = 'trace_defs.json'
106         # copy trace_defs.json files
107         jsonFilePath = os.path.join(self.build_path,
108                 "x86_64", "trace_definitions", JASONFILENAME)
109         print "json file is at " + jsonFilePath
110         destFile =  os.path.join(self.testdir, JASONFILENAME)
111         copyfile(jsonFilePath, destFile)
112
113         return PassFailResult(passed == True)
114
115
116