# coding: utf-8 # Python libs from __future__ import absolute_import from collections import namedtuple # Salt testing libs from tests.support.unit import TestCase from tests.support.mock import patch, MagicMock from tests.support.mixins import LoaderModuleMockMixin # Salt libs import salt.beacons.salt_proxy as salt_proxy PATCH_OPTS = dict(autospec=True, spec_set=True) FakeProcess = namedtuple('Process', 'cmdline pid') class SaltProxyBeaconTestCase(TestCase, LoaderModuleMockMixin): ''' Test case for salt.beacons.[s] ''' def setup_loader_modules(self): return { salt_proxy: { '__context__': {}, '__salt__': {}, } } def test_non_list_config(self): config = {} ret = salt_proxy.validate(config) self.assertEqual(ret, (False, 'Configuration for salt_proxy beacon' ' must be a list.')) def test_empty_config(self): config = [{}] ret = salt_proxy.validate(config) self.assertEqual(ret, (False, 'Configuration for salt_proxy ' 'beacon requires proxies.')) def test_salt_proxy_running(self): mock = MagicMock(return_value={'result': True}) with patch.dict(salt_proxy.__salt__, {'salt_proxy.is_running': mock}): config = [{'proxies': {'p8000': ''}}] ret = salt_proxy.validate(config) self.assertEqual(ret, (True, 'Valid beacon configuration')) ret = salt_proxy.beacon(config) self.assertEqual(ret, [{'p8000': 'Proxy p8000 is already running'}]) def test_salt_proxy_not_running(self): is_running_mock = MagicMock(return_value={'result': False}) configure_mock = MagicMock(return_value={'result': True, 'changes': {'new': 'Salt Proxy: Started proxy process for p8000', 'old': []}}) cmd_run_mock = MagicMock(return_value={'pid': 1000, 'retcode': 0, 'stderr': '', 'stdout': ''}) with patch.dict(salt_proxy.__salt__, {'salt_proxy.is_running': is_running_mock}), \ patch.dict(salt_proxy.__salt__, {'salt_proxy.configure_proxy': configure_mock}), \ patch.dict(salt_proxy.__salt__, {'cmd.run_all': cmd_run_mock}): config = [{'proxies': {'p8000': ''}}] ret = salt_proxy.validate(config) self.assertEqual(ret, (True, 'Valid beacon configuration')) ret = salt_proxy.beacon(config) self.assertEqual(ret, [{'p8000': 'Proxy p8000 was started'}])