box_get removed and replaced for get in testbed_impl
authorAlina Quereilhac <alina.quereilhac@inria.fr>
Sun, 1 May 2011 17:24:02 +0000 (19:24 +0200)
committerAlina Quereilhac <alina.quereilhac@inria.fr>
Sun, 1 May 2011 17:24:02 +0000 (19:24 +0200)
src/nepi/core/testbed_impl.py
src/nepi/testbeds/netns/execute.py
src/nepi/testbeds/ns3/execute.py
src/nepi/testbeds/planetlab/execute.py
test/lib/mock/execute.py

index 05c7c96..25982db 100644 (file)
@@ -323,7 +323,7 @@ class TestbedController(execute.TestbedController):
             self._set[guid][time] = dict()
         self._set[guid][time][name] = value
 
             self._set[guid][time] = dict()
         self._set[guid][time][name] = value
 
-    def box_get(self, time, guid, name):
+    def get(self, time, guid, name):
         """
         Helper for subclasses, gets an attribute from box definitions
         if available. Throws KeyError if the GUID wasn't created
         """
         Helper for subclasses, gets an attribute from box definitions
         if available. Throws KeyError if the GUID wasn't created
@@ -341,8 +341,6 @@ class TestbedController(execute.TestbedController):
             raise AttributeError, "Attribute %s can only be queried during experiment design" % name
         return factory.box_attributes.get_attribute_value(name)
 
             raise AttributeError, "Attribute %s can only be queried during experiment design" % name
         return factory.box_attributes.get_attribute_value(name)
 
-    #get: NotImplementedError
-
     def box_get_route(self, guid, index, attribute):
         """
         Helper implementation for get_route, returns information
     def box_get_route(self, guid, index, attribute):
         """
         Helper implementation for get_route, returns information
index 935add1..605d410 100644 (file)
@@ -3,6 +3,7 @@
 
 from constants import TESTBED_ID
 from nepi.core import testbed_impl
 
 from constants import TESTBED_ID
 from nepi.core import testbed_impl
+from nepi.util.constants import TESTBED_STATUS_CREATED
 import os
 
 class TestbedController(testbed_impl.TestbedController):
 import os
 
 class TestbedController(testbed_impl.TestbedController):
@@ -24,28 +25,27 @@ class TestbedController(testbed_impl.TestbedController):
         self._home_directory = self._attributes.\
             get_attribute_value("homeDirectory")
         self._netns = self._load_netns_module()
         self._home_directory = self._attributes.\
             get_attribute_value("homeDirectory")
         self._netns = self._load_netns_module()
+        super(TestbedController, self).do_setup()
 
     def set(self, time, guid, name, value):
         super(TestbedController, self).set(time, guid, name, value)
 
     def set(self, time, guid, name, value):
         super(TestbedController, self).set(time, guid, name, value)
-        
         # TODO: take on account schedule time for the task 
         element = self._elements.get(guid)
         if element:
             setattr(element, name, value)
 
     def get(self, time, guid, name):
         # TODO: take on account schedule time for the task 
         element = self._elements.get(guid)
         if element:
             setattr(element, name, value)
 
     def get(self, time, guid, name):
+        value = super(TestbedController, self).get(time, guid, name)
         # TODO: take on account schedule time for the task
         # TODO: take on account schedule time for the task
+        factory_id = self._create[guid]
+        factory = self._factories[factory_id]
+        if factory.box_attributes.is_attribute_design_only(name):
+            return value
         element = self._elements.get(guid)
         element = self._elements.get(guid)
-        if element:
-            try:
-                if hasattr(element, name):
-                    # Runtime attribute
-                    return getattr(element, name)
-                else:
-                    # Try design-time attributes
-                    return self.box_get(time, guid, name)
-            except KeyError, AttributeError:
-                return None
+        try:
+            return getattr(element, name)
+        except KeyError, AttributeError:
+            return value
 
     def get_route(self, guid, index, attribute):
         # TODO: fetch real data from netns
 
     def get_route(self, guid, index, attribute):
         # TODO: fetch real data from netns
index a89a6b7..936d3ba 100644 (file)
@@ -42,31 +42,32 @@ class TestbedController(testbed_impl.TestbedController):
     def set(self, time, guid, name, value):
         super(TestbedController, self).set(time, guid, name, value)
         # TODO: take on account schedule time for the task
     def set(self, time, guid, name, value):
         super(TestbedController, self).set(time, guid, name, value)
         # TODO: take on account schedule time for the task
-        if self._status < TESTBED_STATUS_CREATED or \
-                factory.box_attributes.is_attribute_design_only(name):
+        factory_id = self._create[guid]
+        factory = self._factories[factory_id]
+        if factory.box_attributes.is_attribute_design_only(name):
             return
         element = self._elements[guid]
         ns3_value = self._to_ns3_value(guid, name, value) 
         element.SetAttribute(name, ns3_value)
 
     def get(self, time, guid, name):
             return
         element = self._elements[guid]
         ns3_value = self._to_ns3_value(guid, name, value) 
         element.SetAttribute(name, ns3_value)
 
     def get(self, time, guid, name):
+        value = super(TestbedController, self).get(time, guid, name)
         # TODO: take on account schedule time for the task
         # TODO: take on account schedule time for the task
+        factory_id = self._create[guid]
+        factory = self._factories[factory_id]
+        if factory.box_attributes.is_attribute_design_only(name):
+            return value
         TypeId = self.ns3.TypeId()
         typeid = TypeId.LookupByName(factory_id)
         info = TypeId.AttributeInfo()
         if not typeid or not typeid.LookupAttributeByName(name, info):
         TypeId = self.ns3.TypeId()
         typeid = TypeId.LookupByName(factory_id)
         info = TypeId.AttributeInfo()
         if not typeid or not typeid.LookupAttributeByName(name, info):
-            try:
-                # Try design-time attributes
-                return self.box_get(time, guid, name)
-            except KeyError, AttributeError:
-                return None
+            raise AttributeError("Invalid attribute %s for element type %d" % \
+                (name, guid))
         checker = info.checker
         ns3_value = checker.Create() 
         element = self._elements[guid]
         element.GetAttribute(name, ns3_value)
         value = ns3_value.SerializeToString(checker)
         checker = info.checker
         ns3_value = checker.Create() 
         element = self._elements[guid]
         element.GetAttribute(name, ns3_value)
         value = ns3_value.SerializeToString(checker)
-        factory_id = self._create[guid]
-        factory = self._factories[factory_id]
         attr_type = factory.box_attributes.get_attribute_type(name)
         if attr_type == Attribute.INTEGER:
             return int(value)
         attr_type = factory.box_attributes.get_attribute_type(name)
         if attr_type == Attribute.INTEGER:
             return int(value)
index edbaa9a..0f76fbf 100644 (file)
@@ -58,6 +58,7 @@ class TestbedController(testbed_impl.TestbedController):
             get_attribute_value("authPass")
         self.sliceSSHKey = self._attributes.\
             get_attribute_value("sliceSSHKey")
             get_attribute_value("authPass")
         self.sliceSSHKey = self._attributes.\
             get_attribute_value("sliceSSHKey")
+        super(TestbedController, self).do_setup()
 
     def do_preconfigure(self):
         # Perform resource discovery if we don't have
 
     def do_preconfigure(self):
         # Perform resource discovery if we don't have
@@ -107,7 +108,6 @@ class TestbedController(testbed_impl.TestbedController):
         # cleanup
         del self._to_provision
 
         # cleanup
         del self._to_provision
 
-
     def set(self, time, guid, name, value):
         super(TestbedController, self).set(time, guid, name, value)
         # TODO: take on account schedule time for the task
     def set(self, time, guid, name, value):
         super(TestbedController, self).set(time, guid, name, value)
         # TODO: take on account schedule time for the task
@@ -120,18 +120,17 @@ class TestbedController(testbed_impl.TestbedController):
                 element.refresh()
 
     def get(self, time, guid, name):
                 element.refresh()
 
     def get(self, time, guid, name):
+        value = super(TestbedController, self).get(time, guid, name)
         # TODO: take on account schedule time for the task
         # TODO: take on account schedule time for the task
+        factory_id = self._create[guid]
+        factory = self._factories[factory_id]
+        if factory.box_attributes.is_attribute_design_only(name):
+            return value
         element = self._elements.get(guid)
         element = self._elements.get(guid)
-        if element:
-            try:
-                if hasattr(element, name):
-                    # Runtime attribute
-                    return getattr(element, name)
-                else:
-                    # Try design-time attributes
-                    return self.box_get(time, guid, name)
-            except KeyError, AttributeError:
-                return None
+        try:
+            return getattr(element, name)
+        except KeyError, AttributeError:
+            return value
 
     def get_route(self, guid, index, attribute):
         # TODO: fetch real data from planetlab
 
     def get_route(self, guid, index, attribute):
         # TODO: fetch real data from planetlab
index c714cf2..f2b1278 100644 (file)
@@ -8,21 +8,9 @@ class TestbedController(testbed_impl.TestbedController):
     def __init__(self, testbed_version):
         super(TestbedController, self).__init__(TESTBED_ID, testbed_version)
 
     def __init__(self, testbed_version):
         super(TestbedController, self).__init__(TESTBED_ID, testbed_version)
 
-    def do_setup(self):
-        pass
-
     def do_configure(self):
         pass
 
     def do_configure(self):
         pass
 
-    def set(self, time, guid, name, value):
-        super(TestbedController, self).set(time, guid, name, value)
-
-    def get(self, time, guid, name):
-        try:
-            return self.box_get(time, guid, name)
-        except KeyError, AttributeError:
-            return None
-
     def get_route(self, guid, index, attribute):
         try:
             return self.box_get_route(guid, int(index), attribute)
     def get_route(self, guid, index, attribute):
         try:
             return self.box_get_route(guid, int(index), attribute)