1 # Copyright (C) 2006-2016 CEA/DEN, EDF R&D
3 # This library is free software; you can redistribute it and/or
4 # modify it under the terms of the GNU Lesser General Public
5 # License as published by the Free Software Foundation; either
6 # version 2.1 of the License, or (at your option) any later version.
8 # This library is distributed in the hope that it will be useful,
9 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 # Lesser General Public License for more details.
13 # You should have received a copy of the GNU Lesser General Public
14 # License along with this library; if not, write to the Free Software
15 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
24 class TestHPDecortator(unittest.TestCase):
26 """ First test coming from the big boss."""
27 SALOMERuntime.RuntimeSALOME.setRuntime()
28 r=SALOMERuntime.getSALOMERuntime()
30 pg.loadFromKernelCatalog()
31 assert(len(pg.getData())!=0)
33 td=p.createType("double","double")
34 tdd=p.createSequenceTc("seqdouble","seqdouble",td)
35 hp1=p.createContainer("HP1","HPSalome")
36 hp4=p.createContainer("HP4","HPSalome")
38 n0=r.createScriptNode("Salome","n0")
39 n0.setExecutionMode("remote")
40 out0_0=n0.edAddOutputPort("o1",tdd)
41 n0.setScript("""o1=[float(i)+0.1 for i in range(1000)]""")
45 n1_0=r.createForEachLoop("n1_0",td)
47 p.edAddCFLink(n0,n1_0)
48 p.edAddLink(out0_0,n1_0.edGetSeqOfSamplesPort())
50 n1_0_sc=r.createScriptNode("Salome","n1_0_sc")
51 n1_0.edAddChild(n1_0_sc)
52 n1_0_sc.setExecutionMode("remote")
53 n1_0_sc.setScript("""2*i1""")
54 i1_0_sc=n1_0_sc.edAddInputPort("i1",td)
55 p.edAddLink(n1_0.edGetSamplePort(),i1_0_sc)
56 n1_0_sc.setContainer(hp4)
59 n1_1=r.createForEachLoop("n1_1",td)
61 p.edAddCFLink(n0,n1_1)
62 p.edAddLink(out0_0,n1_1.edGetSeqOfSamplesPort())
64 n1_1_sc=r.createScriptNode("Salome","n1_1_sc")
65 n1_1.edAddChild(n1_1_sc)
66 n1_1_sc.setExecutionMode("remote")
67 n1_1_sc.setScript("""3*i1""")
68 i1_1_sc=n1_1_sc.edAddInputPort("i1",td)
69 p.edAddLink(n1_1.edGetSamplePort(),i1_1_sc)
70 n1_1_sc.setContainer(hp1)
72 hp1.setProperty("nb_proc_per_node","1")
73 hp4.setProperty("nb_proc_per_node","4")
74 pg.setData([("m0",8),("m1",8),("m2",8),("m3",8)]) # virtual machine with 32 cores spread over 4 nodes
75 assert(n1_0.getWeight()==1.)
76 assert(n1_1.getWeight()==1.)
77 p.fitToPlayGround(pg)########### ZE CALL
78 fyto=pilot.ForTestOmlyHPContCls()
79 assert(hp4.getSizeOfPool()==8)# 32/4
80 n1_0_sc.getContainer().forYourTestsOnly(fyto)
81 assert(fyto.getContainerType()=="HPContainerShared")
83 assert(isinstance(pd,pilot.ContigPartDefinition))
84 assert(pd.getStart()==0 and pd.getStop()==16)
85 assert(fyto.getIDS()==(0,1,2,3))
87 assert(hp1.getSizeOfPool()==32)# 32/1
88 fyto=pilot.ForTestOmlyHPContCls()
89 n1_1_sc.getContainer().forYourTestsOnly(fyto)
90 assert(fyto.getContainerType()=="HPContainerShared")
92 assert(isinstance(pd,pilot.ContigPartDefinition))
93 assert(pd.getStart()==16 and pd.getStop()==32)
94 assert(fyto.getIDS()==(16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31))
95 assert(n1_0.edGetNbOfBranchesPort().getPyObj()==4)
96 assert(n1_1.edGetNbOfBranchesPort().getPyObj()==16)
98 fyto=pilot.ForTestOmlyHPContCls()
99 n0.getContainer().forYourTestsOnly(fyto)
100 assert(fyto.getContainerType()=="HPContainerShared")
102 assert(isinstance(pd,pilot.AllPartDefinition))
103 assert(list(fyto.getIDS())==range(8))
104 #############################
105 # Change weight of ForEach #
106 #############################
108 p.fitToPlayGround(pg)########### ZE CALL
109 assert(hp4.getSizeOfPool()==8)# 32/4
110 n1_0_sc.getContainer().forYourTestsOnly(fyto)
111 assert(fyto.getContainerType()=="HPContainerShared")
113 assert(isinstance(pd,pilot.ContigPartDefinition))
114 assert(pd.getStart()==0 and pd.getStop()==21)
115 assert(fyto.getIDS()==(0,1,2,3,4))
116 assert(hp1.getSizeOfPool()==32)# 32/1
117 fyto=pilot.ForTestOmlyHPContCls()
118 n1_1_sc.getContainer().forYourTestsOnly(fyto)
119 assert(fyto.getContainerType()=="HPContainerShared")
121 assert(isinstance(pd,pilot.ContigPartDefinition))
122 assert(pd.getStart()==21 and pd.getStop()==32)
123 assert(fyto.getIDS()==(21,22,23,24,25,26,27,28,29,30,31))
124 assert(n1_0.edGetNbOfBranchesPort().getPyObj()==6)
125 assert(n1_1.edGetNbOfBranchesPort().getPyObj()==11)
127 fyto=pilot.ForTestOmlyHPContCls()
128 n0.getContainer().forYourTestsOnly(fyto)
129 assert(fyto.getContainerType()=="HPContainerShared")
131 assert(isinstance(pd,pilot.AllPartDefinition))
132 assert(list(fyto.getIDS())==range(8))
136 """ Second test as test0 + script node in // with 2 FE"""
137 SALOMERuntime.RuntimeSALOME.setRuntime()
138 r=SALOMERuntime.getSALOMERuntime()
139 pg=pilot.PlayGround()
140 pg.loadFromKernelCatalog()
141 assert(len(pg.getData())!=0)
143 td=p.createType("double","double")
144 tdd=p.createSequenceTc("seqdouble","seqdouble",td)
145 hp1=p.createContainer("HP1","HPSalome")
146 hp4=p.createContainer("HP4","HPSalome")
148 n0=r.createScriptNode("Salome","n0")
149 n0.setExecutionMode("remote")
150 out0_0=n0.edAddOutputPort("o1",tdd)
151 n0.setScript("""o1=[float(i)+0.1 for i in range(1000)]""")
155 n1_0=r.createForEachLoop("n1_0",td)
157 p.edAddCFLink(n0,n1_0)
158 p.edAddLink(out0_0,n1_0.edGetSeqOfSamplesPort())
160 n1_0_sc=r.createScriptNode("Salome","n1_0_sc")
161 n1_0.edAddChild(n1_0_sc)
162 n1_0_sc.setExecutionMode("remote")
163 n1_0_sc.setScript("""2*i1""")
164 i1_0_sc=n1_0_sc.edAddInputPort("i1",td)
165 p.edAddLink(n1_0.edGetSamplePort(),i1_0_sc)
166 n1_0_sc.setContainer(hp4)
169 n1_1=r.createForEachLoop("n1_1",td)
171 p.edAddCFLink(n0,n1_1)
172 p.edAddLink(out0_0,n1_1.edGetSeqOfSamplesPort())
174 n1_1_sc=r.createScriptNode("Salome","n1_1_sc")
175 n1_1.edAddChild(n1_1_sc)
176 n1_1_sc.setExecutionMode("remote")
177 n1_1_sc.setScript("""3*i1""")
178 i1_1_sc=n1_1_sc.edAddInputPort("i1",td)
179 p.edAddLink(n1_1.edGetSamplePort(),i1_1_sc)
180 n1_1_sc.setContainer(hp1)
182 n1_2=r.createScriptNode("Salome","n1_2")
184 n1_2.setExecutionMode("remote")
185 n1_2.setContainer(hp4)
186 n1_2.setScript("""my_container""")
187 p.edAddCFLink(n0,n1_2)
189 hp1.setProperty("nb_proc_per_node","1")
190 hp4.setProperty("nb_proc_per_node","4")
191 pg.setData([("m0",8),("m1",8),("m2",8),("m3",8)]) # virtual machine with 32 cores spread over 4 nodes
192 assert(n1_0.getWeight()==1.)
193 assert(n1_1.getWeight()==1.)
194 p.fitToPlayGround(pg)########### ZE CALL
195 assert(hp4.getSizeOfPool()==8)# 32/4
196 fyto=pilot.ForTestOmlyHPContCls()
197 n1_0_sc.getContainer().forYourTestsOnly(fyto)
198 assert(fyto.getContainerType()=="HPContainerShared")
200 assert(isinstance(pd,pilot.ContigPartDefinition))
201 assert(pd.getStart()==0 and pd.getStop()==16)
202 assert(fyto.getIDS()==(0,1,2,3))
204 assert(hp1.getSizeOfPool()==32)# 32/1
205 fyto=pilot.ForTestOmlyHPContCls()
206 n1_1_sc.getContainer().forYourTestsOnly(fyto)
207 assert(fyto.getContainerType()=="HPContainerShared")
209 assert(isinstance(pd,pilot.ContigPartDefinition))
210 assert(pd.getStart()==16 and pd.getStop()==32)
211 assert(fyto.getIDS()==(16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31))
212 assert(n1_0.edGetNbOfBranchesPort().getPyObj()==4)
213 assert(n1_1.edGetNbOfBranchesPort().getPyObj()==16)
215 fyto=pilot.ForTestOmlyHPContCls()
216 n0.getContainer().forYourTestsOnly(fyto)
217 assert(fyto.getContainerType()=="HPContainerShared")
219 assert(isinstance(pd,pilot.AllPartDefinition))
220 assert(list(fyto.getIDS())==range(8))
221 fyto=pilot.ForTestOmlyHPContCls()
222 n1_2.getContainer().forYourTestsOnly(fyto)
223 assert(fyto.getContainerType()=="HPContainerShared")
225 assert(isinstance(pd,pilot.AllPartDefinition))
226 assert(list(fyto.getIDS())==range(8))
230 """ This test is desactivated because it requires multi nodes. To be moved at the right place to support this.
231 This test is not launched here because it requires 2 machines in catalog"""
234 SALOMERuntime.RuntimeSALOME.setRuntime()
235 r=SALOMERuntime.getSALOMERuntime()
236 pg=pilot.PlayGround()
237 pg.loadFromKernelCatalog()
238 assert(len(pg.getData())!=0)
240 td=p.createType("double","double")
241 tdd=p.createSequenceTc("seqdouble","seqdouble",td)
242 hp1=p.createContainer("HP1","HPSalome")
244 n0=r.createScriptNode("Salome","n0")
245 n0.setExecutionMode("remote")
246 out0_0=n0.edAddOutputPort("o1",tdd)
247 n0.setScript("""o1=[float(i)+0.1 for i in range(1000)]""")
251 n1_0_sc=r.createScriptNode("Salome","n1_0_sc")
252 p.edAddChild(n1_0_sc)
253 p.edAddCFLink(n0,n1_0_sc)
254 n1_0_sc.setExecutionMode("remote")
255 n1_0_sc.setScript("""assert(my_container.getHostName()=="%s")"""%m1)
256 n1_0_sc.setContainer(hp1)
258 n1_1_sc=r.createScriptNode("Salome","n1_1_sc")
259 p.edAddChild(n1_1_sc)
260 p.edAddCFLink(n0,n1_1_sc)
261 n1_1_sc.setExecutionMode("remote")
262 n1_1_sc.setScript("""assert(my_container.getHostName()=="%s")"""%m2)
263 n1_1_sc.setContainer(hp1)
265 hp1.setProperty("nb_proc_per_node","1")
266 pg.setData([(m1,8),(m2,8)])
267 p.fitToPlayGround(pg)########### ZE CALL
268 assert(hp1.getSizeOfPool()==16)# 16/1
269 fyto=pilot.ForTestOmlyHPContCls()
270 n1_0_sc.getContainer().forYourTestsOnly(fyto)
271 assert(fyto.getContainerType()=="HPContainerShared")
273 assert(isinstance(pd,pilot.ContigPartDefinition))
274 assert(pd.getStart()==0 and pd.getStop()==8)
275 assert(fyto.getIDS()==(0,1,2,3,4,5,6,7))
277 fyto=pilot.ForTestOmlyHPContCls()
278 n1_1_sc.getContainer().forYourTestsOnly(fyto)
279 assert(fyto.getContainerType()=="HPContainerShared")
281 assert(isinstance(pd,pilot.ContigPartDefinition))
282 assert(pd.getStart()==8 and pd.getStop()==16)
283 assert(fyto.getIDS()==(8,9,10,11,12,13,14,15))
285 exe=pilot.ExecutorSwig()
286 assert(p.getState()==pilot.READY)
288 assert(p.getState()==pilot.DONE)
292 """ First test coming from the big boss."""
293 SALOMERuntime.RuntimeSALOME.setRuntime()
294 r=SALOMERuntime.getSALOMERuntime()
295 pg=pilot.PlayGround()
296 pg.loadFromKernelCatalog()
297 assert(len(pg.getData())!=0)
299 td=p.createType("double","double")
300 tdd=p.createSequenceTc("seqdouble","seqdouble",td)
301 hp1=r.createContainer("HPSalome") ; hp1.setName("HP1")
303 n0=r.createScriptNode("Salome","n0")
304 n0.setExecutionMode("local")
305 out0_0=n0.edAddOutputPort("o1",tdd)
306 n0.setScript("""o1=[float(i)+0.1 for i in range(1000)]""")
309 n1_0=r.createForEachLoop("n1_0",td)
310 n2_0=r.createForEachLoop("n2_0",td)
313 p.edAddCFLink(n0,n1_0)
314 p.edAddCFLink(n1_0,n2_0)
315 p.edAddLink(out0_0,n1_0.edGetSeqOfSamplesPort())
316 p.edAddLink(out0_0,n2_0.edGetSeqOfSamplesPort())
318 n1_0_sc=r.createScriptNode("Salome","n1_0_sc")
319 n1_0.edAddChild(n1_0_sc)
320 n1_0_sc.setExecutionMode("remote")
321 n1_0_sc.setScript("""2*i1""")
322 i1_0_sc=n1_0_sc.edAddInputPort("i1",td)
323 p.edAddLink(n1_0.edGetSamplePort(),i1_0_sc)
324 n1_0_sc.setContainer(hp1)
326 n2_0_sc=r.createScriptNode("Salome","n2_0_sc")
327 n2_0.edAddChild(n2_0_sc)
328 n2_0_sc.setExecutionMode("remote")
329 n2_0_sc.setScript("""2*i1""")
330 i2_0_sc=n2_0_sc.edAddInputPort("i1",td)
331 p.edAddLink(n2_0.edGetSamplePort(),i2_0_sc)
332 n2_0_sc.setContainer(hp1)
334 hp1.setProperty("nb_proc_per_node","1")
335 pg.setData([("localhost",3)])
336 p.fitToPlayGround(pg)########### ZE CALL
337 assert(hp1.getSizeOfPool()==3)
338 fyto=pilot.ForTestOmlyHPContCls()
339 n1_0_sc.getContainer().forYourTestsOnly(fyto)
340 assert(fyto.getContainerType()=="HPContainerShared")
342 assert(isinstance(pd,pilot.AllPartDefinition))
343 assert(fyto.getIDS()==(0,1,2))
344 fyto=pilot.ForTestOmlyHPContCls()
345 n2_0_sc.getContainer().forYourTestsOnly(fyto)
346 assert(fyto.getContainerType()=="HPContainerShared")
348 assert(isinstance(pd,pilot.AllPartDefinition))
349 assert(fyto.getIDS()==(0,1,2))
350 assert(n1_0.edGetNbOfBranchesPort().getPyObj()==3)
351 assert(n2_0.edGetNbOfBranchesPort().getPyObj()==3)
353 exe=pilot.ExecutorSwig()
354 assert(p.getState()==pilot.READY)
356 assert(len(set(hp1.getKernelContainerNames()))==3)
361 if __name__ == '__main__':