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_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_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_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_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_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]
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_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_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
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]