class TestbedInstance(testbed_impl.TestbedInstance):
def __init__(self, testbed_version):
super(TestbedInstance, self).__init__(TESTBED_ID, testbed_version)
- self._netns = None
self._home_directory = None
self._traces = dict()
def home_directory(self):
return self._home_directory
- @property
- def netns(self):
- return self._netns
-
def do_setup(self):
self._home_directory = self._attributes.\
get_attribute_value("homeDirectory")
- self._netns = self._load_netns_module()
def set(self, time, guid, name, value):
super(TestbedInstance, self).set(time, guid, name, value)
def get(self, time, guid, name):
# TODO: take on account schedule time for the task
- element = self._elements[guid]
- return getattr(element, name)
+ 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
+
+ def get_route(self, guid, index, attribute):
+ # TODO: fetch real data from planetlab
+ try:
+ return self.box_get_route(guid, int(index), attribute)
+ except KeyError, AttributeError:
+ return None
+
+ def get_address(self, guid, index, attribute='Address'):
+ # TODO: fetch real data from planetlab
+ try:
+ return self.box_get_address(guid, int(index), attribute)
+ except KeyError, AttributeError:
+ return None
+
def action(self, time, guid, action):
raise NotImplementedError
- def trace(self, guid, trace_id):
- fd = open("%s" % self.trace_filename(guid, trace_id), "r")
- content = fd.read()
- fd.close()
- return content
-
def shutdown(self):
for trace in self._traces.values():
trace.close()
def follow_trace(self, trace_id, trace):
self._traces[trace_id] = trace
- def _load_netns_module(self):
- # TODO: Do something with the configuration!!!
- import sys
- __import__("netns")
- netns_mod = sys.modules["netns"]
- # enable debug
- enable_debug = self._attributes.get_attribute_value("enableDebug")
- if enable_debug:
- netns_mod.environ.set_log_level(netns_mod.environ.LOG_DEBUG)
- return netns_mod