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

Infer DOML version automatically

parent 035eafed
Branches
No related tags found
No related merge requests found
......@@ -3,8 +3,8 @@ services:
dmc:
build: .
ports:
- "8080:80"
- "8080:8080"
environment:
UVICORN_PORT: 80
UVICORN_PORT: 8080
UVICORN_HOST: "0.0.0.0"
UVICORN_WORKERS: 2
......@@ -13,7 +13,7 @@ class DOMLVersion(Enum):
V1_0 = "v1.0"
V2_0 = "v2.0"
V2_1 = "v2.1"
V2_2 = "v2.1.1"
V2_2 = "v2.2"
Multiplicity = tuple[Literal["0", "1"], Literal["1", "*"]]
......
......@@ -66,11 +66,33 @@ def infer_domlx_version(raw_model: bytes) -> DOMLVersion:
def parse_doml_model(raw_model: bytes, doml_version: Optional[DOMLVersion]) -> Tuple[IntermediateModel, DOMLVersion]:
# if doml_version is None:
# doml_version = infer_domlx_version(raw_model)
# Try every DOML version until one works!
if doml_version is None:
doml_version = infer_domlx_version(raw_model)
doml_versions = [x for x in DOMLVersion]
print(doml_versions)
def get_model(raw_model, doml_version):
try:
dv = doml_versions.pop(0)
doml_version = dv
return parse_xmi_model(raw_model, dv), dv
except Exception as e:
print(f"Couldn't parse with DOML {dv.value}. Trying another version...")
if len(doml_versions) == 0:
raise e
else:
return get_model(raw_model, doml_version)
model, doml_version = get_model(raw_model, doml_version)
else: # if user specifies DOML version, respect that choice!
model = parse_xmi_model(raw_model, doml_version)
print(f"Using DOML {doml_version.value}")
elp = ELayerParser(MetaModels[doml_version], SpecialParsers[doml_version])
if model.application:
elp.parse_elayer(model.application)
......
......@@ -3,11 +3,6 @@ from mc_openapi.doml_mc.common_reqs import CommonRequirements
from mc_openapi.doml_mc import DOMLVersion
import requests
def test_version():
assert __version__ == '1.2.0'
# V2_0 tests
def test_post_nginx_sat_V2_0():
with open("tests/doml/v2.0/nginx-openstack_v2.0.domlx", "r") as f:
......@@ -74,3 +69,36 @@ def test_post_faas_unsat_V2_1():
assert r.status_code == requests.codes.ok
assert payload["result"] is not None
assert payload["result"] == "unsat"
# V2_2 tests
def test_post_nginx_sat_V2_1():
with open("tests/doml/v2.2/nginx-aws-ec2.domlx", "r") as f:
doml = f.read()
r = requests.post("http://0.0.0.0:8080/modelcheck", data=doml)
payload = r.json()
assert r.status_code == requests.codes.ok
assert payload["result"] is not None
assert payload["result"] == "sat"
def test_post_faas_unsat_V2_2():
with open("tests/doml/v2.2/faas.domlx", "r") as f:
doml = f.read()
r = requests.post("http://0.0.0.0:8080/modelcheck", data=doml)
payload = r.json()
assert r.status_code == requests.codes.ok
assert payload["result"] is not None
assert payload["result"] == "sat"
def test_post_nginx_with_func_reqs_unsat_V2_2():
with open("tests/doml/v2.2/nginx_func_req.domlx", "r") as f:
doml = f.read()
r = requests.post("http://0.0.0.0:8080/modelcheck", data=doml)
payload = r.json()
assert r.status_code == requests.codes.ok
assert payload["result"] is not None
assert payload["result"] == "unsat"
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment