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 not launched here because it requires 2 machines in catalog"""
233 SALOMERuntime.RuntimeSALOME.setRuntime()
234 r=SALOMERuntime.getSALOMERuntime()
235 pg=pilot.PlayGround()
236 pg.loadFromKernelCatalog()
237 assert(len(pg.getData())!=0)
239 td=p.createType("double","double")
240 tdd=p.createSequenceTc("seqdouble","seqdouble",td)
241 hp1=p.createContainer("HP1","HPSalome")
243 n0=r.createScriptNode("Salome","n0")
244 n0.setExecutionMode("remote")
245 out0_0=n0.edAddOutputPort("o1",tdd)
246 n0.setScript("""o1=[float(i)+0.1 for i in range(1000)]""")
250 n1_0_sc=r.createScriptNode("Salome","n1_0_sc")
251 p.edAddChild(n1_0_sc)
252 p.edAddCFLink(n0,n1_0_sc)
253 n1_0_sc.setExecutionMode("remote")
254 n1_0_sc.setScript("""assert(my_container.getHostName()=="%s")"""%m1)
255 n1_0_sc.setContainer(hp1)
257 n1_1_sc=r.createScriptNode("Salome","n1_1_sc")
258 p.edAddChild(n1_1_sc)
259 p.edAddCFLink(n0,n1_1_sc)
260 n1_1_sc.setExecutionMode("remote")
261 n1_1_sc.setScript("""assert(my_container.getHostName()=="%s")"""%m2)
262 n1_1_sc.setContainer(hp1)
264 hp1.setProperty("nb_proc_per_node","1")
265 pg.setData([(m1,8),(m2,8)])
266 p.fitToPlayGround(pg)########### ZE CALL
267 assert(hp1.getSizeOfPool()==16)# 16/1
268 fyto=pilot.ForTestOmlyHPContCls()
269 n1_0_sc.getContainer().forYourTestsOnly(fyto)
270 assert(fyto.getContainerType()=="HPContainerShared")
272 assert(isinstance(pd,pilot.ContigPartDefinition))
273 assert(pd.getStart()==0 and pd.getStop()==8)
274 assert(fyto.getIDS()==(0,1,2,3,4,5,6,7))
276 fyto=pilot.ForTestOmlyHPContCls()
277 n1_1_sc.getContainer().forYourTestsOnly(fyto)
278 assert(fyto.getContainerType()=="HPContainerShared")
280 assert(isinstance(pd,pilot.ContigPartDefinition))
281 assert(pd.getStart()==8 and pd.getStop()==16)
282 assert(fyto.getIDS()==(8,9,10,11,12,13,14,15))
284 exe=pilot.ExecutorSwig()
285 assert(p.getState()==pilot.READY)
287 assert(p.getState()==pilot.DONE)
292 if __name__ == '__main__':