1
0
mirror of https://github.com/projectatomic/atomic.git synced 2026-02-05 18:45:01 +01:00

Add base integration test for dbus

Define the methodology for testing dbus in integrations tests.  Using a decorator,
this allows us to automatically define and test dbus tests. This is only the base
test to exercise the testing.

Closes: #901
Approved by: rhatdan
This commit is contained in:
Brent Baude
2017-02-17 10:43:45 -06:00
committed by Atomic Bot
parent db08293954
commit 791f62eff9
2 changed files with 93 additions and 4 deletions

27
test.sh
View File

@@ -128,7 +128,21 @@ make_docker_images () {
make_docker_images
# Python unit tests.
if [ ! -n "${PYTHON+ }" ]; then
if hash python3 > /dev/null 2>&1 /dev/null; then
PYTHON=$(hash -t python3)
elif type python3 > /dev/null 2>&1; then
PYTHON=$(type python3 | awk '{print $3}')
elif hash python2 > /dev/null 2>&1; then
PYTHON=$(hash -t python2)
elif type python2 > /dev/null 2>&1; then
PYTHON=$(type python2 | awk '{print $3}')
else
PYTHON='/usr/bin/python'
fi
fi
echo "UNIT TESTS:"
COVERAGE_BIN=${COVERAGE_BIN-"/usr/bin/coverage"}
@@ -195,10 +209,13 @@ fi
if [ ! -n "${TEST_UNIT+ }" ]; then
for tf in `find ./tests/integration/ -name test_*.sh`; do
for tf in `find ./tests/integration/ -name test_*`; do
bn=$(basename "$tf")
extension="${bn##*.}"
if [ -n "${TEST_INTEGRATION+ }" ]; then
tfbn=$(basename "$tf" .sh)
tfbn="${bn%.*}"
tfbn="${tfbn#test_}"
if [[ " $TEST_INTEGRATION " != *" $tfbn "* ]]; then
continue
@@ -213,7 +230,9 @@ if [ ! -n "${TEST_UNIT+ }" ]; then
printf "Running %-40.40s" "$(basename ${tf})...."
printf "\n==== ${tf} ====\n" >> ${LOG}
if [ "${extension}" == "py" ]; then
tf="$PYTHON ${tf}"
fi
if ${tf} &>> ${LOG}; then
printf "PASS\n";
else

70
tests/integration/test_dbus.py Executable file
View File

@@ -0,0 +1,70 @@
#!/usr/bin/env python
#pylint: skip-file
import dbus
import sys
try:
from slip.dbus import polkit
except ImportError:
sys.exit(77)
import dbus.service
import dbus.mainloop.glib
# Throw this error to signify at test failure
class AtomicIntegrationTestError(Exception):
def __init__(self, test_name):
super(AtomicIntegrationTestError, self).__init__("Test '{}' Failed...".format(test_name))
# Wrapper class for the decorator
def integration_test(func):
def _integration_test(self):
return func(self)
return _integration_test
class TestDBus():
def __init__(self):
self.bus = dbus.SystemBus()
self.dbus_object = self.bus.get_object("org.atomic", "/org/atomic/object")
# Add this decorator to define the method as something that should be
# tested
@integration_test
@polkit.enable_proxy
def test_scan_list(self):
results = self.dbus_object.ScanList()
assert(isinstance(results, dbus.String))
if __name__ == '__main__':
def get_test_methods(_tb):
"""
Returns the test methods from above that have the integration_test decorator
:param _tb: TestDbus instance
"""
test_method_names = [x for x in dir(_tb) if not x.startswith('__')]
test_methods = []
for method in test_method_names:
_method = getattr(_tb, method)
if callable(_method) and _method.__getattribute__('__name__') == '_integration_test':
test_methods.append(method)
return test_methods
tb = TestDBus()
test_methods = get_test_methods(tb)
for test in reversed(test_methods):
_tb = getattr(tb, test)
try:
_tb()
except:
raise AtomicIntegrationTestError(test)
print("Test '{}' passed.".format(test))