From 7a8c6828a170d001e905a108b7f873497cdefa88 Mon Sep 17 00:00:00 2001 From: Thomas Duval Date: Fri, 1 Dec 2017 16:29:39 +0100 Subject: Update unit tests for Moon Manager Change-Id: I8de6950ed7df2b577e40920dd1df11c04da797a5 --- moonv4/moon_manager/tests/api/test_perimeter.py | 59 ------- moonv4/moon_manager/tests/unit_python/__init__.py | 0 .../moon_manager/tests/unit_python/api/__init__.py | 0 .../tests/unit_python/api/test_perimeter.py | 59 +++++++ moonv4/moon_manager/tests/unit_python/conftest.py | 195 +++++++++++++++++++++ .../tests/unit_python/requirements.txt | 5 + 6 files changed, 259 insertions(+), 59 deletions(-) delete mode 100644 moonv4/moon_manager/tests/api/test_perimeter.py create mode 100644 moonv4/moon_manager/tests/unit_python/__init__.py create mode 100644 moonv4/moon_manager/tests/unit_python/api/__init__.py create mode 100644 moonv4/moon_manager/tests/unit_python/api/test_perimeter.py create mode 100644 moonv4/moon_manager/tests/unit_python/conftest.py create mode 100644 moonv4/moon_manager/tests/unit_python/requirements.txt diff --git a/moonv4/moon_manager/tests/api/test_perimeter.py b/moonv4/moon_manager/tests/api/test_perimeter.py deleted file mode 100644 index 18d3837a..00000000 --- a/moonv4/moon_manager/tests/api/test_perimeter.py +++ /dev/null @@ -1,59 +0,0 @@ -# import moon_manager -# import moon_manager.api -import json - - -def get_json(data): - return json.loads(data.decode("utf-8")) - - -def get_subjects(client): - req = client.get("/subjects") - assert req.status_code == 200 - subjects = get_json(req.data) - assert isinstance(subjects, dict) - assert "subjects" in subjects - return subjects - - -def add_subjects(client, name): - data = { - "name": name, - "description": "description of {}".format(name), - "password": "password for {}".format(name), - "email": "{}@moon".format(name) - } - req = client.post("/subjects", data=json.dumps(data), - headers={'Content-Type': 'application/json'}) - assert req.status_code == 200 - subjects = get_json(req.data) - assert isinstance(subjects, dict) - key = list(subjects["subjects"].keys())[0] - value = list(subjects["subjects"].values())[0] - assert "subjects" in subjects - assert key == "1111111111111" - assert value['id'] == "1111111111111" - assert value['name'] == name - assert value["description"] == "description of {}".format(name) - assert value["email"] == "{}@moon".format(name) - return subjects - - -def delete_subject(client, name): - subjects = get_subjects(client) - for key, value in subjects['subjects'].items(): - if value['name'] == name: - req = client.delete("/subjects/{}".format(key)) - assert req.status_code == 200 - break - subjects = get_subjects(client) - assert name not in [x['name'] for x in subjects["subjects"].values()] - - -def test_subject(): - import moon_manager.server - server = moon_manager.server.main() - client = server.app.test_client() - get_subjects(client) - add_subjects(client, "testuser") - delete_subject(client, "testuser") diff --git a/moonv4/moon_manager/tests/unit_python/__init__.py b/moonv4/moon_manager/tests/unit_python/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/moonv4/moon_manager/tests/unit_python/api/__init__.py b/moonv4/moon_manager/tests/unit_python/api/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/moonv4/moon_manager/tests/unit_python/api/test_perimeter.py b/moonv4/moon_manager/tests/unit_python/api/test_perimeter.py new file mode 100644 index 00000000..18d3837a --- /dev/null +++ b/moonv4/moon_manager/tests/unit_python/api/test_perimeter.py @@ -0,0 +1,59 @@ +# import moon_manager +# import moon_manager.api +import json + + +def get_json(data): + return json.loads(data.decode("utf-8")) + + +def get_subjects(client): + req = client.get("/subjects") + assert req.status_code == 200 + subjects = get_json(req.data) + assert isinstance(subjects, dict) + assert "subjects" in subjects + return subjects + + +def add_subjects(client, name): + data = { + "name": name, + "description": "description of {}".format(name), + "password": "password for {}".format(name), + "email": "{}@moon".format(name) + } + req = client.post("/subjects", data=json.dumps(data), + headers={'Content-Type': 'application/json'}) + assert req.status_code == 200 + subjects = get_json(req.data) + assert isinstance(subjects, dict) + key = list(subjects["subjects"].keys())[0] + value = list(subjects["subjects"].values())[0] + assert "subjects" in subjects + assert key == "1111111111111" + assert value['id'] == "1111111111111" + assert value['name'] == name + assert value["description"] == "description of {}".format(name) + assert value["email"] == "{}@moon".format(name) + return subjects + + +def delete_subject(client, name): + subjects = get_subjects(client) + for key, value in subjects['subjects'].items(): + if value['name'] == name: + req = client.delete("/subjects/{}".format(key)) + assert req.status_code == 200 + break + subjects = get_subjects(client) + assert name not in [x['name'] for x in subjects["subjects"].values()] + + +def test_subject(): + import moon_manager.server + server = moon_manager.server.main() + client = server.app.test_client() + get_subjects(client) + add_subjects(client, "testuser") + delete_subject(client, "testuser") diff --git a/moonv4/moon_manager/tests/unit_python/conftest.py b/moonv4/moon_manager/tests/unit_python/conftest.py new file mode 100644 index 00000000..58f04af2 --- /dev/null +++ b/moonv4/moon_manager/tests/unit_python/conftest.py @@ -0,0 +1,195 @@ +import base64 +import json +import logging +import pytest +import requests_mock + +CONF = { + "openstack": { + "keystone": { + "url": "http://keystone:5000/v3", + "user": "admin", + "check_token": False, + "password": "p4ssw0rd", + "domain": "default", + "certificate": False, + "project": "admin" + } + }, + "components": { + "wrapper": { + "bind": "0.0.0.0", + "port": 8080, + "container": "wukongsun/moon_wrapper:v4.3", + "timeout": 5, + "hostname": "wrapper" + }, + "manager": { + "bind": "0.0.0.0", + "port": 8082, + "container": "wukongsun/moon_manager:v4.3", + "hostname": "manager" + }, + "port_start": 31001, + "orchestrator": { + "bind": "0.0.0.0", + "port": 8083, + "container": "wukongsun/moon_orchestrator:v4.3", + "hostname": "interface" + }, + "interface": { + "bind": "0.0.0.0", + "port": 8080, + "container": "wukongsun/moon_interface:v4.3", + "hostname": "interface" + } + }, + "plugins": { + "session": { + "port": 8082, + "container": "asteroide/session:latest" + }, + "authz": { + "port": 8081, + "container": "wukongsun/moon_authz:v4.3" + } + }, + "logging": { + "handlers": { + "file": { + "filename": "/tmp/moon.log", + "class": "logging.handlers.RotatingFileHandler", + "level": "DEBUG", + "formatter": "custom", + "backupCount": 3, + "maxBytes": 1048576 + }, + "console": { + "class": "logging.StreamHandler", + "formatter": "brief", + "level": "INFO", + "stream": "ext://sys.stdout" + } + }, + "formatters": { + "brief": { + "format": "%(levelname)s %(name)s %(message)-30s" + }, + "custom": { + "format": "%(asctime)-15s %(levelname)s %(name)s %(message)s" + } + }, + "root": { + "handlers": [ + "console" + ], + "level": "ERROR" + }, + "version": 1, + "loggers": { + "moon": { + "handlers": [ + "console", + "file" + ], + "propagate": False, + "level": "DEBUG" + } + } + }, + "slave": { + "name": None, + "master": { + "url": None, + "login": None, + "password": None + } + }, + "docker": { + "url": "tcp://172.88.88.1:2376", + "network": "moon" + }, + "database": { + "url": "sqlite:///database.db", + # "url": "mysql+pymysql://moon:p4sswOrd1@db/moon", + "driver": "sql" + }, + "messenger": { + "url": "rabbit://moon:p4sswOrd1@messenger:5672/moon" + } +} + +COMPONENTS = ( + "logging", + "openstack/keystone", + "database", + "slave", + "components/manager", +) + + +def get_b64_conf(component=None): + if component in CONF: + return base64.b64encode( + json.dumps( + CONF[component]).encode('utf-8')+b"\n").decode('utf-8') + elif "/" in component: + key1, _, key2 = component.partition("/") + return base64.b64encode( + json.dumps( + CONF[key1][key2]).encode('utf-8')+b"\n").decode('utf-8') + else: + return base64.b64encode( + json.dumps(CONF).encode('utf-8')+b"\n").decode('utf-8') + + +@pytest.fixture(autouse=True) +def no_requests(monkeypatch): + """ Modify the response from Requests module + """ + with requests_mock.Mocker(real_http=True) as m: + for component in COMPONENTS: + m.register_uri( + 'GET', 'http://consul:8500/v1/kv/{}'.format(component), + json=[{'Key': component, 'Value': get_b64_conf(component)}] + ) + m.register_uri( + 'POST', 'http://keystone:5000/v3/auth/tokens', + headers={'X-Subject-Token': "111111111"} + ) + m.register_uri( + 'DELETE', 'http://keystone:5000/v3/auth/tokens', + headers={'X-Subject-Token': "111111111"} + ) + m.register_uri( + 'POST', 'http://keystone:5000/v3/users?name=testuser&domain_id=default', + json={"users": {}} + ) + m.register_uri( + 'GET', 'http://keystone:5000/v3/users?name=testuser&domain_id=default', + json={"users": {}} + ) + m.register_uri( + 'POST', 'http://keystone:5000/v3/users/', + json={"users": [{ + "id": "1111111111111" + }]} + ) + print("Start populating the DB.") + from moon_db.db_manager import init_engine, run + engine = init_engine() + print("engine={}".format(engine)) + run("upgrade", logging.getLogger("db_manager"), engine) + print("End populating the DB.") + yield m + + +# @pytest.fixture(autouse=True, scope="session") +# def manage_database(): +# from moon_db.db_manager import init_engine, run +# engine = init_engine() +# run("upgrade", logging.getLogger("db_manager"), engine) +# yield +# print("Will close the DB") + + diff --git a/moonv4/moon_manager/tests/unit_python/requirements.txt b/moonv4/moon_manager/tests/unit_python/requirements.txt new file mode 100644 index 00000000..8bd8449f --- /dev/null +++ b/moonv4/moon_manager/tests/unit_python/requirements.txt @@ -0,0 +1,5 @@ +flask +flask_cors +flask_restful +moon_db +moon_utilities \ No newline at end of file -- cgit 1.2.3-korg