aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRHE <rebirthmonkey@gmail.com>2017-11-28 16:05:46 +0100
committerRHE <rebirthmonkey@gmail.com>2017-11-28 16:05:46 +0100
commitd72e7ce30ebc098a6832b32d1a1155b1a7efd51c (patch)
treef138415024cb759cac099202546376ed632c1137
parentea4391a6ba0d2616a44f11b4ccdb2e1b4a3d2f2c (diff)
moon_utilities python unit test
Change-Id: Ia3e52d778ce2aba7f6ae1df727606dd40d3be480 Signed-off-by: RHE <rebirthmonkey@gmail.com>
-rw-r--r--.gitignore3
-rw-r--r--moonv4/bin/README.md5
-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.py2
-rw-r--r--moonv4/moon_utilities/tests/README.md12
-rw-r--r--moonv4/moon_utilities/tests/unit_python/Dockerfile7
-rw-r--r--moonv4/moon_utilities/tests/unit_python/conftest.py202
-rw-r--r--moonv4/moon_utilities/tests/unit_python/requirements.txt10
-rw-r--r--moonv4/moon_utilities/tests/unit_python/run_tests.sh8
-rw-r--r--moonv4/moon_utilities/tests/unit_python/test_cache.py6
11 files changed, 276 insertions, 23 deletions
diff --git a/.gitignore b/.gitignore
index a21f3f22..3a90e4b5 100644
--- a/.gitignore
+++ b/.gitignore
@@ -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)