3 # NEPI, a framework to manage network experiments
4 # Copyright (C) 2013 INRIA
6 # This program is free software: you can redistribute it and/or modify
7 # it under the terms of the GNU General Public License as published by
8 # the Free Software Foundation, either version 3 of the License, or
9 # (at your option) any later version.
11 # This program is distributed in the hope that it will be useful,
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 # GNU General Public License for more details.
16 # You should have received a copy of the GNU General Public License
17 # along with this program. If not, see <http://www.gnu.org/licenses/>.
19 # Author: Alina Quereilhac <alina.quereilhac@inria.fr>
21 from nepi.execution.ec import ExperimentController
22 from nepi.execution.resource import ResourceManager, ResourceState, \
23 clsinit_copy, ResourceAction, ResourceFactory
24 from nepi.util.plotter import PFormats
31 reschedule_delay = "0.5s"
35 class Link(ResourceManager):
36 _rtype = "dummy::Link"
38 time.sleep(deploy_time)
39 super(Link, self).do_deploy()
40 self.logger.debug(" -------- DEPLOYED ------- ")
42 class Interface(ResourceManager):
43 _rtype = "dummy::Interface"
46 node = self.get_connected(Node.get_rtype())[0]
47 link = self.get_connected(Link.get_rtype())[0]
49 if node.state < ResourceState.READY or \
50 link.state < ResourceState.READY:
51 self.ec.schedule(reschedule_delay, self.deploy)
52 self.logger.debug(" -------- RESCHEDULING ------- ")
54 time.sleep(deploy_time)
55 super(Interface, self).do_deploy()
56 self.logger.debug(" -------- DEPLOYED ------- ")
58 class Node(ResourceManager):
59 _rtype = "dummy::Node"
62 self.logger.debug(" -------- DO_DEPLOY ------- ")
63 time.sleep(deploy_time)
64 super(Node, self).do_deploy()
65 self.logger.debug(" -------- DEPLOYED ------- ")
67 class Application(ResourceManager):
68 _rtype = "dummy::Application"
71 node = self.get_connected(Node.get_rtype())[0]
73 if node.state < ResourceState.READY:
74 self.ec.schedule(reschedule_delay, self.deploy)
75 self.logger.debug(" -------- RESCHEDULING ------- ")
77 time.sleep(deploy_time)
78 super(Application, self).do_deploy()
79 self.logger.debug(" -------- DEPLOYED ------- ")
82 super(Application, self).do_start()
84 self.ec.schedule("0s", self.stop)
86 ResourceFactory.register_type(Application)
87 ResourceFactory.register_type(Node)
88 ResourceFactory.register_type(Interface)
89 ResourceFactory.register_type(Link)
91 class PlotterTestCase(unittest.TestCase):
92 def test_serialize(self):
96 ec = ExperimentController(exp_id = "plotter-test")
98 # Add simulated nodes and applications
103 for i in xrange(node_count):
104 node = ec.register_resource("dummy::Node")
107 iface = ec.register_resource("dummy::Interface")
108 ec.register_connection(node, iface)
111 for i in xrange(app_count):
112 app = ec.register_resource("dummy::Application")
113 ec.register_connection(node, app)
116 link = ec.register_resource("dummy::Link")
119 ec.register_connection(link, iface)
122 statinfo = os.stat(fpath)
123 size = statinfo.st_size
124 self.assertTrue(size > 0)
125 self.assertTrue(fpath.endswith(".png"))
129 fpath = ec.plot(format = PFormats.DOT)
130 statinfo = os.stat(fpath)
131 size = statinfo.st_size
132 self.assertTrue(size > 0)
133 self.assertTrue(fpath.endswith(".dot"))
137 if __name__ == '__main__':