harness: devif test load only e10k driver on babybel2
[barrelfish] / tools / harness / tests / devif_test.py
1 ##########################################################################
2 # Copyright (c) 2017, 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, datetime
11 import debug, tests
12 import subprocess
13 import os
14 import socket, struct, fcntl
15 import thread
16 from common import TestCommon, TimeoutError
17 from results import RowResults, PassFailResult
18
19 TEST_TIMEOUT = datetime.timedelta(minutes=8)
20
21 mac = {'babybel1': 130587495626, 
22        'babybel2': 130587510022,
23        'babybel3': 130587512798,
24        'babybel4': 130589790232,
25        'ziger2': 65817495764,
26        'ziger1': 116527143012, }
27
28 # Fallback if gethostip does not work
29 ip = {'babybel1': 174982272, 
30        'babybel2': 174982270,
31        'babybel3': 174982271,
32        'ziger2': 174982183,
33        'ziger1': 174982183, }
34
35
36 class DevifTests(TestCommon):
37
38     def __init__(self, options):
39         super(DevifTests, self).__init__(options)
40
41     def get_module_name(self):
42         return "devif_test"
43
44     def boot(self, *args):
45         super(DevifTests, self).boot(*args)
46         self.set_timeout(TEST_TIMEOUT)
47
48     def get_decimal_ip(self, hostname):
49         try:
50             iphex = subprocess.check_output('gethostip -x %s' % hostname, shell=True)
51             return '%d' % int(iphex, 16)
52         except:
53             return ip[hostname.split('-')[0]]
54       
55     def get_local_mac(self, ifname):
56         s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
57         info = fcntl.ioctl(s.fileno(), 0x8927,  struct.pack('256s', ifname[:15]))
58         hexmac = ''.join(['%02x' % ord(char) for char in info[18:24]])
59         return '%d' % int(hexmac, 16)
60
61     def get_modules(self, build, machine):
62         self.machine = machine.name
63         modules = super(DevifTests, self).get_modules(build, machine)
64         modules.add_module("net_sockets_server", ["nospawn"])
65         modules.add_module("devif_idc", ["core=1"])
66         modules.add_module("e10k", ["auto", "function=0"])
67
68         hostname = '%s.in.barrelfish.org' % subprocess.check_output('hostname -s', shell=True).rstrip()
69         src_ip = self.get_decimal_ip(hostname)
70
71         if 'ziger2' in machine.name:
72             modules.add_module("sfn5122f", ["auto", "function=0"])
73             dst_ip = self.get_decimal_ip('%s-sf.in.barrelfish.org' % machine.name)
74         else:
75             dst_ip = self.get_decimal_ip('%s-e10k.in.barrelfish.org' % machine.name)
76
77         modules.add_module(self.get_module_name(), ["core=2", self.OP, src_ip, dst_ip, self.CARD])
78         return modules
79
80     def get_finish_string(self):
81         return "SUCCESS"
82
83
84     def thread_func (self, dummy, dummy2):
85         s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
86         while True:
87             s.sendto("Data Data Data", (self.ip, 7))
88             
89     def start_loop(self):
90         self.thread = thread.start_new_thread(self.thread_func, (self, 0))
91
92     def process_line(self, line):
93         m = re.match(r'# IP Addr (\d+\.\d+\.\d+\.\d+)', line)
94         if m:
95             self.start_loop()
96             self.ip = m.group(1)
97
98
99     def process_data(self, testdir, rawiter):
100         for line in rawiter:
101             if "SUCCESS" in line:
102                 return PassFailResult(True)
103
104         return PassFailResult(False)
105
106
107 @tests.add_test
108 class DevifNetTxSF(DevifTests):
109     ''' Devif Net TX Test'''
110     name = "devif_nettx_sf"
111     OP = "net_tx"
112     CARD = "sfn5122f"
113
114 @tests.add_test
115 class DevifNetTxE10k(DevifTests):
116     ''' Devif Net TX Test'''
117     name = "devif_nettx_e10k"
118     OP = "net_tx"
119     CARD = "e10k"
120
121
122 @tests.add_test
123 class DevifNetRxSF(DevifTests):
124     ''' Devif Net RX Test'''
125     name = "devif_netrx_sf"
126     OP = "net_rx"
127     CARD = "sfn5122f"
128
129 @tests.add_test
130 class DevifNetRxE10k(DevifTests):
131     ''' Devif Net RX Test'''
132     name = "devif_netrx_e10k"
133     OP = "net_rx"
134     CARD = "e10k"
135
136 @tests.add_test
137 class DevifIdcTest(DevifTests):
138     ''' Devif IDC Test'''
139     name = "devif_idc_test"
140     OP = "idc"
141     CARD = "none"
142
143 @tests.add_test
144 class DevifDebug(DevifTests):
145     ''' Devif Debug Backend Test'''
146     name = "devif_debug"
147
148     def get_modules(self, build, machine):
149         self.machine = machine.name
150         modules = super(DevifTests, self).get_modules(build, machine)
151         modules.add_module("devif_idc", ["core=1"])
152         modules.add_module("devif_debug_test")
153
154         return modules
155
156 @tests.add_test
157 class DevifUDP(DevifTests):
158     ''' Devif UDP Backend Test'''
159     name = "devif_udp"
160     data = ("Data Data Data Data")
161
162     def get_module_name(self):
163         return "devif_udp"
164
165     def get_modules(self, build, machine):
166         self.machine = machine.name
167         modules = super(DevifTests, self).get_modules(build, machine)
168         modules.add_module("net_sockets_server", ["nospawn"])
169         hostname = '%s.in.barrelfish.org' % subprocess.check_output('hostname -s', shell=True).rstrip()
170         dst_ip = self.get_decimal_ip(hostname)
171         dst_mac = self.get_local_mac('eno2')
172
173         if 'ziger2' in machine.name:
174             src_ip = self.get_decimal_ip('%s-sf.in.barrelfish.org' % machine.name)
175             modules.add_module("sfn5122f", ["auto", "function=0"])
176             self.cardname = "sfn5122f"
177         else:
178             modules.add_module("e10k", ["auto", "function=0"])
179             src_ip = self.get_decimal_ip('%s-e10k.in.barrelfish.org' % machine.name)
180             self.cardname = "e10k"
181
182         src_mac =  mac[machine.name]
183
184         modules.add_module(self.get_module_name(), ["core=2", dst_ip, dst_mac, 20000, 20000, self.cardname])
185         return modules
186
187     def thread_func (self, dummy, dummy2):
188         s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
189         while True:
190             s.sendto(self.data, (self.ip, 20000))
191
192     def start_loop(self):
193         self.thread = thread.start_new_thread(self.thread_func, (self, 0))
194
195     def process_line(self, line):
196         m = re.match(r'# IP Addr (\d+\.\d+\.\d+\.\d+)', line)
197         if m:
198             self.ip = m.group(1)
199
200         m1 = re.match(r'Testing receiving UDP packets', line)
201         if m1:
202             self.start_loop()
203
204     def process_data(self, testdir, rawiter):
205         for line in rawiter:
206             if "SUCCESS" in line:
207                 return PassFailResult(True)
208
209         return PassFailResult(False)
210
211 #@tests.add_test
212 #class DevifUPDecho(DevifUDP):
213 #    ''' Devif Debug Backend Test'''
214 #    name = "devif_udp_echo"
215 #
216 #    def get_module_name(self):
217 #        return "devif_echo"
218
219
220