aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--moon_manager/tests/unit_python/api/test_data.py168
-rw-r--r--moon_manager/tests/unit_python/api/utilities.py16
-rw-r--r--moon_orchestrator/moon_orchestrator/api/pods.py55
-rw-r--r--moon_orchestrator/moon_orchestrator/drivers.py4
-rw-r--r--moon_orchestrator/tests/unit_python/test_pods.py48
-rw-r--r--python_moonutilities/python_moonutilities/configuration.py5
-rw-r--r--python_moonutilities/tests/unit_python/mock_repo/urls.py5
-rw-r--r--python_moonutilities/tests/unit_python/test_configuration.py10
8 files changed, 279 insertions, 32 deletions
diff --git a/moon_manager/tests/unit_python/api/test_data.py b/moon_manager/tests/unit_python/api/test_data.py
new file mode 100644
index 00000000..87a80c69
--- /dev/null
+++ b/moon_manager/tests/unit_python/api/test_data.py
@@ -0,0 +1,168 @@
+import api.utilities as utilities
+import json
+
+
+# subject_categories_test
+
+
+def get_subject_data(client, policy_id):
+ req = client.get("/policies/{}/subject_data".format(policy_id))
+ subject_data = utilities.get_json(req.data)
+ return req, subject_data
+
+
+def add_subject_data(client, name, policy_id, category_id):
+ data = {
+ "name": name,
+ "description": "description of {}".format(name)
+ }
+ req = client.post("/policies/{}/subject_data/{}".format(policy_id, category_id), data=json.dumps(data),
+ headers={'Content-Type': 'application/json'})
+ subject_data = utilities.get_json(req.data)
+ return req, subject_data
+
+
+def delete_subject_data(client, policy_id):
+ req = client.delete("/policies/{}/subject_data".format(policy_id))
+ return req
+
+
+def test_get_subject_data():
+ policy_id = utilities.get_policy_id()
+ client = utilities.register_client()
+ req, subject_data = get_subject_data(client, policy_id)
+ assert req.status_code == 200
+ assert isinstance(subject_data, dict)
+ assert "subject_data" in subject_data
+
+
+def test_add_subject_data():
+ policy_id = utilities.get_policy_id()
+ client = utilities.register_client()
+ req, subject_data = add_subject_data(client, "testuser", policy_id, "111")
+ assert req.status_code == 200
+ assert isinstance(subject_data, dict)
+ value = subject_data["subject_data"]['data']
+ assert "subject_data" in subject_data
+ id = list(value.keys())[0]
+ assert value[id]['name'] == "testuser"
+ assert value[id]['description'] == "description of {}".format("testuser")
+
+
+def test_delete_subject_data():
+ client = utilities.register_client()
+ policy_id = utilities.get_policy_id()
+ success_req = delete_subject_data(client, policy_id)
+ assert success_req.status_code == 200
+
+# ---------------------------------------------------------------------------
+
+# object_categories_test
+
+
+def get_object_data(client, policy_id):
+ req = client.get("/policies/{}/object_data".format(policy_id))
+ object_data = utilities.get_json(req.data)
+ return req, object_data
+
+
+def add_object_data(client, name, policy_id, category_id):
+ data = {
+ "name": name,
+ "description": "description of {}".format(name)
+ }
+ req = client.post("/policies/{}/object_data/{}".format(policy_id, category_id), data=json.dumps(data),
+ headers={'Content-Type': 'application/json'})
+ object_data = utilities.get_json(req.data)
+ return req, object_data
+
+
+def delete_object_data(client, policy_id):
+ req = client.delete("/policies/{}/object_data".format(policy_id))
+ return req
+
+
+def test_get_object_data():
+ policy_id = utilities.get_policy_id()
+ client = utilities.register_client()
+ req, object_data = get_object_data(client, policy_id)
+ assert req.status_code == 200
+ assert isinstance(object_data, dict)
+ assert "object_data" in object_data
+
+
+def test_add_object_data():
+ policy_id = utilities.get_policy_id()
+ client = utilities.register_client()
+ req, object_data = add_object_data(client, "testuser", policy_id, "111")
+ assert req.status_code == 200
+ assert isinstance(object_data, dict)
+ value = object_data["object_data"]['data']
+ assert "object_data" in object_data
+ id = list(value.keys())[0]
+ assert value[id]['value']['name'] == "testuser"
+ assert value[id]['value']['description'] == "description of {}".format("testuser")
+
+
+def test_delete_object_data():
+ client = utilities.register_client()
+ policy_id = utilities.get_policy_id()
+ success_req = delete_object_data(client, policy_id)
+ assert success_req.status_code == 200
+
+# ---------------------------------------------------------------------------
+
+# action_categories_test
+
+
+def get_action_data(client, policy_id):
+ req = client.get("/policies/{}/action_data".format(policy_id))
+ action_data = utilities.get_json(req.data)
+ return req, action_data
+
+
+def add_action_data(client, name, policy_id, category_id):
+ data = {
+ "name": name,
+ "description": "description of {}".format(name)
+ }
+ req = client.post("/policies/{}/action_data/{}".format(policy_id, category_id), data=json.dumps(data),
+ headers={'Content-Type': 'application/json'})
+ action_data = utilities.get_json(req.data)
+ return req, action_data
+
+
+def delete_action_data(client, policy_id):
+ req = client.delete("/policies/{}/action_data".format(policy_id))
+ return req
+
+
+def test_get_action_data():
+ policy_id = utilities.get_policy_id()
+ client = utilities.register_client()
+ req, action_data = get_action_data(client, policy_id)
+ assert req.status_code == 200
+ assert isinstance(action_data, dict)
+ assert "action_data" in action_data
+
+
+def test_add_action_data():
+ policy_id = utilities.get_policy_id()
+ client = utilities.register_client()
+ req, action_data = add_action_data(client, "testuser", policy_id, "111")
+ assert req.status_code == 200
+ assert isinstance(action_data, dict)
+ value = action_data["action_data"]['data']
+ assert "action_data" in action_data
+ id = list(value.keys())[0]
+ assert value[id]['value']['name'] == "testuser"
+ assert value[id]['value']['description'] == "description of {}".format("testuser")
+
+
+def test_delete_action_data():
+ client = utilities.register_client()
+ policy_id = utilities.get_policy_id()
+ success_req = delete_action_data(client, policy_id)
+ assert success_req.status_code == 200
+
+# --------------------------------------------------------------------------- \ No newline at end of file
diff --git a/moon_manager/tests/unit_python/api/utilities.py b/moon_manager/tests/unit_python/api/utilities.py
index a2b0689b..66ca30c5 100644
--- a/moon_manager/tests/unit_python/api/utilities.py
+++ b/moon_manager/tests/unit_python/api/utilities.py
@@ -9,4 +9,18 @@ def register_client():
import moon_manager.server
server = moon_manager.server.create_server()
client = server.app.test_client()
- return client \ No newline at end of file
+ return client
+
+
+def get_policy_id():
+ import api.test_policies as policies
+ client = register_client()
+ policy_id = ''
+ req, policy = policies.get_policies(client)
+ for id in policy['policies']:
+ if id:
+ policy_id = id
+ break
+ if not policy_id:
+ policies.add_policies(client, "testuser")
+ return policy_id
diff --git a/moon_orchestrator/moon_orchestrator/api/pods.py b/moon_orchestrator/moon_orchestrator/api/pods.py
index a83ca9ae..31ae31de 100644
--- a/moon_orchestrator/moon_orchestrator/api/pods.py
+++ b/moon_orchestrator/moon_orchestrator/api/pods.py
@@ -44,15 +44,18 @@ class Pods(Resource):
:internal_api: get_pdp
"""
pods = {}
- if uuid:
- return {"pods": self.driver.get_pods(uuid)}
- for _pod_key, _pod_values in self.driver.get_pods().items():
- pods[_pod_key] = []
- for _pod_value in _pod_values:
- if _pod_value['namespace'] != "moon":
- continue
- pods[_pod_key].append(_pod_value)
- return {"pods": pods}
+ try:
+ if uuid:
+ return {"pods": self.driver.get_pods(uuid)}
+ for _pod_key, _pod_values in self.driver.get_pods().items():
+ pods[_pod_key] = []
+ for _pod_value in _pod_values:
+ if _pod_value['namespace'] != "moon":
+ continue
+ pods[_pod_key].append(_pod_value)
+ return {"pods": pods}
+ except Exception as e:
+ return {"result": False, "message": str(e)}, 500
@check_auth
def post(self, uuid=None, user_id=None):
@@ -74,21 +77,24 @@ class Pods(Resource):
}
"""
logger.debug("POST param={}".format(request.json))
- self.driver.create_pipeline(
- request.json.get("keystone_project_id"),
- request.json.get("pdp_id"),
- request.json.get("security_pipeline"),
- manager_data=request.json,
- active_context=None,
- active_context_name=None)
- pods = {}
- for _pod_key, _pod_values in self.driver.get_pods().items():
- pods[_pod_key] = []
- for _pod_value in _pod_values:
- if _pod_value['namespace'] != "moon":
- continue
- pods[_pod_key].append(_pod_value)
- return {"pods": pods}
+ try:
+ self.driver.create_pipeline(
+ request.json.get("keystone_project_id"),
+ request.json.get("pdp_id"),
+ request.json.get("security_pipeline"),
+ manager_data=request.json,
+ active_context=None,
+ active_context_name=None)
+ pods = {}
+ for _pod_key, _pod_values in self.driver.get_pods().items():
+ pods[_pod_key] = []
+ for _pod_value in _pod_values:
+ if _pod_value['namespace'] != "moon":
+ continue
+ pods[_pod_key].append(_pod_value)
+ return {"pods": pods}
+ except Exception as e:
+ return {"result": False, "message": str(e)}, 500
@check_auth
def delete(self, uuid=None, user_id=None):
@@ -128,4 +134,3 @@ class Pods(Resource):
:internal_api: update_pdp
"""
return {"pods": None}
-
diff --git a/moon_orchestrator/moon_orchestrator/drivers.py b/moon_orchestrator/moon_orchestrator/drivers.py
index b21f2639..9c230cce 100644
--- a/moon_orchestrator/moon_orchestrator/drivers.py
+++ b/moon_orchestrator/moon_orchestrator/drivers.py
@@ -259,6 +259,8 @@ class K8S(Driver):
},
]
logger.debug("data={}".format(data))
+ # When policies and models are empty, is it right that it returns 200 ?
+ # Should it return no found policies or models ?
policies = manager_data.get('policies')
if not policies:
logger.info("No policy data from Manager, trying to get them")
@@ -274,6 +276,8 @@ class K8S(Driver):
"models", dict())
logger.debug("models={}".format(models))
+ if not policy_ids:
+ raise exceptions.PolicyUnknown
for policy_id in policy_ids:
if policy_id in policies:
genre = policies[policy_id].get("genre", "authz")
diff --git a/moon_orchestrator/tests/unit_python/test_pods.py b/moon_orchestrator/tests/unit_python/test_pods.py
index 0a5a5ba5..f760aa62 100644
--- a/moon_orchestrator/tests/unit_python/test_pods.py
+++ b/moon_orchestrator/tests/unit_python/test_pods.py
@@ -17,6 +17,20 @@ def test_get_pods(context, monkeypatch):
assert "pods" in data
+def test_get_pods_failure(context, monkeypatch):
+ patch_k8s(monkeypatch)
+
+ import moon_orchestrator.server
+ server = moon_orchestrator.server.create_server()
+ _client = server.app.test_client()
+ req = _client.get("/pods/invalid")
+ assert req.status_code == 200
+ assert req.data
+ data = get_json(req.data)
+ assert isinstance(data, dict)
+ assert not data["pods"]
+
+
def test_add_pods(context, monkeypatch):
patch_k8s(monkeypatch)
@@ -38,6 +52,40 @@ def test_add_pods(context, monkeypatch):
assert data["pods"]
+def test_add_pods_with_no_data(context, monkeypatch):
+ patch_k8s(monkeypatch)
+ import moon_orchestrator.server
+ server = moon_orchestrator.server.create_server()
+ _client = server.app.test_client()
+ req = _client.post("/pods", data=json.dumps({}),
+ headers={'Content-Type': 'application/json'})
+ assert req.status_code == 500
+ assert req.data
+ data = get_json(req.data)
+ assert '400: Policy Unknown' in data['message']
+
+
+def test_add_pods_with_no_policies_no_models(context, monkeypatch, no_requests):
+ patch_k8s(monkeypatch)
+
+ import moon_orchestrator.server
+ server = moon_orchestrator.server.create_server()
+ _client = server.app.test_client()
+ no_requests.get("http://manager:8082/policies",
+ json={'policies': {}})
+
+ no_requests.get("http://manager:8082/models",
+ json={'models': {}})
+ data = {
+ "keystone_project_id": context.get('project_id'),
+ "pdp_id": context.get('pdp_id'),
+ "security_pipeline": context.get('security_pipeline'),
+ }
+ req = _client.post("/pods", data=json.dumps(data),
+ headers={'Content-Type': 'application/json'})
+ assert req.status_code == 200
+
+
def test_delete_pods(context, monkeypatch):
# TODO
pass
diff --git a/python_moonutilities/python_moonutilities/configuration.py b/python_moonutilities/python_moonutilities/configuration.py
index 4a072de4..0516274c 100644
--- a/python_moonutilities/python_moonutilities/configuration.py
+++ b/python_moonutilities/python_moonutilities/configuration.py
@@ -91,7 +91,10 @@ def get_plugins():
pipeline = get_configuration("components/pipeline")
logger.debug("pipeline={}".format(pipeline))
components = pipeline.get("components/pipeline")
- components.pop('interface')
+ if 'interface' in components:
+ components.pop('interface')
+ else:
+ raise exceptions.ConsulComponentContentError("error= Components pipeline has no interface")
return components
diff --git a/python_moonutilities/tests/unit_python/mock_repo/urls.py b/python_moonutilities/tests/unit_python/mock_repo/urls.py
index 634f07b1..41fd1eec 100644
--- a/python_moonutilities/tests/unit_python/mock_repo/urls.py
+++ b/python_moonutilities/tests/unit_python/mock_repo/urls.py
@@ -8,10 +8,7 @@ def register_components(m):
'GET', 'http://consul:8500/v1/kv/{}'.format(component),
json=[{'Key': component, 'Value': comp_util.get_b64_conf(component)}]
)
- m.register_uri(
- 'GET', 'http://consul:8500/v1/kv/components/port_start',
- json=[{'Key': 'components/port_start', 'Value': comp_util.get_b64_conf("components/port_start")}]
- )
+
m.register_uri(
'PUT', 'http://consul:8500/v1/kv/components/port_start',
json=[]
diff --git a/python_moonutilities/tests/unit_python/test_configuration.py b/python_moonutilities/tests/unit_python/test_configuration.py
index 5267179e..d5d83f7a 100644
--- a/python_moonutilities/tests/unit_python/test_configuration.py
+++ b/python_moonutilities/tests/unit_python/test_configuration.py
@@ -98,7 +98,15 @@ def test_get_plugins_success():
plugin = configuration.get_plugins()
assert plugin is not None
-
+def test_get_plugins_failure(no_requests):
+ from python_moonutilities import configuration
+ no_requests.register_uri(
+ 'GET', 'http://consul:8500/v1/kv/components/pipeline',
+ json=[{'Key': 'components/pipeline', 'Value': 'eyJjb250YWluZXIiOiAid3Vrb25nc3VuL21vb25fYXV0aHo6djQuMyIsICJwb3J0IjogODA4MX0='}]
+ )
+ with pytest.raises(Exception) as exception_info:
+ configuration.get_plugins()
+ assert str(exception_info.value) == '500: Consul Content error'
################################ component ####################################
def test_get_components():
from python_moonutilities import configuration