# Copyright 2018 Open Platform for NFV Project, Inc. and its contributors # This software is distributed under the terms and conditions of the 'Apache-2.0' # license which can be found in the file 'LICENSE' in this package distribution # or at 'http://www.apache.org/licenses/LICENSE-2.0'. import json import api.utilities as utilities from helpers import data_builder as builder from helpers import policy_helper from helpers import model_helper from uuid import uuid4 def get_models(client): req = client.get("/models") models = utilities.get_json(req.data) return req, models def add_models(client, name, data=None): subject_category_id, object_category_id, action_category_id, meta_rule_id = builder.create_new_meta_rule() if not data: data = { "name": name, "description": "description of {}".format(name), "meta_rules": [meta_rule_id] } req = client.post("/models", data=json.dumps(data), headers={'Content-Type': 'application/json'}) models = utilities.get_json(req.data) return req, models def update_model(client, name, model_id): subject_category_id, object_category_id, action_category_id, meta_rule_id = builder.create_new_meta_rule() data = { "name": name, "description": "description of {}".format(name), "meta_rules": [meta_rule_id] } req = client.patch("/models/{}".format(model_id), data=json.dumps(data), headers={'Content-Type': 'application/json'}) models = utilities.get_json(req.data) return req, models def add_model_without_meta_rules_ids(client, name): data = { "name": name, "description": "description of {}".format(name), "meta_rules": [] } req = client.post("/models", data=json.dumps(data), headers={'Content-Type': 'application/json'}) models = utilities.get_json(req.data) return req, models def add_model_with_empty_meta_rule_id(client, name): data = { "name": name, "description": "description of {}".format(name), "meta_rules": [""] } req = client.post("/models", data=json.dumps(data), headers={'Content-Type': 'application/json'}) models = utilities.get_json(req.data) return req, models def update_model_without_meta_rules_ids(client, model_id): name = "model_id" + uuid4().hex data = { "name": name, "description": "description of {}".format(name), "meta_rules": [] } req = client.patch("/models/{}".format(model_id), data=json.dumps(data), headers={'Content-Type': 'application/json'}) models = utilities.get_json(req.data) return req, models def delete_models(client, name): request, models = get_models(client) for key, value in models['models'].items(): if value['name'] == name: req = client.delete("/models/{}".format(key)) break return req def delete_models_without_id(client): req = client.delete("/models/{}".format("")) return req def test_delete_model_assigned_to_policy(): policy_name = "testuser" + uuid4().hex client = utilities.register_client() req = model_helper.add_model(model_id="mls_model_id" + uuid4().hex) model_id = list(req.keys())[0] data = { "name": policy_name, "description": "description of {}".format(policy_name), "model_id": model_id, "genre": "genre" } req = client.post("/policies", data=json.dumps(data), headers={'Content-Type': 'application/json'}) req = client.delete("/models/{}".format(model_id)) assert req.status_code == 400 assert json.loads(req.data)["message"] == '400: Model With Policy Error' def clean_models(): client = utilities.register_client() req, models = get_models(client) for key, value in models['models'].items(): print(key) print(value) client.delete("/models/{}".format(key)) def test_get_models(): client = utilities.register_client() req, models = get_models(client) assert req.status_code == 200 assert isinstance(models, dict) assert "models" in models def test_add_models(): clean_models() client = utilities.register_client() req, models = add_models(client, "testuser") assert req.status_code == 200 assert isinstance(models, dict) model_id = list(models["models"])[0] assert "models" in models assert models['models'][model_id]['name'] == "testuser" assert models['models'][model_id]["description"] == "description of {}".format("testuser") def test_delete_models(): client = utilities.register_client() req = delete_models(client, "testuser") assert req.status_code == 200 def test_update_models_with_assigned_policy(): client = utilities.register_client() model = model_helper.add_model(model_id="mls_model_id" + uuid4().hex) model_id = list(model.keys())[0] value = { "name": "test_policy" + uuid4().hex, "model_id": model_id, "description": "test", } policy = policy_helper.add_policies(value=value) data = { "name": "model_" + uuid4().hex, "description": "description of model_2", "meta_rules": [] } req = client.patch("/models/{}".format(model_id), data=json.dumps(data), headers={'Content-Type': 'application/json'}) assert req.status_code == 400 assert json.loads(req.data)["message"] == "400: Model With Policy Error" def test_update_models_with_no_assigned_policy(): client = utilities.register_client() model = model_helper.add_model(model_id="mls_model_id" + uuid4().hex) model_id = list(model.keys())[0] data = { "name": "model_" + uuid4().hex, "description": "description of model_2", "meta_rules": [] } req = client.patch("/models/{}".format(model_id), data=json.dumps(data), headers={'Content-Type': 'application/json'}) assert req.status_code == 200 def test_add_models_with_meta_rule_key(): client = utilities.register_client() model = model_helper.add_model(model_id="mls_model_id" + uuid4().hex) model_id = list(model.keys())[0] data = { "name": "model_" + uuid4().hex, "description": "description of model_2", } req = client.patch("/models/{}".format(model_id), data=json.dumps(data), headers={'Content-Type': 'application/json'}) assert req.status_code == 400 assert json.loads(req.data)["message"] == "Invalid Key :meta_rules not found" def test_delete_models_without_id(): client = utilities.register_client() req = delete_models_without_id(client) assert req.status_code == 400 assert json.loads(req.data)["message"] == "400: Model Unknown" def test_add_model_with_empty_name(): clean_models() client = utilities.register_client() req, models = add_models(client, "
") assert req.status_code == 400 assert json.loads(req.data)["message"] == "Key: 'name', [Forbidden characters in string]" def test_add_model_with_name_contain_space(): clean_models() client = utilities.register_client() req, models = add_models(client, "test
user") assert req.status_code == 400 assert json.loads(req.data)["message"] == "Key: 'name', [Forbidden characters in string]" def test_add_model_with_name_space(): clean_models() client = utilities.register_client() req, models = add_models(client, " ") assert req.status_code == 400 assert json.loads(req.data)["message"] == '400: Model Unknown' def test_add_model_with_empty_meta_rule_id(): clean_models() client = utilities.register_client() req, meta_rules = add_model_with_empty_meta_rule_id(client, "testuser") assert req.status_code == 400 assert json.loads(req.data)["message"] == '400: Meta Rule Unknown' def test_add_model_with_existed_name(): clean_models() client = utilities.register_client() name = uuid4().hex req, models = add_models(client, name) assert req.status_code == 200 req, models = add_models(client, name) assert req.status_code == 409 assert json.loads(req.data)["message"] == '409: Model Error' def test_add_model_with_existed_meta_rules_list(): clean_models() client = utilities.register_client() name = uuid4().hex subject_category_id, object_category_id, action_category_id, meta_rule_id = builder.create_new_meta_rule() data = { "name": name, "description": "description of {}".format(name), "meta_rules": [meta_rule_id] } name = uuid4().hex req, models = add_models(client=client, name=name, data=data) assert req.status_code == 200 data = { "name": name, "description": "description of {}".format(name), "meta_rules": [meta_rule_id] } req, models = add_models(client=client, name=name, data=data) assert req.status_code == 409 assert json.loads(req.data)["message"] == '409: Model Error' def test_add_model_without_meta_rules(): clean_models() client = utilities.register_client() req, meta_rules = add_model_without_meta_rules_ids(client, "testuser") assert req.status_code == 200 # assert json.loads(req.data)["message"] == "Key: 'meta_rules', [Empty Container]" def test_update_model(): clean_models() client = utilities.register_client() req = add_models(client, "testuser") model_id = list(req[1]['models'])[0] req_update = update_model(client, "testuser", model_id) assert req_update[0].status_code == 200 model_id = list(req_update[1]["models"])[0] assert req_update[1]["models"][model_id]["meta_rules"][0] is not None delete_models(client, "testuser") def test_update_model_name_with_space(): clean_models() client = utilities.register_client() req = add_models(client, "testuser") model_id = list(req[1]['models'])[0] req_update = update_model(client, " ", model_id) assert req_update[0].status_code == 400 assert req_update[1]["message"] == '400: Model Unknown' def test_update_model_with_empty_name(): clean_models() client = utilities.register_client() req = add_models(client, "testuser") model_id = list(req[1]['models'])[0] req_update = update_model(client, "", model_id) assert req_update[0].status_code == 400 assert req_update[1]['message'] == '400: Model Unknown' def test_update_meta_rules_without_id(): clean_models() client = utilities.register_client() req_update = update_model(client, "testuser", "") assert req_update[0].status_code == 400 assert json.loads(req_update[0].data)["message"] == "400: Model Unknown" def test_update_meta_rules_without_name(): client = utilities.register_client() req_update = update_model(client, "", "1234567") assert req_update[0].status_code == 400 assert json.loads(req_update[0].data)[ "message"] == "Key: 'name', [Forbidden characters in string]" def test_update_meta_rules_without_meta_rules(): value = { "name": "mls_model_id" + uuid4().hex, "description": "test", "meta_rules": [] } model = model_helper.add_model(value=value) model_id = list(model.keys())[0] client = utilities.register_client() req_update = update_model_without_meta_rules_ids(client, model_id) assert req_update[0].status_code == 200