upm/tests/check_pythonload.py

85 lines
2.9 KiB
Python
Raw Normal View History

#!/usr/bin/python
#
# Copyright (c) 2017-2019 Intel Corporation
#
# This program and the accompanying materials are made available under the
# terms of the The MIT License which is available at
# https://opensource.org/licenses/MIT.
#
# SPDX-License-Identifier: MIT
#
import unittest
import imp
import glob
import os, sys
# Skip individual modules based on module name. For example,
# pyupm_ozw will skip pyupm_ozw.py.
blacklist = [
# OpenZwave-dependent modules
'pyupm_ozw', 'aeotecdw2e', 'tzemt400', 'aeotecdsb09104',
'aeotecss6', 'aeotecsdg2', 'ozwdump',
# Requires mraa python module
'curieimu',
# Requires modbus
'h803x', 'hwxpxx', 't3311',
# Requires bacnet
'e50hx', 'tb7300', 't8100',
# Requires PIL
'make_oled_pic'
]
class loadModule(unittest.TestCase):
''' The loadModule class loads all module which match a search string
provided via argv. If any of the target modules fails loading, this
class will assert and provide a list of failing modules.'''
def test_load_module(self):
# Python version provided on the command line
py_search_str = '../build/src/*/python2.7/*.py'
if len(self.argv) > 0:
py_search_str = self.argv[0]
# Make sure the search string has a full path
full_py_search_str = os.path.realpath(py_search_str)
# Get all python modules matching full_py_search_str
pyfiles = glob.glob(full_py_search_str)
# Fail if no modules to test
self.assertNotEqual(len(pyfiles), 0,
'Failed to find any %s modules in %s' % \
(py_search_str, full_py_search_str));
# Test load each module
failures = {}
for pyfile in pyfiles:
module = os.path.splitext(os.path.basename(pyfile))[0]
# Don't load blacklisted modules
if module in blacklist:
print('Skipping blacklisted %s ...' % pyfile)
continue
# Append the path of this python module
sys.path.append(os.path.dirname(pyfile))
try:
pyfile = imp.load_source(module, pyfile)
except Exception as x:
failures[pyfile] = x
skeys = list(failures.keys())
skeys.sort()
self.assertEqual(len(failures), 0,
'\n\n%s' % '\n'.join((['%s=%s' % (k, os.environ[k]) for k in list(os.environ.keys())])) +
'\npython %s\n' % ' '.join(sys.version.strip().split()) +
'\nFailed to load %d modules:\n' % len(failures) +
'\n'.join(['%s: %s' % (k, failures[k]) for k in skeys]))
if __name__ == '__main__':
# Allow passing from argv
loadModule.argv = []
for arg in sys.argv[1:]:
loadModule.argv.append(sys.argv.pop())
unittest.main()