test_powerwindow.py 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235
  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. ("bottom", "SimpleClassDiagrams"),
  39. ("ActionLanguage", "SimpleClassDiagrams"),
  40. ("ProcessModel", "SimpleClassDiagrams"),
  41. ("Tracability", "SimpleClassDiagrams"),
  42. ("conformance_mv", "ActionLanguage"),
  43. ("core", "CoreFormalism"),])
  44. transformation_add_MANUAL({"Requirements": "Requirements"}, {"Requirements": "Requirements"}, "revise_req")
  45. transformation_add_MANUAL({"Requirements": "Requirements", "PW_Environment": "PW_Environment"}, {"PW_Environment": "PW_Environment"}, "revise_environment")
  46. transformation_add_MANUAL({"Requirements": "Requirements", "PW_Plant": "PW_Plant"}, {"PW_Plant": "PW_Plant"}, "revise_plant")
  47. transformation_add_MANUAL({"Requirements": "Requirements", "PW_Control": "PW_Control"}, {"PW_Control": "PW_Control"}, "revise_control")
  48. transformation_add_MANUAL({"Requirements": "Requirements", "Query": "Query"}, {"Query": "Query"}, "revise_query")
  49. transformation_add_MANUAL({"Requirements": "Requirements", "Architecture": "Architecture"}, {"Architecture": "Architecture"}, "revise_architecture")
  50. def tracability_CTRL2EPN():
  51. instantiate(None, "Association", ("PW_Control/State", "Encapsulated_PetriNet/Place"), ID="CTRL2EPN_link")
  52. instantiate(None, "Association", ("PW_Control/Transition", "Encapsulated_PetriNet/Transition"), ID="CTRL2EPN_tlink")
  53. def tracability_PLANT2EPN():
  54. instantiate(None, "Association", ("PW_Plant/State", "Encapsulated_PetriNet/Place"), ID="PLANT2EPN_link")
  55. instantiate(None, "Association", ("PW_Plant/Transition", "Encapsulated_PetriNet/Transition"), ID="PLANT2EPN_tlink")
  56. def tracability_ENV2EPN():
  57. instantiate(None, "Association", ("PW_Environment/Event", "Encapsulated_PetriNet/Place"), ID="ENV2EPN_link")
  58. def tracability_EPN2PN():
  59. instantiate(None, "Association", ("Encapsulated_PetriNet/Place", "PetriNet/Place"), ID="EPN2PN_transition_link")
  60. instantiate(None, "Association", ("Encapsulated_PetriNet/Transition", "PetriNet/Transition"), ID="EPN2PN_place_link")
  61. transformation_add_MT({}, {"PW_Plant": "PW_Plant", "PW_Environment": "PW_Environment", "PW_Control": "PW_Control", "Query": "Query", "Architecture": "Architecture", "Requirements": "Requirements"}, "make_initial_models", open("models/initialize.mvc", 'r').read())
  62. transformation_add_MT({"PW_Plant": "PW_Plant"}, {"Encapsulated_PetriNet": "Encapsulated_PetriNet"}, "plant_to_EPN", open("models/plant_to_EPN.mvc", 'r').read(), tracability_PLANT2EPN)
  63. transformation_add_MT({"PW_Control": "PW_Control"}, {"Encapsulated_PetriNet": "Encapsulated_PetriNet"}, "control_to_EPN", open("models/control_to_EPN.mvc", 'r').read(), tracability_CTRL2EPN)
  64. transformation_add_MT({"PW_Environment": "PW_Environment"}, {"Encapsulated_PetriNet": "Encapsulated_PetriNet"}, "environment_to_EPN", open("models/environment_to_EPN.mvc", 'r').read(), tracability_ENV2EPN)
  65. transformation_add_MT({"Encapsulated_PetriNet": "Encapsulated_PetriNet", "Architecture": "Architecture"}, {"PetriNet": "PetriNet"}, "combine_EPN", open("models/combine_EPN.mvc", 'r').read(), tracability_EPN2PN)
  66. transformation_add_MT({"ReachabilityGraph": "ReachabilityGraph", "Query": "Query"}, {}, "match", open("models/matches.mvc", 'r').read())
  67. transformation_add_AL({"PetriNet": "PetriNet"}, {"ReachabilityGraph": "ReachabilityGraph"}, "reachability", open("models/reachability.alc", 'r').read())
  68. transformation_add_AL({"ReachabilityGraph": "ReachabilityGraph"}, {}, "bfs", open("models/bfs.alc", 'r').read())
  69. transformation_add_AL({"EPN_Plant": "Encapsulated_PetriNet", "EPN_Control": "Encapsulated_PetriNet", "EPN_Environment": "Encapsulated_PetriNet"}, {"Encapsulated_PetriNet": "Encapsulated_PetriNet"}, "merge_EPN", open("models/merge_EPN.alc", 'r').read())
  70. global called
  71. called = 0
  72. def get_function(filename):
  73. def func():
  74. print("Uploading " + filename)
  75. global called
  76. if called > len(callbacks):
  77. raise Exception("Seemingly called some operation twice!")
  78. else:
  79. called += 1
  80. model_overwrite(None, open(filename, "r").read())
  81. return func
  82. cb_req = get_function("models/requirements_model.mvc")
  83. cb_plant = get_function("models/plant_model.mvc")
  84. cb_env = get_function("models/environment_model.mvc")
  85. cb_ctrl = get_function("models/control_model.mvc")
  86. cb_query = get_function("models/query_model.mvc")
  87. cb_arch = get_function("models/architecture_model.mvc")
  88. callbacks = {
  89. "revise_req": cb_req,
  90. "revise_plant": cb_plant,
  91. "revise_environment": cb_env,
  92. "revise_control": cb_ctrl,
  93. "revise_query": cb_query,
  94. "revise_architecture": cb_arch,
  95. }
  96. try:
  97. process_execute("pm_powerwindow", "pm_", callbacks)
  98. except:
  99. import traceback
  100. print(traceback.format_exc())
  101. if called != 6:
  102. print(called)
  103. raise Exception("Not executed sufficiently:" + str(called))
  104. @slow
  105. def test_process_powerwindow_debug(self):
  106. model_add("ReachabilityGraph", "SimpleClassDiagrams", open("models/reachability_graph.mvc", "r").read())
  107. model_add("PetriNet", "SimpleClassDiagrams", open("integration/code/pn_design.mvc", 'r').read())
  108. model_add("Encapsulated_PetriNet", "SimpleClassDiagrams", open("models/petrinet_ports.mvc", 'r').read())
  109. model_add("PW_Plant", "SimpleClassDiagrams", open("models/plant_PW.mvc", 'r').read())
  110. model_add("PW_Environment", "SimpleClassDiagrams", open("models/environment_PW.mvc", 'r').read())
  111. model_add("PW_Control", "SimpleClassDiagrams", open("models/control_PW.mvc", 'r').read())
  112. model_add("Requirements", "SimpleClassDiagrams", open("models/requirements.mvc", 'r').read())
  113. model_add("Query", "SimpleClassDiagrams", open("models/query.mvc", 'r').read())
  114. model_add("Architecture", "SimpleClassDiagrams", open("models/architecture.mvc", 'r').read())
  115. model_add("pm_powerwindow", "ProcessModel", open("models/pm_req_analyse.mvc", 'r').read())
  116. assert model_list() == set([\
  117. ("ReachabilityGraph", "SimpleClassDiagrams"),
  118. ("PetriNet", "SimpleClassDiagrams"),
  119. ("Encapsulated_PetriNet", "SimpleClassDiagrams"),
  120. ("PW_Plant", "SimpleClassDiagrams"),
  121. ("PW_Environment", "SimpleClassDiagrams"),
  122. ("PW_Control", "SimpleClassDiagrams"),
  123. ("Requirements", "SimpleClassDiagrams"),
  124. ("Query", "SimpleClassDiagrams"),
  125. ("Architecture", "SimpleClassDiagrams"),
  126. ("pm_powerwindow", "ProcessModel"),
  127. ("SimpleClassDiagrams", "SimpleClassDiagrams"),
  128. ("CoreFormalism", "SimpleClassDiagrams"),
  129. ("ManualOperation", "SimpleClassDiagrams"),
  130. ("bottom", "SimpleClassDiagrams"),
  131. ("ActionLanguage", "SimpleClassDiagrams"),
  132. ("ProcessModel", "SimpleClassDiagrams"),
  133. ("Tracability", "SimpleClassDiagrams"),
  134. ("conformance_mv", "ActionLanguage"),
  135. ("core", "CoreFormalism"),])
  136. transformation_add_MANUAL({"Requirements": "Requirements"}, {"Requirements": "Requirements"}, "revise_req")
  137. transformation_add_MANUAL({"Requirements": "Requirements", "PW_Environment": "PW_Environment"}, {"PW_Environment": "PW_Environment"}, "revise_environment")
  138. transformation_add_MANUAL({"Requirements": "Requirements", "PW_Plant": "PW_Plant"}, {"PW_Plant": "PW_Plant"}, "revise_plant")
  139. transformation_add_MANUAL({"Requirements": "Requirements", "PW_Control": "PW_Control"}, {"PW_Control": "PW_Control"}, "revise_control")
  140. transformation_add_MANUAL({"Requirements": "Requirements", "Query": "Query"}, {"Query": "Query"}, "revise_query")
  141. transformation_add_MANUAL({"Requirements": "Requirements", "Architecture": "Architecture"}, {"Architecture": "Architecture"}, "revise_architecture")
  142. def tracability_CTRL2EPN():
  143. instantiate(None, "Association", ("PW_Control/State", "Encapsulated_PetriNet/Place"), ID="CTRL2EPN_link")
  144. instantiate(None, "Association", ("PW_Control/Transition", "Encapsulated_PetriNet/Transition"), ID="CTRL2EPN_tlink")
  145. def tracability_PLANT2EPN():
  146. instantiate(None, "Association", ("PW_Plant/State", "Encapsulated_PetriNet/Place"), ID="PLANT2EPN_link")
  147. instantiate(None, "Association", ("PW_Plant/Transition", "Encapsulated_PetriNet/Transition"), ID="PLANT2EPN_tlink")
  148. def tracability_ENV2EPN():
  149. instantiate(None, "Association", ("PW_Environment/Event", "Encapsulated_PetriNet/Place"), ID="ENV2EPN_link")
  150. def tracability_EPN2PN():
  151. instantiate(None, "Association", ("Encapsulated_PetriNet/Place", "PetriNet/Place"), ID="EPN2PN_transition_link")
  152. instantiate(None, "Association", ("Encapsulated_PetriNet/Transition", "PetriNet/Transition"), ID="EPN2PN_place_link")
  153. transformation_add_MT({}, {"PW_Plant": "PW_Plant", "PW_Environment": "PW_Environment", "PW_Control": "PW_Control", "Query": "Query", "Architecture": "Architecture", "Requirements": "Requirements"}, "make_initial_models", open("models/initialize.mvc", 'r').read())
  154. transformation_add_MT({"PW_Plant": "PW_Plant"}, {"Encapsulated_PetriNet": "Encapsulated_PetriNet"}, "plant_to_EPN", open("models/plant_to_EPN.mvc", 'r').read(), tracability_PLANT2EPN)
  155. transformation_add_MT({"PW_Control": "PW_Control"}, {"Encapsulated_PetriNet": "Encapsulated_PetriNet"}, "control_to_EPN", open("models/control_to_EPN.mvc", 'r').read(), tracability_CTRL2EPN)
  156. transformation_add_MT({"PW_Environment": "PW_Environment"}, {"Encapsulated_PetriNet": "Encapsulated_PetriNet"}, "environment_to_EPN", open("models/environment_to_EPN.mvc", 'r').read(), tracability_ENV2EPN)
  157. transformation_add_MT({"Encapsulated_PetriNet": "Encapsulated_PetriNet", "Architecture": "Architecture"}, {"PetriNet": "PetriNet"}, "combine_EPN", open("models/combine_EPN.mvc", 'r').read(), tracability_EPN2PN)
  158. transformation_add_MT({"ReachabilityGraph": "ReachabilityGraph", "Query": "Query"}, {}, "match", open("models/matches.mvc", 'r').read())
  159. transformation_add_AL({"PetriNet": "PetriNet"}, {"ReachabilityGraph": "ReachabilityGraph"}, "reachability", open("models/reachability.alc", 'r').read())
  160. transformation_add_AL({"ReachabilityGraph": "ReachabilityGraph"}, {}, "bfs", open("models/bfs.alc", 'r').read())
  161. transformation_add_AL({"EPN_Plant": "Encapsulated_PetriNet", "EPN_Control": "Encapsulated_PetriNet", "EPN_Environment": "Encapsulated_PetriNet"}, {"Encapsulated_PetriNet": "Encapsulated_PetriNet"}, "merge_EPN", open("models/merge_EPN.alc", 'r').read())
  162. global called
  163. called = 0
  164. def get_function(filename, fixed=None):
  165. def func():
  166. global called
  167. if called > len(callbacks) * 2:
  168. raise Exception("Seemingly called some operation twice!")
  169. called += 1
  170. if called > len(callbacks) and fixed is not None:
  171. model_overwrite(None, open(fixed, "r").read())
  172. else:
  173. model_overwrite(None, open(filename, "r").read())
  174. return func
  175. cb_req = get_function("models/requirements_model.mvc")
  176. cb_plant = get_function("models/plant_model.mvc")
  177. cb_env = get_function("models/environment_model.mvc")
  178. cb_ctrl = get_function("models/control_model_wrong.mvc", "models/control_model.mvc")
  179. cb_query = get_function("models/query_model.mvc")
  180. cb_arch = get_function("models/architecture_model.mvc")
  181. callbacks = {
  182. "revise_req": cb_req,
  183. "revise_plant": cb_plant,
  184. "revise_environment": cb_env,
  185. "revise_control": cb_ctrl,
  186. "revise_query": cb_query,
  187. "revise_architecture": cb_arch,
  188. }
  189. try:
  190. process_execute("pm_powerwindow", "pm_", callbacks)
  191. except:
  192. import traceback
  193. print(traceback.format_exc())
  194. if called != 11:
  195. print(called)
  196. raise Exception("Not executed sufficiently:" + str(called))