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)
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)
def test_detach_not_attached(self, model): descriptor = Mock(main=Mock(threads=4)) # test plugin = Plugin(descriptor, '') plugin.detach() # validation self.assertFalse(model.called)
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)
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)
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()
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)
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()
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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
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
def hello(self): plugin = Plugin.find(__name__) log.info('Hello:\n%s', plugin.cfg)