123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- # -*- coding: utf-8 -*-
- # Import Python libs
- from __future__ import absolute_import, unicode_literals
- import logging
- import os
- import subprocess
- import sys
- import tempfile
- # Import Salt libs
- import salt
- import salt.ext.six
- import salt.modules.cmdmod
- import salt.utils.files
- import salt.utils.platform
- import tests.support.helpers
- from tests.support.runtests import RUNTIME_VARS
- # Import Salt Testing libs
- from tests.support.unit import TestCase, skipIf
- log = logging.getLogger(__name__)
- @skipIf(not salt.utils.path.which("bash"), "Bash needed for this test")
- class VendorTornadoTest(TestCase):
- """
- Ensure we are not using any non vendor'ed tornado
- """
- def test_import_override(self):
- tmp = tempfile.mkdtemp()
- test_source = tests.support.helpers.dedent(
- """
- from __future__ import absolute_import, print_function
- import salt
- import tornado
- print(tornado.__name__)
- """
- )
- test_source_path = os.path.join(tmp, "test.py")
- tornado_source = tests.support.helpers.dedent(
- """
- foo = 'bar'
- """
- )
- tornado_source_path = os.path.join(tmp, "tornado.py")
- with salt.utils.files.fopen(test_source_path, "w") as fp:
- fp.write(test_source)
- with salt.utils.files.fopen(tornado_source_path, "w") as fp:
- fp.write(tornado_source)
- # Preserve the virtual environment
- env = os.environ.copy()
- if salt.utils.platform.is_windows():
- if salt.ext.six.PY2:
- env[b"PYTHONPATH"] = b";".join([a.encode() for a in sys.path])
- else:
- env["PYTHONPATH"] = ";".join(sys.path)
- else:
- env["PYTHONPATH"] = ":".join(sys.path)
- p = subprocess.Popen(
- [sys.executable, test_source_path],
- stderr=subprocess.PIPE,
- stdout=subprocess.PIPE,
- env=env,
- )
- p.wait()
- pout = p.stdout.read().strip().decode()
- assert pout == "salt.ext.tornado", pout
- def test_vendored_tornado_import(self):
- grep_call = salt.modules.cmdmod.run_stdout(
- cmd="bash -c 'grep -r \"import tornado\" ./salt/*'",
- cwd=RUNTIME_VARS.CODE_DIR,
- ignore_retcode=True,
- ).split("\n")
- valid_lines = []
- for line in grep_call:
- if line == "":
- continue
- # Skip salt/ext/tornado/.. since there are a bunch of imports like
- # this in docstrings.
- if "salt/ext/tornado/" in line:
- continue
- log.error("Test found bad line: %s", line)
- valid_lines.append(line)
- assert valid_lines == [], len(valid_lines)
- def test_vendored_tornado_import_from(self):
- grep_call = salt.modules.cmdmod.run_stdout(
- cmd="bash -c 'grep -r \"from tornado\" ./salt/*'",
- cwd=RUNTIME_VARS.CODE_DIR,
- ignore_retcode=True,
- ).split("\n")
- valid_lines = []
- for line in grep_call:
- if line == "":
- continue
- log.error("Test found bad line: %s", line)
- valid_lines.append(line)
- assert valid_lines == [], len(valid_lines)
- def test_regression_56063(self):
- importer = salt.TornadoImporter()
- try:
- importer.find_module("tornado")
- except TypeError:
- assert False, "TornadoImporter raised type error when one argument passed"
|