Skip to content
Snippets Groups Projects
Unverified Commit a6ca0883 authored by Andrea Franchini's avatar Andrea Franchini
Browse files

Fix test support for DOML 2.2

parent 67841229
No related branches found
No related tags found
No related merge requests found
......@@ -22,7 +22,7 @@ from mc_openapi.doml_mc.xmi_parser.doml_model import get_pyecore_model
parser = argparse.ArgumentParser()
parser.add_argument("-d", "--doml", dest="doml", help="the DOMLX file to check")
parser.add_argument("-V", "--doml-version", dest="doml_version", default="V2_0", help="(optional) the version used by the DOMLX file")
parser.add_argument("-V", "--doml-version", dest="doml_version", help="(optional) the version used by the DOMLX file")
parser.add_argument("-r", "--requirements", dest="requirements", help="the user-specified requirements file to check")
parser.add_argument("-p", "--port", dest="port", type=int, default=8080, help="the port exposing the model checker REST API (default: 8080)")
parser.add_argument("-v", "--verbose", dest="verbose", action='store_true', help="print a detailed human-readable output of everything going on. Helpful for debugging.")
......@@ -52,6 +52,8 @@ else:
reqs_path = args.requirements
# Try using the user-provided DOML version
doml_ver = None
if args.doml_version is not None:
try:
doml_ver = DOMLVersion[args.doml_version]
except:
......@@ -67,6 +69,7 @@ else:
# Config the model checker (setup metamodels and intermediate models)
dmc = ModelChecker(doml_xmi, doml_ver)
doml_ver = dmc.doml_version
# Store of Requirements and unique string constants
user_req_store = RequirementStore()
......@@ -99,7 +102,7 @@ else:
exit(-1)
if doml_ver == DOMLVersion.V2_2:
model = get_pyecore_model(doml_xmi, DOMLVersion.V2_2)
model = get_pyecore_model(doml_xmi, doml_ver)
func_reqs = model.functionalRequirements.items
for req in func_reqs:
req_name: str = req.name
......
......@@ -114,7 +114,7 @@ def parse_doml_model(raw_model: bytes, doml_version: Optional[DOMLVersion]) -> T
def get_pyecore_model(raw_model: bytes, doml_version: Optional[DOMLVersion]) -> EObject:
if doml_version is None:
doml_version = infer_domlx_version(raw_model)
# TODO: See if its better replaced by the get_model() in parse_doml_version()
return parse_xmi_model(raw_model, doml_version)
from typing import Optional
......
import datetime
from mc_openapi.doml_mc.domlr_parser.parser import DOMLRTransformer, Parser
from mc_openapi.doml_mc.imc import RequirementStore
from mc_openapi.doml_mc.intermediate_model.metamodel import DOMLVersion
from mc_openapi.doml_mc.xmi_parser.doml_model import get_pyecore_model
from .doml_mc import ModelChecker, MCResult
......@@ -13,8 +18,30 @@ def make_error(user_msg, debug_msg=None):
def post(body):
doml_xmi = body
try:
dmc = ModelChecker(doml_xmi)
results = dmc.check_requirements(threads=2, consistency_checks=False, timeout=50)
user_req_store = None
user_req_str_consts = []
# Add support for Requirements in DOML
if dmc.doml_version == DOMLVersion.V2_2:
domlr_parser = Parser(DOMLRTransformer)
model = get_pyecore_model(doml_xmi, DOMLVersion.V2_2)
func_reqs = model.functionalRequirements.items
user_req_store = RequirementStore()
for req in func_reqs:
req_name: str = req.name
req_text: str = req.description
req_text = req_text.replace("```", "")
doml_req_store, doml_req_str_consts = domlr_parser.parse(req_text)
user_req_store += doml_req_store
user_req_str_consts += doml_req_str_consts
results = dmc.check_requirements(threads=2, user_requirements=user_req_store, user_str_values=user_req_str_consts, consistency_checks=False, timeout=50)
res, msg = results.summarize()
if res == MCResult.sat:
......
......@@ -90,7 +90,7 @@ def test_post_faas_unsat_V2_2():
payload = r.json()
assert r.status_code == requests.codes.ok
assert payload["result"] is not None
assert payload["result"] == "sat"
assert payload["result"] == "unsat"
def test_post_nginx_with_func_reqs_unsat_V2_2():
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment