Current File : /home/jvzmxxx/wiki1/extensions/EventLogging/server/tests/test_handlers.py
# -*- coding: utf-8 -*-
"""
  eventlogging unit tests
  ~~~~~~~~~~~~~~~~~~~~~~~

  This module contains tests for :module:`eventlogging.handlers`.

"""
from __future__ import unicode_literals

import os
import unittest

import eventlogging
import eventlogging.handlers
import eventlogging.factory


def echo_writer(uri, **kwargs):
    values = []
    while 1:
        value = (yield values)
        values.append(value)


def repeater(uri, value, **kwargs):
    while 1:
        yield value


class HandlerFactoryTestCase(unittest.TestCase):
    """Test case for URI-based reader/writer factories."""

    def setUp(self):
        """Register test handlers."""
        eventlogging.writes('test')(echo_writer)
        eventlogging.reads('test')(repeater)

    def tearDown(self):
        """Unregister test handlers."""
        eventlogging.factory._writers.pop('test')
        eventlogging.factory._readers.pop('test')

    def test_get_writer(self):
        """``get_writer`` returns a scheme-appropriate primed coroutine."""
        writer = eventlogging.get_writer('test://localhost')
        self.assertEqual(writer.send(123), [123])

    def test_get_reader(self):
        """``get_reader`` returns the right generator for the URI scheme."""
        reader = eventlogging.get_reader('test://localhost/?value=secret')
        self.assertEqual(next(reader), 'secret')


class PluginTestCase(unittest.TestCase):
    """Test case for the plug-in loader."""

    def setUp(self):
        """Determine path to mock plugin directory."""
        script_path = os.path.dirname(os.path.abspath(__file__))
        self.plugin_path = os.path.join(script_path, 'plugins')

    def test_load_plugins(self):
        """`get_plugins` loads plug-ins from an arbitrary path."""
        eventlogging.handlers.load_plugins(self.plugin_path)
        reader = eventlogging.get_reader('mock://localhost')
        self.assertEqual(next(reader), 'value generated by plug-in')