Adding linux ns3 server unit test
[nepi.git] / src / nepi / resources / ns3 / ns3base.py
index f8d7d12..ba03596 100644 (file)
 from nepi.execution.resource import ResourceManager, clsinit_copy, \
         ResourceState, reschedule_delay
 
-from nepi.execute.attributes import Flags
-from nepi.resources.ns3.ns3simulator import NS3Simulator
-from nepi.resources.ns3.ns3node import NS3BaseNode
+from nepi.execution.attribute import Flags
 
 @clsinit_copy
 class NS3Base(ResourceManager):
-    _rtype = "ns3::Object"
+    _rtype = "abstract::ns3::Object"
+    _backend_type = "ns3"
 
-    def __init__(self):
-        super(NS3Base, self).__init__()
+    def __init__(self, ec, guid):
+        super(NS3Base, self).__init__(ec, guid)
         self._uuid = None
         self._connected = set()
 
@@ -43,16 +42,14 @@ class NS3Base(ResourceManager):
 
     @property
     def simulator(self):
-        simulators = self.get_connected(NS3Simulator.get_rtype())
-        if simulators: return simulators[0]
-        # if the object is not directly connected to the simulator,
-        # it should be connected to a node
+        # Ns3 RMs should be connected to the simulator through a ns3 node 
         node = self.node
         if node: return node.simulator
         return None
          
     @property
     def node(self):
+        from nepi.resources.ns3.ns3node import NS3BaseNode
         nodes = self.get_connected(NS3BaseNode.get_rtype())
         if nodes: return nodes[0]
         return None
@@ -69,13 +66,13 @@ class NS3Base(ResourceManager):
             return 
 
         kwargs = dict()
-        for attr in self._attrs:
-            if not attr.value or attr.has_flag(Flags.ReadOnly):
+        for attr in self._attrs.values():
+            if not (attr.has_changed() and attr.has_flag(Flags.Construct)):
                 continue
 
             kwargs[attr.name] = attr.value
 
-        self.uuid = self.simulator.factory(self.get_rtype(), **kwargs)
+        self._uuid = self.simulator.factory(self.get_rtype(), **kwargs)
 
     def _configure_object(self):
         pass
@@ -104,8 +101,8 @@ class NS3Base(ResourceManager):
         # self.simulator.node.mkdir(self.run_home)
 
         self._instantiate_object()
-        self._configure_object()
         self._connect_object()
+        self._configure_object()
       
         self.info("Provisioning finished")