]> SALOME platform Git repositories - modules/yacs.git/blob - src/yacsloader_swig/Test/testHPDecorator.py
Salome HOME
ec10ee4e25da764168854faf83c63105ee84ccb1
[modules/yacs.git] / src / yacsloader_swig / Test / testHPDecorator.py
1 # Copyright (C) 2006-2016  CEA/DEN, EDF R&D
2 #
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.
7 #
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.
12 #
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
16 #
17 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
18 #
19
20 import pilot
21 import SALOMERuntime
22 import unittest
23
24 class TestHPDecortator(unittest.TestCase):
25     def test0(self):
26         """ First test coming from the big boss."""
27         SALOMERuntime.RuntimeSALOME.setRuntime()
28         r=SALOMERuntime.getSALOMERuntime()
29         pg=pilot.PlayGround()
30         pg.loadFromKernelCatalog()
31         assert(len(pg.getData())!=0)
32         p=r.createProc("p0")
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")
37         #
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)]""")
42         n0.setContainer(hp4)
43         p.edAddChild(n0)
44         #
45         n1_0=r.createForEachLoop("n1_0",td)
46         p.edAddChild(n1_0)
47         p.edAddCFLink(n0,n1_0)
48         p.edAddLink(out0_0,n1_0.edGetSeqOfSamplesPort())
49         ##
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)
57         ##
58         #
59         n1_1=r.createForEachLoop("n1_1",td)
60         p.edAddChild(n1_1)
61         p.edAddCFLink(n0,n1_1)
62         p.edAddLink(out0_0,n1_1.edGetSeqOfSamplesPort())
63         ##
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)
71         ##
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")
82         pd=fyto.getPD()
83         assert(isinstance(pd,pilot.ContigPartDefinition))
84         assert(pd.getStart()==0 and pd.getStop()==16)
85         assert(fyto.getIDS()==(0,1,2,3))
86         #
87         assert(hp1.getSizeOfPool()==32)# 32/1
88         fyto=pilot.ForTestOmlyHPContCls()
89         n1_1_sc.getContainer().forYourTestsOnly(fyto)
90         assert(fyto.getContainerType()=="HPContainerShared")
91         pd=fyto.getPD()
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)
97         #
98         fyto=pilot.ForTestOmlyHPContCls()
99         n0.getContainer().forYourTestsOnly(fyto)
100         assert(fyto.getContainerType()=="HPContainerShared")
101         pd=fyto.getPD()
102         assert(isinstance(pd,pilot.AllPartDefinition))
103         assert(list(fyto.getIDS())==range(8))
104         #############################
105         #  Change weight of ForEach #
106         #############################
107         n1_0.setWeight(2)
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")
112         pd=fyto.getPD()
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")
120         pd=fyto.getPD()
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)
126         #
127         fyto=pilot.ForTestOmlyHPContCls()
128         n0.getContainer().forYourTestsOnly(fyto)
129         assert(fyto.getContainerType()=="HPContainerShared")
130         pd=fyto.getPD()
131         assert(isinstance(pd,pilot.AllPartDefinition))
132         assert(list(fyto.getIDS())==range(8))
133         pass
134
135     def test1(self):
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)
142         p=r.createProc("p0")
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")
147         #
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)]""")
152         n0.setContainer(hp4)
153         p.edAddChild(n0)
154         #
155         n1_0=r.createForEachLoop("n1_0",td)
156         p.edAddChild(n1_0)
157         p.edAddCFLink(n0,n1_0)
158         p.edAddLink(out0_0,n1_0.edGetSeqOfSamplesPort())
159         ##
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)
167         ##
168         #
169         n1_1=r.createForEachLoop("n1_1",td)
170         p.edAddChild(n1_1)
171         p.edAddCFLink(n0,n1_1)
172         p.edAddLink(out0_0,n1_1.edGetSeqOfSamplesPort())
173         ##
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)
181         #
182         n1_2=r.createScriptNode("Salome","n1_2")
183         p.edAddChild(n1_2)
184         n1_2.setExecutionMode("remote")
185         n1_2.setContainer(hp4)
186         n1_2.setScript("""my_container""")
187         p.edAddCFLink(n0,n1_2)
188         ##
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")
199         pd=fyto.getPD()
200         assert(isinstance(pd,pilot.ContigPartDefinition))
201         assert(pd.getStart()==0 and pd.getStop()==16)
202         assert(fyto.getIDS()==(0,1,2,3))
203         #
204         assert(hp1.getSizeOfPool()==32)# 32/1
205         fyto=pilot.ForTestOmlyHPContCls()
206         n1_1_sc.getContainer().forYourTestsOnly(fyto)
207         assert(fyto.getContainerType()=="HPContainerShared")
208         pd=fyto.getPD()
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)
214         #
215         fyto=pilot.ForTestOmlyHPContCls()
216         n0.getContainer().forYourTestsOnly(fyto)
217         assert(fyto.getContainerType()=="HPContainerShared")
218         pd=fyto.getPD()
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")
224         pd=fyto.getPD()
225         assert(isinstance(pd,pilot.AllPartDefinition))
226         assert(list(fyto.getIDS())==range(8))
227         pass
228
229     def tess2(self):
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"""
232         m1="dsp0764200"
233         m2="dsp0764412"
234         SALOMERuntime.RuntimeSALOME.setRuntime()
235         r=SALOMERuntime.getSALOMERuntime()
236         pg=pilot.PlayGround()
237         pg.loadFromKernelCatalog()
238         assert(len(pg.getData())!=0)
239         p=r.createProc("p0")
240         td=p.createType("double","double")
241         tdd=p.createSequenceTc("seqdouble","seqdouble",td)
242         hp1=p.createContainer("HP1","HPSalome")
243         #
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)]""")
248         n0.setContainer(hp1)
249         p.edAddChild(n0)
250         ##
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)
257         ##
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)
264         ##
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")
272         pd=fyto.getPD()
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))
276         #
277         fyto=pilot.ForTestOmlyHPContCls()
278         n1_1_sc.getContainer().forYourTestsOnly(fyto)
279         assert(fyto.getContainerType()=="HPContainerShared")
280         pd=fyto.getPD()
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))
284         #
285         exe=pilot.ExecutorSwig()
286         assert(p.getState()==pilot.READY)
287         exe.RunW(p,0)
288         assert(p.getState()==pilot.DONE)
289         pass
290
291     def test3(self):
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)
298         p=r.createProc("p0")
299         td=p.createType("double","double")
300         tdd=p.createSequenceTc("seqdouble","seqdouble",td)
301         hp1=r.createContainer("HPSalome") ; hp1.setName("HP1")
302         #
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)]""")
307         p.edAddChild(n0)
308         #
309         n1_0=r.createForEachLoop("n1_0",td)
310         n2_0=r.createForEachLoop("n2_0",td)
311         p.edAddChild(n1_0)
312         p.edAddChild(n2_0)
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())
317         ##
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)
325         ##
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)
333         ##
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")
341         pd=fyto.getPD()
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")
347         pd=fyto.getPD()
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)
352         #
353         exe=pilot.ExecutorSwig()
354         assert(p.getState()==pilot.READY)
355         exe.RunW(p,0)
356         assert(len(set(hp1.getKernelContainerNames()))==3)
357         pass
358     
359     pass
360
361 if __name__ == '__main__':
362     unittest.main()