Adding Rspec test files under /testbeds/iotlab/tests/tests_rspecs.
authorSandrine Avakian <sandrine.avakian@inria.fr>
Fri, 20 Sep 2013 12:16:59 +0000 (14:16 +0200)
committerMohamed Larabi <mohamed.larabi@inria.fr>
Wed, 2 Oct 2013 13:32:33 +0000 (15:32 +0200)
Fixing problem in import nodes.
Adding the filtering lease feature in iotlabapi.
In the future, if filtering the leases depending on their start time is needed,
that is only printing the leases scheduled in the next couple of
hours/days/weeks and so on is needed, this is already implemented in
the iotlab api(see GetLeases).

13 files changed:
sfa/importer/iotlabimporter.py
sfa/iotlab/iotlabapi.py
testbeds/iotlab/tests/driver_tests.py
testbeds/iotlab/tests/tests_rspecs/README [new file with mode: 0644]
testbeds/iotlab/tests/tests_rspecs/firexp_avakian_slice_iotlab.rspec [new file with mode: 0644]
testbeds/iotlab/tests/tests_rspecs/firexp_iotlab_slice_all.rspec [new file with mode: 0644]
testbeds/iotlab/tests/tests_rspecs/firexp_iotlab_slice_iotlab.rspec [new file with mode: 0644]
testbeds/iotlab/tests/tests_rspecs/iotlab_avakian_slice_all.rspec [new file with mode: 0644]
testbeds/iotlab/tests/tests_rspecs/iotlab_avakian_slice_iotlab.rspec [new file with mode: 0644]
testbeds/iotlab/tests/tests_rspecs/iotlab_avakian_slice_iotlab2.rspec [new file with mode: 0644]
testbeds/iotlab/tests/tests_rspecs/iotlab_avakian_slice_plab.rspec [new file with mode: 0644]
testbeds/iotlab/tests/tests_rspecs/iotlab_user_slice_iotlab.rspec [new file with mode: 0644]
testbeds/iotlab/tests/tests_rspecs/test_delete_all_leases.rspec [new file with mode: 0644]

index b95157a..5bd0344 100644 (file)
@@ -151,58 +151,6 @@ class IotlabImporter:
             return
         self.records_by_type_hrn[rec_tuple] = record
 
-    def import_sites_and_nodes(self, iotlabdriver):
-        """
-
-        Gets all the sites and nodes from OAR, process the information,
-        creates hrns and RegAuthority for sites, and feed them to the database.
-        For each site, import the site's nodes to the DB by calling
-        import_nodes.
-
-        :param iotlabdriver: IotlabDriver object, used to have access to
-            iotlabdriver methods and fetching info on sites and nodes.
-        :type iotlabdriver: IotlabDriver
-        """
-
-        sites_listdict = iotlabdriver.iotlab_api.GetSites()
-        nodes_listdict = iotlabdriver.iotlab_api.GetNodes()
-        nodes_by_id = dict([(node['node_id'], node) for node in nodes_listdict])
-        for site in sites_listdict:
-            site_hrn = site['name']
-            site_record = self.find_record_by_type_hrn ('authority', site_hrn)
-            if not site_record:
-                try:
-                    urn = hrn_to_urn(site_hrn, 'authority')
-                    if not self.auth_hierarchy.auth_exists(urn):
-                        self.auth_hierarchy.create_auth(urn)
-
-                    auth_info = self.auth_hierarchy.get_auth_info(urn)
-                    site_record = \
-                        RegAuthority(hrn=site_hrn,
-                                     gid=auth_info.get_gid_object(),
-                                     pointer='-1',
-                                     authority=get_authority(site_hrn))
-                    site_record.just_created()
-                    dbsession.add(site_record)
-                    dbsession.commit()
-                    self.logger.info("IotlabImporter: imported authority \
-                                    (site) %s" % site_record)
-                    self.update_just_added_records_dict(site_record)
-                except SQLAlchemyError:
-                    # if the site import fails then there is no point in
-                    # trying to import the
-                    # site's child records(node, slices, persons), so skip them.
-                    self.logger.log_exc("IotlabImporter: failed to import \
-                        site. Skipping child records")
-                    continue
-            else:
-                # xxx update the record ...
-                pass
-
-            site_record.stale = False
-            self.import_nodes(site['node_ids'], nodes_by_id, iotlabdriver)
-
-            return
 
     def import_nodes(self, site_node_ids, nodes_by_id, iotlabdriver):
         """
@@ -277,6 +225,63 @@ class IotlabImporter:
                 pass
             node_record.stale = False
 
+    def import_sites_and_nodes(self, iotlabdriver):
+        """
+
+        Gets all the sites and nodes from OAR, process the information,
+        creates hrns and RegAuthority for sites, and feed them to the database.
+        For each site, import the site's nodes to the DB by calling
+        import_nodes.
+
+        :param iotlabdriver: IotlabDriver object, used to have access to
+            iotlabdriver methods and fetching info on sites and nodes.
+        :type iotlabdriver: IotlabDriver
+        """
+
+        sites_listdict = iotlabdriver.iotlab_api.GetSites()
+        nodes_listdict = iotlabdriver.iotlab_api.GetNodes()
+        nodes_by_id = dict([(node['node_id'], node) for node in nodes_listdict])
+        for site in sites_listdict:
+            site_hrn = site['name']
+            site_record = self.find_record_by_type_hrn ('authority', site_hrn)
+            self.logger.info("IotlabImporter: import_sites_and_nodes \
+                                    (site) %s \r\n " % site_record)
+            if not site_record:
+                try:
+                    urn = hrn_to_urn(site_hrn, 'authority')
+                    if not self.auth_hierarchy.auth_exists(urn):
+                        self.auth_hierarchy.create_auth(urn)
+
+                    auth_info = self.auth_hierarchy.get_auth_info(urn)
+                    site_record = \
+                        RegAuthority(hrn=site_hrn,
+                                     gid=auth_info.get_gid_object(),
+                                     pointer='-1',
+                                     authority=get_authority(site_hrn))
+                    site_record.just_created()
+                    dbsession.add(site_record)
+                    dbsession.commit()
+                    self.logger.info("IotlabImporter: imported authority \
+                                    (site) %s" % site_record)
+                    self.update_just_added_records_dict(site_record)
+                except SQLAlchemyError:
+                    # if the site import fails then there is no point in
+                    # trying to import the
+                    # site's child records(node, slices, persons), so skip them.
+                    self.logger.log_exc("IotlabImporter: failed to import \
+                        site. Skipping child records")
+                    continue
+            else:
+                # xxx update the record ...
+                pass
+
+            site_record.stale = False
+            self.import_nodes(site['node_ids'], nodes_by_id, iotlabdriver)
+
+        return
+
+
+
     def init_person_key(self, person, iotlab_key):
         """
 
index 50592bd..0ccced9 100644 (file)
@@ -910,6 +910,30 @@ class IotlabTestbedAPI():
 
     #     return
 
+    @staticmethod
+    def filter_lease_name(reservation_list, filter_value):
+        filtered_reservation_list = list(reservation_list)
+        logger.debug("IOTLAB_API \t filter_lease_name reservation_list %s" \
+                        % (reservation_list))
+        for reservation in reservation_list:
+            if 'slice_hrn' in reservation and \
+                reservation['slice_hrn'] != filter_value:
+                filtered_reservation_list.remove(reservation)
+
+        logger.debug("IOTLAB_API \t filter_lease_name filtered_reservation_list %s" \
+                        % (filtered_reservation_list))
+        return filtered_reservation_list
+
+    @staticmethod
+    def filter_lease_start_time(reservation_list, filter_value):
+        filtered_reservation_list = list(reservation_list)
+
+        for reservation in reservation_list:
+            if 'start_time' in reservation and \
+                reservation['start_time'] > filter_value:
+                filtered_reservation_list.remove(reservation)
+
+        return filtered_reservation_list
 
     def GetLeases(self, lease_filter_dict=None, login=None):
         """
@@ -959,7 +983,7 @@ class IotlabTestbedAPI():
             if resa['lease_id'] in jobs_psql_dict:
                 job_info = jobs_psql_dict[resa['lease_id']]
                 logger.debug("IOTLAB_API \tGetLeases job_info %s"
-                             % (job_info))
+                          % (job_info))
                 resa['slice_hrn'] = job_info['slice_hrn']
                 resa['slice_id'] = hrn_to_urn(resa['slice_hrn'], 'slice')
 
@@ -976,12 +1000,33 @@ class IotlabTestbedAPI():
                 iotlab_xrn = iotlab_xrn_object(self.root_auth, node)
                 resa['component_id_list'].append(iotlab_xrn.urn)
 
-            if lease_filter_dict:
-                logger.debug("IOTLAB_API \tGetLeases resa_ %s \
-                        \r\n leasefilter %s" % (resa, lease_filter_dict))
+        if lease_filter_dict:
+            logger.debug("IOTLAB_API \tGetLeases resa_ %s \
+                    \r\n leasefilter %s" % (resa, lease_filter_dict))
+
+            filter_dict_functions = {
+            'slice_hrn' : IotlabTestbedAPI.filter_lease_name,
+            'start_time' : IotlabTestbedAPI.filter_lease_start_time
+            }
+            reservation_list = list(unfiltered_reservation_list)
+            for filter_type in lease_filter_dict:
+                logger.debug("IOTLAB_API \tGetLeases reservation_list %s" \
+                    % (reservation_list))
+                reservation_list = filter_dict_functions[filter_type](\
+                    reservation_list,lease_filter_dict[filter_type] )
+
+                # Filter the reservation list with a maximum timespan so that the
+                # leases and jobs running after this timestamp do not appear
+                # in the result leases.
+                # if 'start_time' in :
+                #     if resa['start_time'] < lease_filter_dict['start_time']:
+                #        reservation_list.append(resa)
+
+
+                # if 'name' in lease_filter_dict and \
+                #     lease_filter_dict['name'] == resa['slice_hrn']:
+                #     reservation_list.append(resa)
 
-                if lease_filter_dict['name'] == resa['slice_hrn']:
-                    reservation_list.append(resa)
 
         if lease_filter_dict is None:
             reservation_list = unfiltered_reservation_list
index 25fd3fa..bd5d571 100644 (file)
@@ -247,6 +247,15 @@ def TestOAR(job_id = None):
     return
 
 
+def TestImporter(arg=None):
+    iotlabdriver = IotlabDriver(Config())
+
+    nodes_listdict = iotlabdriver.iotlab_api.GetNodes()
+    sites_listdict = iotlabdriver.iotlab_api.GetSites()
+    nodes_by_id = dict([(node['node_id'], node) for node in nodes_listdict])
+
+    # from sfa.importer.iotlabimporter import IotlabImporter
+    # importer = IotlabImporter()
 
 def TestIotlabDriver(job_id = None):
     if job_id is None:
@@ -274,8 +283,12 @@ def TestIotlabDriver(job_id = None):
     leases = iotlabdriver.iotlab_api.GetLeases(login='avakian')
     print "\r\n \r\n  GetLeases", leases
 
+    leases = iotlabdriver.iotlab_api.GetLeases(lease_filter_dict={'slice_hrn':'iotlab.avakian_slice'})
+    print "\r\n \r\n  GetLeases", leases
 
 
+    leases = iotlabdriver.iotlab_api.GetLeases(lease_filter_dict={'t_from':1405070000})
+    print "\r\n \r\n  GetLeases", leases
 def  TestSfi(filename = None):
 
     if filename is None:
@@ -386,7 +399,8 @@ supported_options = {
         'driver': TestIotlabDriver,
         'sfi':TestSfi,
         'sql':TestSQL,
-        'all' : RunAll }
+        'all' : RunAll,
+        'import': TestImporter }
 
 def main():
     opts = parse_options()
diff --git a/testbeds/iotlab/tests/tests_rspecs/README b/testbeds/iotlab/tests/tests_rspecs/README
new file mode 100644 (file)
index 0000000..bf10e22
--- /dev/null
@@ -0,0 +1,36 @@
+Rspec file names
+======================
+Rspec file names are constructed as follows :
+        slice name used in this rspec + network in which the reserved nodes are
+
+Networks can be : iotlab, plab, all (iotlab + plab)
+       
+Slices and users
+=================
+user:
+login iotlab : user
+hrn iotlab: iotlab.user
+hrn firexp: firexp.flab.iotlab_user
+slice iotlab: iotlab.user_slice
+slice firexp : firexp.flab.iotlab_slice
+
+
+This special test  user comes from Firexp and is considered as an
+external user coming from a federated testbedd for Iotlab.
+
+user:
+login iotlab: avakian
+slice iotlab: iotlab.avakian_slice
+hrn firexp : firexp.flab.avakian (?)
+slice firexp : firexp.flab.avakian_slice (?)
+
+This user comes from iotlab. 
+
+
+Leases
+======
+
+The starting time of the leases in those RSpec files are
+usually set to be in 2014, so that we don't have to keep the
+date in mind and check that we are not scheduling a lease
+in the past.
diff --git a/testbeds/iotlab/tests/tests_rspecs/firexp_avakian_slice_iotlab.rspec b/testbeds/iotlab/tests/tests_rspecs/firexp_avakian_slice_iotlab.rspec
new file mode 100644 (file)
index 0000000..51539f8
--- /dev/null
@@ -0,0 +1,23 @@
+<?xml version="1.0"?>
+<RSpec type="SFA" expires="2013-02-27T15:14:10Z" generated="2013-02-27T14:14:10Z">
+  <network name="iotlab">
+    <node component_manager_id="urn:publicid:IDN+iotlab+authority+sa" component_id="urn:publicid:IDN+iotlab+node+node5.devlille.senslab.info" boot_state="Alive" component_name="node5.devlille.iotlab.info" site_id="urn:publicid:IDN+iotlab+authority+sa">
+      <hostname>node5.devlille.senslab.info</hostname>
+      <location country="France"/>
+      <exclusive>TRUE</exclusive>
+      <granularity grain="60"/>
+      <sliver/>
+    </node>
+    <node component_manager_id="urn:publicid:IDN+iotlab+authority+sa" component_id="urn:publicid:IDN+iotlab+node+node2.devlille.senslab.info" boot_state="Alive" component_name="node2.devlille.senslab.info" site_id="urn:publicid:IDN+iotlab+authority+sa">
+      <hostname>node2.devlille.senslab.info</hostname>
+      <location country="France"/>
+      <exclusive>TRUE</exclusive>
+      <granularity grain="60"/>
+      <sliver/>
+    </node>
+  </network>
+ <lease slice_id="urn:publicid:IDN+firexp:flab+slice+avakian_slice" start_time="1386765700" duration="10">
+       <node component_id="urn:publicid:IDN+iotlab+node+node2.devlille.senslab.info"/>
+       <node component_id="urn:publicid:IDN+iotlab+node+node5.devlille.senslab.info"/>
+ </lease>
+</RSpec>
diff --git a/testbeds/iotlab/tests/tests_rspecs/firexp_iotlab_slice_all.rspec b/testbeds/iotlab/tests/tests_rspecs/firexp_iotlab_slice_all.rspec
new file mode 100644 (file)
index 0000000..aa1d3b5
--- /dev/null
@@ -0,0 +1,38 @@
+<?xml version="1.0"?>
+<RSpec type="SFA" expires="2013-09-05T13:30:10Z" generated="2013-09-05T12:30:10Z">
+  <network name="plab" >
+    <node component_manager_id="urn:publicid:IDN+plab+authority+cm" component_id="urn:publicid:IDN+plab:plab+node+effet.pl.sophia.inria.fr" boot_state="boot" component_name="effet.pl.sophia.inria.fr" site_id="urn:publicid:IDN+plab:plab+authority+sa">
+      <hostname>effet.pl.sophia.inria.fr</hostname>
+      <exclusive>TRUE</exclusive>
+      <granularity grain="3600"/>
+      <interface component_id="urn:publicid:IDN+plab+interface+node2:eth0" ipv4="138.96.116.135"/>
+      <hrn>planetlab.test.plab.effet</hrn>
+      <sliver/>
+    </node>
+    <lease slice_id="urn:publicid:IDN+firexp:flab+slice+iotlab_slice" start_time="1412938800" duration="1">
+        <node component_id="urn:publicid:IDN+plab:plab+node+effet.pl.sophia.inria.fr"/>
+    </lease>
+  </network>
+  <network name="iotlab">
+    <node component_manager_id="urn:publicid:IDN+iotlab+authority+sa" component_id="urn:publicid:IDN+iotlab+node+node5.devlille.senslab.info" boot_state="Alive" component_name="node5.devlille.iotlab.info" site_id="urn:publicid:IDN+iotlab+authority+sa">
+      <hostname>node5.devlille.senslab.info</hostname>
+      <location country="France"/>
+      <exclusive>TRUE</exclusive>
+      <granularity grain="60"/>
+      <sliver/>
+    </node>
+    <node component_manager_id="urn:publicid:IDN+iotlab+authority+sa" component_id="urn:publicid:IDN+iotlab+node+node2.devlille.senslab.info" boot_state="Alive" component_name="node2.devlille.senslab.info" site_id="urn:publicid:IDN+iotlab+authority+sa">
+      <hostname>node2.devlille.senslab.info</hostname>
+      <location country="France"/>
+      <exclusive>TRUE</exclusive>
+      <granularity grain="60"/>
+      <sliver/>
+    </node>
+    <lease slice_id="urn:publicid:IDN+firexp:flab+slice+iotlab_slice" start_time="1412938800" duration="60">
+       <node component_id="urn:publicid:IDN+iotlab+node+node2.devlille.senslab.info"/>
+       <node component_id="urn:publicid:IDN+iotlab+node+node5.devlille.senslab.info"/>
+    </lease>
+  </network>
+</RSpec>
+
+
diff --git a/testbeds/iotlab/tests/tests_rspecs/firexp_iotlab_slice_iotlab.rspec b/testbeds/iotlab/tests/tests_rspecs/firexp_iotlab_slice_iotlab.rspec
new file mode 100644 (file)
index 0000000..93719f6
--- /dev/null
@@ -0,0 +1,23 @@
+<?xml version="1.0"?>
+<RSpec type="SFA" expires="2013-02-27T15:14:10Z" generated="2013-02-27T14:14:10Z">
+  <network name="iotlab">
+    <node component_manager_id="urn:publicid:IDN+iotlab+authority+sa" component_id="urn:publicid:IDN+iotlab+node+node5.devlille.senslab.info" boot_state="Alive" component_name="node5.devlille.iotlab.info" site_id="urn:publicid:IDN+iotlab+authority+sa">
+      <hostname>node5.devlille.senslab.info</hostname>
+      <location country="France"/>
+      <exclusive>TRUE</exclusive>
+      <granularity grain="1"/>
+      <sliver/>
+    </node>
+    <node component_manager_id="urn:publicid:IDN+iotlab+authority+sa" component_id="urn:publicid:IDN+iotlab+node+node2.devlille.senslab.info" boot_state="Alive" component_name="node2.devlille.senslab.info" site_id="urn:publicid:IDN+iotlab+authority+sa">
+      <hostname>node2.devlille.senslab.info</hostname>
+      <location country="France"/>
+      <exclusive>TRUE</exclusive>
+      <granularity grain="1"/>
+      <sliver/>
+    </node>
+  </network>
+ <lease slice_id="urn:publicid:IDN+firexp:flab+slice+iotlab_slice" start_time="1405078900" duration="600">
+       <node component_id="urn:publicid:IDN+iotlab+node+node2.devlille.senslab.info"/>
+       <node component_id="urn:publicid:IDN+iotlab+node+node5.devlille.senslab.info"/>
+ </lease>
+</RSpec>
diff --git a/testbeds/iotlab/tests/tests_rspecs/iotlab_avakian_slice_all.rspec b/testbeds/iotlab/tests/tests_rspecs/iotlab_avakian_slice_all.rspec
new file mode 100644 (file)
index 0000000..bc0f78b
--- /dev/null
@@ -0,0 +1,38 @@
+<?xml version="1.0"?>
+<RSpec type="SFA" expires="2013-09-05T13:30:10Z" generated="2013-09-05T12:30:10Z">
+  <network name="plab" >
+    <node component_manager_id="urn:publicid:IDN+plab+authority+cm" component_id="urn:publicid:IDN+plab:plab+node+effet.pl.sophia.inria.fr" boot_state="boot" component_name="effet.pl.sophia.inria.fr" site_id="urn:publicid:IDN+plab:plab+authority+sa">
+      <hostname>effet.pl.sophia.inria.fr</hostname>
+      <exclusive>TRUE</exclusive>
+      <granularity grain="3600"/>
+      <interface component_id="urn:publicid:IDN+plab+interface+node2:eth0" ipv4="138.96.116.135"/>
+      <hrn>planetlab.test.plab.effet</hrn>
+      <sliver/>
+    </node>
+    <lease slice_id="urn:publicid:IDN+iotlab+slice+avakian_slice" start_time="1410346800" duration="1">
+        <node component_id="urn:publicid:IDN+plab:plab+node+effet.pl.sophia.inria.fr"/>
+    </lease>
+  </network>
+  <network name="iotlab">
+    <node component_manager_id="urn:publicid:IDN+iotlab+authority+sa" component_id="urn:publicid:IDN+iotlab+node+node5.devlille.senslab.info" boot_state="Alive" component_name="node5.devlille.iotlab.info" site_id="urn:publicid:IDN+iotlab+authority+sa">
+      <hostname>node5.devlille.senslab.info</hostname>
+      <location country="France"/>
+      <exclusive>TRUE</exclusive>
+      <granularity grain="60"/>
+      <sliver/>
+    </node>
+    <node component_manager_id="urn:publicid:IDN+iotlab+authority+sa" component_id="urn:publicid:IDN+iotlab+node+node2.devlille.senslab.info" boot_state="Alive" component_name="node2.devlille.senslab.info" site_id="urn:publicid:IDN+iotlab+authority+sa">
+      <hostname>node2.devlille.senslab.info</hostname>
+      <location country="France"/>
+      <exclusive>TRUE</exclusive>
+      <granularity grain="60"/>
+      <sliver/>
+    </node>
+    <lease slice_id="urn:publicid:IDN+iotlab+slice+avakian_slice" start_time="1410346800" duration="60">
+       <node component_id="urn:publicid:IDN+iotlab+node+node2.devlille.senslab.info"/>
+       <node component_id="urn:publicid:IDN+iotlab+node+node5.devlille.senslab.info"/>
+    </lease>
+  </network>
+</RSpec>
+
+
diff --git a/testbeds/iotlab/tests/tests_rspecs/iotlab_avakian_slice_iotlab.rspec b/testbeds/iotlab/tests/tests_rspecs/iotlab_avakian_slice_iotlab.rspec
new file mode 100644 (file)
index 0000000..20e50b5
--- /dev/null
@@ -0,0 +1,23 @@
+<?xml version="1.0"?>
+<RSpec type="SFA" expires="2013-02-27T15:14:10Z" generated="2013-02-27T14:14:10Z">
+  <network name="iotlab">
+    <node component_manager_id="urn:publicid:IDN+iotlab+authority+sa" component_id="urn:publicid:IDN+iotlab+node+node5.devlille.senslab.info" boot_state="Alive" component_name="node5.devlille.senslab.info" site_id="urn:publicid:IDN+senslab+authority+sa">
+      <hostname>node5.devlille.senslab.info</hostname>
+      <location country="France"/>
+      <exclusive>TRUE</exclusive>
+      <granularity grain="60"/>
+      <sliver/>
+    </node>
+    <node component_manager_id="urn:publicid:IDN+iotlab+authority+sa" component_id="urn:publicid:IDN+iotlab+node+node2.devlille.senslab.info" boot_state="Alive" component_name="node2.devlille.senslab.info" site_id="urn:publicid:IDN+senslab+authority+sa">
+      <hostname>node2.devlille.senslab.info</hostname>
+      <location country="France"/>
+      <exclusive>TRUE</exclusive>
+      <granularity grain="60"/>
+      <sliver/>
+    </node>
+  </network>
+ <lease slice_id="urn:publicid:IDN+iotlab+slice+sandrine_slice" start_time="1405078836" duration="20">
+       <node component_id="urn:publicid:IDN+iotlab+node+node2.devlille.senslab.info"/>
+       <node component_id="urn:publicid:IDN+iotlab+node+node5.devlille.senslab.info"/>
+ </lease>
+</RSpec>
diff --git a/testbeds/iotlab/tests/tests_rspecs/iotlab_avakian_slice_iotlab2.rspec b/testbeds/iotlab/tests/tests_rspecs/iotlab_avakian_slice_iotlab2.rspec
new file mode 100644 (file)
index 0000000..c885111
--- /dev/null
@@ -0,0 +1,35 @@
+<?xml version="1.0"?>
+<RSpec type="SFA" expires="2013-02-27T15:14:10Z" generated="2013-02-27T14:14:10Z">
+  <network name="iotlab">
+    <node component_manager_id="urn:publicid:IDN+iotlab+authority+sa" component_id="urn:publicid:IDN+iotlab+node+node11.devlille.senslab.info" boot_state="Alive" component_name="node5.devlille.senslab.info" site_id="urn:publicid:IDN+senslab+authority+sa">
+      <hostname>node11.devlille.senslab.info</hostname>
+      <location country="France"/>
+      <exclusive>TRUE</exclusive>
+      <granularity grain="600"/>
+      <sliver/>
+    </node>
+    <node component_manager_id="urn:publicid:IDN+iotlab+authority+sa" component_id="urn:publicid:IDN+iotlab+node+node12.devlille.senslab.info" boot_state="Alive" component_name="node2.devlille.senslab.info" site_id="urn:publicid:IDN+senslab+authority+sa">
+      <hostname>node12.devlille.senslab.info</hostname>
+      <location country="France"/>
+      <exclusive>TRUE</exclusive>
+      <granularity grain="600"/>
+      <sliver/>
+    </node>
+  </network>
+  <network name="plab">
+    <node component_manager_id="urn:publicid:IDN+plab+authority+cm" component_id="urn:publicid:IDN+plab:plab+node+effet.pl.sophia.inria.fr" boot_state="boot" component_name="effet.pl.sophia.inria.fr" site_id="urn:publicid:IDN+plab:plab+authority+sa">
+      <hostname>effet.pl.sophia.inria.fr</hostname>
+      <exclusive>FALSE</exclusive>
+      <interface component_id="urn:publicid:IDN+plab+interface+node1:eth0" ipv4="138.96.116.135"/>
+      <arch>x86_64</arch>
+      <fcdistro>f14</fcdistro>
+      <pldistro>onelab</pldistro>
+      <hrn>planetlab.test.plab.effet</hrn>
+      <sliver/>
+    </node>
+     <lease slice_id="urn:publicid:IDN+iotlab+slice+avakian_slice" start_time="1405078900" duration="10">
+       <node component_id="urn:publicid:IDN+iotlab+node+node12.devlille.senslab.info"/>
+       <node component_id="urn:publicid:IDN+iotlab+node+node11.devlille.senslab.info"/>
+    </lease>
+ </network>
+</RSpec>
diff --git a/testbeds/iotlab/tests/tests_rspecs/iotlab_avakian_slice_plab.rspec b/testbeds/iotlab/tests/tests_rspecs/iotlab_avakian_slice_plab.rspec
new file mode 100644 (file)
index 0000000..3bf9373
--- /dev/null
@@ -0,0 +1,16 @@
+<?xml version="1.0"?>
+<RSpec type="SFA" expires="2014-02-27T15:14:10Z" generated="2013-02-27T14:14:10Z">
+  <network name="plab">
+    <node component_manager_id="urn:publicid:IDN+plab+authority+cm" component_id="urn:publicid:IDN+plab:plab+node+effet.pl.sophia.inria.fr" boot_state="boot" component_name="effet.pl.sophia.inria.fr" site_id="urn:publicid:IDN+plab:plab+authority+sa">
+      <hostname>effet.pl.sophia.inria.fr</hostname>
+      <exclusive>TRUE</exclusive>
+      <granularity grain="3600"/>
+      <interface component_id="urn:publicid:IDN+plab+interface+node2:eth0" ipv4="138.96.116.135"/>
+      <hrn>planetlab.test.plab.effet</hrn>
+      <sliver/>        
+    </node>
+  </network>
+ <lease slice_id="urn:publicid:IDN+iotlab+slice+avakian_slice" start_time="1405080000" duration="2">
+       <node component_id="urn:publicid:IDN+plab:plab+node+effet.pl.sophia.inria.fr"/>
+ </lease>
+</RSpec>
diff --git a/testbeds/iotlab/tests/tests_rspecs/iotlab_user_slice_iotlab.rspec b/testbeds/iotlab/tests/tests_rspecs/iotlab_user_slice_iotlab.rspec
new file mode 100644 (file)
index 0000000..75b1fdb
--- /dev/null
@@ -0,0 +1,25 @@
+<?xml version="1.0"?>
+<RSpec type="SFA" expires="2013-02-27T15:14:10Z" generated="2013-02-27T14:14:10Z">
+  <network name="iotlab">
+    <node component_manager_id="urn:publicid:IDN+iotlab+authority+sa" component_id="urn:publicid:IDN+iotlab+node+node11.devlille.senslab.info" boot_state="Alive" component_name="node5.devlille.senslab.info" site_id="urn:publicid:IDN+senslab+authority+sa">
+      <hostname>node11.devlille.senslab.info</hostname>
+      <location country="France"/>
+      <exclusive>TRUE</exclusive>
+      <granularity grain="600"/>
+      <sliver/>
+    </node>
+    <node component_manager_id="urn:publicid:IDN+iotlab+authority+sa" component_id="urn:publicid:IDN+iotlab+node+node12.devlille.senslab.info" boot_state="Alive" component_name="node2.devlille.senslab.info" site_id="urn:publicid:IDN+senslab+authority+sa">
+      <hostname>node12.devlille.senslab.info</hostname>
+      <location country="France"/>
+      <exclusive>TRUE</exclusive>
+      <granularity grain="600"/>
+      <sliver/>
+    </node>
+  </network>
+ <lease slice_id="urn:publicid:IDN+iotlab+slice+user_slice" start_time="1405078900" duration="601">
+       <node component_id="urn:publicid:IDN+iotlab+node+node12.devlille.senslab.info"/>
+       <node component_id="urn:publicid:IDN+iotlab+node+node11.devlille.senslab.info"/>
+ </lease>
+
+
+</RSpec>
diff --git a/testbeds/iotlab/tests/tests_rspecs/test_delete_all_leases.rspec b/testbeds/iotlab/tests/tests_rspecs/test_delete_all_leases.rspec
new file mode 100644 (file)
index 0000000..ad1d659
--- /dev/null
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<RSpec type="SFA" expires="2013-09-05T13:30:10Z" generated="2013-09-05T12:30:10Z">
+  <network name="plab" >
+     </network>
+  <network name="iotlab">
+     </network>
+</RSpec>
+
+