mock cross_connect test added to test/core/integration.py
[nepi.git] / src / nepi / testbeds / netns / execute.py
1 #!/usr/bin/env python
2 # -*- coding: utf-8 -*-
3
4 from constants import TESTBED_ID
5 from nepi.core import testbed_impl
6 from nepi.util.constants import TIME_NOW
7 import os
8
9 class TestbedController(testbed_impl.TestbedController):
10     def __init__(self, testbed_version):
11         super(TestbedController, self).__init__(TESTBED_ID, testbed_version)
12         self._netns = None
13         self._home_directory = None
14         self._traces = dict()
15
16     @property
17     def home_directory(self):
18         return self._home_directory
19
20     @property
21     def netns(self):
22         return self._netns
23
24     def do_setup(self):
25         self._home_directory = self._attributes.\
26             get_attribute_value("homeDirectory")
27         self._netns = self._load_netns_module()
28         super(TestbedController, self).do_setup()
29
30     def set(self, guid, name, value, time = TIME_NOW):
31         super(TestbedController, self).set(guid, name, value, time)
32         # TODO: take on account schedule time for the task 
33         element = self._elements.get(guid)
34         if element:
35             setattr(element, name, value)
36
37     def get(self, guid, name, time = TIME_NOW):
38         value = super(TestbedController, self).get(guid, name, time)
39         # TODO: take on account schedule time for the task
40         factory_id = self._create[guid]
41         factory = self._factories[factory_id]
42         if factory.box_attributes.is_attribute_design_only(name):
43             return value
44         element = self._elements.get(guid)
45         try:
46             return getattr(element, name)
47         except KeyError, AttributeError:
48             return value
49
50     def action(self, time, guid, action):
51         raise NotImplementedError
52
53     def shutdown(self):
54         for trace in self._traces.values():
55             trace.close()
56         for element in self._elements.values():
57             element.destroy()
58
59     def trace_filename(self, guid, trace_id):
60         # TODO: Need to be defined inside a home!!!! with and experiment id_code
61         return os.path.join(self.home_directory, "%d_%s" % (guid, trace_id))
62
63     def follow_trace(self, trace_id, trace):
64         self._traces[trace_id] = trace
65
66     def _load_netns_module(self):
67         # TODO: Do something with the configuration!!!
68         import sys
69         __import__("netns")
70         netns_mod = sys.modules["netns"]
71         # enable debug
72         enable_debug = self._attributes.get_attribute_value("enableDebug")
73         if enable_debug:
74             netns_mod.environ.set_log_level(netns_mod.environ.LOG_DEBUG)
75         return netns_mod
76