Exemplo n.º 1
0
def test_emission_queuing():
    plugin.instantiate(config["plugin"], None)
    queue_tester = plugin.get_instance("queue_tester")
    emit_store1 = plugin.get_output("emit_store1", None)
    emit_store2 = plugin.get_output("emit_store2", None)

    # daemon handles this, do it manually here since
    # we are not starting the daemon
    queue_tester._emit = [emit_store1, emit_store2]

    message = queue_tester.probe()
    queue_tester.queue_emission(message)

    queue_tester.send_emission()
    assert emit_store1.store[0] == message
    assert emit_store2.store == []

    queue_tester.send_emission()
    assert emit_store1.store[0] == message
    assert len(emit_store1.store) == 1
    assert emit_store2.store[0] == message
    assert len(emit_store2.store) == 1
    assert queue_tester._emit_queue.qsize() == 0

    message = queue_tester.probe()
    queue_tester.queue_emission(message)
    queue_tester.emit_all()
    assert len(emit_store1.store) == 2
    assert len(emit_store2.store) == 2
    assert queue_tester._emit_queue.qsize() == 0
Exemplo n.º 2
0
    def __init__(self, config=None, config_dir=None):
        if config:
            if not config.meta:
                raise ValueError(
                    "no config specified, please use specify a home directory")
            self.config = config
        elif config_dir:
            self.config = vaping.Config(read=config_dir)
        else:
            raise ValueError(
                "no config specified, please use specify a home directory")

        self.joins = []
        self._logger = None
        self.plugin_context = PluginContext(self.config)

        vcfg = self.config.get('vaping', {})

        # change to home for working dir
        self.home_dir = os.path.abspath(self.config.meta['config_dir'])
        os.chdir(self.home_dir)

        # instantiate all defined plugins
        # TODO remove and let them lazy init?
        plugins = self.config.get('plugins', None)
        if not plugins:
            raise ValueError('no plugins specified')

        plugin.instantiate(self.config['plugins'], self.plugin_context)

        # TODO move to daemon
        pidname = vcfg.get('pidfile', 'vaping.pid')
        self.pidfile = pidfile.PidFile(pidname=pidname, piddir=self.home_dir)
Exemplo n.º 3
0
Arquivo: daemon.py Projeto: 20c/vaping
    def __init__(self, config=None, config_dir=None):
        """
        must either pass config as a dict or vaping.config.Config
        or config_dir as a path to where the config dir is located
        """

        self.joins = []
        self._logger = None

        self.load_config(config, config_dir)
        self.validate_config_data(self.config.data)

        # configure vaping logging
        if "logging" in self.config:
            logging.config.dictConfig(self.config.get("logging"))

        self.plugin_context = PluginContext(self.config)

        # GET VAPING PART OF CONFIG
        vcfg = self.config.get("vaping", None)
        if not vcfg:
            vcfg = dict()

        # GET HOME_DIR PART OF CONFIG
        # get either home_dir from config, or use config_dir
        self.home_dir = vcfg.get("home_dir", None)

        if not self.home_dir:
            # self.home_dir = self.config.meta["config_dir"]
            self.home_dir = self.config["config_dir"]

        self.home_dir = os.path.abspath(self.home_dir)

        if not os.path.exists(self.home_dir):
            raise ValueError(
                f"home directory '{self.home_dir}' does not exist")

        if not os.access(self.home_dir, os.W_OK):
            raise ValueError(
                f"home directory '{self.home_dir}' is not writable")

        # change to home for working dir
        os.chdir(self.home_dir)

        # instantiate all defined plugins
        # TODO remove and let them lazy init?
        plugins = self.config.get("plugins", None)
        if not plugins:
            raise ValueError("no plugins specified")

        plugin.instantiate(self.config["plugins"], self.plugin_context)

        # check that probes don't name clash with plugins
        for probe in self.config.get("probes", []):
            if plugin.exists(probe["name"]):
                raise ValueError(
                    "probes may not share names with plugins ({})".format(
                        probe["name"]))

        self.pidname = vcfg.get("pidfile", "vaping.pid")
Exemplo n.º 4
0
def test_emission_queuing():
    plugin.instantiate(config["plugin"], None)
    queue_tester = plugin.get_instance("queue_tester")
    emit_store1 = plugin.get_output("emit_store1", None)
    emit_store2 = plugin.get_output("emit_store2", None)

    # daemon handles this, do it manually here since
    # we are not starting the daemon
    queue_tester._emit = [emit_store1, emit_store2]

    message = queue_tester.probe()
    queue_tester.queue_emission(message)

    queue_tester.send_emission()
    assert emit_store1.store[0] == message
    assert emit_store2.store == []

    queue_tester.send_emission()
    assert emit_store1.store[0] == message
    assert len(emit_store1.store) == 1
    assert emit_store2.store[0] == message
    assert len(emit_store2.store) == 1
    assert queue_tester._emit_queue.qsize() == 0

    message = queue_tester.probe()
    queue_tester.queue_emission(message)
    queue_tester.emit_all()
    assert len(emit_store1.store) == 2
    assert len(emit_store2.store) == 2
    assert queue_tester._emit_queue.qsize() == 0
Exemplo n.º 5
0
    def __init__(self, config=None, config_dir=None):
        """
        must either pass config as a dict or vaping.config.Config
        or config_dir as a path to where the config dir is located
        """
        if config:
            if isinstance(config, dict):
                self.config = vaping.Config(data=config)
            else:
                if not config.meta:
                    raise ValueError("config was not specified or empty")
                self.config = config
        elif config_dir:
            self.config = vaping.Config(read=config_dir)
        else:
            raise ValueError("config was not specified or empty")

        self.joins = []
        self._logger = None
        self.plugin_context = PluginContext(self.config)

        vcfg = self.config.get('vaping', None)
        if not vcfg:
            vcfg = dict()

        # get either home_dir from config, or use config_dir
        self.home_dir = vcfg.get('home_dir', None)
        if not self.home_dir:
            self.home_dir = self.config.meta['config_dir']

        if not os.path.exists(self.home_dir):
            raise ValueError("home directory '{}' does not exist".format(
                self.home_dir))

        if not os.access(self.home_dir, os.W_OK):
            raise ValueError("home directory '{}' is not writable".format(
                self.home_dir))

        # change to home for working dir
        os.chdir(self.home_dir)

        # instantiate all defined plugins
        # TODO remove and let them lazy init?
        plugins = self.config.get('plugins', None)
        if not plugins:
            raise ValueError('no plugins specified')

        plugin.instantiate(self.config['plugins'], self.plugin_context)

        # check that probes don't name clash with plugins
        for probe in self.config.get('probes', []):
            if plugin.exists(probe["name"]):
                raise ValueError(
                    "probes may not share names with plugins ({})".format(
                        probe["name"]))

        # TODO move to daemon
        pidname = vcfg.get('pidfile', 'vaping.pid')
        self.pidfile = pidfile.PidFile(pidname=pidname, piddir=self.home_dir)
Exemplo n.º 6
0
Arquivo: daemon.py Projeto: 20c/vaping
    def __init__(self, config=None, config_dir=None):
        """
        must either pass config as a dict or vaping.config.Config
        or config_dir as a path to where the config dir is located
        """
        if config:
            if isinstance(config, dict):
                self.config = vaping.Config(data=config)
            else:
                if not config.meta:
                    raise ValueError("config was not specified or empty")
                self.config = config
        elif config_dir:
            self.config = vaping.Config(read=config_dir)
        else:
            raise ValueError("config was not specified or empty")

        self.joins = []
        self._logger = None
        self.plugin_context = PluginContext(self.config)

        vcfg = self.config.get('vaping', None)
        if not vcfg:
            vcfg = dict()

        # get either home_dir from config, or use config_dir
        self.home_dir = vcfg.get('home_dir', None)
        if not self.home_dir:
            self.home_dir = self.config.meta['config_dir']

        if not os.path.exists(self.home_dir):
            raise ValueError("home directory '{}' does not exist".format(self.home_dir))

        if not os.access(self.home_dir, os.W_OK):
            raise ValueError("home directory '{}' is not writable".format(self.home_dir))

        # change to home for working dir
        os.chdir(self.home_dir)

        # instantiate all defined plugins
        # TODO remove and let them lazy init?
        plugins = self.config.get('plugins', None)
        if not plugins:
            raise ValueError('no plugins specified')

        plugin.instantiate(self.config['plugins'], self.plugin_context)

        # check that probes don't name clash with plugins
        for probe in self.config.get('probes', []):
            if plugin.exists(probe["name"]):
                raise ValueError("probes may not share names with plugins ({})".format(probe["name"]))

        # TODO move to daemon
        pidname = vcfg.get('pidfile', 'vaping.pid')
        self.pidfile = pidfile.PidFile(pidname=pidname, piddir=self.home_dir)
Exemplo n.º 7
0
def test_emission_queuing():

    loop = asyncio.new_event_loop()
    asyncio.set_event_loop(loop)

    plugin.instantiate(config["plugin"], None)
    queue_tester = plugin.get_instance("queue_tester")
    emit_store1 = plugin.get_output("emit_store1", None)
    emit_store2 = plugin.get_output("emit_store2", None)

    # plugins = [queue_tester, emit_store1, emit_store2]

    # daemon handles this, do it manually here since
    # we are not starting the daemon
    queue_tester._emit = [emit_store1, emit_store2]

    message = queue_tester.probe()
    asyncio.run(queue_tester.queue_emission(message))

    asyncio.run(queue_tester.send_emission())
    assert emit_store1.store[0] == message
    assert emit_store2.store == []

    asyncio.run(queue_tester.send_emission())
    assert emit_store1.store[0] == message
    assert len(emit_store1.store) == 1
    assert emit_store2.store[0] == message
    assert len(emit_store2.store) == 1
    assert queue_tester._emit_queue.qsize() == 0

    message = queue_tester.probe()
    asyncio.run(queue_tester.queue_emission(message))
    asyncio.run(queue_tester.emit_all())
    assert len(emit_store1.store) == 2
    assert len(emit_store2.store) == 2
    assert queue_tester._emit_queue.qsize() == 0

    loop.close()
Exemplo n.º 8
0
def test_plugin_instance():
    with pytest.raises(ValueError):
        plugin.new_plugin({}, None)

    with pytest.raises(ValueError):
        plugin.get_instance('nonexistant', None)
    with pytest.raises(ValueError):
        plugin.get_instance(['unparsable'], None)

    plugin.instantiate(config['plugin'], None)
    for each in config['plugin']:
        if 'name' not in each:
            continue
        obj = plugin.get_instance(each['name'], None)
        for k, v in list(each.items()):
            assert v == obj.config[k]

    obj = plugin.get_instance(anon_config, None)
    assert obj.config == anon_config

    # copy ctor
    obj = plugin.get_instance('fancy_copy', None)
    assert 'reeb' == obj.config['str0']

    obj = plugin.get_instance({'fancy_copy': {'var0': 'luggage'}}, None)
    assert 'reeb' == obj.config['str0']

    with pytest.raises(TypeError):
        plugin.get_probe('emit0', None)
    assert None != plugin.get_probe('probe1', None)
    assert not hasattr(plugin.get_probe('probe1', None), 'emit')

    with pytest.raises(TypeError):
        plugin.get_output('emit_abc', None)
    with pytest.raises(TypeError):
        plugin.get_output('probe1', None)
    assert None != plugin.get_output('emit0', None)
Exemplo n.º 9
0
def test_plugin_instance():
    with pytest.raises(ValueError):
        plugin.new_plugin({}, None)

    with pytest.raises(ValueError):
        plugin.get_instance("nonexistant", None)
    with pytest.raises(ValueError):
        plugin.get_instance(["unparsable"], None)

    plugin.instantiate(config["plugin"], None)
    for each in config["plugin"]:
        if "name" not in each:
            continue
        obj = plugin.get_instance(each["name"], None)
        for k, v in list(each.items()):
            assert v == obj.config[k]

    obj = plugin.get_instance(anon_config, None)
    assert obj.config == anon_config

    # copy ctor
    obj = plugin.get_instance("fancy_copy", None)
    assert "reeb" == obj.config["str0"]

    obj = plugin.get_instance({"fancy_copy": {"var0": "luggage"}}, None)
    assert "reeb" == obj.config["str0"]

    with pytest.raises(TypeError):
        plugin.get_probe("emit0", None)
    assert plugin.get_probe("probe1", None) is not None
    assert not hasattr(plugin.get_probe("probe1", None), "emit")

    with pytest.raises(TypeError):
        plugin.get_output("emit_abc", None)
    with pytest.raises(TypeError):
        plugin.get_output("probe1", None)
    assert plugin.get_output("emit0", None) is not None
Exemplo n.º 10
0
def test_plugin_instance():
    with pytest.raises(ValueError):
        plugin.new_plugin({}, None)

    with pytest.raises(ValueError):
        plugin.get_instance('nonexistant', None)
    with pytest.raises(ValueError):
        plugin.get_instance(['unparsable'], None)

    plugin.instantiate(config['plugin'], None)
    for each in config['plugin']:
        if 'name' not in each:
            continue
        obj = plugin.get_instance(each['name'], None)
        for k,v in list(each.items()):
            assert v == obj.config[k]

    obj = plugin.get_instance(anon_config, None)
    assert obj.config == anon_config

    # copy ctor
    obj = plugin.get_instance('fancy_copy', None)
    assert 'reeb' == obj.config['str0']

    obj = plugin.get_instance({'fancy_copy': {'var0': 'luggage'}}, None)
    assert 'reeb' == obj.config['str0']

    with pytest.raises(TypeError):
        plugin.get_probe('emit0', None)
    assert None != plugin.get_probe('probe1', None)
    assert not hasattr(plugin.get_probe('probe1', None), 'emit')

    with pytest.raises(TypeError):
        plugin.get_output('emit_abc', None)
    with pytest.raises(TypeError):
        plugin.get_output('probe1', None)
    assert None != plugin.get_output('emit0', None)