Ver código fonte

Add test for permission_owner for models

Yentl Van Tendeloo 7 anos atrás
pai
commit
ba8f68c0af

+ 3 - 3
bootstrap/core_algorithm.alc

@@ -2123,7 +2123,7 @@ String function cmd_permission_owner(model_name : String, new_user_name : String
 				instantiate_link(core, "owner", "", model_id, new_user_id)
 				return "Success"!
 			else:
-				return "No such user: " + new_user_name!
+				return "Unknown user: " + new_user_name!
 		else:
 			return "User permission denied to: " + model_name!
 	else:
@@ -2142,7 +2142,7 @@ String function cmd_permission_group(model_name : String, new_group_name : Strin
 				instantiate_link(core, "group", "", model_id, group_id)
 				return "Success"!
 			else:
-				return "No such group: " + new_group_name!
+				return "Unknown group: " + new_group_name!
 		else:
 			return "User permission denied to: " + model_name!
 	else:
@@ -2358,7 +2358,7 @@ String function cmd_user_password(user_name : String, new_password : String):
 			instantiate_attribute(core, get_user_id(user_name), "password", hash(new_password))
 			return "Success"!
 		else:
-			return "No such user: " + user_name!
+			return "Unknown user: " + user_name!
 	else:
 		return "User permission denied: " + user_name!
 

+ 64 - 14
unit/test_all.py

@@ -288,14 +288,14 @@ class TestModelverse(unittest.TestCase):
             model_add("users/new_model", "formalisms/SimpleClassDiagrams")
             self.fail()
         except WritePermissionDenied:
-            assert model_list("users/") == set(["user/", "admin/", "LoLA/", "pypdevs_batch_service/", "HUTN/", "JSON/", "file/", "pypdevs_service/"])
+            assert "new_model/" not in model_list("users/")
 
         try:
             # Cannot upload model to unwritable location somewhere in hierarchy with multiple new branches
             model_add("users/new_username/new_model", "formalisms/SimpleClassDiagrams")
             self.fail()
         except WritePermissionDenied:
-            assert model_list("users/") == set(["user/", "admin/", "LoLA/", "pypdevs_batch_service/", "HUTN/", "JSON/", "file/", "pypdevs_service/"])
+            assert "new_username/" not in model_list("users/")
 
         model_add("users/user/test/c", "users/user/test/b", """
             A a {}
@@ -2579,27 +2579,77 @@ class TestModelverse(unittest.TestCase):
 
     def do_test_permission(self, model, expected_permissions):
         for user, permission in expected_permissions.items():
-            read = permission != "N"
-            write = permission == "W"
+            assert self.do_as_user(user, read_permissions, [model]) == permission
 
-            actual = self.do_as_user(user, read_permissions, [model])
-
-            assert ("R" in actual) == read
-            assert ("W" in actual) == write
-
-    """
-    def test_op_permission_owner(self):
+    def test_op_permission_owner_model(self):
         model_add("users/user/test/a", "formalisms/SimpleClassDiagrams")
-        group_create("users")
+        try:
+            # Might already exist
+            group_create("users")
+        except:
+            pass
         permission_group("users/user/test/a", "users")
+        permission_modify("users/user/test/a", "210")
 
         self.do_create_user("group_user")
         self.do_create_user("other_user")
         group_join("users", "group_user")
 
-        self.do_test_permission("users/user/test/a", {"admin": "W", "user": "W", "group_user": "R", "other_user": "N"})
+        # Test initial situation, where we have owners user:users with permission 210
+        self.do_test_permission("users/user/test/a", {"admin": "RW", "user": "RW", "group_user": "R", "other_user": ""})
+
+        # Change owner, but permissions stay the same
+        permission_owner("users/user/test/a", "group_user")
+        print("Groups: " + str(group_list()))
+        self.do_test_permission("users/user/test/a", {"admin": "RW", "user": "R", "group_user": "RW", "other_user": ""})
+
+        # Can no longer modify permissions: only owner can do that
+        try:
+            permission_owner("users/user/test/a", "admin")
+            self.fail()
+        except UserPermissionDenied:
+            self.do_test_permission("users/user/test/a", {"admin": "RW", "user": "R", "group_user": "RW", "other_user": ""})
+
+        # Change owner to admin, who always has RW permissions
+        self.do_as_user("group_user", permission_owner, ["users/user/test/a", "admin"])
+        self.do_test_permission("users/user/test/a", {"admin": "RW", "user": "R", "group_user": "R", "other_user": ""})
+
+        # Give permissions back to someone else, and test that admin can always do operations, even if not owner
+        self.do_as_user("admin", permission_owner, ["users/user/test/a", "group_user"])
+        self.do_test_permission("users/user/test/a", {"admin": "RW", "user": "R", "group_user": "RW", "other_user": ""})
+        self.do_as_user("admin", permission_owner, ["users/user/test/a", "user"])
+        self.do_test_permission("users/user/test/a", {"admin": "RW", "user": "RW", "group_user": "R", "other_user": ""})
+
+        # Test non-existing model
+        try:
+            permission_owner("adfadf", "admin")
+            self.fail()
+        except UnknownModel:
+            pass
+
+        # Test non-existing user
+        try:
+            self.do_as_user("admin", permission_owner, ["users/user/test/a", "dfadf"])
+            self.fail()
+        except UnknownUser:
+            pass
+
+        # Test assign to user who is already owner
+        self.do_test_permission("users/user/test/a", {"admin": "RW", "user": "RW", "group_user": "R", "other_user": ""})
+        self.do_as_user("admin", permission_owner, ["users/user/test/a", "user"])
+        self.do_test_permission("users/user/test/a", {"admin": "RW", "user": "RW", "group_user": "R", "other_user": ""})
+
+    """
+    def test_op_permission_owner_model(self):
+        folder_create("users/user/test/a/b/c")
+
+        try:
+            # Might already exist
+            group_create("users")
+        except:
+            pass
 
-        #permission_owner("users/user/test/a", "group_user")
+        permission_group("users/user/test/a/b", "users")
     """
 
     """

+ 6 - 3
wrappers/classes/modelverse.xml

@@ -326,11 +326,14 @@
 
                         <transition cond="self.expect_response_partial('Success: ', pop=False)" target="../../wait_for_action/history">
                             <script>
-                                print("Got: " + str(self.responses[0]))
-                                print("Split: " + str(self.split_response(self.responses[0])))
+                                result = self.split_response(self.responses.pop(0))
+                                if result:
+                                    result = result[0]
+                                else:
+                                    result = ""
                             </script>
                             <raise event="result">
-                                <parameter expr="self.split_response(self.responses.pop(0))[0]"/>
+                                <parameter expr="result"/>
                             </raise>
                         </transition>
                     </state>

+ 6 - 3
wrappers/modelverse_SCCD.py

@@ -2664,9 +2664,12 @@ class Modelverse(RuntimeClassBase):
         return self.expect_response_partial('Success: ', pop=False)
     
     def _initialized_behaviour_operations_read_permissions_0_exec(self, parameters):
-        print("Got: " + str(self.responses[0]))
-        print("Split: " + str(self.split_response(self.responses[0])))
-        self.raiseInternalEvent(Event("result", None, [self.split_response(self.responses.pop(0))[0]]))
+        result = self.split_response(self.responses.pop(0))
+        if result:
+            result = result[0]
+        else:
+            result = ""
+        self.raiseInternalEvent(Event("result", None, [result]))
     
     def _initialized_behaviour_operations_read_permissions_0_guard(self, parameters):
         return self.expect_response_partial('Success: ', pop=False)