diff options
author | RHE <rebirthmonkey@gmail.com> | 2017-11-28 16:05:46 +0100 |
---|---|---|
committer | RHE <rebirthmonkey@gmail.com> | 2017-11-28 16:05:46 +0100 |
commit | d72e7ce30ebc098a6832b32d1a1155b1a7efd51c (patch) | |
tree | f138415024cb759cac099202546376ed632c1137 | |
parent | ea4391a6ba0d2616a44f11b4ccdb2e1b4a3d2f2c (diff) |
moon_utilities python unit test
Change-Id: Ia3e52d778ce2aba7f6ae1df727606dd40d3be480
Signed-off-by: RHE <rebirthmonkey@gmail.com>
-rw-r--r-- | .gitignore | 3 | ||||
-rw-r--r-- | moonv4/bin/README.md | 5 | ||||
-rw-r--r-- | moonv4/bin/moon_utilities_update.sh (renamed from moonv4/moon_utilities/build.sh) | 35 | ||||
-rw-r--r-- | moonv4/moon_utilities/README.md (renamed from moonv4/moon_utilities/README.rst) | 9 | ||||
-rw-r--r-- | moonv4/moon_utilities/setup.py | 2 | ||||
-rw-r--r-- | moonv4/moon_utilities/tests/README.md | 12 | ||||
-rw-r--r-- | moonv4/moon_utilities/tests/unit_python/Dockerfile | 7 | ||||
-rw-r--r-- | moonv4/moon_utilities/tests/unit_python/conftest.py | 202 | ||||
-rw-r--r-- | moonv4/moon_utilities/tests/unit_python/requirements.txt | 10 | ||||
-rw-r--r-- | moonv4/moon_utilities/tests/unit_python/run_tests.sh | 8 | ||||
-rw-r--r-- | moonv4/moon_utilities/tests/unit_python/test_cache.py | 6 |
11 files changed, 276 insertions, 23 deletions
@@ -40,3 +40,6 @@ moon-abe/pbc-0.5.14/.libs/ moonclient/dist moonclient/build moonclient/python_moonclient.egg-info + +# cache +.cache
\ No newline at end of file diff --git a/moonv4/bin/README.md b/moonv4/bin/README.md new file mode 100644 index 00000000..3125c468 --- /dev/null +++ b/moonv4/bin/README.md @@ -0,0 +1,5 @@ +# Automated Tools/Scripts + +## moon_utilities_update +- update moon_utilities to PIP: `./moon_utilities_update.sh upload` +- locally update moon_utilities for each moon Python package: `./moon_utilities_update.sh copy`
\ No newline at end of file diff --git a/moonv4/moon_utilities/build.sh b/moonv4/bin/moon_utilities_update.sh index 4a86e5af..9dc42179 100644 --- a/moonv4/moon_utilities/build.sh +++ b/moonv4/bin/moon_utilities_update.sh @@ -4,35 +4,32 @@ VERSION=moon_utilities-$(grep __version__ moon_utilities/__init__.py | cut -d "\ python3 setup.py sdist bdist_wheel -rm dist/*.asc 2>/dev/null - -gpg --detach-sign -u "A0A96E75" -a dist/${VERSION}-py3-none-any.whl -gpg --detach-sign -u "A0A96E75" -a dist/${VERSION}.tar.gz - if [ "$1" = "upload" ]; then + # Instead of "A0A96E75", use your own GPG ID + rm dist/*.asc 2>/dev/null + gpg --detach-sign -u "A0A96E75" -a dist/${VERSION}-py3-none-any.whl + gpg --detach-sign -u "A0A96E75" -a dist/${VERSION}.tar.gz twine upload dist/${VERSION}-py3-none-any.whl dist/${VERSION}-py3-none-any.whl.asc twine upload dist/${VERSION}.tar.gz dist/${VERSION}.tar.gz.asc - rm -f ../moon_orchestrator/dist/moon_utilities* - rm -f ../moon_interface/dist/moon_utilities* - rm -f ../moon_manager/dist/moon_utilities* - rm -f ../moon_authz/dist/moon_utilities* - rm -f ../moon_wrapper/dist/moon_utilities* fi +rm -f ../moon_manager/dist/moon_utilities* +rm -f ../moon_orchestrator/dist/moon_utilities* +rm -f ../moon_wrapper/dist/moon_utilities* +rm -f ../moon_interface/dist/moon_utilities* +rm -f ../moon_authz/dist/moon_utilities* + + if [ "$1" = "copy" ]; then + mkdir -p ../moon_manager/dist/ 2>/dev/null + cp -v dist/${VERSION}-py3-none-any.whl ../moon_manager/dist/ mkdir -p ../moon_orchestrator/dist/ 2>/dev/null - rm -f ../moon_orchestrator/dist/moon_utilities* cp -v dist/${VERSION}-py3-none-any.whl ../moon_orchestrator/dist/ + mkdir -p ../moon_wrapper/dist/ 2>/dev/null + cp -v dist/${VERSION}-py3-none-any.whl ../moon_wrapper/dist/ mkdir -p ../moon_interface/dist/ 2>/dev/null - rm -f ../moon_interface/dist/moon_utilities* cp -v dist/${VERSION}-py3-none-any.whl ../moon_interface/dist/ - mkdir -p ../moon_manager/dist/ 2>/dev/null - rm -f ../moon_manager/dist/moon_utilities* - cp -v dist/${VERSION}-py3-none-any.whl ../moon_manager/dist/ mkdir -p ../moon_authz/dist/ 2>/dev/null - rm -f ../moon_authz/dist/moon_utilities* cp -v dist/${VERSION}-py3-none-any.whl ../moon_authz/dist/ - mkdir -p ../moon_wrapper/dist/ 2>/dev/null - rm -f ../moon_wrapper/dist/moon_utilities* - cp -v dist/${VERSION}-py3-none-any.whl ../moon_wrapper/dist/ fi + diff --git a/moonv4/moon_utilities/README.rst b/moonv4/moon_utilities/README.md index ded4e99a..b658a864 100644 --- a/moonv4/moon_utilities/README.rst +++ b/moonv4/moon_utilities/README.md @@ -1,9 +1,12 @@ -Core module for the Moon project -================================ - +# Moon Python Utilities Package This package contains the core module for the Moon project It is designed to provide authorization features to all OpenStack components. For any other information, refer to the parent project: https://git.opnfv.org/moon + +moon_utilities is a common Python lib for other Moon Python packages + + + diff --git a/moonv4/moon_utilities/setup.py b/moonv4/moon_utilities/setup.py index 6c9ffd3d..cd7a2577 100644 --- a/moonv4/moon_utilities/setup.py +++ b/moonv4/moon_utilities/setup.py @@ -23,7 +23,7 @@ setup( description="Some utilities for all the Moon components", - long_description=open('README.rst').read(), + long_description=open('README.md').read(), install_requires=required, diff --git a/moonv4/moon_utilities/tests/README.md b/moonv4/moon_utilities/tests/README.md new file mode 100644 index 00000000..ddb4f55d --- /dev/null +++ b/moonv4/moon_utilities/tests/README.md @@ -0,0 +1,12 @@ +# Tests + +## Python Unit Test for moon_utilities +- build the moon_utilities package +- launch Docker for Python unit tests + - `cd moon_utilities` + - `docker run --volume $(pwd):/data moon_utilities_test` +- upload moon_utilities to PIP + + + + diff --git a/moonv4/moon_utilities/tests/unit_python/Dockerfile b/moonv4/moon_utilities/tests/unit_python/Dockerfile new file mode 100644 index 00000000..681edcd7 --- /dev/null +++ b/moonv4/moon_utilities/tests/unit_python/Dockerfile @@ -0,0 +1,7 @@ +FROM python:3 + +RUN pip install pytest requests_mock requests --upgrade +ADD requirements.txt /root +RUN pip install -r /root/requirements.txt --upgrade + +CMD ["sh", "/data/tests/unit_python/run_tests.sh"]
\ No newline at end of file diff --git a/moonv4/moon_utilities/tests/unit_python/conftest.py b/moonv4/moon_utilities/tests/unit_python/conftest.py new file mode 100644 index 00000000..177a406e --- /dev/null +++ b/moonv4/moon_utilities/tests/unit_python/conftest.py @@ -0,0 +1,202 @@ +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 component == "components": + return base64.b64encode( + json.dumps(CONF["components"]).encode('utf-8')+b"\n").decode('utf-8') + elif not component: + return base64.b64encode( + json.dumps(CONF).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') + + +@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( + 'GET', 'http://consul:8500/v1/kv/components?recurse=true', + json=[{'Key': "components", 'Value': get_b64_conf("components")}] + ) + 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("End registering URI") + # 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_utilities/tests/unit_python/requirements.txt b/moonv4/moon_utilities/tests/unit_python/requirements.txt new file mode 100644 index 00000000..b611b008 --- /dev/null +++ b/moonv4/moon_utilities/tests/unit_python/requirements.txt @@ -0,0 +1,10 @@ +kombu !=4.0.1,!=4.0.0 +oslo.messaging +oslo.config +oslo.log +vine +werkzeug +flask +requests +pytest +requests_mock
\ No newline at end of file diff --git a/moonv4/moon_utilities/tests/unit_python/run_tests.sh b/moonv4/moon_utilities/tests/unit_python/run_tests.sh new file mode 100644 index 00000000..527e3dc4 --- /dev/null +++ b/moonv4/moon_utilities/tests/unit_python/run_tests.sh @@ -0,0 +1,8 @@ +#!/usr/bin/env bash + +cd /data +pip3 install -r tests/unit_python/requirements.txt --upgrade +pip3 install . + +cd /data/tests/unit_python +pytest . diff --git a/moonv4/moon_utilities/tests/unit_python/test_cache.py b/moonv4/moon_utilities/tests/unit_python/test_cache.py new file mode 100644 index 00000000..5ecacfcf --- /dev/null +++ b/moonv4/moon_utilities/tests/unit_python/test_cache.py @@ -0,0 +1,6 @@ + +def test_cache(): + from moon_utilities import cache + c = cache.Cache() + r = c.authz_requests() + assert isinstance(r, dict) |