code coverage and unit tests through tox/flake8

Change-Id: Id1e8a9aa73e28f822fdd87fba108c0874f76c287
Signed-off-by: pceicicd <pekwatch746@gmail.com>
diff --git a/Dockerfile-Unit-Test b/Dockerfile-Unit-Test
new file mode 100644
index 0000000..6c94271
--- /dev/null
+++ b/Dockerfile-Unit-Test
@@ -0,0 +1,35 @@
+# ==================================================================================
+#       Copyright (c) 2020 China Mobile Technology (USA) Inc. Intellectual Property.
+#
+#   Licensed under the Apache License, Version 2.0 (the "License");
+#   you may not use this file except in compliance with the License.
+#   You may obtain a copy of the License at
+#
+#          http://www.apache.org/licenses/LICENSE-2.0
+#
+#   Unless required by applicable law or agreed to in writing, software
+#   distributed under the License is distributed on an "AS IS" BASIS,
+#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#   See the License for the specific language governing permissions and
+#   limitations under the License.
+# ==================================================================================
+FROM python:3.8-alpine
+
+# sdl uses hiredis which needs gcc
+RUN apk update && apk add gcc musl-dev
+
+# copy rmr libraries from builder image in lieu of an Alpine package
+COPY --from=nexus3.o-ran-sc.org:10002/o-ran-sc/bldr-alpine3-rmr:4.0.5 /usr/local/lib64/librmr* /usr/local/lib64/
+
+# Upgrade pip, install tox
+RUN pip install --upgrade pip && pip install tox
+
+# copies
+COPY setup.py tox.ini LICENSE.txt /tmp/
+COPY lp/ /tmp/lp
+COPY tests/ /tmp/tests
+RUN pip install /tmp
+
+# Run the unit tests
+WORKDIR /tmp
+RUN tox -e code,flake8
diff --git a/tests/test_lp.py b/tests/test_lp.py
new file mode 100644
index 0000000..5210a82
--- /dev/null
+++ b/tests/test_lp.py
@@ -0,0 +1,44 @@
+# ==================================================================================
+#       Copyright (c) 2020 China Mobile Technology (USA) Inc. Intellectual Property.
+#
+#   Licensed under the Apache License, Version 2.0 (the "License");
+#   you may not use this file except in compliance with the License.
+#   You may obtain a copy of the License at
+#
+#          http://www.apache.org/licenses/LICENSE-2.0
+#
+#   Unless required by applicable law or agreed to in writing, software
+#   distributed under the License is distributed on an "AS IS" BASIS,
+#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#   See the License for the specific language governing permissions and
+#   limitations under the License.
+# ==================================================================================
+import json
+import time
+from contextlib import suppress
+from lp import main, sdl
+from ricxappframe.xapp_frame import Xapp
+
+mock_lp_xapp = None
+# tox.ini sets env var to this value
+config_file_path = "/tmp/config.json"
+
+def init_config_file():
+    with open(config_file_path, "w") as file:
+        file.write('{ "version_int" : 1 }')
+
+
+def write_config_file():
+    # generate an inotify/config event
+    with open(config_file_path, "w") as file:
+        file.write('{ "version_int" : 2 }')
+
+
+def test_init_xapp():
+    # establish config
+    init_config_file()
+
+    # wait a bit then update config
+    time.sleep(1)
+    write_config_file()
+
diff --git a/tox.ini b/tox.ini
new file mode 100644
index 0000000..5aa4273
--- /dev/null
+++ b/tox.ini
@@ -0,0 +1,43 @@
+# ==================================================================================
+#       Copyright (c) 2020 China Mobile Technology (USA) Inc. Intellectual Property.
+#
+#   Licensed under the Apache License, Version 2.0 (the "License");
+#   you may not use this file except in compliance with the License.
+#   You may obtain a copy of the License at
+#
+#          http://www.apache.org/licenses/LICENSE-2.0
+#
+#   Unless required by applicable law or agreed to in writing, software
+#   distributed under the License is distributed on an "AS IS" BASIS,
+#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#   See the License for the specific language governing permissions and
+#   limitations under the License.
+# ==================================================================================
+[tox]
+envlist = code,flake8
+minversion = 2.0
+
+[testenv:code]
+basepython = python3.8
+deps=
+    pytest
+    coverage
+    pytest-cov
+setenv =
+    LD_LIBRARY_PATH = /usr/local/lib/:/usr/local/lib64
+    USE_FAKE_SDL = 1
+    CONFIG_FILE = /tmp/config.json
+
+# add -s after pytest to stream the logs as they come in, rather than saving for the end
+commands =
+    pytest -v --cov lp --cov-report xml --cov-report term-missing --cov-report html 
+    coverage xml -i
+
+[testenv:flake8]
+basepython = python3.8
+skip_install = true
+deps = flake8
+commands = flake8 setup.py lp tests
+
+[flake8]
+extend-ignore = E501,E741,E731,E302,W292,W291,F841,F401,W391