harness: devif test simplified getting IP
[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     def get_decimal_ip(self, hostname):
33         iphex = subprocess.check_output('gethostip -x %s' % hostname, shell=True)
34         return '%d' % int(iphex, 16)
35       
36     def get_modules(self, build, machine):
37         self.machine = machine.name
38         modules = super(DevifTests, self).get_modules(build, machine)
39         modules.add_module("e10k", ["auto", "function=0"])
40         modules.add_module("sfn5122f", ["auto", "function=0"])
41         modules.add_module("devif_idc", ["core=1"])
42
43         hostname = '%s.in.barrelfish.org' % subprocess.check_output('hostname -s', shell=True).rstrip()
44         src_ip = self.get_decimal_ip(hostname)
45
46         if self.CARD == "sfn5122f":
47             dst_ip = self.get_decimal_ip('%s-sf.in.barrelfish.org' % machine.name)
48         else:
49             dst_ip = self.get_decimal_ip('%s-e10k.in.barrelfish.org' % machine.name)
50
51         modules.add_module(self.get_module_name(), ["core=2", self.OP, src_ip, dst_ip, self.CARD])
52         return modules
53
54     def get_finish_string(self):
55         return "SUCCESS"
56
57     def process_line(self, line):
58         m = re.match(r'# IP Addr (\d+\.\d+\.\d+\.\d+)', line)
59         if m:
60             self.loop = subprocess.Popen('while :; do echo -n "Data Data Data" | nc -4u -q1 %s 7; done' % m.group(1), shell=True)
61
62
63     def process_data(self, testdir, rawiter):
64
65         if not (self.loop is None):
66             self.loop.kill()
67
68         for line in rawiter:
69             if "SUCCESS" in line:
70                 return PassFailResult(True)
71
72         return PassFailResult(False)
73
74
75 @tests.add_test
76 class DevifNetTxSF(DevifTests):
77     ''' Devif Net TX Test'''
78     name = "devif_nettx_sf"
79     OP = "net_tx"
80     CARD = "sfn5122f"
81
82 @tests.add_test
83 class DevifNetTxE10k(DevifTests):
84     ''' Devif Net TX Test'''
85     name = "devif_nettx_e10k"
86     OP = "net_tx"
87     CARD = "e10k"
88
89 @tests.add_test
90 class DevifNetRxSF(DevifTests):
91     ''' Devif Net RX Test'''
92     name = "devif_netrx_sf"
93     OP = "net_rx"
94     CARD = "sfn5122f"
95
96 @tests.add_test
97 class DevifNetRxE10k(DevifTests):
98     ''' Devif Net RX Test'''
99     name = "devif_netrx_e10k"
100     OP = "net_rx"
101     CARD = "e10k"
102
103 @tests.add_test
104 class DevifIdcTest(DevifTests):
105     ''' Devif IDC Test'''
106     name = "devif_idc_test"
107     OP = "idc"
108     CARD = "none"
109
110 @tests.add_test
111 class DevifDebug(DevifTests):
112     ''' Devif Debug Backend Test'''
113     name = "devif_debug"
114
115     def get_modules(self, build, machine):
116         self.machine = machine.name
117         modules = super(DevifTests, self).get_modules(build, machine)
118         modules.add_module("devif_idc", ["core=1"])
119         modules.add_module("devif_debug_test")
120
121         return modules
122
123     def process_data(self, testdir, rawiter):
124         for line in rawiter:
125             if "SUCCESS" in line:
126                 return PassFailResult(True)
127
128         return PassFailResult(False)
129