aboutsummaryrefslogtreecommitdiffstats
path: root/moon_manager/tests/performance_tests
diff options
context:
space:
mode:
Diffstat (limited to 'moon_manager/tests/performance_tests')
-rw-r--r--moon_manager/tests/performance_tests/authz_pipeline.py115
-rw-r--r--moon_manager/tests/performance_tests/locustfile.py26
-rw-r--r--moon_manager/tests/performance_tests/policy_rbac.json411
3 files changed, 552 insertions, 0 deletions
diff --git a/moon_manager/tests/performance_tests/authz_pipeline.py b/moon_manager/tests/performance_tests/authz_pipeline.py
new file mode 100644
index 00000000..7d2b48ce
--- /dev/null
+++ b/moon_manager/tests/performance_tests/authz_pipeline.py
@@ -0,0 +1,115 @@
+# Software Name: MOON
+
+# Version: 5.4
+
+# SPDX-FileCopyrightText: Copyright (c) 2018-2020 Orange and its contributors
+# SPDX-License-Identifier: Apache-2.0
+
+# This software is distributed under the 'Apache License 2.0',
+# the text of which is available at 'http://www.apache.org/licenses/LICENSE-2.0.txt'
+# or see the "LICENSE" file for more details.
+
+
+from locust import TaskSet, task
+import logging
+import json
+
+LOGGER = logging.getLogger("locust")
+
+
+class AuthzPipelineRequests(TaskSet):
+ token = ""
+ moon_errors = 0
+ moon_requests = 0
+ stats_filename = "/tmp/perf_stats.log"
+
+ def on_start(self):
+ """ on_start is called when a Locust start before any task is scheduled """
+ self.moon_errors = []
+
+ def __del__(self):
+ """ on_stop is called when the TaskSet is stopping """
+ stats = {}
+ try:
+ stats = json.loads(open(self.stats_filename).read())
+ except Exception:
+ pass
+ _num = stats.get("errors", 0)
+ _num += len(self.moon_errors)
+ _total = stats.get("total", 0)
+ _total += self.moon_requests
+ _list = stats.get("list", [])
+ _list.extend(self.moon_errors)
+ _percent = _num * 100 / _total
+ json.dump({"errors": _num, "total": _total,
+ "percentage": "{0:.2f}".format(_percent),
+ "list": _list},
+ open(self.stats_filename, "w"), indent=4)
+
+ def get(self, url, status_code=200):
+ with self.client.get(url, catch_response=True) as response:
+ self.moon_requests += 1
+ if response.status_code != status_code:
+ self.moon_errors.append((url, f"{response.status_code}/{status_code}"))
+ response.success()
+
+ @task(10)
+ def authz_ok1(self):
+ url = "/authz/{}/{}/{}".format(
+ "admin", "vm1", "use_image"
+ )
+ self.get(url)
+
+ @task(10)
+ def authz_ok2(self):
+ url = "/authz/{}/{}/{}".format(
+ "admin", "vm1", "get_images"
+ )
+ self.get(url)
+
+ @task(10)
+ def authz_ok3(self):
+ url = "/authz/{}/{}/{}".format(
+ "admin", "vm1", "set_image"
+ )
+ self.get(url)
+
+ @task(10)
+ def authz_ok4(self):
+ url = "/authz/{}/{}/{}".format(
+ "demo", "vm1", "set_image"
+ )
+ self.get(url)
+
+ @task(10)
+ def authz_ok5(self):
+ url = "/authz/{}/{}/{}".format(
+ "demo", "vm1", "get_images"
+ )
+ self.get(url)
+
+ @task(10)
+ def authz_rule_ko(self):
+ url = "/authz/{}/{}/{}".format("demo", "vm1", "use_image")
+ self.get(url, 403)
+
+ @task(10)
+ def authz_subject_ko(self):
+ url = "/authz/{}/{}/{}".format("admins", "vm1", "use_image")
+ self.get(url, 403)
+
+ @task(10)
+ def authz_object_ko(self):
+ url = "/authz/{}/{}/{}".format("admin", "vm4", "use_image")
+ self.get(url, 403)
+
+ @task(10)
+ def authz_action_ko(self):
+ url = "/authz/{}/{}/{}".format("admin", "vm1", "use_images")
+ self.get(url, 403)
+
+ @task(1)
+ def status(self):
+ self.client.get("/status/")
+
+
diff --git a/moon_manager/tests/performance_tests/locustfile.py b/moon_manager/tests/performance_tests/locustfile.py
new file mode 100644
index 00000000..cf077720
--- /dev/null
+++ b/moon_manager/tests/performance_tests/locustfile.py
@@ -0,0 +1,26 @@
+# Software Name: MOON
+
+# Version: 5.4
+
+# SPDX-FileCopyrightText: Copyright (c) 2018-2020 Orange and its contributors
+# SPDX-License-Identifier: Apache-2.0
+
+# This software is distributed under the 'Apache License 2.0',
+# the text of which is available at 'http://www.apache.org/licenses/LICENSE-2.0.txt'
+# or see the "LICENSE" file for more details.
+
+
+from locust import HttpLocust, TaskSet
+import authz_pipeline
+
+
+class MoonRequests(TaskSet):
+ tasks = {
+ authz_pipeline.AuthzPipelineRequests: 10,
+ }
+
+
+class MoonUser(HttpLocust):
+ task_set = MoonRequests
+ min_wait = 10
+ max_wait = 100
diff --git a/moon_manager/tests/performance_tests/policy_rbac.json b/moon_manager/tests/performance_tests/policy_rbac.json
new file mode 100644
index 00000000..2f7c704e
--- /dev/null
+++ b/moon_manager/tests/performance_tests/policy_rbac.json
@@ -0,0 +1,411 @@
+{
+ "policies": [
+ {
+ "name": "Policy for Locust",
+ "genre": "authz",
+ "description": "Policy for Locust",
+ "model": {
+ "name": "RBAC"
+ },
+ "mandatory": true,
+ "override": true
+ }
+ ],
+ "models": [
+ {
+ "name": "RBAC",
+ "description": "",
+ "meta_rules": [
+ {
+ "name": "rbac"
+ }
+ ],
+ "override": true
+ }
+ ],
+ "subjects": [
+ {
+ "name": "admin",
+ "description": "",
+ "extra": {},
+ "policies": [
+ {
+ "name": "Policy for Locust"
+ }
+ ]
+ },
+ {
+ "name": "demo",
+ "description": "",
+ "extra": {},
+ "policies": [
+ {
+ "name": "Policy for Locust"
+ }
+ ]
+ }
+ ],
+ "subject_categories": [
+ {
+ "name": "role",
+ "description": "role of a user"
+ }
+ ],
+ "subject_data": [
+ {
+ "name": "admin",
+ "description": "",
+ "policies": [],
+ "category": {
+ "name": "role"
+ }
+ },
+ {
+ "name": "user",
+ "description": "",
+ "policies": [],
+ "category": {
+ "name": "role"
+ }
+ }
+ ],
+ "subject_assignments": [
+ {
+ "subject": {"name": "admin"},
+ "category": {"name": "role"},
+ "assignments": [{"name": "admin"}]
+ },
+ {
+ "subject": {"name": "admin"},
+ "category": {"name": "role"},
+ "assignments": [{"name": "user"}]
+ },
+ {
+ "subject": {"name": "demo"},
+ "category": {"name": "role"},
+ "assignments": [{"name": "user"}]
+ }
+ ],
+ "objects": [
+ {
+ "name": "vm1",
+ "description": "",
+ "extra": {},
+ "policies": [
+ {
+ "name": "Policy for Locust"
+ }
+ ]
+ },
+ {
+ "name": "vm2",
+ "description": "",
+ "extra": {},
+ "policies": [
+ {
+ "name": "Policy for Locust"
+ }
+ ]
+ },
+ {
+ "name": "vm3",
+ "description": "",
+ "extra": {},
+ "policies": [
+ {
+ "name": "Policy for Locust"
+ }
+ ]
+ }
+ ],
+ "object_categories": [
+ {
+ "name": "id",
+ "description": "identification of the object"
+ }
+ ],
+ "object_data": [
+ {
+ "name": "vm1",
+ "description": "",
+ "policies": [],
+ "category": {
+ "name": "id"
+ }
+ },
+ {
+ "name": "vm2",
+ "description": "",
+ "policies": [],
+ "category": {
+ "name": "id"
+ }
+ },
+ {
+ "name": "vm3",
+ "description": "",
+ "policies": [],
+ "category": {
+ "name": "id"
+ }
+ }
+ ],
+ "object_assignments": [
+ {
+ "object": {"name": "vm1"},
+ "category": {"name": "id"},
+ "assignments": [{"name": "vm1"}]
+ },
+ {
+ "object": {"name": "vm2"},
+ "category": {"name": "id"},
+ "assignments": [{"name": "vm2"}]
+ },
+ {
+ "object": {"name": "vm3"},
+ "category": {"name": "id"},
+ "assignments": [{"name": "vm3"}]
+ }
+ ],
+ "actions": [
+ {
+ "name": "use_image",
+ "description": "use_image action for glance",
+ "extra": {
+ "component": "glance"
+ },
+ "policies": [
+ {
+ "name": "Policy for Locust"
+ }
+ ]
+ },
+ {
+ "name": "get_images",
+ "description": "get_images action for glance",
+ "extra": {
+ "component": "glance"
+ },
+ "policies": [
+ {
+ "name": "Policy for Locust"
+ }
+ ]
+ },
+ {
+ "name": "update_image",
+ "description": "update_image action for glance",
+ "extra": {
+ "component": "glance"
+ },
+ "policies": [
+ {
+ "name": "Policy for Locust"
+ }
+ ]
+ },
+ {
+ "name": "set_image",
+ "description": "set_image action for glance",
+ "extra": {
+ "component": "glance"
+ },
+ "policies": [
+ {
+ "name": "Policy for Locust"
+ }
+ ]
+ }
+ ],
+ "action_categories": [
+ {
+ "name": "type",
+ "description": ""
+ }
+ ],
+ "action_data": [
+ {
+ "name": "read",
+ "description": "read action",
+ "policies": [],
+ "category": {
+ "name": "type"
+ }
+ },
+ {
+ "name": "write",
+ "description": "write action",
+ "policies": [],
+ "category": {
+ "name": "type"
+ }
+ },
+ {
+ "name": "execute",
+ "description": "execute action",
+ "policies": [],
+ "category": {
+ "name": "type"
+ }
+ }
+ ],
+ "action_assignments": [
+ {
+ "action": {"name": "use_image"},
+ "category": {"name": "type"},
+ "assignments": [{"name": "read"}, {"name": "execute"}]
+ },
+ {
+ "action": {"name": "update_image"},
+ "category": {"name": "type"},
+ "assignments": [{"name": "read"}, {"name": "write"}]
+ },
+ {
+ "action": {"name": "set_image"},
+ "category": {"name": "type"},
+ "assignments": [{"name": "write"}]
+ },
+ {
+ "action": {"name": "get_images"},
+ "category": {"name": "type"},
+ "assignments": [{"name": "read"}]
+ }
+ ],
+ "meta_rules": [
+ {
+ "name": "rbac",
+ "description": "",
+ "subject_categories": [{"name": "role"}],
+ "object_categories": [{"name": "id"}],
+ "action_categories": [{"name": "type"}]
+ }
+ ],
+ "rules": [
+ {
+ "meta_rule": {"name": "rbac"},
+ "rule": {
+ "subject_data": [{"name": "admin"}],
+ "object_data": [{"name": "vm1"}],
+ "action_data": [{"name": "read"}]
+ },
+ "policy": {"name": "Policy for Locust"},
+ "instructions": [{"decision": "grant"}],
+ "enabled": true
+ },
+ {
+ "meta_rule": {"name": "rbac"},
+ "rule": {
+ "subject_data": [{"name": "admin"}],
+ "object_data": [{"name": "vm1"}],
+ "action_data": [{"name": "write"}]
+ },
+ "policy": {"name": "Policy for Locust"},
+ "instructions": [{"decision": "grant"}],
+ "enabled": true
+ },
+ {
+ "meta_rule": {"name": "rbac"},
+ "rule": {
+ "subject_data": [{"name": "admin"}],
+ "object_data": [{"name": "vm1"}],
+ "action_data": [{"name": "execute"}]
+ },
+ "policy": {"name": "Policy for Locust"},
+ "instructions": [{"decision": "grant"}],
+ "enabled": true
+ },
+ {
+ "meta_rule": {"name": "rbac"},
+ "rule": {
+ "subject_data": [{"name": "admin"}],
+ "object_data": [{"name": "vm2"}],
+ "action_data": [{"name": "read"}]
+ },
+ "policy": {"name": "Policy for Locust"},
+ "instructions": [{"decision": "grant"}],
+ "enabled": true
+ },
+ {
+ "meta_rule": {"name": "rbac"},
+ "rule": {
+ "subject_data": [{"name": "admin"}],
+ "object_data": [{"name": "vm2"}],
+ "action_data": [{"name": "write"}]
+ },
+ "policy": {"name": "Policy for Locust"},
+ "instructions": [{"decision": "grant"}],
+ "enabled": true
+ },
+ {
+ "meta_rule": {"name": "rbac"},
+ "rule": {
+ "subject_data": [{"name": "admin"}],
+ "object_data": [{"name": "vm3"}],
+ "action_data": [{"name": "read"}]
+ },
+ "policy": {"name": "Policy for Locust"},
+ "instructions": [{"decision": "grant"}],
+ "enabled": true
+ },
+ {
+ "meta_rule": {"name": "rbac"},
+ "rule": {
+ "subject_data": [{"name": "user"}],
+ "object_data": [{"name": "vm1"}],
+ "action_data": [{"name": "read"}]
+ },
+ "policy": {"name": "Policy for Locust"},
+ "instructions": [{"decision": "grant"}],
+ "enabled": true
+ },
+ {
+ "meta_rule": {"name": "rbac"},
+ "rule": {
+ "subject_data": [{"name": "user"}],
+ "object_data": [{"name": "vm1"}],
+ "action_data": [{"name": "write"}]
+ },
+ "policy": {"name": "Policy for Locust"},
+ "instructions": [{"decision": "grant"}],
+ "enabled": true
+ },
+ {
+ "meta_rule": {"name": "rbac"},
+ "rule": {
+ "subject_data": [{"name": "user"}],
+ "object_data": [{"name": "vm2"}],
+ "action_data": [{"name": "read"}]
+ },
+ "policy": {"name": "Policy for Locust"},
+ "instructions": [{"decision": "grant"}],
+ "enabled": true
+ }
+ ],
+ "checks": {
+ "granted": [
+ ["admin", "vm1", "get_images"],
+ ["admin", "vm1", "set_image"],
+ ["admin", "vm1", "use_image"],
+ ["admin", "vm2", "get_images"],
+ ["admin", "vm2", "set_image"],
+ ["admin", "vm3", "get_images"],
+ ["user", "vm1", "get_images"],
+ ["user", "vm1", "set_image"],
+ ["user", "vm2", "get_images"],
+ ["user", "vm1", "get_images"]
+ ],
+ "denied": [
+ ["admin", "vm2", "update_image"],
+ ["admin", "vm3", "set_image"],
+ ["admin", "vm3", "update_image"],
+ ["user", "vm1", "update_image"],
+ ["user", "vm2", "set_image"],
+ ["user", "vm2", "update_image"],
+ ["user", "vm1", "use_image"],
+ ["user", "vm2", "use_image"],
+ ["user", "vm3", "get_images"],
+ ["user", "vm3", "set_image"],
+ ["user", "vm3", "update_image"]
+ ]
+ }
+} \ No newline at end of file