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)
293 if __name__ == '__main__':