diff --git a/src/main/java/jenkins/plugins/logstash/LogstashConfiguration.java b/src/main/java/jenkins/plugins/logstash/LogstashConfiguration.java index 462d9177..25f2f95c 100644 --- a/src/main/java/jenkins/plugins/logstash/LogstashConfiguration.java +++ b/src/main/java/jenkins/plugins/logstash/LogstashConfiguration.java @@ -9,6 +9,7 @@ import edu.umd.cs.findbugs.annotations.CheckForNull; +import hudson.ExtensionList; import hudson.util.Secret; import org.kohsuke.stapler.StaplerRequest; @@ -286,7 +287,7 @@ public boolean configure(StaplerRequest staplerRequest, JSONObject json) throws public static LogstashConfiguration getInstance() { - return GlobalConfiguration.all().get(LogstashConfiguration.class); + return ExtensionList.lookupSingleton(LogstashConfiguration.class); } } diff --git a/src/main/java/jenkins/plugins/logstash/LogstashWriter.java b/src/main/java/jenkins/plugins/logstash/LogstashWriter.java index aad77e3a..5f5e0e04 100644 --- a/src/main/java/jenkins/plugins/logstash/LogstashWriter.java +++ b/src/main/java/jenkins/plugins/logstash/LogstashWriter.java @@ -159,6 +159,10 @@ public boolean isConnectionBroken() { // Method to encapsulate calls for unit-testing LogstashIndexerDao getIndexerDao() { + if (Jenkins.getInstanceOrNull() == null) { + return null; + } + return LogstashConfiguration.getInstance().getIndexerInstance(); } diff --git a/src/test/java/jenkins/plugins/logstash/LogstashIntegrationTest.java b/src/test/java/jenkins/plugins/logstash/LogstashIntegrationTest.java index 7a912cca..6ad8dfab 100644 --- a/src/test/java/jenkins/plugins/logstash/LogstashIntegrationTest.java +++ b/src/test/java/jenkins/plugins/logstash/LogstashIntegrationTest.java @@ -12,8 +12,12 @@ import java.util.ArrayList; import java.util.List; +import hudson.model.labels.LabelAtom; import org.jenkinsci.plugins.envinject.EnvInjectBuildWrapper; import org.jenkinsci.plugins.envinject.EnvInjectJobPropertyInfo; +import org.jenkinsci.plugins.workflow.cps.CpsFlowDefinition; +import org.jenkinsci.plugins.workflow.job.WorkflowJob; +import org.jenkinsci.plugins.workflow.job.WorkflowRun; import org.junit.Before; import org.junit.Rule; import org.junit.Test; @@ -62,6 +66,8 @@ public void setup() throws Exception slave = jenkins.createSlave(); slave.setLabelString("myLabel"); + jenkins.createOnlineSlave(new LabelAtom("test")); + project = jenkins.createFreeStyleProject(); } @@ -221,6 +227,31 @@ public void enableGlobally() throws Exception assertThat(lastLine.getJSONArray("message").get(0).toString(),equalTo("Finished: SUCCESS")); } + @Test + public void enableGloballyOnRemote() throws Exception + { + LogstashConfiguration.getInstance().setEnableGlobally(true); + + WorkflowJob p = jenkins.jenkins.createProject(WorkflowJob.class, "pipelineOnWorkerNode"); + p.setDefinition(new CpsFlowDefinition("node('test') {echo 'foo'}\n", true)); + WorkflowRun build = p.scheduleBuild2(0).get(); + + assertThat(build.getResult(), equalTo(Result.SUCCESS)); + List dataLines = memoryDao.getOutput(); + + assertThat(dataLines.size(), greaterThan(10)); + boolean containsFoo = dataLines.stream() + .anyMatch(line -> line.getString("message").contains("foo")); + assertThat("Expected at least one line to contain 'foo'", containsFoo, is(true)); + JSONObject firstLine = dataLines.get(0); + JSONObject lastLine = dataLines.get(dataLines.size()-1); + JSONObject data = firstLine.getJSONObject("data"); + + assertThat(data.getString("buildHost"),equalTo("Jenkins")); + assertThat(data.getString("buildLabel"),equalTo("master")); + assertThat(lastLine.getJSONArray("message").get(0).toString(),equalTo("Finished: SUCCESS")); + } + @Test public void milliSecondTimestamps() throws Exception {