Various fixes:
authorClaudio-Daniel Freire <claudio-daniel.freire@inria.fr>
Fri, 22 Jul 2011 08:57:38 +0000 (10:57 +0200)
committerClaudio-Daniel Freire <claudio-daniel.freire@inria.fr>
Fri, 22 Jul 2011 08:57:38 +0000 (10:57 +0200)
 - Parallelization fix: sync before post-actions
 - Fix port randomization in PL tests

src/nepi/core/testbed_impl.py
src/nepi/testbeds/planetlab/application.py
src/nepi/util/parallel.py
test/testbeds/planetlab/execute.py
test/testbeds/planetlab/integration.py
test/testbeds/planetlab/integration_cross.py
test/testbeds/planetlab/integration_multi.py
test/testbeds/planetlab/integration_ns3.py

index 465a557..84cab89 100644 (file)
@@ -257,6 +257,10 @@ class TestbedController(execute.TestbedController):
                 else:
                     logger.debug("Performing %s on %s", action, guid)
                     perform_action(guid)
+
+            # sync
+            if runner:
+                runner.sync()
             
             # post hook
             if poststep:
index 7cdd723..5dcd263 100644 (file)
@@ -483,7 +483,7 @@ class Dependency(object):
             # Install application
             try:
                 self._popen_ssh_command(
-                    "cd %(home)s && cd build && ( %(command)s ) > ${HOME}/%(home)s/installlog 2>&1 || ( tail ${HOME}/%(home)s/installlog >&2 && false )" % \
+                    "cd %(home)s && cd build && ( %(command)s ) > ${HOME}/%(home)s/installlog 2>&1 || ( tail ${HOME}/%(home)s/{install,build}log >&2 && false )" % \
                         {
                         'command' : self._replace_paths(self.install),
                         'home' : server.shell_escape(self.home_path),
@@ -804,10 +804,21 @@ class NS3Dependency(Dependency):
             "  test -f lib/libns3.so "
             " ) || ( "
                 # Not working, rebuild
-                     "wget -q -c -O pybindgen-src.zip %(pybindgen_source_url)s && " # continue, to exploit the case when it has already been dl'ed
-                     "wget -q -c -O pygccxml-1.0.0.zip %(pygccxml_source_url)s && " 
-                     "wget -q -c -O passfd-src.tar.gz %(passfd_source_url)s && "
-                     "wget -q -c -O ns3-src.tar.gz %(ns3_source_url)s && "  
+                     # Archive SHA1 sums to check
+                     "echo '7158877faff2254e6c094bf18e6b4283cac19137  pygccxml-1.0.0.zip' > archive_sums.txt && "
+                     "echo 'ddc7c5d288e1bacb1307114878956762c5146fac  pybindgen-src.zip' >> archive_sums.txt && "
+                     " ( " # check existing files
+                     " sha1sum -c archive_sums.txt && "
+                     " test -f passfd-src.tar.gz && "
+                     " test -f ns3-src.tar.gz "
+                     " ) || ( " # nope? re-download
+                     " rm -f pybindgen-src.zip pygccxml-1.0.0.zip passfd-src.tar.gz ns3-src.tar.gz && "
+                     " wget -q -c -O pybindgen-src.zip %(pybindgen_source_url)s && " # continue, to exploit the case when it has already been dl'ed
+                     " wget -q -c -O pygccxml-1.0.0.zip %(pygccxml_source_url)s && " 
+                     " wget -q -c -O passfd-src.tar.gz %(passfd_source_url)s && "
+                     " wget -q -c -O ns3-src.tar.gz %(ns3_source_url)s && "  
+                     " sha1sum -c archive_sums.txt " # Check SHA1 sums when applicable
+                     " ) && "
                      "unzip -n pybindgen-src.zip && " # Do not overwrite files, to exploit the case when it has already been built
                      "unzip -n pygccxml-1.0.0.zip && "
                      "mkdir -p ns3-src && "
index 15e1bb2..b5869b9 100644 (file)
@@ -61,6 +61,9 @@ class ParallelMap(object):
         if self.delayed_exceptions:
             typ,val,loc = self.delayed_exceptions[0]
             raise typ,val,loc
+    
+    def sync(self):
+        self.queue.join()
         
     def worker(self):
         while True:
index 15e69b7..137b258 100755 (executable)
@@ -25,7 +25,7 @@ class PlanetLabExecuteTestCase(unittest.TestCase):
     
     def setUp(self):
         self.root_dir = tempfile.mkdtemp()
-        self.port_base = self.port_base + 100
+        self.__class__.port_base = self.port_base + 100
         
     def tearDown(self):
         try:
@@ -52,6 +52,7 @@ class PlanetLabExecuteTestCase(unittest.TestCase):
         instance.defer_configure("authUser", pl_user)
         instance.defer_configure("authPass", pl_pwd)
         instance.defer_configure("plcHost", plchost)
+        instance.defer_configure("tapPortBase", self.port_base)
         
         return instance
 
index 8163a72..b5b2837 100755 (executable)
@@ -29,7 +29,7 @@ class PlanetLabIntegrationTestCase(unittest.TestCase):
     
     def setUp(self):
         self.root_dir = tempfile.mkdtemp()
-        self.port_base = self.port_base + 100
+        self.__class__.port_base = self.port_base + 100
 
     def tearDown(self):
         try:
@@ -57,6 +57,7 @@ class PlanetLabIntegrationTestCase(unittest.TestCase):
         pl_desc.set_attribute_value("authUser", pl_user)
         pl_desc.set_attribute_value("authPass", pl_pwd)
         pl_desc.set_attribute_value("plcHost", plchost)
+        pl_desc.set_attribute_value("tapPortBase", self.port_base)
         
         return pl_desc, exp_desc
     
index 5477911..e20ad97 100755 (executable)
@@ -33,7 +33,7 @@ class PlanetLabMultiIntegrationTestCase(unittest.TestCase):
     
     def setUp(self):
         self.root_dir = tempfile.mkdtemp()
-        self.port_base = self.port_base + 100
+        self.__class__.port_base = self.port_base + 100
 
     def tearDown(self):
         try:
@@ -66,6 +66,7 @@ class PlanetLabMultiIntegrationTestCase(unittest.TestCase):
         pl_desc.set_attribute_value("authUser", pl_user)
         pl_desc.set_attribute_value("authPass", pl_pwd)
         pl_desc.set_attribute_value("plcHost", plchost1)
+        pl_desc.set_attribute_value("tapPortBase", self.port_base)
 
         pl_desc2 = exp_desc.add_testbed_description(pl_provider)
         pl_desc2.set_attribute_value("homeDirectory", self.root_dir+"v2")
@@ -74,6 +75,7 @@ class PlanetLabMultiIntegrationTestCase(unittest.TestCase):
         pl_desc2.set_attribute_value("authUser", pl_user)
         pl_desc2.set_attribute_value("authPass", pl_pwd)
         pl_desc2.set_attribute_value("plcHost", plchost2)
+        pl_desc2.set_attribute_value("tapPortBase", self.port_base+100)
         
         return pl_desc, pl_desc2, exp_desc
     
index eaa0543..b8e8527 100755 (executable)
@@ -33,7 +33,7 @@ class PlanetLabMultiIntegrationTestCase(unittest.TestCase):
     
     def setUp(self):
         self.root_dir = tempfile.mkdtemp()
-        self.port_base = self.port_base + 100
+        self.__class__.port_base = self.port_base + 100
 
     def tearDown(self):
         try:
@@ -66,6 +66,7 @@ class PlanetLabMultiIntegrationTestCase(unittest.TestCase):
         pl_desc.set_attribute_value("authUser", pl_user)
         pl_desc.set_attribute_value("authPass", pl_pwd)
         pl_desc.set_attribute_value("plcHost", plchost1)
+        pl_desc.set_attribute_value("tapPortBase", self.port_base)
 
         pl_desc2 = exp_desc.add_testbed_description(pl_provider)
         pl_desc2.set_attribute_value("homeDirectory", self.root_dir+"v2")
@@ -74,6 +75,7 @@ class PlanetLabMultiIntegrationTestCase(unittest.TestCase):
         pl_desc2.set_attribute_value("authUser", pl_user)
         pl_desc2.set_attribute_value("authPass", pl_pwd)
         pl_desc2.set_attribute_value("plcHost", plchost2)
+        pl_desc.set_attribute_value("tapPortBase", self.port_base+100)
         
         return pl_desc, pl_desc2, exp_desc
     
index 5671f1a..8091468 100755 (executable)
@@ -28,7 +28,7 @@ class PlanetLabCrossIntegrationTestCase(unittest.TestCase):
     
     def setUp(self):
         self.root_dir = tempfile.mkdtemp()
-        self.port_base = self.port_base + 100
+        self.__class__.port_base = self.port_base + 100
 
     def tearDown(self):
         try:
@@ -56,6 +56,7 @@ class PlanetLabCrossIntegrationTestCase(unittest.TestCase):
         pl_desc.set_attribute_value("authUser", pl_user)
         pl_desc.set_attribute_value("authPass", pl_pwd)
         pl_desc.set_attribute_value("plcHost", plchost)
+        pl_desc.set_attribute_value("tapPortBase", self.port_base)
         
         return pl_desc, exp_desc