replacing assertEquals into assertEqual
[nepi.git] / test / resources / omf / wilab_node.py
1 #!/usr/bin/env python
2 #
3 #    NEPI, a framework to manage network experiments
4 #    Copyright (C) 2013 INRIA
5 #
6 #    This program is free software: you can redistribute it and/or modify
7 #    it under the terms of the GNU General Public License version 2 as
8 #    published by the Free Software Foundation;
9 #
10 #    This program is distributed in the hope that it will be useful,
11 #    but WITHOUT ANY WARRANTY; without even the implied warranty of
12 #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 #    GNU General Public License for more details.
14 #
15 #    You should have received a copy of the GNU General Public License
16 #    along with this program.  If not, see <http://www.gnu.org/licenses/>.
17 #
18 # Author: Lucia Guevgeozian <lucia.guevgeozian_odizzio@inria.fr>
19
20 from nepi.execution.ec import ExperimentController
21 from nepi.resources.omf.wilabt_node import WilabtSfaNode
22 from nepi.util.sfaapi import SFAAPI, SFAAPIFactory
23
24 from test_utils import skipIfNotSfi
25
26 import os
27 import time
28 import unittest
29 import multiprocessing
30
31 class DummyEC(ExperimentController):
32     pass
33
34 class WilabtSfaNodeFactoryTestCase(unittest.TestCase):
35
36     def test_creation_phase(self):
37         self.assertEqual(WilabtSfaNode._rtype, "WilabtSfaNode")
38         self.assertEqual(len(WilabtSfaNode._attributes), 17)
39
40 class WilabtSfaNodeTestCase(unittest.TestCase):
41     """
42     This tests use inria_nepi slice, from the test instance of MyPLC
43     nepiplc.pl.sophia.inria.fr. This test can fail if the user running
44     the test does not have a user in this instance of MyPLC or is not
45     added to the inria_nepi slice.
46     """
47
48     def setUp(self):
49         self.ec = DummyEC()
50         #slicepl = os.environ.get('SFA_SLICE')
51         #slicename = ['ple'] + slicepl.split('_')
52         #self.slicename = '.'.join(slicename)
53         self.slicename = os.environ.get('SFA_SLICE')
54         self.sfauser = os.environ.get('SFA_USER')
55         self.sfaPrivateKey = os.environ.get('SFA_PK')
56         
57     @skipIfNotSfi
58     def test_a_sfaapi(self):
59         """
60         Check that the api to discover and reserve resources is well
61         instanciated, and is an instance of SFAAPI. Check that using
62         the same credentials, the same object of the api is used.
63         """
64         node1 = self.ec.register_resource("WilabtSfaNode")
65         self.ec.set(node1, "host", "zotacE5")
66         self.ec.set(node1, "slicename", self.slicename)
67         self.ec.set(node1, "sfauser", self.sfauser)
68         self.ec.set(node1, "sfaPrivateKey", self.sfaPrivateKey)
69         self.ec.set(node1, "gatewayUser", "nepi")
70         self.ec.set(node1, "gateway", "bastion.test.iminds.be")
71
72         wnode_rm1 = self.ec.get_resource(node1)
73
74         self.assertIsNone(wnode_rm1._node_to_provision)
75
76         api1 = wnode_rm1.sfaapi
77         self.assertIsInstance(api1, SFAAPI)
78         self.assertEqual(len(api1._reserved), 0)
79         self.assertEqual(len(api1._blacklist), 0)
80
81         node2 = self.ec.register_resource("WilabtSfaNode")
82         self.ec.set(node2, "host", "zotacM20")
83         self.ec.set(node2, "slicename", self.slicename)
84         self.ec.set(node2, "sfauser", self.sfauser)
85         self.ec.set(node2, "sfaPrivateKey", self.sfaPrivateKey)
86         self.ec.set(node1, "gatewayUser", "nepi")
87         self.ec.set(node1, "gateway", "bastion.test.iminds.be")
88
89         wnode_rm2 = self.ec.get_resource(node2)
90         api2 = wnode_rm2.sfaapi
91         self.assertEqual(api1, api2)
92
93         wnode_rm1.sfaapi._reserved = set()
94         wnode_rm1.sfaapi._blacklist = set()
95     
96     @skipIfNotSfi
97     def test_discover(self):
98         """
99         Check that the method do_discover reserve the right node.
100         """
101         node1 = self.ec.register_resource("WilabtSfaNode")
102         self.ec.set(node1, "host", "zotacE5")
103         self.ec.set(node1, "slicename", self.slicename)
104         self.ec.set(node1, "sfauser", self.sfauser)
105         self.ec.set(node1, "sfaPrivateKey", self.sfaPrivateKey)
106         self.ec.set(node1, "gatewayUser", "nepi")
107         self.ec.set(node1, "gateway", "bastion.test.iminds.be")
108
109         wnode_rm = self.ec.get_resource(node1)
110        
111         host = wnode_rm.get("host")
112         self.assertIsNotNone(host)
113
114         self.assertEqual(wnode_rm.sfaapi._reserved, set())
115
116         wnode_rm.do_discover()
117         self.assertEqual(len(wnode_rm.sfaapi._reserved), 1)
118         self.assertEqual(wnode_rm._node_to_provision, 'wilab2.ilabt.iminds.be.zotacE5')
119
120         wnode_rm.sfaapi._reserved = set()
121         wnode_rm.sfaapi._blacklist = set()
122
123     @skipIfNotSfi
124     def test_provision(self):
125         """
126         This test checks that the method do_provision add the node in the slice and check
127         its well functioning.
128         """
129         node = self.ec.register_resource("WilabtSfaNode")
130         self.ec.set(node, "host", "zotacE5")
131         self.ec.set(node, "slicename", self.slicename)
132         self.ec.set(node, "sfauser", self.sfauser)
133         self.ec.set(node, "sfaPrivateKey", self.sfaPrivateKey)
134         self.ec.set(node, "gatewayUser", "nepi")
135         self.ec.set(node, "gateway", "bastion.test.iminds.be")
136
137         wnode_rm = self.ec.get_resource(node)
138
139         self.assertEqual(wnode_rm.sfaapi._reserved, set())
140         self.assertIsNone(wnode_rm._node_to_provision)
141
142         wnode_rm.do_discover()
143         #with self.assertRaises(RuntimeError):
144         #    wnode_rm.do_provision()
145         wnode_rm.do_provision()
146
147         if not self.ec.abort and self.ec.state(node) > 2:
148             cmd = 'echo "IT WORKED"'
149             ((out, err), proc) = wnode_rm.execute(cmd)
150             self.assertEqual(out.strip(), "IT WORKED")
151
152         #wnode_rm.sfaapi._reserved = set()
153         #wnode_rm.sfaapi._blacklist = set()
154
155         self.ec.shutdown()
156
157     @skipIfNotSfi
158     def test_xdeploy1(self):
159         """
160         Test deploy 1 node.
161         """
162         node = self.ec.register_resource("WilabtSfaNode")
163         self.ec.set(node, "host", "zotacM20")
164         self.ec.set(node, "slicename", self.slicename)
165         self.ec.set(node, "sfauser", self.sfauser)
166         self.ec.set(node, "sfaPrivateKey", self.sfaPrivateKey)
167         self.ec.set(node, "gatewayUser", "nepi")
168         self.ec.set(node, "gateway", "bastion.test.iminds.be")
169
170         self.ec.deploy()
171         self.ec.wait_deployed(node)
172         state = self.ec.state(node)
173         if not self.ec.abort:
174             self.assertIn(state, (3, 4))
175
176         wnode_rm = self.ec.get_resource(node)
177         wnode_rm.sfaapi._reserved = set()
178         wnode_rm.sfaapi._blacklist = set()
179
180         self.ec.shutdown()
181
182     @skipIfNotSfi
183     def test_xdeploy2(self):
184         """
185         Test deploy 2 nodes.
186         """
187         node1 = self.ec.register_resource("WilabtSfaNode")
188         self.ec.set(node1, "host", "zotacE3")
189         self.ec.set(node1, "slicename", self.slicename)
190         self.ec.set(node1, "sfauser", self.sfauser)
191         self.ec.set(node1, "sfaPrivateKey", self.sfaPrivateKey)
192         self.ec.set(node1, "gatewayUser", "nepi")
193         self.ec.set(node1, "gateway", "bastion.test.iminds.be")
194
195         node2 = self.ec.register_resource("WilabtSfaNode")
196         self.ec.set(node2, "host", "zotacM20")
197         self.ec.set(node2, "slicename", self.slicename)
198         self.ec.set(node2, "sfauser", self.sfauser)
199         self.ec.set(node2, "sfaPrivateKey", self.sfaPrivateKey)
200         self.ec.set(node2, "gatewayUser", "nepi")
201         self.ec.set(node2, "gateway", "bastion.test.iminds.be")
202
203         self.ec.deploy()
204         self.ec.wait_deployed([node1, node2])
205         state1 = self.ec.state(node1)
206         state2 = self.ec.state(node2)
207         if not self.ec.abort:
208             self.assertIn(state1, (3, 4))
209             self.assertIn(state2, (3, 4))
210
211         wnode_rm = self.ec.get_resource(node1)
212         wnode_rm.sfaapi._reserved = set()
213         wnode_rm.sfaapi._blacklist = set()
214
215         self.ec.shutdown()
216
217     @skipIfNotSfi
218     def test_xdeploy3(self):
219         """
220         Test deploy 2 nodes, already in the slice.
221         """
222         node1 = self.ec.register_resource("WilabtSfaNode")
223         self.ec.set(node1, "host", "zotacM20")
224         self.ec.set(node1, "slicename", self.slicename)
225         self.ec.set(node1, "sfauser", self.sfauser)
226         self.ec.set(node1, "sfaPrivateKey", self.sfaPrivateKey)
227         self.ec.set(node1, "gatewayUser", "nepi")
228         self.ec.set(node1, "gateway", "bastion.test.iminds.be")
229
230         node2 = self.ec.register_resource("WilabtSfaNode")
231         self.ec.set(node2, "host", "zotacE3")
232         self.ec.set(node2, "slicename", self.slicename)
233         self.ec.set(node2, "sfauser", self.sfauser)
234         self.ec.set(node2, "sfaPrivateKey", self.sfaPrivateKey)
235         self.ec.set(node2, "gatewayUser", "nepi")
236         self.ec.set(node2, "gateway", "bastion.test.iminds.be")
237
238         self.ec.deploy()
239         self.ec.wait_deployed([node1, node2])
240         state1 = self.ec.state(node1)
241         state2 = self.ec.state(node2)
242         if not self.ec.abort:
243             self.assertEqual(state1, (3, 4))
244             self.assertEqual(state2, (3, 4))
245
246         self.ec.shutdown() 
247
248     def tearDown(self):
249         pass
250         #self.ec.shutdown()
251
252
253 if __name__ == '__main__':
254     unittest.main()
255
256
257