harness: fixed devif test processing bug
[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
67         if not (self.loop is None):
68             self.loop.kill()
69
70         for line in rawiter:
71             if "SUCCESS" in line:
72                 return PassFailResult(True)
73
74         return PassFailResult(False)
75
76
77 @tests.add_test
78 class DevifNetTxSF(DevifTests):
79     ''' Devif Net TX Test'''
80     name = "devif_nettx_sf"
81     OP = "net_tx"
82     CARD = "sfn5122f"
83
84 @tests.add_test
85 class DevifNetTxE10k(DevifTests):
86     ''' Devif Net TX Test'''
87     name = "devif_nettx_e10k"
88     OP = "net_tx"
89     CARD = "e10k"
90
91 @tests.add_test
92 class DevifNetRxSF(DevifTests):
93     ''' Devif Net RX Test'''
94     name = "devif_netrx_sf"
95     OP = "net_rx"
96     CARD = "sfn5122f"
97
98 @tests.add_test
99 class DevifNetRxE10k(DevifTests):
100     ''' Devif Net RX Test'''
101     name = "devif_netrx_e10k"
102     OP = "net_rx"
103     CARD = "e10k"
104     f = os.popen('ifconfig eno2 | grep "inet\ addr" | cut -d: -f2 | cut -d" " -f1')
105     ip_string = f.read()
106     packedIP = socket.inet_aton(ip_string)
107     src_ip = struct.unpack("!L", packedIP)[0]
108
109 @tests.add_test
110 class DevifIdcTest(DevifTests):
111     ''' Devif IDC Test'''
112     name = "devif_idc_test"
113     OP = "idc"
114     CARD = "none"
115     src_ip = 0
116
117 @tests.add_test
118 class DevifDebug(DevifTests):
119     ''' Devif Debug Backend Test'''
120     name = "devif_debug"
121
122     def get_modules(self, build, machine):
123         self.machine = machine.name
124         modules = super(DevifTests, self).get_modules(build, machine)
125         modules.add_module("devif_idc", ["core=1"])
126         modules.add_module("devif_debug_test")
127
128         return modules
129
130     def process_data(self, testdir, rawiter):
131         for line in rawiter:
132             if "SUCCESS" in line:
133                 return PassFailResult(True)
134
135         return PassFailResult(False)
136