Salome HOME
base64 is used to store pickelized objects into XML
[modules/yacs.git] / src / yacsloader_swig / Test / testSaveLoadRun.py
index 49ba4b963fc199722f7a52e0e5af90ba2deb901c..5c2e755fe074bfae0b0ada235f911b2f2d2e4f1e 100755 (executable)
@@ -1,4 +1,4 @@
-# Copyright (C) 2006-2016  CEA/DEN, EDF R&D
+# Copyright (C) 2006-2019  CEA/DEN, EDF R&D
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -1250,7 +1250,7 @@ for i in i8:
       ex = pilot.ExecutorSwig()
       self.assertEqual(p.getState(),pilot.READY)
       ex.RunW(p,0)
-      self.assertEqual(res.get(),6)
+      self.assertEqual(res.getPyObj(),6)
       self.assertEqual(p.getState(),pilot.DONE)
     pass
 
@@ -1576,16 +1576,216 @@ o4=i3
     #
     self.assertEqual(q.getChildByName("n1").getState(),pilot.DONE)
     self.assertEqual(q.getState(),pilot.DONE)
-    self.assertEqual(q.getChildByName("n2").getOutputPort("o4").getPyObj(),[0L,2L,10L,15L,20L,25L])
+    self.assertEqual(q.getChildByName("n2").getOutputPort("o4").getPyObj(),[0,2,10,15,20,25])
+    pass
+
+  def test23(self):
+    """ test focused on weight attribut after a dump and reload from a xml file
+    """
+    fname="test23.xml"
+    xmlStateFileName="saveState23.xml"
+    from datetime import datetime
+    p=self.r.createProc("prTest23")
+    cont=p.createContainer("gg","Salome")
+    cont.setProperty("name","localhost")
+    cont.setProperty("hostname","localhost")
+    cont.setProperty("type","multi")
+    td=p.createType("double","double")
+    ti=p.createType("int","int")
+    tsi=p.createSequenceTc("seqint","seqint",ti)
+    tsd=p.createSequenceTc("seqdbl","seqdbl",td)
+    n0=self.r.createScriptNode("","n0")
+    o0=n0.edAddOutputPort("o0",tsi)
+    n0.setScript("o0=[ elt for elt in range(6) ]")
+    p.edAddChild(n0)
+    n1=self.r.createForEachLoop("n1",ti)
+    n1.setWeight(3)
+    n10=self.r.createScriptNode("","n10")
+    n10.setExecutionMode("remote")
+    n10.setContainer(cont)
+    n1.edAddChild(n10)
+    n10.setScript("""
+import time
+time.sleep(2)
+o2=2*i1
+""")
+    n10.setWeight(4.)
+    i1=n10.edAddInputPort("i1",ti)
+    o2=n10.edAddOutputPort("o2",ti)
+    p.edAddChild(n1)
+    p.edAddLink(o0,n1.edGetSeqOfSamplesPort())
+    p.edAddLink(n1.edGetSamplePort(),i1)
+    p.edAddCFLink(n0,n1)
+    n1.edGetNbOfBranchesPort().edInitPy(2)
+    n2=self.r.createScriptNode("","n2")
+    n2.setScript("o4=i3")
+    i3=n2.edAddInputPort("i3",tsi)
+    o4=n2.edAddOutputPort("o4",tsi)
+    n2.setScript("o4=i3")
+    p.edAddChild(n2)
+    p.edAddCFLink(n1,n2)
+    p.edAddLink(o2,i3)
+    p.saveSchema(fname)
+    #
+    l=loader.YACSLoader()
+    p=l.load(fname)
+    self.assertEqual(p.getChildByName("n1").getWeight().getSimpleLoopWeight(),3.0)
+    self.assertEqual(p.getChildByName("n1").getChildByName("n10").getWeight().getElementaryWeight(),4.0)
+    pass
+
+  def test24(self):
+    """ Non regression test EDF17470"""
+    SALOMERuntime.RuntimeSALOME.setRuntime()
+    r=SALOMERuntime.getSALOMERuntime()
+    p=r.createProc("prTest2")
+    #
+    cont1=p.createContainer("cont1","Salome")
+    cont1.setProperty("name","localhost")
+    cont1.setProperty("hostname","localhost")
+    cont1.setProperty("type","multi")
+    cont1.setProperty("container_name","container1@")
+    #
+    cont2=p.createContainer("cont2","Salome")
+    cont2.setProperty("name","localhost")
+    cont2.setProperty("hostname","localhost")
+    cont2.setProperty("type","multi")
+    cont2.setProperty("container_name","container2@")
+    #
+    td=p.createType("double","double")
+    ti=p.createType("int","int")
+    ts=p.createType("string","string")
+    n0=r.createScriptNode("","n0")
+    n0.setScript("""import SalomeSDSClt
+import SALOME
+import salome
+import unittest
+import pickle
+import gc
+import time
+
+def obj2Str(obj):
+  return pickle.dumps(obj,pickle.HIGHEST_PROTOCOL)
+def str2Obj(strr):
+  return pickle.loads(strr)
+
+
+salome.salome_init()
+scopeName="Scope1"
+varName="a"
+dsm=salome.naming_service.Resolve("/DataServerManager")
+dsm.cleanScopesInNS()
+if scopeName in dsm.listScopes():
+  dsm.removeDataScope(scopeName)
+dss,isCreated=dsm.giveADataScopeTransactionCalled(scopeName)
+#
+t0=dss.createRdExtVarTransac(varName,obj2Str({"ab":[4,5,6]}))
+dss.atomicApply([t0])
+""")
+    n0_sn=n0.edAddOutputPort("scopeName",ts)
+    n0_vn=n0.edAddOutputPort("varName",ts)
+    #
+    n1=r.createScriptNode("","n1")
+    n1_sn=n1.edAddInputPort("scopeName",ts)
+    n1_vn=n1.edAddInputPort("varName",ts)
+    n1.setScript("""import SalomeSDSClt
+import SALOME
+import salome
+import unittest
+import pickle
+import gc
+import time
+
+
+def obj2Str(obj):
+  return pickle.dumps(obj,pickle.HIGHEST_PROTOCOL)
+def str2Obj(strr):
+  return pickle.loads(strr)
+
+salome.salome_init()
+dsm=salome.naming_service.Resolve("/DataServerManager")
+dss,isCreated=dsm.giveADataScopeTransactionCalled(scopeName)
+assert(not isCreated)
+
+t1=dss.addMultiKeyValueSession(varName)
+# lecture 'ef'
+wk2=dss.waitForKeyInVar(varName,obj2Str("ef"))
+wk2.waitFor()
+assert(str2Obj(dss.waitForMonoThrRev(wk2))==[11,12])""")
+    n1.setContainer(cont1)
+    #
+    n2=r.createScriptNode("","n2")
+    n2_sn=n2.edAddInputPort("scopeName",ts)
+    n2_vn=n2.edAddInputPort("varName",ts)
+    n2.setScript("""import SalomeSDSClt
+import SALOME
+import salome
+import unittest
+import pickle
+import gc
+import time
+
+
+def obj2Str(obj):
+  return pickle.dumps(obj,pickle.HIGHEST_PROTOCOL)
+def str2Obj(strr):
+  return pickle.loads(strr)
+
+salome.salome_init()
+dsm=salome.naming_service.Resolve("/DataServerManager")
+dss,isCreated=dsm.giveADataScopeTransactionCalled(scopeName)
+assert(not isCreated)
+time.sleep(3.)
+t1=dss.addMultiKeyValueSession(varName)
+t1.addKeyValueInVarErrorIfAlreadyExistingNow(obj2Str("cd"),obj2Str([7,8,9,10]))
+t1.addKeyValueInVarErrorIfAlreadyExistingNow(obj2Str("ef"),obj2Str([11,12]))
+""")
+    n2.setContainer(cont2)
+    #
+    p.edAddChild(n0)
+    p.edAddChild(n1)
+    p.edAddChild(n2)
+    p.edAddCFLink(n0,n1)
+    p.edAddCFLink(n0,n2)
+    p.edAddLink(n0_sn,n1_sn)
+    p.edAddLink(n0_vn,n1_vn)
+    p.edAddLink(n0_sn,n2_sn)
+    p.edAddLink(n0_vn,n2_vn)
+    #
+    ex=pilot.ExecutorSwig()
+    ex.RunW(p,0)
+    self.assertEqual(p.getState(),pilot.DONE)
+    pass
+
+  def test25(self):
+    fname="test25.xml"
+    p=self.r.createProc("p0")
+    tp=p.createInterfaceTc("python:obj:1.0","pyobj",[])
+    n1_0_sc=self.r.createScriptNode("Salome","n1_0_sc")
+    p.edAddChild(n1_0_sc)
+    n1_0_sc.setExecutionMode("remote")
+    n1_0_sc.setScript("""""")
+    i1_0_sc=n1_0_sc.edAddInputPort("i1",tp)
+    i1_0_sc.edInitPy(list(range(4)))
+
+    cont=p.createContainer("gg","Salome")
+    cont.setProperty("name","localhost")
+    cont.setProperty("hostname","localhost")
+    n1_0_sc.setContainer(cont)
+
+    p.saveSchema(fname)
+    l=loader.YACSLoader()
+    p=l.load(fname)
+    ex=pilot.ExecutorSwig()
+    self.assertEqual(p.getState(),pilot.READY)
+    ex.RunW(p,0)
+    self.assertEqual(p.getState(),pilot.DONE)
     pass
-  pass
 
 if __name__ == '__main__':
   import os,sys
   U = os.getenv('USER')
-  f=open("/tmp/" + U + "/UnitTestsResult", 'a')
-  f.write("  --- TEST src/yacsloader: testSaveLoadRun.py\n")
-  suite = unittest.makeSuite(TestSaveLoadRun)
-  result=unittest.TextTestRunner(f, descriptions=1, verbosity=1).run(suite)
-  f.close()
+  with open("/tmp/" + U + "/UnitTestsResult", 'a') as f:
+      f.write("  --- TEST src/yacsloader: testSaveLoadRun.py\n")
+      suite = unittest.makeSuite(TestSaveLoadRun)
+      result=unittest.TextTestRunner(f, descriptions=1, verbosity=1).run(suite)
   sys.exit(not result.wasSuccessful())