Exemplo n.º 1
0
def invoke_notification(obj, event):
    """Event handler for `IQueueExecutedEvent` which invokes the
    `IReportNotifier` adapter.

    """
    config = IMonitorConfigurationSchema(obj)
    if not config.enabled or not len(config.get_receivers()):
        return

    monitor_queue_length(obj, event.queue, config)
    monitor_failed_extractions(obj, event.queue, config)
Exemplo n.º 2
0
def invoke_notification(obj, event):
    """Event handler for `IQueueExecutedEvent` which invokes the
    `IReportNotifier` adapter.

    """
    config = IMonitorConfigurationSchema(obj)
    if not config.enabled or not len(config.get_receivers()):
        return

    amount_of_jobs = event.queue.countJobs()
    if amount_of_jobs >= config.threshold:
        return getAdapter(obj, IMonitorNotifier)(config, event.queue)
Exemplo n.º 3
0
    def test_default_configuration(self):
        self.browser.open(self.config_url)
        config = IMonitorConfigurationSchema(self.portal)

        self.assertFalse(config.enabled)
        self.assertFalse(self.browser.getControl(name='form.enabled').value)

        self.assertEqual(config.get_receivers(), [])
        self.assertEqual(
            self.browser.getControl(name='form.receivers').value,
            '')

        self.assertEqual(config.get_threshold(), 100)
        self.assertEqual(
            self.browser.getControl(name='form.threshold').value,
            '100')
Exemplo n.º 4
0
    def setUp(self):
        super(TestEventhandler, self).setUp()

        self.portal = self.layer['portal']
        setRoles(self.portal, TEST_USER_ID, ['Manager'])
        login(self.portal, TEST_USER_NAME)

        self.folder = self.portal.get(self.portal.invokeFactory(
                'Folder', 'mailing-test', title='Mailing Test Folder'))
        self.queue = IQueue(self.portal)

        mtool = getToolByName(self.portal, 'portal_membership')
        self.user = mtool.getMemberById(TEST_USER_ID)

        self.config = IMonitorConfigurationSchema(self.portal)
        self.config.set_enabled(True)
        self.config.set_receivers_plain('*****@*****.**')

        self.notifier_class = self.stub_interface(IMonitorNotifier)
        self.notifier = self.mock_interface(IMonitorNotifier)
        self.expect(self.notifier_class(self.portal)).result(
            self.notifier)

        provideAdapter(factory=self.notifier_class,
                       provides=IMonitorNotifier,
                       adapts=(IPloneSiteRoot,))
Exemplo n.º 5
0
    def test_change_configuration(self):
        self.browser.open(self.config_url)
        self.browser.getControl(name='form.enabled').value = True
        self.browser.getControl(name='form.receivers').value = '\n'.join((
                '*****@*****.**',
                '*****@*****.**'))
        self.browser.getControl(name='form.threshold').value = '75'

        self.browser.getControl('Save').click()
        self.assertEqual(self.browser.url, self.config_url)
        self.assertIn('Updated on', self.browser.contents)

        config = IMonitorConfigurationSchema(self.portal)
        self.assertTrue(config.enabled)
        self.assertEqual(config.get_receivers(), [
                '*****@*****.**', '*****@*****.**'])
        self.assertEqual(config.threshold, 75)
Exemplo n.º 6
0
class TestEventhandler(MockTestCase):

    layer = MONITOR_FUNCTIONAL_TESTING

    def setUp(self):
        super(TestEventhandler, self).setUp()

        self.portal = self.layer['portal']
        setRoles(self.portal, TEST_USER_ID, ['Manager'])
        login(self.portal, TEST_USER_NAME)

        self.folder = self.portal.get(self.portal.invokeFactory(
                'Folder', 'mailing-test', title='Mailing Test Folder'))
        self.queue = IQueue(self.portal)

        mtool = getToolByName(self.portal, 'portal_membership')
        self.user = mtool.getMemberById(TEST_USER_ID)

        self.config = IMonitorConfigurationSchema(self.portal)
        self.config.set_enabled(True)
        self.config.set_receivers_plain('*****@*****.**')

        self.notifier_class = self.stub_interface(IMonitorNotifier)
        self.notifier = self.mock_interface(IMonitorNotifier)
        self.expect(self.notifier_class(self.portal)).result(
            self.notifier)

        provideAdapter(factory=self.notifier_class,
                       provides=IMonitorNotifier,
                       adapts=(IPloneSiteRoot,))

    def tearDown(self):
        sm = getGlobalSiteManager()
        sm.unregisterAdapter(factory=self.notifier_class,
                             provided=IMonitorNotifier,
                             required=(IPloneSiteRoot,))
        super(TestEventhandler, self).tearDown()

    def stub_current_queue_length(self, amount_of_jobs):
        while self.queue.countJobs() > 0:
            self.queue.popJob()

        for _i in range(amount_of_jobs):
            # Remove acquisition wrapper from "self.user" in order to
            # prevent the following error:
            #   TypeError: Can't pickle objects in acquisition wrappers.
            self.queue.createJob('push', self.folder, aq_base(self.user))

    def test_eventhandler_calls_notifier(self):
        self.config.set_threshold(2)
        self.stub_current_queue_length(3)
        event = self.create_dummy(queue=self.queue)

        self.expect(self.notifier(ANY, ANY))
        self.replay()

        invoke_notification(self.portal, event)

    def test_adapter_called_after_queue_execution(self):
        self.config.set_threshold(2)
        self.stub_current_queue_length(3)

        self.expect(self.notifier(ANY, ANY))
        self.replay()

        self.portal.unrestrictedTraverse('@@publisher.executeQueue')()

    def test_adapter_not_called_when_monitoring_disabled(self):
        self.config.set_threshold(2)
        self.stub_current_queue_length(3)

        self.config.set_enabled(False)

        self.expect(self.notifier(ANY, ANY)).count(0)
        self.replay()

        self.portal.unrestrictedTraverse('@@publisher.executeQueue')()

    def test_adapter_not_called_when_threshold_not_reached(self):
        self.config.set_threshold(10)
        self.stub_current_queue_length(1)

        self.expect(self.notifier(ARGS, KWARGS)).count(0)
        self.replay()

        self.portal.unrestrictedTraverse('@@publisher.executeQueue')()

    def test_adapter_is_called_even_when_publishing_disabled(self):
        self.config.set_threshold(2)
        self.stub_current_queue_length(3)

        config = IConfig(self.portal)
        config.set_publishing_enabled(False)

        self.expect(self.notifier(ARGS, KWARGS))
        self.replay()

        self.portal.unrestrictedTraverse('@@publisher.executeQueue')()