harness: devif test simplified getting IP
[barrelfish] / tools / harness / tests / devif_test.py
index 5595dff..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,25 +29,48 @@ 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 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):
@@ -54,7 +79,6 @@ class DevifNetTxSF(DevifTests):
     OP = "net_tx"
     CARD = "sfn5122f"
 
-
 @tests.add_test
 class DevifNetTxE10k(DevifTests):
     ''' Devif Net TX Test'''
@@ -95,3 +119,11 @@ class DevifDebug(DevifTests):
         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)
+