harness: fixing devif test
[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
15 from common import TestCommon, TimeoutError
16 from results import RowResults, PassFailResult
17
18 TEST_TIMEOUT = datetime.timedelta(minutes=8)
19
20 class DevifTests(TestCommon):
21
22     def __init__(self, options):
23         super(DevifTests, self).__init__(options)
24
25     def get_module_name(self):
26         return "devif_test"
27
28     def boot(self, *args):
29         super(DevifTests, self).boot(*args)
30         self.set_timeout(TEST_TIMEOUT)
31        
32
33     def get_modules(self, build, machine):
34         self.machine = machine.name
35         modules = super(DevifTests, self).get_modules(build, machine)
36         modules.add_module("e10k", ["auto", "function=0"])
37         modules.add_module("sfn5122f", ["auto", "function=0"])
38         modules.add_module("devif_idc", ["core=1"])
39
40         f = os.popen('ifconfig eno2 | grep "inet\ addr" | cut -d: -f2 | cut -d" " -f1')
41         ip_string = f.read()
42         packedIP = socket.inet_aton(ip_string)
43         src_ip = struct.unpack("!L", packedIP)[0]
44
45         if self.CARD == "sfn5122f":
46             dst_string = subprocess.check_output('nslookup %s-sf.in.barrelfish.org | sed -n 5p | awk -F\" \" \'{print $NF}\'' % machine.name, shell=True)
47         else:
48             dst_string = subprocess.check_output('nslookup %s-e10k.in.barrelfish.org | sed -n 5p | awk -F\" \" \'{print $NF}\'' % machine.name, shell=True)
49
50         packedIP = socket.inet_aton(dst_string)
51         dst_ip = struct.unpack("!L", packedIP)[0]
52
53         modules.add_module(self.get_module_name(), ["core=2", self.OP, src_ip, dst_ip, self.CARD])
54         return modules
55
56     def get_finish_string(self):
57         return "SUCCESS"
58
59     def process_line(self, line):
60         m = re.match(r'# IP Addr (\d+\.\d+\.\d+\.\d+)', line)
61         if m:
62             self.loop = subprocess.Popen('while :; do echo -n "Data Data Data" | nc -4u -q1 %s 7; done' % m.group(1), shell=True)
63
64
65     def process_data(self, testdir, rawiter):
66         passed = False
67         for line in rawiter:
68             if "SUCCESS" in line:
69                 passed = True
70         self.loop.kill()
71         return PassFailResult(passed)
72
73 @tests.add_test
74 class DevifNetTxSF(DevifTests):
75     ''' Devif Net TX Test'''
76     name = "devif_nettx_sf"
77     OP = "net_tx"
78     CARD = "sfn5122f"
79
80 @tests.add_test
81 class DevifNetTxE10k(DevifTests):
82     ''' Devif Net TX Test'''
83     name = "devif_nettx_e10k"
84     OP = "net_tx"
85     CARD = "e10k"
86
87 @tests.add_test
88 class DevifNetRxSF(DevifTests):
89     ''' Devif Net RX Test'''
90     name = "devif_netrx_sf"
91     OP = "net_rx"
92     CARD = "sfn5122f"
93
94 @tests.add_test
95 class DevifNetRxE10k(DevifTests):
96     ''' Devif Net RX Test'''
97     name = "devif_netrx_e10k"
98     OP = "net_rx"
99     CARD = "e10k"
100     f = os.popen('ifconfig eno2 | grep "inet\ addr" | cut -d: -f2 | cut -d" " -f1')
101     ip_string = f.read()
102     packedIP = socket.inet_aton(ip_string)
103     src_ip = struct.unpack("!L", packedIP)[0]
104
105 @tests.add_test
106 class DevifIdcTest(DevifTests):
107     ''' Devif IDC Test'''
108     name = "devif_idc_test"
109     OP = "idc"
110     CARD = "none"
111     src_ip = 0
112
113 @tests.add_test
114 class DevifDebug(DevifTests):
115     ''' Devif Debug Backend Test'''
116     name = "devif_debug"
117
118     def get_modules(self, build, machine):
119         self.machine = machine.name
120         modules = super(DevifTests, self).get_modules(build, machine)
121         modules.add_module("devif_idc", ["core=1"])
122         modules.add_module("devif_debug_test")
123
124         return modules
125