test_powerwindow.py 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206
  1. import unittest
  2. from utils import *
  3. import sys
  4. sys.path.append("wrappers")
  5. from modelverse import *
  6. class TestPowerWindow(unittest.TestCase):
  7. def setUp(self):
  8. self.proc, self.address = start_mvc()
  9. init(self.address)
  10. login("admin", "admin")
  11. def tearDown(self):
  12. kill(self.proc)
  13. def test_process_powerwindow_fast(self):
  14. model_add("ReachabilityGraph", "SimpleClassDiagrams", open("models/reachability_graph.mvc", "r").read())
  15. model_add("PetriNet", "SimpleClassDiagrams", open("integration/code/pn_design.mvc", 'r').read())
  16. model_add("Encapsulated_PetriNet", "SimpleClassDiagrams", open("models/petrinet_ports.mvc", 'r').read())
  17. model_add("PW_Plant", "SimpleClassDiagrams", open("models/plant_PW.mvc", 'r').read())
  18. model_add("PW_Environment", "SimpleClassDiagrams", open("models/environment_PW.mvc", 'r').read())
  19. model_add("PW_Control", "SimpleClassDiagrams", open("models/control_PW.mvc", 'r').read())
  20. model_add("Requirements", "SimpleClassDiagrams", open("models/requirements.mvc", 'r').read())
  21. model_add("Query", "SimpleClassDiagrams", open("models/query.mvc", 'r').read())
  22. model_add("Architecture", "SimpleClassDiagrams", open("models/architecture.mvc", 'r').read())
  23. model_add("pm_powerwindow", "ProcessModel", open("models/pm_req_analyse.mvc", 'r').read())
  24. assert model_list() == set([\
  25. ("ReachabilityGraph", "SimpleClassDiagrams"),
  26. ("PetriNet", "SimpleClassDiagrams"),
  27. ("Encapsulated_PetriNet", "SimpleClassDiagrams"),
  28. ("PW_Plant", "SimpleClassDiagrams"),
  29. ("PW_Environment", "SimpleClassDiagrams"),
  30. ("PW_Control", "SimpleClassDiagrams"),
  31. ("Requirements", "SimpleClassDiagrams"),
  32. ("Query", "SimpleClassDiagrams"),
  33. ("Architecture", "SimpleClassDiagrams"),
  34. ("pm_powerwindow", "ProcessModel"),
  35. ("SimpleClassDiagrams", "SimpleClassDiagrams"),
  36. ("CoreFormalism", "SimpleClassDiagrams"),
  37. ("ManualOperation", "SimpleClassDiagrams"),
  38. ("ActionLanguage", "SimpleClassDiagrams"),
  39. ("ProcessModel", "SimpleClassDiagrams"),
  40. ("Tracability", "SimpleClassDiagrams"),
  41. ("core", "CoreFormalism"),])
  42. transformation_add_MT_language(["PetriNet", "Encapsulated_PetriNet", "PW_Plant", "PW_Control", "PW_Environment", "Requirements", "ReachabilityGraph", "Query", "Architecture"], "All_RAM")
  43. instantiate("__merged_All_RAM", "Association", ("PW_Control/State", "Encapsulated_PetriNet/Place"), ID="CTRL2EPN_link")
  44. instantiate("__merged_All_RAM", "Association", ("PW_Control/Transition", "Encapsulated_PetriNet/Transition"), ID="CTRL2EPN_tlink")
  45. instantiate("__merged_All_RAM", "Association", ("PW_Plant/State", "Encapsulated_PetriNet/Place"), ID="PLANT2EPN_link")
  46. instantiate("__merged_All_RAM", "Association", ("PW_Plant/Transition", "Encapsulated_PetriNet/Transition"), ID="PLANT2EPN_tlink")
  47. instantiate("__merged_All_RAM", "Association", ("PW_Environment/Event", "Encapsulated_PetriNet/Place"), ID="ENV2EPN_link")
  48. instantiate("__merged_All_RAM", "Association", ("Encapsulated_PetriNet/Place", "PetriNet/Place"), ID="EPN2PN_transition_link")
  49. instantiate("__merged_All_RAM", "Association", ("Encapsulated_PetriNet/Transition", "PetriNet/Transition"), ID="EPN2PN_place_link")
  50. transformation_RAMify("__merged_All_RAM", "All_RAM")
  51. transformation_add_MANUAL(["Requirements"], ["Requirements"], "revise_req")
  52. transformation_add_MANUAL(["Requirements", "PW_Environment"], ["PW_Environment"], "revise_environment")
  53. transformation_add_MANUAL(["Requirements", "PW_Plant"], ["PW_Plant"], "revise_plant")
  54. transformation_add_MANUAL(["Requirements", "PW_Control"], ["PW_Control"], "revise_control")
  55. transformation_add_MANUAL(["Requirements", "Query"], ["Query"], "revise_query")
  56. transformation_add_MANUAL(["Requirements", "Architecture"], ["Architecture"], "revise_architecture")
  57. transformation_add_MT("All_RAM", [], ["PW_Plant", "PW_Environment", "PW_Control", "Query", "Architecture", "Requirements"], "make_initial_models", open("models/initialize.mvc", 'r').read())
  58. transformation_add_MT("All_RAM", ["PW_Plant"], ["Encapsulated_PetriNet"], "plant_to_EPN", open("models/plant_to_EPN.mvc", 'r').read())
  59. transformation_add_MT("All_RAM", ["PW_Control"], ["Encapsulated_PetriNet"], "control_to_EPN", open("models/control_to_EPN.mvc", 'r').read())
  60. transformation_add_MT("All_RAM", ["PW_Environment"], ["Encapsulated_PetriNet"], "environment_to_EPN", open("models/environment_to_EPN.mvc", 'r').read())
  61. transformation_add_MT("All_RAM", ["Encapsulated_PetriNet", "Architecture"], ["Encapsulated_PetriNet"], "combine_EPN", open("models/combine_EPN.mvc", 'r').read())
  62. transformation_add_MT("All_RAM", ["ReachabilityGraph", "Query"], [], "match", open("models/matches.mvc", 'r').read())
  63. transformation_add_AL(["PetriNet"], ["ReachabilityGraph"], "reachability", open("models/reachability.alc", 'r').read())
  64. transformation_add_AL(["ReachabilityGraph"], [], "bfs", open("models/bfs.alc", 'r').read())
  65. global called
  66. called = 0
  67. def get_function(filename):
  68. def func():
  69. global called
  70. if called > len(callbacks):
  71. raise Exception("Seemingly called some operation twice!")
  72. else:
  73. called += 1
  74. model_overwrite(None, open(filename, "r").read())
  75. return func
  76. cb_req = get_function("models/requirements_model.mvc")
  77. cb_plant = get_function("models/plant_model.mvc")
  78. cb_env = get_function("models/environment_model.mvc")
  79. cb_ctrl = get_function("models/control_model.mvc")
  80. cb_query = get_function("models/query_model.mvc")
  81. cb_arch = get_function("models/architecture_model.mvc")
  82. callbacks = {
  83. "revise_req": cb_req,
  84. "revise_plant": cb_plant,
  85. "revise_environment": cb_env,
  86. "revise_control": cb_ctrl,
  87. "revise_query": cb_query,
  88. "revise_architecture": cb_arch,
  89. }
  90. process_execute("pm_powerwindow", "pm_", callbacks)
  91. @slow
  92. def test_process_powerwindow_debug(self):
  93. model_add("ReachabilityGraph", "SimpleClassDiagrams", open("models/reachability_graph.mvc", "r").read())
  94. model_add("PetriNet", "SimpleClassDiagrams", open("integration/code/pn_design.mvc", 'r').read())
  95. model_add("Encapsulated_PetriNet", "SimpleClassDiagrams", open("models/petrinet_ports.mvc", 'r').read())
  96. model_add("PW_Plant", "SimpleClassDiagrams", open("models/plant_PW.mvc", 'r').read())
  97. model_add("PW_Environment", "SimpleClassDiagrams", open("models/environment_PW.mvc", 'r').read())
  98. model_add("PW_Control", "SimpleClassDiagrams", open("models/control_PW.mvc", 'r').read())
  99. model_add("Requirements", "SimpleClassDiagrams", open("models/requirements.mvc", 'r').read())
  100. model_add("Query", "SimpleClassDiagrams", open("models/query.mvc", 'r').read())
  101. model_add("Architecture", "SimpleClassDiagrams", open("models/architecture.mvc", 'r').read())
  102. model_add("pm_powerwindow", "ProcessModel", open("models/pm_req_analyse.mvc", 'r').read())
  103. assert model_list() == set([\
  104. ("ReachabilityGraph", "SimpleClassDiagrams"),
  105. ("PetriNet", "SimpleClassDiagrams"),
  106. ("Encapsulated_PetriNet", "SimpleClassDiagrams"),
  107. ("PW_Plant", "SimpleClassDiagrams"),
  108. ("PW_Environment", "SimpleClassDiagrams"),
  109. ("PW_Control", "SimpleClassDiagrams"),
  110. ("Requirements", "SimpleClassDiagrams"),
  111. ("Query", "SimpleClassDiagrams"),
  112. ("Architecture", "SimpleClassDiagrams"),
  113. ("pm_powerwindow", "ProcessModel"),
  114. ("SimpleClassDiagrams", "SimpleClassDiagrams"),
  115. ("CoreFormalism", "SimpleClassDiagrams"),
  116. ("ManualOperation", "SimpleClassDiagrams"),
  117. ("ActionLanguage", "SimpleClassDiagrams"),
  118. ("ProcessModel", "SimpleClassDiagrams"),
  119. ("Tracability", "SimpleClassDiagrams"),
  120. ("core", "CoreFormalism"),])
  121. transformation_add_MT_language(["PetriNet", "Encapsulated_PetriNet", "PW_Plant", "PW_Control", "PW_Environment", "Requirements", "ReachabilityGraph", "Query", "Architecture"], "All_RAM")
  122. instantiate("__merged_All_RAM", "Association", ("PW_Control/State", "Encapsulated_PetriNet/Place"), ID="CTRL2EPN_link")
  123. instantiate("__merged_All_RAM", "Association", ("PW_Control/Transition", "Encapsulated_PetriNet/Transition"), ID="CTRL2EPN_tlink")
  124. instantiate("__merged_All_RAM", "Association", ("PW_Plant/State", "Encapsulated_PetriNet/Place"), ID="PLANT2EPN_link")
  125. instantiate("__merged_All_RAM", "Association", ("PW_Plant/Transition", "Encapsulated_PetriNet/Transition"), ID="PLANT2EPN_tlink")
  126. instantiate("__merged_All_RAM", "Association", ("PW_Environment/Event", "Encapsulated_PetriNet/Place"), ID="ENV2EPN_link")
  127. instantiate("__merged_All_RAM", "Association", ("Encapsulated_PetriNet/Place", "PetriNet/Place"), ID="EPN2PN_transition_link")
  128. instantiate("__merged_All_RAM", "Association", ("Encapsulated_PetriNet/Transition", "PetriNet/Transition"), ID="EPN2PN_place_link")
  129. transformation_RAMify("__merged_All_RAM", "All_RAM")
  130. transformation_add_MANUAL(["Requirements"], ["Requirements"], "revise_req")
  131. transformation_add_MANUAL(["Requirements", "PW_Environment"], ["PW_Environment"], "revise_environment")
  132. transformation_add_MANUAL(["Requirements", "PW_Plant"], ["PW_Plant"], "revise_plant")
  133. transformation_add_MANUAL(["Requirements", "PW_Control"], ["PW_Control"], "revise_control")
  134. transformation_add_MANUAL(["Requirements", "Query"], ["Query"], "revise_query")
  135. transformation_add_MANUAL(["Requirements", "Architecture"], ["Architecture"], "revise_architecture")
  136. transformation_add_MT("All_RAM", [], ["PW_Plant", "PW_Environment", "PW_Control", "Query", "Architecture", "Requirements"], "make_initial_models", open("models/initialize.mvc", 'r').read())
  137. transformation_add_MT("All_RAM", ["PW_Plant"], ["Encapsulated_PetriNet"], "plant_to_EPN", open("models/plant_to_EPN.mvc", 'r').read())
  138. transformation_add_MT("All_RAM", ["PW_Control"], ["Encapsulated_PetriNet"], "control_to_EPN", open("models/control_to_EPN.mvc", 'r').read())
  139. transformation_add_MT("All_RAM", ["PW_Environment"], ["Encapsulated_PetriNet"], "environment_to_EPN", open("models/environment_to_EPN.mvc", 'r').read())
  140. transformation_add_MT("All_RAM", ["Encapsulated_PetriNet", "Architecture"], ["Encapsulated_PetriNet"], "combine_EPN", open("models/combine_EPN.mvc", 'r').read())
  141. transformation_add_MT("All_RAM", ["ReachabilityGraph", "Query"], [], "match", open("models/matches.mvc", 'r').read())
  142. transformation_add_AL(["PetriNet"], ["ReachabilityGraph"], "reachability", open("models/reachability.alc", 'r').read())
  143. transformation_add_AL(["ReachabilityGraph"], [], "bfs", open("models/bfs.alc", 'r').read())
  144. global called
  145. called = 0
  146. def get_function(filename, fixed=None):
  147. def func():
  148. global called
  149. if called > len(callbacks) * 2:
  150. raise Exception("Seemingly called some operation twice!")
  151. called += 1
  152. if called > len(callbacks) and fixed is not None:
  153. model_overwrite(None, open(fixed, "r").read())
  154. else:
  155. model_overwrite(None, open(filename, "r").read())
  156. return func
  157. cb_req = get_function("models/requirements_model.mvc")
  158. cb_plant = get_function("models/plant_model.mvc")
  159. cb_env = get_function("models/environment_model.mvc")
  160. cb_ctrl = get_function("models/control_model_wrong.mvc", "models/control_model.mvc")
  161. cb_query = get_function("models/query_model.mvc")
  162. cb_arch = get_function("models/architecture_model.mvc")
  163. callbacks = {
  164. "revise_req": cb_req,
  165. "revise_plant": cb_plant,
  166. "revise_environment": cb_env,
  167. "revise_control": cb_ctrl,
  168. "revise_query": cb_query,
  169. "revise_architecture": cb_arch,
  170. }
  171. process_execute("pm_powerwindow", "pm_", callbacks)
  172. if called != 11:
  173. print(called)
  174. raise Exception("Not executed sufficiently:" + str(called))