Пример #1
0
    def test_refresh(self, connector):
        url = 'amqp://localhost'
        descriptor = Mock(
            main=Mock(
                enabled='1',
                threads=4),
            messaging=Mock(
                uuid='x99',
                url='amqp://localhost',
                cacert='ca',
                clientkey='key',
                clientcert='crt',
                heartbeat='8')
        )

        # test
        plugin = Plugin(descriptor, '')
        plugin.refresh()

        # validation
        connector.assert_called_once_with(descriptor.messaging.url)
        connector = connector.return_value
        connector.add.assert_called_once_with()
        self.assertEqual(connector.ssl.ca_certificate, descriptor.messaging.cacert)
        self.assertEqual(connector.ssl.client_key, descriptor.messaging.clientkey)
        self.assertEqual(connector.ssl.client_certificate, descriptor.messaging.clientcert)
        self.assertEqual(connector.ssl.host_validation, descriptor.messaging.host_validation)
Пример #2
0
    def test_refresh(self, connector):
        url = 'amqp://localhost'
        descriptor = Mock(main=Mock(enabled='1', threads=4),
                          messaging=Mock(uuid='x99',
                                         url='amqp://localhost',
                                         cacert='ca',
                                         clientkey='key',
                                         clientcert='crt',
                                         heartbeat='8'))

        # test
        plugin = Plugin(descriptor, '')
        plugin.refresh()

        # validation
        connector.assert_called_once_with(descriptor.messaging.url)
        connector = connector.return_value
        connector.add.assert_called_once_with()
        self.assertEqual(connector.ssl.ca_certificate,
                         descriptor.messaging.cacert)
        self.assertEqual(connector.ssl.client_key,
                         descriptor.messaging.clientkey)
        self.assertEqual(connector.ssl.client_certificate,
                         descriptor.messaging.clientcert)
        self.assertEqual(connector.ssl.host_validation,
                         descriptor.messaging.host_validation)
Пример #3
0
    def test_detach_not_attached(self, model):
        descriptor = Mock(main=Mock(threads=4))

        # test
        plugin = Plugin(descriptor, '')
        plugin.detach()

        # validation
        self.assertFalse(model.called)
Пример #4
0
    def test_detach_not_attached(self, model):
        descriptor = Mock(main=Mock(threads=4))

        # test
        plugin = Plugin(descriptor, '')
        plugin.detach()

        # validation
        self.assertFalse(model.called)
Пример #5
0
    def test_provides(self):
        descriptor = Mock(main=Mock(threads=4))

        # test
        plugin = Plugin(descriptor, '')
        plugin.dispatcher = Mock()
        provides = plugin.provides('Dog')

        # validation
        self.assertEqual(provides, plugin.dispatcher.provides.return_value)
Пример #6
0
    def test_provides(self):
        descriptor = Mock(main=Mock(threads=4))

        # test
        plugin = Plugin(descriptor, '')
        plugin.dispatcher = Mock()
        provides = plugin.provides('Dog')

        # validation
        self.assertEqual(provides, plugin.dispatcher.provides.return_value)
Пример #7
0
    def test_start_already_started(self, scheduler):
        descriptor = Mock(main=Mock(threads=4))
        scheduler.return_value.isAlive.return_value = True

        # test
        plugin = Plugin(descriptor, '')
        plugin.attach = Mock()
        plugin.start()

        # validation
        self.assertFalse(plugin.attach.called)
        self.assertFalse(scheduler.return_value.start.called)
Пример #8
0
    def test_start(self, scheduler):
        descriptor = Mock(main=Mock(threads=4))
        scheduler.return_value.isAlive.return_value = False

        # test
        plugin = Plugin(descriptor, '')
        plugin.attach = Mock()
        plugin.start()

        # validation
        plugin.attach.assert_called_once_with()
        scheduler.return_value.start.assert_called_once_with()
Пример #9
0
    def test_start_already_started(self, scheduler):
        descriptor = Mock(main=Mock(threads=4))
        scheduler.return_value.isAlive.return_value = True

        # test
        plugin = Plugin(descriptor, '')
        plugin.attach = Mock()
        plugin.start()

        # validation
        self.assertFalse(plugin.attach.called)
        self.assertFalse(scheduler.return_value.start.called)
Пример #10
0
    def test_start(self, scheduler):
        descriptor = Mock(main=Mock(threads=4))
        scheduler.return_value.isAlive.return_value = False

        # test
        plugin = Plugin(descriptor, '')
        plugin.attach = Mock()
        plugin.start()

        # validation
        plugin.attach.assert_called_once_with()
        scheduler.return_value.start.assert_called_once_with()
Пример #11
0
    def test_shutdown_not_running(self, pool, scheduler):
        descriptor = Mock(main=Mock(threads=4))
        scheduler.return_value.isAlive.return_value = False

        # test
        plugin = Plugin(descriptor, '')
        plugin.detach = Mock()
        plugin.shutdown(False)

        # validation
        self.assertFalse(plugin.detach.called)
        self.assertFalse(scheduler.return_value.shutdown.called)
        self.assertFalse(scheduler.return_value.join.called)
        self.assertFalse(pool.return_value.shutdown.called)
Пример #12
0
    def test_shutdown(self, pool, scheduler):
        descriptor = Mock(main=Mock(threads=4))
        scheduler.return_value.isAlive.return_value = True

        # test
        plugin = Plugin(descriptor, '')
        plugin.detach = Mock()
        plugin.shutdown(False)

        # validation
        plugin.detach.assert_called_once_with(False)
        scheduler.return_value.shutdown.assert_called_once_with()
        scheduler.return_value.join.assert_called_once_with()
        pool.return_value.shutdown.assert_called_once_with()
Пример #13
0
    def test_detach_no_teardown(self, model):
        descriptor = Mock(main=Mock(threads=4))
        consumer = Mock()

        # test
        plugin = Plugin(descriptor, '')
        plugin.consumer = consumer
        plugin.detach(teardown=False)

        # validation
        consumer.shutdown.assert_called_once_with()
        consumer.join.assert_called_once_with()
        self.assertFalse(model.teardown.called)
        self.assertEqual(plugin.consumer, None)
Пример #14
0
    def test_detach_no_teardown(self, model):
        descriptor = Mock(main=Mock(threads=4))
        consumer = Mock()

        # test
        plugin = Plugin(descriptor, '')
        plugin.consumer = consumer
        plugin.detach(teardown=False)

        # validation
        consumer.shutdown.assert_called_once_with()
        consumer.join.assert_called_once_with()
        self.assertFalse(model.teardown.called)
        self.assertEqual(plugin.consumer, None)
Пример #15
0
    def test_shutdown_not_running(self, pool, scheduler):
        descriptor = Mock(main=Mock(threads=4))
        scheduler.return_value.isAlive.return_value = False

        # test
        plugin = Plugin(descriptor, '')
        plugin.detach = Mock()
        plugin.shutdown(False)

        # validation
        self.assertFalse(plugin.detach.called)
        self.assertFalse(scheduler.return_value.shutdown.called)
        self.assertFalse(scheduler.return_value.join.called)
        self.assertFalse(pool.return_value.shutdown.called)
Пример #16
0
    def test_shutdown(self, pool, scheduler):
        descriptor = Mock(main=Mock(threads=4))
        scheduler.return_value.isAlive.return_value = True

        # test
        plugin = Plugin(descriptor, '')
        plugin.detach = Mock()
        plugin.shutdown(False)

        # validation
        plugin.detach.assert_called_once_with(False)
        scheduler.return_value.shutdown.assert_called_once_with()
        scheduler.return_value.join.assert_called_once_with()
        pool.return_value.shutdown.assert_called_once_with(hard=False)
Пример #17
0
 def changed(cls, path):
     """
     A change in the pulp certificate has been detected.
     When the certificate has been deleted: the connection to the broker is
     terminated by setting the UUID to None.
     When the certificate has been added/updated: the plugin's configuration is
     updated using the pulp configuration; the uuid is updated and the connection
     to the broker is re-established.
     :param path: The changed file (ignored).
     :type path: str
     """
     log.info('changed: %s', path)
     plugin = Plugin.find(__name__)
     bundle = ConsumerX509Bundle()
     consumer_id = bundle.cn()
     if consumer_id:
         scheme = cfg.messaging.scheme
         host = cfg.messaging.host or cfg.server.host
         port = cfg.messaging.port
         url = '%s://%s:%s' % (scheme, host, port)
         plugin_conf = plugin.cfg()
         plugin_conf.messaging.url = url
         plugin_conf.messaging.cacert = cfg.messaging.cacert
         plugin_conf.messaging.clientcert = cfg.messaging.clientcert or \
             os.path.join(cfg.filesystem.id_cert_dir, cfg.filesystem.id_cert_filename)
     plugin.setuuid(consumer_id)
Пример #18
0
    def test_detach(self, model):
        descriptor = Mock(main=Mock(threads=4))
        consumer = Mock()

        # test
        plugin = Plugin(descriptor, '')
        plugin.consumer = consumer
        plugin.detach()

        # validation
        consumer.shutdown.assert_called_once_with()
        consumer.join.assert_called_once_with()
        model.assert_called_with(plugin)
        model = model.return_value
        model.teardown.assert_called_once_with()
        self.assertEqual(plugin.consumer, None)
Пример #19
0
    def test_detach(self, model):
        descriptor = Mock(main=Mock(threads=4))
        consumer = Mock()

        # test
        plugin = Plugin(descriptor, '')
        plugin.consumer = consumer
        plugin.detach()

        # validation
        consumer.shutdown.assert_called_once_with()
        consumer.join.assert_called_once_with()
        model.assert_called_with(plugin)
        model = model.return_value
        model.teardown.assert_called_once_with()
        self.assertEqual(plugin.consumer, None)
Пример #20
0
 def run(self):
     """
     Run actions.
     """
     while not Thread.aborted():
         for plugin in Plugin.all():
             for action in plugin.actions:
                 plugin.pool.run(action)
         sleep(10)
Пример #21
0
 def run(self):
     """
     Run actions.
     """
     while not Thread.aborted():
         for plugin in Plugin.all():
             for action in plugin.actions:
                 plugin.pool.run(action)
         sleep(10)
Пример #22
0
 def test_properties(self, connector, model):
     descriptor = Mock(
         main=Mock(
             enabled='1',
             threads=4,
             latency=0.5,
             forward='a, b, c',
             accept='d, e, f'),
         messaging=Mock(
             uuid='x99',
             url='amqp://localhost')
     )
     plugin = Plugin(descriptor, '')
     plugin.scheduler = Mock()
     # name
     self.assertEqual(plugin.name, descriptor.main.name)
     # cfg
     self.assertEqual(plugin.cfg, descriptor)
     # uuid
     self.assertEqual(plugin.uuid, descriptor.messaging.uuid)
     # latency
     self.assertEqual(plugin.latency, descriptor.main.latency)
     # url
     self.assertEqual(plugin.url, descriptor.messaging.url)
     # enabled
     self.assertTrue(plugin.enabled)
     # connector
     self.assertEqual(plugin.connector, connector.return_value)
     connector.assert_called_once_with(descriptor.messaging.url)
     # queue
     self.assertEqual(plugin.node, model.return_value.node)
     model.assert_called_once_with(plugin)
     # forward
     _list = descriptor.main.forward
     self.assertEqual(
         plugin.forward,
         set([p.strip() for p in _list.split(',')]))
     # accept
     _list = descriptor.main.accept
     self.assertEqual(
         plugin.accept,
         set([p.strip() for p in _list.split(',')]))
     # is_started
     self.assertEqual(plugin.is_started, plugin.scheduler.isAlive.return_value)
Пример #23
0
 def test_properties(self, connector, model):
     descriptor = Mock(main=Mock(enabled='1',
                                 threads=4,
                                 latency=0.5,
                                 forward='a, b, c',
                                 accept='d, e, f'),
                       messaging=Mock(uuid='x99', url='amqp://localhost'))
     plugin = Plugin(descriptor, '')
     plugin.scheduler = Mock()
     # name
     self.assertEqual(plugin.name, descriptor.main.name)
     # cfg
     self.assertEqual(plugin.cfg, descriptor)
     # uuid
     self.assertEqual(plugin.uuid, descriptor.messaging.uuid)
     # latency
     self.assertEqual(plugin.latency, descriptor.main.latency)
     # url
     self.assertEqual(plugin.url, descriptor.messaging.url)
     # enabled
     self.assertTrue(plugin.enabled)
     # connector
     self.assertEqual(plugin.connector, connector.return_value)
     connector.assert_called_once_with(descriptor.messaging.url)
     # queue
     self.assertEqual(plugin.node, model.return_value.node)
     model.assert_called_once_with(plugin)
     # forward
     _list = descriptor.main.forward
     self.assertEqual(plugin.forward,
                      set([p.strip() for p in _list.split(',')]))
     # accept
     _list = descriptor.main.accept
     self.assertEqual(plugin.accept,
                      set([p.strip() for p in _list.split(',')]))
     # is_started
     self.assertEqual(plugin.is_started,
                      plugin.scheduler.isAlive.return_value)
Пример #24
0
 def start(self, block=True):
     """
     Start the agent.
     """
     cfg = AgentConfig()
     for plugin in Plugin.all():
         plugin.start()
     if get_bool(cfg.manager.enabled):
         host = cfg.manager.host
         port = int(cfg.manager.port)
         manager = Manager(host, port)
         manager.start()
     actions = ActionThread()
     actions.start()
     log.info('agent started.')
     if block:
         actions.join(self.WAIT)
Пример #25
0
 def start(self, block=True):
     """
     Start the agent.
     """
     cfg = AgentConfig()
     for plugin in Plugin.all():
         plugin.start()
     if get_bool(cfg.manager.enabled):
         host = cfg.manager.host
         port = int(cfg.manager.port)
         manager = Manager(host, port)
         manager.start()
     actions = ActionThread()
     actions.start()
     log.info('agent started.')
     if block:
         actions.join(self.WAIT)
Пример #26
0
 def help(self):
     s = []
     s.append('Plugins:')
     for p in Plugin.all():
         if not p.enabled():
             continue
         # plugin
         s.append('')
         if p.synonyms:
             s.append(indent('<plugin> %s %s', 2, p.name, p.synonyms))
         else:
             s.append(indent('<plugin> %s', 2, p.name))
         # classes
         s.append(indent('Classes:', 4))
         for n,v in p.dispatcher.classes.items():
             if inspect.ismodule(v):
                 continue
             s.append(indent('<class> %s', 6, n))
             s.append(indent('methods:', 8))
             for n,v in inspect.getmembers(v, inspect.ismethod):
                 fn = v.im_func
                 if not hasattr(fn, 'gofer'):
                     continue
                 s.append(indent(self.__signature(n, fn), 10))
         # functions
         s.append(indent('Functions:', 4))
         for n,v in p.dispatcher.classes.items():
             if not inspect.ismodule(v):
                 continue
             for n,v in inspect.getmembers(v, inspect.isfunction):
                 fn = v
                 if not hasattr(fn, 'gofer'):
                     continue
                 s.append(indent(self.__signature(n, fn), 6))
     s.append('')
     s.append('Actions:')
     for a in self.__actions():
         s.append('  %s %s' % a)
     return '\n'.join(s)
Пример #27
0
    def test_init(self, pool, dispatcher, whiteboard, scheduler, delegate):
        threads = 4
        descriptor = Mock(main=Mock(threads=threads))
        path = '/tmp/path'

        # test
        plugin = Plugin(descriptor, path)

        # validation
        pool.assert_called_once_with(threads)
        dispatcher.assert_called_once_with()
        scheduler.assert_called_once_with(plugin)
        delegate.assert_called_once_with()
        self.assertEqual(plugin.descriptor, descriptor)
        self.assertEqual(plugin.path, path)
        self.assertEqual(plugin.pool, pool.return_value)
        self.assertEqual(plugin.impl, None)
        self.assertEqual(plugin.actions, [])
        self.assertEqual(plugin.dispatcher, dispatcher.return_value)
        self.assertEqual(plugin.whiteboard, whiteboard.return_value)
        self.assertEqual(plugin.scheduler, scheduler.return_value)
        self.assertEqual(plugin.delegate, delegate.return_value)
        self.assertEqual(plugin.authenticator, None)
        self.assertEqual(plugin.consumer, None)
Пример #28
0
    def test_attach(self, pool, model, consumer, node):
        queue = 'test'
        descriptor = Mock(main=Mock(threads=4))
        pool.return_value.run.side_effect = lambda fn: fn()
        model.return_value.queue = queue

        # test
        plugin = Plugin(descriptor, '')
        plugin.authenticator = Mock()
        plugin.detach = Mock()
        plugin.refresh = Mock()
        plugin.attach()

        # validation
        plugin.detach.assert_called_once_with(False)
        model.assert_called_with(plugin)
        model.return_value.setup.assert_called_once_with()
        node.assert_called_once_with(queue)
        consumer.assert_called_once_with(node.return_value, plugin)
        consumer = consumer.return_value
        consumer.start.assert_called_once_with()
        self.assertEqual(consumer.authenticator, plugin.authenticator)
        self.assertEqual(plugin.consumer, consumer)
Пример #29
0
    def test_attach(self, pool, model, consumer, node):
        queue = 'test'
        descriptor = Mock(main=Mock(threads=4))
        pool.return_value.run.side_effect = lambda fn: fn()
        model.return_value.queue = queue

        # test
        plugin = Plugin(descriptor, '')
        plugin.authenticator = Mock()
        plugin.detach = Mock()
        plugin.refresh = Mock()
        plugin.attach()

        # validation
        plugin.detach.assert_called_once_with(False)
        model.assert_called_with(plugin)
        model.return_value.setup.assert_called_once_with()
        node.assert_called_once_with(queue)
        consumer.assert_called_once_with(node.return_value, plugin)
        consumer = consumer.return_value
        consumer.start.assert_called_once_with()
        self.assertEqual(consumer.authenticator, plugin.authenticator)
        self.assertEqual(plugin.consumer, consumer)
Пример #30
0
from gofer.agent.plugin import Plugin
from gofer.pmon import PathMonitor
from gofer.config import Config

try:
    from subscription_manager.identity import ConsumerIdentity
except ImportError:
    from subscription_manager.certlib import ConsumerIdentity

from rhsm.connection import UEPConnection, RemoteServerException, GoneException

from katello.agent.pulp import Dispatcher


# This plugin
plugin = Plugin.find(__name__)

# Path monitoring
path_monitor = None

# Track registration status
registered = False


log = getLogger(__name__)


RHSM_CONFIG_PATH = '/etc/rhsm/rhsm.conf'


@load
Пример #31
0
import sys
sys.path.append('/usr/share/rhsm')

import os
from yum import YumBase
from gofer.decorators import *
from gofer.agent.plugin import Plugin
from gofer.pmon import PathMonitor
from subscription_manager.certlib import ConsumerIdentity
from rhsm.connection import UEPConnection
from logging import getLogger, Logger


log = getLogger(__name__)
plugin = Plugin.find(__name__)
cfg = plugin.cfg()

# plugin exports
package = Plugin.find('package')
Package = package.export('Package')
PackageGroup = package.export('PackageGroup')


def getbool(v):
    """
    Get string bool value.
    @param v: A string.
    @type v: str
    @return: True if v in (TRUE|YES|1)
    @rtype: bool
Пример #32
0
 def hello(self):
     plugin = Plugin.find(__name__)
     log.info('Hello:\n%s', plugin.cfg)
Пример #33
0
 def hello(self):
     plugin = Plugin.find(__name__)
     log.info('Hello:\n%s', plugin.cfg)