Blame tests/unittests/test_handler/test_handler_mcollective.py

Packit bc9a3a
# This file is part of cloud-init. See LICENSE file for license information.
Packit bc9a3a
Packit bc9a3a
from cloudinit import (cloud, distros, helpers, util)
Packit bc9a3a
from cloudinit.config import cc_mcollective
Packit bc9a3a
from cloudinit.sources import DataSourceNoCloud
Packit bc9a3a
Packit bc9a3a
from cloudinit.tests import helpers as t_help
Packit bc9a3a
Packit bc9a3a
import configobj
Packit bc9a3a
import logging
Packit bc9a3a
import os
Packit bc9a3a
import shutil
Packit bc9a3a
from six import BytesIO
Packit bc9a3a
import tempfile
Packit bc9a3a
Packit bc9a3a
LOG = logging.getLogger(__name__)
Packit bc9a3a
Packit bc9a3a
Packit bc9a3a
STOCK_CONFIG = """\
Packit bc9a3a
main_collective = mcollective
Packit bc9a3a
collectives = mcollective
Packit bc9a3a
libdir = /usr/share/mcollective/plugins
Packit bc9a3a
logfile = /var/log/mcollective.log
Packit bc9a3a
loglevel = info
Packit bc9a3a
daemonize = 1
Packit bc9a3a
Packit bc9a3a
# Plugins
Packit bc9a3a
securityprovider = psk
Packit bc9a3a
plugin.psk = unset
Packit bc9a3a
Packit bc9a3a
connector = activemq
Packit bc9a3a
plugin.activemq.pool.size = 1
Packit bc9a3a
plugin.activemq.pool.1.host = stomp1
Packit bc9a3a
plugin.activemq.pool.1.port = 61613
Packit bc9a3a
plugin.activemq.pool.1.user = mcollective
Packit bc9a3a
plugin.activemq.pool.1.password = marionette
Packit bc9a3a
Packit bc9a3a
# Facts
Packit bc9a3a
factsource = yaml
Packit bc9a3a
plugin.yaml = /etc/mcollective/facts.yaml
Packit bc9a3a
"""
Packit bc9a3a
Packit bc9a3a
Packit bc9a3a
class TestConfig(t_help.FilesystemMockingTestCase):
Packit bc9a3a
    def setUp(self):
Packit bc9a3a
        super(TestConfig, self).setUp()
Packit bc9a3a
        self.tmp = tempfile.mkdtemp()
Packit bc9a3a
        self.addCleanup(shutil.rmtree, self.tmp)
Packit bc9a3a
        # "./": make os.path.join behave correctly with abs path as second arg
Packit bc9a3a
        self.server_cfg = os.path.join(
Packit bc9a3a
            self.tmp, "./" + cc_mcollective.SERVER_CFG)
Packit bc9a3a
        self.pubcert_file = os.path.join(
Packit bc9a3a
            self.tmp, "./" + cc_mcollective.PUBCERT_FILE)
Packit bc9a3a
        self.pricert_file = os.path.join(
Packit bc9a3a
            self.tmp, self.tmp, "./" + cc_mcollective.PRICERT_FILE)
Packit bc9a3a
Packit bc9a3a
    def test_basic_config(self):
Packit bc9a3a
        cfg = {
Packit bc9a3a
            'mcollective': {
Packit bc9a3a
                'conf': {
Packit bc9a3a
                    'loglevel': 'debug',
Packit bc9a3a
                    'connector': 'rabbitmq',
Packit bc9a3a
                    'logfile': '/var/log/mcollective.log',
Packit bc9a3a
                    'ttl': '4294957',
Packit bc9a3a
                    'collectives': 'mcollective',
Packit bc9a3a
                    'main_collective': 'mcollective',
Packit bc9a3a
                    'securityprovider': 'psk',
Packit bc9a3a
                    'daemonize': '1',
Packit bc9a3a
                    'factsource': 'yaml',
Packit bc9a3a
                    'direct_addressing': '1',
Packit bc9a3a
                    'plugin.psk': 'unset',
Packit bc9a3a
                    'libdir': '/usr/share/mcollective/plugins',
Packit bc9a3a
                    'identity': '1',
Packit bc9a3a
                },
Packit bc9a3a
            },
Packit bc9a3a
        }
Packit bc9a3a
        expected = cfg['mcollective']['conf']
Packit bc9a3a
Packit bc9a3a
        self.patchUtils(self.tmp)
Packit bc9a3a
        cc_mcollective.configure(cfg['mcollective']['conf'])
Packit bc9a3a
        contents = util.load_file(cc_mcollective.SERVER_CFG, decode=False)
Packit bc9a3a
        contents = configobj.ConfigObj(BytesIO(contents))
Packit bc9a3a
        self.assertEqual(expected, dict(contents))
Packit bc9a3a
Packit bc9a3a
    def test_existing_config_is_saved(self):
Packit bc9a3a
        cfg = {'loglevel': 'warn'}
Packit bc9a3a
        util.write_file(self.server_cfg, STOCK_CONFIG)
Packit bc9a3a
        cc_mcollective.configure(config=cfg, server_cfg=self.server_cfg)
Packit bc9a3a
        self.assertTrue(os.path.exists(self.server_cfg))
Packit bc9a3a
        self.assertTrue(os.path.exists(self.server_cfg + ".old"))
Packit bc9a3a
        self.assertEqual(util.load_file(self.server_cfg + ".old"),
Packit bc9a3a
                         STOCK_CONFIG)
Packit bc9a3a
Packit bc9a3a
    def test_existing_updated(self):
Packit bc9a3a
        cfg = {'loglevel': 'warn'}
Packit bc9a3a
        util.write_file(self.server_cfg, STOCK_CONFIG)
Packit bc9a3a
        cc_mcollective.configure(config=cfg, server_cfg=self.server_cfg)
Packit bc9a3a
        cfgobj = configobj.ConfigObj(self.server_cfg)
Packit bc9a3a
        self.assertEqual(cfg['loglevel'], cfgobj['loglevel'])
Packit bc9a3a
Packit bc9a3a
    def test_certificats_written(self):
Packit bc9a3a
        # check public-cert and private-cert keys in config get written
Packit bc9a3a
        cfg = {'loglevel': 'debug',
Packit bc9a3a
               'public-cert': "this is my public-certificate",
Packit bc9a3a
               'private-cert': "secret private certificate"}
Packit bc9a3a
Packit bc9a3a
        cc_mcollective.configure(
Packit bc9a3a
            config=cfg, server_cfg=self.server_cfg,
Packit bc9a3a
            pricert_file=self.pricert_file, pubcert_file=self.pubcert_file)
Packit bc9a3a
Packit bc9a3a
        found = configobj.ConfigObj(self.server_cfg)
Packit bc9a3a
Packit bc9a3a
        # make sure these didnt get written in
Packit bc9a3a
        self.assertFalse('public-cert' in found)
Packit bc9a3a
        self.assertFalse('private-cert' in found)
Packit bc9a3a
Packit bc9a3a
        # these need updating to the specified paths
Packit bc9a3a
        self.assertEqual(found['plugin.ssl_server_public'], self.pubcert_file)
Packit bc9a3a
        self.assertEqual(found['plugin.ssl_server_private'], self.pricert_file)
Packit bc9a3a
Packit bc9a3a
        # and the security provider should be ssl
Packit bc9a3a
        self.assertEqual(found['securityprovider'], 'ssl')
Packit bc9a3a
Packit bc9a3a
        self.assertEqual(
Packit bc9a3a
            util.load_file(self.pricert_file), cfg['private-cert'])
Packit bc9a3a
        self.assertEqual(
Packit bc9a3a
            util.load_file(self.pubcert_file), cfg['public-cert'])
Packit bc9a3a
Packit bc9a3a
Packit bc9a3a
class TestHandler(t_help.TestCase):
Packit bc9a3a
    def _get_cloud(self, distro):
Packit bc9a3a
        cls = distros.fetch(distro)
Packit bc9a3a
        paths = helpers.Paths({})
Packit bc9a3a
        d = cls(distro, {}, paths)
Packit bc9a3a
        ds = DataSourceNoCloud.DataSourceNoCloud({}, d, paths)
Packit bc9a3a
        cc = cloud.Cloud(ds, paths, {}, d, None)
Packit bc9a3a
        return cc
Packit bc9a3a
Packit bc9a3a
    @t_help.mock.patch("cloudinit.config.cc_mcollective.util")
Packit bc9a3a
    def test_mcollective_install(self, mock_util):
Packit bc9a3a
        cc = self._get_cloud('ubuntu')
Packit bc9a3a
        cc.distro = t_help.mock.MagicMock()
Packit bc9a3a
        mock_util.load_file.return_value = b""
Packit bc9a3a
        mycfg = {'mcollective': {'conf': {'loglevel': 'debug'}}}
Packit bc9a3a
        cc_mcollective.handle('cc_mcollective', mycfg, cc, LOG, [])
Packit bc9a3a
        self.assertTrue(cc.distro.install_packages.called)
Packit bc9a3a
        install_pkg = cc.distro.install_packages.call_args_list[0][0][0]
Packit bc9a3a
        self.assertEqual(install_pkg, ('mcollective',))
Packit bc9a3a
Packit bc9a3a
        self.assertTrue(mock_util.subp.called)
Packit bc9a3a
        self.assertEqual(mock_util.subp.call_args_list[0][0][0],
Packit bc9a3a
                         ['service', 'mcollective', 'restart'])
Packit bc9a3a
Packit bc9a3a
# vi: ts=4 expandtab