Ejemplo n.º 1
0
    def test_validate_created_plugin(self):
        with pytest.raises(smoker_exceptions.InvalidConfiguration) as exc_info:
            params = dict(self.test_params_default, **{'Timeout': 0})
            server_plugins.Plugin(name=self.test_plugin_name, params=params)
        assert 'Timeout parameter can\'t be 0' in repr(exc_info.value)

        with pytest.raises(smoker_exceptions.InvalidConfiguration) as exc_info:
            params = dict(self.test_params_default, **{'Command': None})
            server_plugins.Plugin(name=self.test_plugin_name, params=params)
        assert 'Command or Module parameter has to be set' in repr(
            exc_info.value)

        with pytest.raises(smoker_exceptions.InvalidConfiguration) as exc_info:
            test_params = {
                'Command': 'hostname -f',
                'Module': 'server_plugins.hostname'
            }
            params = dict(self.test_params_default, **test_params)
            server_plugins.Plugin(name=self.test_plugin_name, params=params)
        expected = 'Command and Module parameters cannot be set together'
        assert expected in repr(exc_info.value)

        with pytest.raises(smoker_exceptions.InvalidConfiguration) as exc_info:
            test_params = {
                'Command': None,
                'Parser': 'server_plugins.hostnameparser',
                'Module': 'server_plugins.hostname'
            }
            params = dict(self.test_params_default, **test_params)
            server_plugins.Plugin(name=self.test_plugin_name, params=params)
        expected = 'Parser can be used only with Command parameter'
        assert expected in repr(exc_info.value)
Ejemplo n.º 2
0
 def test_plugin_should_not_be_run_without_interval_parameter(self):
     plugin = server_plugins.Plugin(name=self.test_plugin_name,
                                    params=self.test_params_default)
     assert not plugin.next_run
     plugin.forced = False
     plugin.run()
     time.sleep(0.5)
     assert not plugin.current_run
Ejemplo n.º 3
0
    def test_schedule_run_with_interval(self):
        params = dict(self.test_params_default, **{'Interval': 15})
        plugin = server_plugins.Plugin(name=self.test_plugin_name,
                                       params=params)

        delta = (plugin.next_run - datetime.datetime.now())
        total_seconds = delta.seconds + float(delta.microseconds) / 1000000
        assert round(total_seconds, 0) == plugin.params['Interval']
Ejemplo n.º 4
0
 def test_run_plugin_with_interval(self):
     params = dict(self.test_params_default, **{'Interval': 2})
     plugin = server_plugins.Plugin(name=self.test_plugin_name,
                                    params=params)
     time.sleep(2.5)
     assert not plugin.current_run
     plugin.run()
     time.sleep(0.5)
     assert plugin.current_run
     assert type(plugin.current_run).__name__ == 'PluginWorker'
Ejemplo n.º 5
0
 def test_force_to_run_plugin_without_interval_parameter(self):
     plugin = server_plugins.Plugin(name=self.test_plugin_name,
                                    params=self.test_params_default)
     plugin.forced = True
     plugin.run()
     time.sleep(0.5)
     assert plugin.current_run
     assert type(plugin.current_run).__name__ == 'PluginWorker'
     assert not plugin.next_run
     assert plugin.forced
Ejemplo n.º 6
0
    def test_history_of_collect_new_result(self):
        params = dict(self.test_params_default, **{'History': 5})
        plugin = server_plugins.Plugin(name=self.test_plugin_name,
                                       params=params)
        for n in range(7):
            plugin.forced = True
            plugin.run()
            time.sleep(0.5)
            plugin.collect_new_result()

        assert len(plugin.result) == params['History']
        assert plugin.forced_result == plugin.result[-1]
Ejemplo n.º 7
0
 def test_force_plugin_to_run_and_collect_new_result(self):
     plugin = server_plugins.Plugin(name=self.test_plugin_name,
                                    params=self.test_params_default)
     plugin.forced = True
     plugin.run()
     time.sleep(0.5)
     assert not plugin.get_last_result()
     plugin.collect_new_result()
     # plugin.force should switch to False after result is collected
     assert not plugin.forced
     result = plugin.forced_result
     assert 'status' in result and result['status'] == 'OK'
     assert 'forced' in result and result['forced']
Ejemplo n.º 8
0
    def test_interval_run_plugin_and_collect_new_result(self):
        params = dict(self.test_params_default, **{'Interval': 2})
        plugin = server_plugins.Plugin(name=self.test_plugin_name,
                                       params=params)
        time.sleep(2.5)
        plugin.run()
        time.sleep(0.5)

        assert not plugin.get_last_result()
        plugin.collect_new_result()
        result = plugin.get_last_result()
        assert 'status' in result and result['status'] == 'OK'
        assert 'forced' in result and not result['forced']
Ejemplo n.º 9
0
    def test_force_to_run_plugin_with_interval_parameter(self):
        # should not schedule next_run
        params = dict(self.test_params_default, **{'Interval': 2})
        plugin = server_plugins.Plugin(name=self.test_plugin_name,
                                       params=params)
        n = plugin.next_run
        plugin.forced = True

        plugin.run()
        time.sleep(0.5)
        assert plugin.current_run
        assert type(plugin.current_run).__name__ == 'PluginWorker'
        assert n == plugin.next_run
        assert plugin.forced
Ejemplo n.º 10
0
class TestPlugin(object):
    """Unit tests for the Plugin class"""

    test_params_default = {
        'Command': 'hostname -f',
        'Module': None,
        'Parser': None,
        'Timeout': 180,
    }
    test_plugin_name = 'hostname'
    plugin = server_plugins.Plugin(name=test_plugin_name,
                                   params=test_params_default)

    def test_create_plugin_test_params_default(self):
        expected_params = {
            'Command': 'hostname -f',
            'Module': None,
            'Parser': None,
            'Interval': 0,
            'Timeout': 180,
            'History': 10,
            'uid': 'default',
            'gid': 'default',
            'Template': None,
            'Action': None,
        }
        assert self.plugin.params == expected_params

    def test_validate_created_plugin(self):
        with pytest.raises(smoker_exceptions.InvalidConfiguration) as exc_info:
            params = dict(self.test_params_default, **{'Timeout': 0})
            server_plugins.Plugin(name=self.test_plugin_name, params=params)
        assert 'Timeout parameter can\'t be 0' in repr(exc_info.value)

        with pytest.raises(smoker_exceptions.InvalidConfiguration) as exc_info:
            params = dict(self.test_params_default, **{'Command': None})
            server_plugins.Plugin(name=self.test_plugin_name, params=params)
        assert 'Command or Module parameter has to be set' in repr(
            exc_info.value)

        with pytest.raises(smoker_exceptions.InvalidConfiguration) as exc_info:
            test_params = {
                'Command': 'hostname -f',
                'Module': 'server_plugins.hostname'
            }
            params = dict(self.test_params_default, **test_params)
            server_plugins.Plugin(name=self.test_plugin_name, params=params)
        expected = 'Command and Module parameters cannot be set together'
        assert expected in repr(exc_info.value)

        with pytest.raises(smoker_exceptions.InvalidConfiguration) as exc_info:
            test_params = {
                'Command': None,
                'Parser': 'server_plugins.hostnameparser',
                'Module': 'server_plugins.hostname'
            }
            params = dict(self.test_params_default, **test_params)
            server_plugins.Plugin(name=self.test_plugin_name, params=params)
        expected = 'Parser can be used only with Command parameter'
        assert expected in repr(exc_info.value)

    def test_schedule_run_with_time(self):
        next_run = (datetime.datetime.now() + datetime.timedelta(seconds=3))
        print(type(next_run))
        self.plugin.schedule_run(time=next_run)
        assert self.plugin.next_run == next_run

    def test_schedule_run_with_invalid_time_format(self):
        with pytest.raises(smoker_exceptions.InvalidArgument) as exc_info:
            self.plugin.schedule_run(time=15)
        expected = 'Parameter time has to be an instance of datetime object'
        assert expected in repr(exc_info.value)

        with pytest.raises(smoker_exceptions.InvalidArgument) as exc_info:
            self.plugin.schedule_run(time=time.ctime())
        expected = 'Parameter time has to be an instance of datetime object'
        assert expected in repr(exc_info.value)

    def test_schedule_run_now(self):
        self.plugin.schedule_run(now=True)
        delta = (datetime.datetime.now() - self.plugin.next_run)
        total_seconds = delta.seconds + float(delta.microseconds) / 1000000
        assert round(total_seconds, 0) == 0

    def test_schedule_run_with_interval(self):
        params = dict(self.test_params_default, **{'Interval': 15})
        plugin = server_plugins.Plugin(name=self.test_plugin_name,
                                       params=params)

        delta = (plugin.next_run - datetime.datetime.now())
        total_seconds = delta.seconds + float(delta.microseconds) / 1000000
        assert round(total_seconds, 0) == plugin.params['Interval']

    def test_force_to_run_plugin_without_interval_parameter(self):
        plugin = server_plugins.Plugin(name=self.test_plugin_name,
                                       params=self.test_params_default)
        plugin.forced = True
        plugin.run()
        time.sleep(0.5)
        assert plugin.current_run
        assert type(plugin.current_run).__name__ == 'PluginWorker'
        assert not plugin.next_run
        assert plugin.forced

    def test_force_to_run_plugin_with_interval_parameter(self):
        # should not schedule next_run
        params = dict(self.test_params_default, **{'Interval': 2})
        plugin = server_plugins.Plugin(name=self.test_plugin_name,
                                       params=params)
        n = plugin.next_run
        plugin.forced = True

        plugin.run()
        time.sleep(0.5)
        assert plugin.current_run
        assert type(plugin.current_run).__name__ == 'PluginWorker'
        assert n == plugin.next_run
        assert plugin.forced

    def test_run_plugin_with_interval(self):
        params = dict(self.test_params_default, **{'Interval': 2})
        plugin = server_plugins.Plugin(name=self.test_plugin_name,
                                       params=params)
        time.sleep(2.5)
        assert not plugin.current_run
        plugin.run()
        time.sleep(0.5)
        assert plugin.current_run
        assert type(plugin.current_run).__name__ == 'PluginWorker'

    def test_run_plugin_with_interval_should_schedule_next_run(self):
        params = dict(self.test_params_default, **{'Interval': 2})
        plugin = server_plugins.Plugin(name=self.test_plugin_name,
                                       params=params)
        time.sleep(2.5)
        plugin.run()
        delta = (plugin.next_run - datetime.datetime.now())
        total_seconds = delta.seconds + float(delta.microseconds) / 1000000
        assert round(total_seconds, 0) == plugin.params['Interval']

    def test_plugin_should_not_be_run_without_interval_parameter(self):
        plugin = server_plugins.Plugin(name=self.test_plugin_name,
                                       params=self.test_params_default)
        assert not plugin.next_run
        plugin.forced = False
        plugin.run()
        time.sleep(0.5)
        assert not plugin.current_run

    def test_interval_run_plugin_and_collect_new_result(self):
        params = dict(self.test_params_default, **{'Interval': 2})
        plugin = server_plugins.Plugin(name=self.test_plugin_name,
                                       params=params)
        time.sleep(2.5)
        plugin.run()
        time.sleep(0.5)

        assert not plugin.get_last_result()
        plugin.collect_new_result()
        result = plugin.get_last_result()
        assert 'status' in result and result['status'] == 'OK'
        assert 'forced' in result and not result['forced']

    def test_force_plugin_to_run_and_collect_new_result(self):
        plugin = server_plugins.Plugin(name=self.test_plugin_name,
                                       params=self.test_params_default)
        plugin.forced = True
        plugin.run()
        time.sleep(0.5)
        assert not plugin.get_last_result()
        plugin.collect_new_result()
        # plugin.force should switch to False after result is collected
        assert not plugin.forced
        result = plugin.forced_result
        assert 'status' in result and result['status'] == 'OK'
        assert 'forced' in result and result['forced']

    def test_history_of_collect_new_result(self):
        params = dict(self.test_params_default, **{'History': 5})
        plugin = server_plugins.Plugin(name=self.test_plugin_name,
                                       params=params)
        for n in range(7):
            plugin.forced = True
            plugin.run()
            time.sleep(0.5)
            plugin.collect_new_result()

        assert len(plugin.result) == params['History']
        assert plugin.forced_result == plugin.result[-1]