Add object assignments commands and the tests for them. 49/1749/1
authorasteroide <thomas.duval@orange.com>
Fri, 18 Sep 2015 12:25:54 +0000 (14:25 +0200)
committerasteroide <thomas.duval@orange.com>
Fri, 18 Sep 2015 12:25:54 +0000 (14:25 +0200)
Change-Id: Icec67fd57fec3468b5a0c63e98d85aa2ae6d5da1

moonclient/moonclient/object_assignments.py
moonclient/moonclient/tests/tests_object_assignments.json [new file with mode: 0644]

index 81305d6..611fdb1 100644 (file)
@@ -16,6 +16,16 @@ class ObjectAssignmentsList(Lister):
 
     def get_parser(self, prog_name):
         parser = super(ObjectAssignmentsList, self).get_parser(prog_name)
+        parser.add_argument(
+            'object_id',
+            metavar='<object-uuid>',
+            help='Object UUID',
+        )
+        parser.add_argument(
+            'category_id',
+            metavar='<category-uuid>',
+            help='Category UUID',
+        )
         parser.add_argument(
             '--intraextension',
             metavar='<intraextension-uuid>',
@@ -23,16 +33,22 @@ class ObjectAssignmentsList(Lister):
         )
         return parser
 
+    def __get_scope_from_id(self, intraextension_id, category_id, scope_id):
+        data = self.app.get_url("/v3/OS-MOON/intra_extensions/{}/object_scopes/{}".format(
+            intraextension_id, category_id),
+            authtoken=True)
+        if scope_id in data:
+            return data[scope_id]
+
     def take_action(self, parsed_args):
         if not parsed_args.intraextension:
             parsed_args.intraextension = self.app.intraextension
-        data = self.app.get_url("/v3/OS-MOON/intra_extensions/{}/object_assignments".format(parsed_args.intraextension),
-                                authtoken=True)
-        if "object_assignments" not in data:
-            raise Exception("Error in command {}: {}".format("ObjectAssignmentsList", data))
+        data = self.app.get_url("/v3/OS-MOON/intra_extensions/{}/object_assignments/{}/{}".format(
+            parsed_args.intraextension, parsed_args.object_id, parsed_args.category_id),
+            authtoken=True)
         return (
-            ("category", "value"),
-            ((_cat, str(_val)) for _cat, _val in data["object_assignments"].items())
+            ("id", "name"),
+            ((_id, self.__get_scope_from_id(parsed_args.intraextension, parsed_args.category_id, _id)['name']) for _id in data)
         )
 
 
@@ -45,17 +61,17 @@ class ObjectAssignmentsAdd(Command):
         parser = super(ObjectAssignmentsAdd, self).get_parser(prog_name)
         parser.add_argument(
             'object_id',
-            metavar='<action-uuid>',
+            metavar='<object-uuid>',
             help='Object UUID',
         )
         parser.add_argument(
             'object_category',
-            metavar='<object_category>',
+            metavar='<object_category-uuid>',
             help='Object Category',
         )
         parser.add_argument(
             'object_category_scope',
-            metavar='<object_category_scope>',
+            metavar='<object_category_scope-uuid>',
             help='Object Category Scope',
         )
         parser.add_argument(
@@ -65,21 +81,26 @@ class ObjectAssignmentsAdd(Command):
         )
         return parser
 
+    def __get_scope_from_id(self, intraextension_id, category_id, scope_id):
+        data = self.app.get_url("/v3/OS-MOON/intra_extensions/{}/object_scopes/{}".format(
+            intraextension_id, category_id),
+            authtoken=True)
+        if scope_id in data:
+            return data[scope_id]
+
     def take_action(self, parsed_args):
         if not parsed_args.intraextension:
             parsed_args.intraextension = self.app.intraextension
         data = self.app.get_url("/v3/OS-MOON/intra_extensions/{}/object_assignments".format(parsed_args.intraextension),
                                 post_data={
                                     "object_id": parsed_args.object_id,
-                                    "object_category": parsed_args.object_category,
-                                    "object_category_scope": parsed_args.object_category_scope
+                                    "object_category_id": parsed_args.object_category,
+                                    "object_scope_id": parsed_args.object_category_scope
                                 },
                                 authtoken=True)
-        if "object_assignments" not in data:
-            raise Exception("Error in command {}".format(data))
         return (
-            ("category", "value"),
-            ((_cat, str(_val)) for _cat, _val in data["object_assignments"].items())
+            ("id", "name"),
+            ((_id, self.__get_scope_from_id(parsed_args.intraextension, parsed_args.category_id, _id)['name']) for _id in data)
         )
 
 
@@ -92,7 +113,7 @@ class ObjectAssignmentsDelete(Command):
         parser = super(ObjectAssignmentsDelete, self).get_parser(prog_name)
         parser.add_argument(
             'object_id',
-            metavar='<action-uuid>',
+            metavar='<object-uuid>',
             help='Object UUID',
         )
         parser.add_argument(
@@ -117,8 +138,8 @@ class ObjectAssignmentsDelete(Command):
             parsed_args.intraextension = self.app.intraextension
         self.app.get_url("/v3/OS-MOON/intra_extensions/{}/object_assignments/{}/{}/{}".format(
             parsed_args.intraextension,
-            parsed_args.object_category,
             parsed_args.object_id,
+            parsed_args.object_category,
             parsed_args.object_category_scope
         ),
             method="DELETE",
diff --git a/moonclient/moonclient/tests/tests_object_assignments.json b/moonclient/moonclient/tests/tests_object_assignments.json
new file mode 100644 (file)
index 0000000..450066a
--- /dev/null
@@ -0,0 +1,366 @@
+{
+  "command_options": "-f value",
+  "tests_group": {
+    "authz": [
+      {
+        "name": "list tenant",
+        "command": "tenant list",
+        "result": "(?!alt_demo)",
+        "description": "Check if tenant alt_demo is used."
+      },
+      {
+        "name": "add tenant alt_demo",
+        "command": "tenant add alt_demo",
+        "result": "^$",
+        "description": "Add a new tenant",
+        "command_options": ""
+      },
+      {
+        "name": "check tenant alt_demo",
+        "command": "tenant list",
+        "result": "(?P<uuid>\\w+)\\s+alt_demo",
+        "description": "Check that tenant alt_demo has been correctly added"
+      },
+      {
+        "name": "create_intraextension_authz",
+        "command": "intraextension create --policy_model policy_authz authz_test",
+        "result": "IntraExtension created: (?P<uuid_authz>\\w+)",
+        "description": "Create an authz intra extension",
+        "command_options": ""
+      },
+      {
+        "name": "list_intraextension_authz",
+        "command": "intraextension list",
+        "result": "$uuid_authz",
+        "description": "Check the existence of that authz intra extension"
+      },
+      {
+        "name": "set_tenant_authz",
+        "command": "tenant set --authz $uuid_authz $uuid",
+        "result": "",
+        "description": "Connect the authz intra extension to the tenant alt_demo",
+        "command_options": ""
+      },
+      {
+        "name": "select_authz_ie",
+        "command": "intraextension select $uuid_authz",
+        "result": "Select $uuid_authz IntraExtension.",
+        "description": "Select the authz IntraExtension",
+        "command_options": ""
+      },
+      {
+        "name": "check_select_authz_ie",
+        "command": "intraextension show selected",
+        "result": "$uuid_authz",
+        "description": "Check the selected authz IntraExtension",
+        "command_options": "-c id -f value"
+      },
+      {
+        "name": "add_object",
+        "command": "object add nova_server_1",
+        "result": "",
+        "description": "Add the new object category nova_server_1",
+        "command_options": ""
+      },
+      {
+        "name": "list_object",
+        "command": "object list",
+        "result": "(?P<uuid_object>\\w+)\\s+nova_server_1",
+        "description": "Check that nova_server_1 object was added."
+      },
+      {
+        "name": "add_object_category",
+        "command": "object category add my_new_object_category",
+        "result": "",
+        "description": "Add the new object category my_new_object_category",
+        "command_options": ""
+      },
+      {
+        "name": "list_object_category",
+        "command": "object category list",
+        "result": "(?P<uuid_object_category>\\w+)\\s+my_new_object_category",
+        "description": "Check that my_new_object_category object_category was added."
+      },
+      {
+        "name": "add_scope",
+        "command": "object scope add $uuid_object_category scope1 --description \"scope1 description\"",
+        "result": "^$",
+        "description": "Add one scope to object category role",
+        "command_options": ""
+      },
+      {
+        "name": "check_added_scope",
+        "command": "object scope list $uuid_object_category",
+        "result": "(?P<uuid_object_scope>\\w+)\\s+scope1\\s+scope1 description",
+        "description": "Check added scope.",
+        "command_options": "-c id -c name -c description -f value"
+      },
+
+      {
+        "name": "add_assignment",
+        "command": "object assignment add $uuid_object $uuid_object_category $uuid_object_scope",
+        "result": "^$",
+        "description": "Add a new assignment",
+        "command_options": ""
+      },
+      {
+        "name": "check_added_assignment",
+        "command": "object assignment list $uuid_object $uuid_object_category",
+        "result": "$uuid_object_scope scope1",
+        "description": "Check added assignment.",
+        "command_options": "-c id -c name -f value"
+      },
+
+      {
+        "name": "delete_assignment",
+        "command": "object assignment delete $uuid_object $uuid_object_category $uuid_object_scope",
+        "result": "^$",
+        "description": "Delete the added assignment",
+        "command_options": ""
+      },
+      {
+        "name": "check_deleted_assignment",
+        "command": "object assignment list $uuid_object $uuid_object_category",
+        "result": "(?!$uuid_object_scope)",
+        "description": "Check deleted assignment.",
+        "command_options": "-c id -f value"
+      },
+
+      {
+        "name": "delete_scope",
+        "command": "object scope delete $uuid_object_category $uuid_object_scope",
+        "result": "^$",
+        "description": "Delete one scope from object category role",
+        "command_options": ""
+      },
+      {
+        "name": "delete_object_category",
+        "command": "object category delete $uuid_object_category",
+        "result": "^$",
+        "description": "Delete my_new_object_category object_category.",
+        "command_options": ""
+      },
+      {
+        "name": "list_object_category",
+        "command": "object category list",
+        "result": "(?!$uuid_object_category)",
+        "description": "Check that my_new_object_category object_category was deleted."
+      },
+      {
+        "name": "delete_authz_intra_extension",
+        "command": "intraextension delete $uuid_authz",
+        "result": "",
+        "description": "Delete the authz intra extension",
+        "command_options": ""
+      },
+      {
+        "name": "delete_tenant",
+        "command": "tenant delete $uuid",
+        "result": "",
+        "description": "Delete the tenant alt_demo",
+        "command_options": ""
+      }
+    ],
+    "authz_and_admin": [
+      {
+        "name": "list tenant",
+        "command": "tenant list",
+        "result": "(?!alt_demo)",
+        "description": "Check if tenant alt_demo is used."
+      },
+      {
+        "name": "add tenant alt_demo",
+        "command": "tenant add alt_demo",
+        "result": "^$",
+        "description": "Add a new tenant",
+        "command_options": ""
+      },
+      {
+        "name": "check tenant alt_demo",
+        "command": "tenant list",
+        "result": "(?P<uuid>\\w+)\\s+alt_demo",
+        "description": "Check that tenant alt_demo has been correctly added"
+      },
+      {
+        "name": "create_intraextension_authz",
+        "command": "intraextension create --policy_model policy_authz authz_test",
+        "result": "IntraExtension created: (?P<uuid_authz>\\w+)",
+        "description": "Create an authz intra extension",
+        "command_options": ""
+      },
+      {
+        "name": "list_intraextension_authz",
+        "command": "intraextension list",
+        "result": "$uuid_authz",
+        "description": "Check the existence of that authz intra extension"
+      },
+      {
+        "name": "create_intraextension_admin",
+        "command": "intraextension create --policy_model policy_admin admin_test",
+        "result": "IntraExtension created: (?P<uuid_admin>\\w+)",
+        "description": "Create an admin intra extension",
+        "command_options": ""
+      },
+      {
+        "name": "list_intraextension_admin",
+        "command": "intraextension list",
+        "result": "$uuid_admin",
+        "description": "Check the existence of that admin intra extension"
+      },
+      {
+        "name": "set_tenant_authz",
+        "command": "tenant set --authz $uuid_authz $uuid",
+        "result": "",
+        "description": "Connect the authz intra extension to the tenant demo",
+        "command_options": ""
+      },
+      {
+        "name": "set_tenant_admin",
+        "command": "tenant set --admin $uuid_admin $uuid",
+        "result": "",
+        "description": "Connect the authz intra extension to the tenant alt_demo",
+        "command_options": ""
+      },
+      {
+        "name": "check tenant alt_demo and authz ie",
+        "command": "tenant list",
+        "result": "alt_demo $uuid_authz",
+        "description": "Check that authz intra extension has been correctly added to the tenant.",
+        "command_options": "-c name -c intra_authz_extension_id -f value"
+      },
+      {
+        "name": "check tenant alt_demo and admin ie",
+        "command": "tenant list",
+        "result": "$uuid_admin",
+        "description": "Check that admin intra extension has been correctly added to the tenant.",
+        "command_options": "-c intra_admin_extension_id -f value"
+      },
+      {
+        "name": "select_authz_ie",
+        "command": "intraextension select $uuid_authz",
+        "result": "Select $uuid_authz IntraExtension.",
+        "description": "Select the authz IntraExtension",
+        "command_options": ""
+      },
+      {
+        "name": "check_select_authz_ie",
+        "command": "intraextension show selected",
+        "result": "$uuid_authz",
+        "description": "Check the selected authz IntraExtension",
+        "command_options": "-c id -f value"
+      },
+      {
+        "name": "add_object",
+        "command": "object add nova_server_1",
+        "result": "",
+        "description": "Add the new object category nova_server_1",
+        "command_options": ""
+      },
+      {
+        "name": "list_object",
+        "command": "object list",
+        "result": "(?P<uuid_object>\\w+)\\s+nova_server_1",
+        "description": "Check that nova_server_1 object was added."
+      },
+      {
+        "name": "add_object_category",
+        "command": "object category add my_new_object_category",
+        "result": "",
+        "description": "Add the new object category my_new_object_category",
+        "command_options": ""
+      },
+      {
+        "name": "list_object_category",
+        "command": "object category list",
+        "result": "(?P<uuid_object_category>\\w+)\\s+my_new_object_category",
+        "description": "Check that my_new_object_category object_category was added."
+      },
+      {
+        "name": "add_scope",
+        "command": "object scope add $uuid_object_category scope1 --description \"scope1 description\"",
+        "result": "^$",
+        "description": "Add one scope to object category role",
+        "command_options": ""
+      },
+      {
+        "name": "check_added_scope",
+        "command": "object scope list $uuid_object_category",
+        "result": "(?P<uuid_object_scope>\\w+)\\s+scope1\\s+scope1 description",
+        "description": "Check added scope.",
+        "command_options": "-c id -c name -c description -f value"
+      },
+
+      {
+        "name": "add_assignment",
+        "command": "object assignment add $uuid_object $uuid_object_category $uuid_object_scope",
+        "result": "^$",
+        "description": "Add a new assignment",
+        "command_options": ""
+      },
+      {
+        "name": "check_added_assignment",
+        "command": "object assignment list $uuid_object $uuid_object_category",
+        "result": "$uuid_object_scope scope1",
+        "description": "Check added assignment.",
+        "command_options": "-c id -c name -f value"
+      },
+
+      {
+        "name": "delete_assignment",
+        "command": "object assignment delete $uuid_object $uuid_object_category $uuid_object_scope",
+        "result": "^$",
+        "description": "Delete the added assignment",
+        "command_options": ""
+      },
+      {
+        "name": "check_deleted_assignment",
+        "command": "object assignment list $uuid_object $uuid_object_category",
+        "result": "(?!$uuid_object_scope)",
+        "description": "Check deleted assignment.",
+        "command_options": "-c id -f value"
+      },
+
+      {
+        "name": "delete_scope",
+        "command": "object scope delete $uuid_object_category $uuid_object_scope",
+        "result": "^$",
+        "description": "Delete one scope from object category role",
+        "command_options": ""
+      },
+      {
+        "name": "delete_object_category",
+        "command": "object category delete $uuid_object_category",
+        "result": "^$",
+        "description": "Delete my_new_object_category object_category.",
+        "command_options": ""
+      },
+      {
+        "name": "list_object_category",
+        "command": "object category list",
+        "result": "(?!$uuid_object_category)",
+        "description": "Check that my_new_object_category object_category was deleted."
+      },
+      {
+        "name": "delete_admin_intra_extension",
+        "command": "intraextension delete $uuid_admin",
+        "result": "",
+        "description": "Delete the admin intra extension",
+        "command_options": ""
+      },
+      {
+        "name": "delete_authz_intra_extension",
+        "command": "intraextension delete $uuid_authz",
+        "result": "",
+        "description": "Delete the authz intra extension",
+        "command_options": ""
+      },
+      {
+        "name": "delete_tenant",
+        "command": "tenant delete $uuid",
+        "result": "",
+        "description": "Delete the tenant alt_demo",
+        "command_options": ""
+      }
+    ]
+  }
+}
\ No newline at end of file