salt/tests/integration/shell/test_proxy.py
2018-10-03 18:43:43 -07:00

158 lines
5.1 KiB
Python

# -*- coding: utf-8 -*-
'''
:codeauthor: Thayne Harbaugh (tharbaug@adobe.com)
tests.integration.shell.proxy
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
'''
# Import python libs
from __future__ import absolute_import, print_function, unicode_literals
import logging
from tests.support.unit import skipIf
# Import salt tests libs
import tests.integration.utils
from tests.integration.utils import testprogram
import salt.utils.platform
log = logging.getLogger(__name__)
@skipIf(salt.utils.platform.is_windows(), 'Skip on Windows OS')
class ProxyTest(testprogram.TestProgramCase):
'''
Various integration tests for the salt-proxy executable.
'''
def test_exit_status_no_proxyid(self):
'''
Ensure correct exit status when --proxyid argument is missing.
Skip on Windows because daemonization not supported
'''
proxy = testprogram.TestDaemonSaltProxy(
name='proxy-no_proxyid',
parent_dir=self._test_dir,
)
# Call setup here to ensure config and script exist
proxy.setup()
stdout, stderr, status = proxy.run(
args=[
'--config-dir', proxy.abs_path(proxy.config_dir), # Needed due to verbatim_args=True
'-d',
],
verbatim_args=True, # prevents --proxyid from being added automatically
catch_stderr=True,
with_retcode=True,
# The proxy minion had a bug where it would loop forever
# without daemonizing - protect that with a timeout.
timeout=60,
)
try:
self.assert_exit_status(
status, 'EX_USAGE',
message='no --proxyid specified',
stdout=stdout,
stderr=tests.integration.utils.decode_byte_list(stderr)
)
finally:
# Although the start-up should fail, call shutdown() to set the
# internal _shutdown flag and avoid the registered atexit calls to
# cause timeout exeptions and respective traceback
proxy.shutdown()
def test_exit_status_unknown_user(self):
'''
Ensure correct exit status when the proxy is configured to run as an unknown user.
Skip on Windows because daemonization not supported
'''
proxy = testprogram.TestDaemonSaltProxy(
name='proxy-unknown_user',
config_base={'user': 'some_unknown_user_xyz'},
parent_dir=self._test_dir,
)
# Call setup here to ensure config and script exist
proxy.setup()
stdout, stderr, status = proxy.run(
args=['-d'],
catch_stderr=True,
with_retcode=True,
)
try:
self.assert_exit_status(
status, 'EX_NOUSER',
message='unknown user not on system',
stdout=stdout,
stderr=tests.integration.utils.decode_byte_list(stderr)
)
finally:
# Although the start-up should fail, call shutdown() to set the
# internal _shutdown flag and avoid the registered atexit calls to
# cause timeout exeptions and respective traceback
proxy.shutdown()
# pylint: disable=invalid-name
def test_exit_status_unknown_argument(self):
'''
Ensure correct exit status when an unknown argument is passed to salt-proxy.
Skip on Windows because daemonization not supported
'''
proxy = testprogram.TestDaemonSaltProxy(
name='proxy-unknown_argument',
parent_dir=self._test_dir,
)
# Call setup here to ensure config and script exist
proxy.setup()
stdout, stderr, status = proxy.run(
args=['-d', '--unknown-argument'],
catch_stderr=True,
with_retcode=True,
)
try:
self.assert_exit_status(
status, 'EX_USAGE',
message='unknown argument',
stdout=stdout, stderr=stderr
)
finally:
# Although the start-up should fail, call shutdown() to set the
# internal _shutdown flag and avoid the registered atexit calls to
# cause timeout exeptions and respective traceback
proxy.shutdown()
def test_exit_status_correct_usage(self):
'''
Ensure correct exit status when salt-proxy starts correctly.
Skip on Windows because daemonization not supported
'''
proxy = testprogram.TestDaemonSaltProxy(
name='proxy-correct_usage',
parent_dir=self._test_dir,
)
# Call setup here to ensure config and script exist
proxy.setup()
stdout, stderr, status = proxy.run(
args=['-d'],
catch_stderr=True,
with_retcode=True,
)
try:
self.assert_exit_status(
status, 'EX_OK',
message='correct usage',
stdout=stdout,
stderr=tests.integration.utils.decode_byte_list(stderr)
)
finally:
proxy.shutdown(wait_for_orphans=3)