Explorar o código

Add corner case checks for model_list(_full) and verify

Yentl Van Tendeloo %!s(int64=7) %!d(string=hai) anos
pai
achega
bf4ce75751
Modificáronse 2 ficheiros con 71 adicións e 5 borrados
  1. 3 3
      bootstrap/core_algorithm.alc
  2. 68 2
      unit/test_all.py

+ 3 - 3
bootstrap/core_algorithm.alc

@@ -1560,7 +1560,7 @@ String function cmd_verify(model_name : String, metamodel_name : String):
 					Element m
 					m = get_full_model(get_entry_id(model_name), get_entry_id(metamodel_name))
 					if (element_eq(m, read_root())):
-						return "No conformance relation can be found between these models"!
+						return "Conformance hierarchy unknown for: " + model_name!
 
 					return string_join("Success: ", conformance_scd(m))!
 				else:
@@ -1694,7 +1694,7 @@ String function cmd_model_list(location : String):
 		else:
 			return "Read permission denied to: " + location!
 	else:
-		return "Model not found: " + location!
+		return "Unknown location: " + location!
 
 String function cmd_model_list_full(location : String):
 	// List all models with full info
@@ -1725,7 +1725,7 @@ String function cmd_model_list_full(location : String):
 		else:
 			return "Read permission denied to: " + location!
 	else:
-		return "Model not found: " + location!
+		return "Unknown location: " + location!
 
 String function cmd_transformation_add_MANUAL(source_models : Element, target_models : Element, operation_name : String):
 	return transformation_add(source_models, target_models, operation_name, "manual")!

+ 68 - 2
unit/test_all.py

@@ -131,6 +131,20 @@ class TestModelverse(unittest.TestCase):
                                                  "Bottom",
                                                 ])
 
+        # Try unreadable location
+        try:
+            model_list("administration")
+            self.fail()
+        except ReadPermissionDenied:
+            pass
+
+        # Try non-existing location
+        try:
+            model_list("adfjafdla")
+            self.fail()
+        except UnknownLocation:
+            pass
+
     def test_op_model_list_full(self):
         assert model_list_full("") == set([("formalisms/", "admin", "admin", "221"),
                                            ("models/", "admin", "admin", "221"),
@@ -150,17 +164,37 @@ class TestModelverse(unittest.TestCase):
                                                      ("Bottom", "admin", "admin", "221"),
                                                     ])
 
+        # Try unreadable location
+        try:
+            model_list_full("administration")
+            self.fail()
+        except ReadPermissionDenied:
+            pass
+
+        # Try non-existing location
+        try:
+            model_list_full("adfjafdla")
+            self.fail()
+        except UnknownLocation:
+            pass
+
     def test_op_verify(self):
+        # Verify M3 --> M3
         assert verify("formalisms/SimpleClassDiagrams", "formalisms/SimpleClassDiagrams") == "OK"
+        # Verify with bottom
         assert verify("formalisms/SimpleClassDiagrams", "formalisms/Bottom") == "OK"
+        # Verify the type mapping models
         for tm in model_types("formalisms/SimpleClassDiagrams"):
             assert verify(tm[1], "formalisms/TypeMapping") == "OK"
+
+        # Verify wrong
         try:
             verify("formalisms/SimpleClassDiagrams", "formalisms/ProcessModel")
             self.fail()
-        except:
+        except UnknownMetamodellingHierarchy:
             pass
 
+        # Verify M2 --> M3
         assert verify("formalisms/ProcessModel", "formalisms/SimpleClassDiagrams") == "OK"
         assert verify("formalisms/ProcessModel", "formalisms/Bottom") == "OK"
         for tm in model_types("formalisms/ProcessModel"):
@@ -168,16 +202,48 @@ class TestModelverse(unittest.TestCase):
         try:
             verify("formalisms/ProcessModel", "formalisms/ProcessModel")
             self.fail()
-        except:
+        except UnknownMetamodellingHierarchy:
             pass
 
+        # Verify M1 --> M2
         model_add("users/user/test/a", "formalisms/ProcessModel")
+        # Fails with lacking instances of Start and Finish class
         assert verify("users/user/test/a", "formalisms/ProcessModel").startswith("Lower cardinality violated for class: ")
         instantiate("users/user/test/a", "Start")
+        # Fails with lacking instances of Finish class
         assert verify("users/user/test/a", "formalisms/ProcessModel") == "Lower cardinality violated for class: Finish"
         instantiate("users/user/test/a", "Finish")
+        # Succeeds
         assert verify("users/user/test/a", "formalisms/ProcessModel") == "OK"
 
+        # Test unreadable model
+        try:
+            verify("administration/core", "formalisms/ProcessModel")
+            self.fail()
+        except ReadPermissionDenied:
+            pass
+
+        # Test unreadable metamodel
+        try:
+            verify("formalisms/Bottom", "administration/core")
+            self.fail()
+        except ReadPermissionDenied:
+            pass
+
+        # Test non-existing model
+        try:
+            verify("adfadf", "formalisms/SimpleClassDiagrams")
+            self.fail()
+        except UnknownModel:
+            pass
+
+        # Test non-existing metamodel
+        try:
+            verify("formalisms/SimpleClassDiagrams", "adfka")
+            self.fail()
+        except UnknownModel:
+            pass
+
     def test_op_permission_modify(self):
         model_add("users/user/test/a", "formalisms/SimpleClassDiagrams")
         assert model_list_full("users/user/test") == set([("a", "user", "nobody", "200")])