package com.intrbiz.bergamot.worker.runner.nagios;
import static org.hamcrest.MatcherAssert.*;
import static org.hamcrest.Matchers.*;
import java.util.UUID;
import java.util.function.BiConsumer;
import org.junit.Before;
import org.junit.Test;
import com.intrbiz.bergamot.model.message.check.ExecuteCheck;
import com.intrbiz.bergamot.model.message.reading.ReadingParcelMO;
import com.intrbiz.bergamot.model.message.result.ActiveResultMO;
import com.intrbiz.bergamot.model.message.result.ResultMO;
import com.intrbiz.bergamot.queue.key.ReadingKey;
import com.intrbiz.bergamot.queue.key.ResultKey;
import com.intrbiz.bergamot.worker.engine.nagios.NagiosExecutor;
public class TestNagiosRunner
{
private NagiosExecutorTester runner;
/**
* Setup the runner
*/
@Before
public void setup()
{
this.runner = new NagiosExecutorTester();
}
/**
* Helper to create check
*/
protected ExecuteCheck nagiosCheck(String commandName, String commandLine)
{
ExecuteCheck executeCheck = new ExecuteCheck();
executeCheck.setId(UUID.randomUUID());
executeCheck.setCheckType("service");
executeCheck.setCheckId(UUID.randomUUID());
executeCheck.setEngine("nagios");
executeCheck.setName(commandName);
executeCheck.addParameter("command_line", commandLine);
executeCheck.setScheduled(System.currentTimeMillis());
executeCheck.setTimeout(30_000L);
return executeCheck;
}
@Test
public void testAcceptNagiosCheck()
{
ExecuteCheck executeCheck = nagiosCheck("check_dummy", "/usr/lib/nagios/plugins/check_dummy 0 Test");
assertThat(this.runner.accept(executeCheck), is(equalTo(true)));
}
@Test(expected=NullPointerException.class)
public void testDoesNotAcceptNullCheck()
{
assertThat(this.runner.accept(null), is(equalTo(false)));
}
@Test
public void testDummyOkCheck()
{
ExecuteCheck executeCheck = nagiosCheck("check_dummy", "/usr/lib/nagios/plugins/check_dummy 0 Test");
this.runner.test(
executeCheck,
(key, res) -> {
ActiveResultMO result = (ActiveResultMO) res;
assertThat(result, is(not(nullValue())));
assertThat(result.getId(), is(equalTo(executeCheck.getId())));
assertThat(result.getCheckType(), is(equalTo(executeCheck.getCheckType())));
assertThat(result.getCheckId(), is(equalTo(executeCheck.getCheckId())));
assertThat(result.getCheck(), is(equalTo(executeCheck)));
assertThat(result.isOk(), is(equalTo(true)));
assertThat(result.getStatus(), is(equalTo("OK")));
assertThat(result.getOutput(), is(equalTo("OK: Test")));
assertThat(result.getRuntime(), is(greaterThan(0D)));
assertThat(result.getExecuted(), is(not(nullValue())));
assertThat(result.getProcessed(), is(equalTo(0L)));
}
);
}
@Test
public void testDummyWarningCheck()
{
ExecuteCheck executeCheck = nagiosCheck("check_dummy", "/usr/lib/nagios/plugins/check_dummy 1 Test");
this.runner.test(
executeCheck,
(key, res) -> {
ActiveResultMO result = (ActiveResultMO) res;
assertThat(result, is(not(nullValue())));
assertThat(result.getId(), is(equalTo(executeCheck.getId())));
assertThat(result.getCheckType(), is(equalTo(executeCheck.getCheckType())));
assertThat(result.getCheckId(), is(equalTo(executeCheck.getCheckId())));
assertThat(result.getCheck(), is(equalTo(executeCheck)));
assertThat(result.isOk(), is(equalTo(false)));
assertThat(result.getStatus(), is(equalTo("WARNING")));
assertThat(result.getOutput(), is(equalTo("WARNING: Test")));
assertThat(result.getRuntime(), is(greaterThan(0D)));
assertThat(result.getExecuted(), is(not(nullValue())));
assertThat(result.getProcessed(), is(equalTo(0L)));
}
);
}
@Test
public void testDummyCriticalCheck()
{
ExecuteCheck executeCheck = nagiosCheck("check_dummy", "/usr/lib/nagios/plugins/check_dummy 2 Test");
this.runner.test(
executeCheck,
(key, res) -> {
ActiveResultMO result = (ActiveResultMO) res;
assertThat(result, is(not(nullValue())));
assertThat(result.getId(), is(equalTo(executeCheck.getId())));
assertThat(result.getCheckType(), is(equalTo(executeCheck.getCheckType())));
assertThat(result.getCheckId(), is(equalTo(executeCheck.getCheckId())));
assertThat(result.getCheck(), is(equalTo(executeCheck)));
assertThat(result.isOk(), is(equalTo(false)));
assertThat(result.getStatus(), is(equalTo("CRITICAL")));
assertThat(result.getOutput(), is(equalTo("CRITICAL: Test")));
assertThat(result.getRuntime(), is(greaterThan(0D)));
assertThat(result.getExecuted(), is(not(nullValue())));
assertThat(result.getProcessed(), is(equalTo(0L)));
}
);
}
@Test
public void testDummyUnknownCheck()
{
ExecuteCheck executeCheck = nagiosCheck("check_dummy", "/usr/lib/nagios/plugins/check_dummy 3 Test");
this.runner.test(
executeCheck,
(key, res) -> {
ActiveResultMO result = (ActiveResultMO) res;
assertThat(result, is(not(nullValue())));
assertThat(result.getId(), is(equalTo(executeCheck.getId())));
assertThat(result.getCheckType(), is(equalTo(executeCheck.getCheckType())));
assertThat(result.getCheckId(), is(equalTo(executeCheck.getCheckId())));
assertThat(result.getCheck(), is(equalTo(executeCheck)));
assertThat(result.isOk(), is(equalTo(false)));
assertThat(result.getStatus(), is(equalTo("UNKNOWN")));
assertThat(result.getOutput(), is(equalTo("UNKNOWN: Test")));
assertThat(result.getRuntime(), is(greaterThan(0D)));
assertThat(result.getExecuted(), is(not(nullValue())));
assertThat(result.getProcessed(), is(equalTo(0L)));
}
);
}
@Test
public void testMissing()
{
ExecuteCheck executeCheck = nagiosCheck("check_dummy", "/usr/lib/nagios/plugins/check_missing");
this.runner.test(
executeCheck,
(key, res) -> {
ActiveResultMO result = (ActiveResultMO) res;
assertThat(result, is(not(nullValue())));
assertThat(result.getId(), is(equalTo(executeCheck.getId())));
assertThat(result.getCheckType(), is(equalTo(executeCheck.getCheckType())));
assertThat(result.getCheckId(), is(equalTo(executeCheck.getCheckId())));
assertThat(result.getCheck(), is(equalTo(executeCheck)));
assertThat(result.isOk(), is(equalTo(false)));
assertThat(result.getStatus(), is(equalTo("ERROR")));
assertThat(result.getOutput(), is(not(nullValue())));
assertThat(result.getRuntime(), is(equalTo(0D)));
assertThat(result.getExecuted(), is(not(nullValue())));
assertThat(result.getProcessed(), is(equalTo(0L)));
}
);
}
/*@Test
public void testFailingNRPE()
{
// deliberately wrong port number
ExecuteCheck executeCheck = nagiosCheck("check_nrpe", "/usr/lib/nagios/plugins/check_nrpe -H 127.0.0.1 -p 35666 -t 15 -c check_load");
this.runner.test(
executeCheck,
(key, res) -> {
ActiveResultMO result = (ActiveResultMO) res;
assertThat(result, is(not(nullValue())));
assertThat(result.getId(), is(equalTo(executeCheck.getId())));
assertThat(result.getCheckType(), is(equalTo(executeCheck.getCheckType())));
assertThat(result.getCheckId(), is(equalTo(executeCheck.getCheckId())));
assertThat(result.getCheck(), is(equalTo(executeCheck)));
assertThat(result.isOk(), is(equalTo(false)));
assertThat(result.getStatus(), equalTo("ERROR"));
assertThat(result.getOutput(), is(not(nullValue())));
assertThat(result.getRuntime(), is(greaterThan(0D)));
assertThat(result.getExecuted(), is(not(nullValue())));
assertThat(result.getProcessed(), is(equalTo(0L)));
}
);
}*/
/*@Test
public void testNRPE()
{
ExecuteCheck executeCheck = nagiosCheck("check_nrpe", "/usr/lib/nagios/plugins/check_nrpe -H 127.0.0.1 -t 15 -c check_load");
this.runner.test(
executeCheck,
(key, res) -> {
ActiveResultMO result = (ActiveResultMO) res;
assertThat(result, is(not(nullValue())));
assertThat(result.getId(), is(equalTo(executeCheck.getId())));
assertThat(result.getCheckType(), is(equalTo(executeCheck.getCheckType())));
assertThat(result.getCheckId(), is(equalTo(executeCheck.getCheckId())));
assertThat(result.getCheck(), is(equalTo(executeCheck)));
assertThat(result.isOk(), is(equalTo(true)));
assertThat(result.getStatus(), is(equalTo("OK")));
assertThat(result.getOutput(), is(not(nullValue())));
assertThat(result.getRuntime(), is(greaterThan(0D)));
assertThat(result.getExecuted(), is(not(nullValue())));
assertThat(result.getProcessed(), is(equalTo(0L)));
}
);
}*/
private static class NagiosExecutorTester extends NagiosExecutor
{
private BiConsumer<ResultKey, ResultMO> onResult;
private BiConsumer<ReadingKey, ReadingParcelMO> onReading;
public void setOnResult(BiConsumer<ResultKey, ResultMO> onResult)
{
this.onResult = onResult;
}
public void setOnReading(BiConsumer<ReadingKey, ReadingParcelMO> onReading)
{
this.onReading = onReading;
}
@Override
public void publishReading(ReadingKey key, ReadingParcelMO readingParcelMO)
{
if (this.onReading != null) this.onReading.accept(key, readingParcelMO);
}
@Override
public void publishResult(ResultKey key, ResultMO resultMO)
{
if (this.onResult != null) this.onResult.accept(key, resultMO);
}
public void test(ExecuteCheck check, BiConsumer<ResultKey, ResultMO> onResult, BiConsumer<ReadingKey, ReadingParcelMO> onReading)
{
this.setOnResult(onResult);
this.setOnReading(onReading);
this.execute(check);
}
public void test(ExecuteCheck check, BiConsumer<ResultKey, ResultMO> onResult)
{
this.test(check, onResult, null);
}
}
}