mirror of
https://github.com/valitydev/salt.git
synced 2024-11-06 16:45:27 +00:00
33bb5bfe69
Make sure that the virtualname is included in the actual filename of core modules. This will help speed up loading of modules that need to use the virtualname, so that we hit @depends decorators less.
101 lines
3.1 KiB
Python
101 lines
3.1 KiB
Python
# -*- coding: utf-8 -*-
|
|
'''
|
|
tests.unit.test_virtualname
|
|
~~~~~~~~~~~~~~~~~~~~
|
|
'''
|
|
|
|
# Import Python libs
|
|
from __future__ import absolute_import
|
|
import logging
|
|
import os
|
|
|
|
try:
|
|
import importlib.util
|
|
except ImportError:
|
|
import imp
|
|
|
|
# Import Salt libs
|
|
import salt.ext.six as six
|
|
|
|
# Import Salt Testing libs
|
|
from tests.support.paths import CODE_DIR
|
|
from tests.support.unit import TestCase
|
|
|
|
log = logging.getLogger(__name__)
|
|
|
|
|
|
class FakeEntry(object):
|
|
def __init__(self, name, path, is_file=True):
|
|
self.name = name
|
|
self.path = path
|
|
self._is_file = is_file
|
|
|
|
def is_file(self):
|
|
return self._is_file
|
|
|
|
|
|
class VirtualNameTestCase(TestCase):
|
|
'''
|
|
Test that the virtualname is in the module name, to speed up lookup of
|
|
modules.
|
|
'''
|
|
maxDiff = None
|
|
|
|
@staticmethod
|
|
def _import_module(testpath):
|
|
if six.PY3:
|
|
spec = importlib.util.spec_from_file_location('tmpmodule', testpath)
|
|
module = importlib.util.module_from_spec(spec)
|
|
spec.loader.exec_module(module)
|
|
else:
|
|
fp, pathname, description = imp.find_module('tmpmodule', testpath)
|
|
try:
|
|
module = imp.load_module('tmpmodule', fp, pathname, description)
|
|
finally:
|
|
# Since we may exit via an exception, close fp explicitly.
|
|
if fp:
|
|
fp.close()
|
|
return module
|
|
|
|
def _check_modules(self, path):
|
|
'''
|
|
check modules in directory
|
|
'''
|
|
ret = []
|
|
for entry in os.listdir(path):
|
|
name, path = os.path.splitext(os.path.basename(entry))[0], entry
|
|
if name.startswith('.') or name.startswith('_'):
|
|
continue
|
|
if os.path.isfile(path) and not name.endswith('.py'):
|
|
continue
|
|
testpath = path if os.path.isfile(path) else os.path.join(path, '__init__.py')
|
|
module = self._import_module(testpath)
|
|
if hasattr(module, '__virtualname__'):
|
|
if module.__virtualname__ not in name:
|
|
ret.append(
|
|
'Virtual name "{0}" is not in the module filename "{1}": {2}'.format(
|
|
module.__virtualname__,
|
|
name,
|
|
path
|
|
)
|
|
)
|
|
return ret
|
|
|
|
def test_check_virtualname(self):
|
|
'''
|
|
Test that the virtualname is in __name__ of the module
|
|
'''
|
|
errors = []
|
|
for entry in os.listdir(os.path.join(CODE_DIR, 'salt/')):
|
|
name, path = os.path.splitext(os.path.basename(entry))[0], entry
|
|
if name.startswith('.') or name.startswith('_') or not os.path.isdir(path):
|
|
continue
|
|
if name in ('cli', 'defaults', 'spm', 'daemons', 'ext', 'templates'):
|
|
continue
|
|
if name == 'cloud':
|
|
entry = os.path.join(CODE_DIR, 'salt', 'cloud', 'clouds')
|
|
errors.extend(self._check_modules(entry))
|
|
for error in errors:
|
|
log.critical(error)
|
|
assert not errors
|