harness: devif test simplified getting IP
[barrelfish] / tools / harness / tests / devif_test.py
index 5aaf5c4..bbdff57 100644 (file)
@@ -9,12 +9,14 @@
 
 import re, datetime
 import debug, tests
+import subprocess
+import os
+import socket, struct
 from common import TestCommon, TimeoutError
 from results import RowResults, PassFailResult
 
 TEST_TIMEOUT = datetime.timedelta(minutes=8)
 
-
 class DevifTests(TestCommon):
 
     def __init__(self, options):
@@ -27,37 +29,74 @@ class DevifTests(TestCommon):
         super(DevifTests, self).boot(*args)
         self.set_timeout(TEST_TIMEOUT)
 
+    def get_decimal_ip(self, hostname):
+        iphex = subprocess.check_output('gethostip -x %s' % hostname, shell=True)
+        return '%d' % int(iphex, 16)
+      
     def get_modules(self, build, machine):
         self.machine = machine.name
         modules = super(DevifTests, self).get_modules(build, machine)
         modules.add_module("e10k", ["auto", "function=0"])
         modules.add_module("sfn5122f", ["auto", "function=0"])
         modules.add_module("devif_idc", ["core=1"])
-        modules.add_module(self.get_module_name(), ["core=2", self.OP, self.CARD])
 
+        hostname = '%s.in.barrelfish.org' % subprocess.check_output('hostname -s', shell=True).rstrip()
+        src_ip = self.get_decimal_ip(hostname)
+
+        if self.CARD == "sfn5122f":
+            dst_ip = self.get_decimal_ip('%s-sf.in.barrelfish.org' % machine.name)
+        else:
+            dst_ip = self.get_decimal_ip('%s-e10k.in.barrelfish.org' % machine.name)
+
+        modules.add_module(self.get_module_name(), ["core=2", self.OP, src_ip, dst_ip, self.CARD])
         return modules
 
-    def is_finished(self, line):
-        return line.startswith("SUCCESS")
+    def get_finish_string(self):
+        return "SUCCESS"
+
+    def process_line(self, line):
+        m = re.match(r'# IP Addr (\d+\.\d+\.\d+\.\d+)', line)
+        if m:
+            self.loop = subprocess.Popen('while :; do echo -n "Data Data Data" | nc -4u -q1 %s 7; done' % m.group(1), shell=True)
+
 
     def process_data(self, testdir, rawiter):
-        passed = False
+
+        if not (self.loop is None):
+            self.loop.kill()
+
         for line in rawiter:
             if "SUCCESS" in line:
-                passed = True
-        return PassFailResult(passed)
+                return PassFailResult(True)
+
+        return PassFailResult(False)
+
+
+@tests.add_test
+class DevifNetTxSF(DevifTests):
+    ''' Devif Net TX Test'''
+    name = "devif_nettx_sf"
+    OP = "net_tx"
+    CARD = "sfn5122f"
 
 @tests.add_test
-class DevifNetTxTest(DevifTests):
+class DevifNetTxE10k(DevifTests):
     ''' Devif Net TX Test'''
-    name = "devif_net_tx_test"
+    name = "devif_nettx_e10k"
     OP = "net_tx"
     CARD = "e10k"
 
 @tests.add_test
-class DevifNetRxTest(DevifTests):
+class DevifNetRxSF(DevifTests):
     ''' Devif Net RX Test'''
-    name = "devif_net_rx_test"
+    name = "devif_netrx_sf"
+    OP = "net_rx"
+    CARD = "sfn5122f"
+
+@tests.add_test
+class DevifNetRxE10k(DevifTests):
+    ''' Devif Net RX Test'''
+    name = "devif_netrx_e10k"
     OP = "net_rx"
     CARD = "e10k"
 
@@ -66,4 +105,25 @@ class DevifIdcTest(DevifTests):
     ''' Devif IDC Test'''
     name = "devif_idc_test"
     OP = "idc"
+    CARD = "none"
+
+@tests.add_test
+class DevifDebug(DevifTests):
+    ''' Devif Debug Backend Test'''
+    name = "devif_debug"
+
+    def get_modules(self, build, machine):
+        self.machine = machine.name
+        modules = super(DevifTests, self).get_modules(build, machine)
+        modules.add_module("devif_idc", ["core=1"])
+        modules.add_module("devif_debug_test")
+
+        return modules
+
+    def process_data(self, testdir, rawiter):
+        for line in rawiter:
+            if "SUCCESS" in line:
+                return PassFailResult(True)
+
+        return PassFailResult(False)