From f9f1e2de5d8d836dd1f91994154d9db1bdce6773 Mon Sep 17 00:00:00 2001 From: Jorge Marin Date: Tue, 28 May 2019 20:05:40 +0100 Subject: [PATCH] Improve logs to help discern what is being looked for, when, and where (#21) --- .../textfinder/TextFinderPublisher.java | 23 ++- .../TextFinderPublisherAgentTest.java | 15 +- .../TextFinderPublisherFreestyleTest.java | 28 ++- .../TextFinderPublisherPipelineTest.java | 191 +++++++++++++++--- 4 files changed, 212 insertions(+), 45 deletions(-) diff --git a/src/main/java/hudson/plugins/textfinder/TextFinderPublisher.java b/src/main/java/hudson/plugins/textfinder/TextFinderPublisher.java index d5c7026..3653d2c 100644 --- a/src/main/java/hudson/plugins/textfinder/TextFinderPublisher.java +++ b/src/main/java/hudson/plugins/textfinder/TextFinderPublisher.java @@ -128,7 +128,8 @@ private void findText(Run run, FilePath workspace, TaskListener listener) boolean foundText = false; if (alsoCheckConsoleOutput) { - logger.println("Checking console output"); + // Do not mention the pattern we are looking for to avoid false positives + logger.println("[TextFinder plugin] Scanning console output..."); foundText |= checkFile( run.getLogFile(), @@ -136,16 +137,26 @@ private void findText(Run run, FilePath workspace, TaskListener listener) logger, run.getCharset(), true); - } else { - // printing this when checking console output will cause the plugin - // to find this line, which would be pointless. - // doing this only when fileSet!=null to avoid - logger.println("Checking " + regexp); + logger.println( + "[TextFinder plugin] Finished looking for pattern " + + "'" + + regexp + + "'" + + " in the console output"); } final RemoteOutputStream ros = new RemoteOutputStream(logger); if (fileSet != null) { + logger.println( + "[TextFinder plugin] Looking for pattern " + + "'" + + regexp + + "'" + + " in the files at " + + "'" + + fileSet + + "'"); foundText |= workspace.act(new FileChecker(ros, fileSet, regexp)); } diff --git a/src/test/java/hudson/plugins/textfinder/TextFinderPublisherAgentTest.java b/src/test/java/hudson/plugins/textfinder/TextFinderPublisherAgentTest.java index dc26bc1..02b6d6d 100644 --- a/src/test/java/hudson/plugins/textfinder/TextFinderPublisherAgentTest.java +++ b/src/test/java/hudson/plugins/textfinder/TextFinderPublisherAgentTest.java @@ -62,7 +62,13 @@ public void failureIfFoundInFileOnAgent() throws Exception { agent.getNodeName(), agent.getNodeName()))); WorkflowRun build = project.scheduleBuild2(0).get(); rule.waitForCompletion(build); - rule.assertLogContains("Checking foobar", build); + rule.assertLogContains( + "[TextFinder plugin] Looking for pattern " + + "'" + + UNIQUE_TEXT + + "'" + + " in the files at", + build); assertLogContainsMatch(new File(getWorkspace(build), "out.txt"), UNIQUE_TEXT, build, false); rule.assertBuildStatus(Result.FAILURE, build); } @@ -79,7 +85,12 @@ public void failureIfFoundInConsoleOnAgent() throws Exception { agent.getNodeName(), agent.getNodeName()))); WorkflowRun build = project.scheduleBuild2(0).get(); rule.waitForCompletion(build); - rule.assertLogContains("Checking console output", build); + rule.assertLogContains("[TextFinder plugin] Scanning console output...", build); + rule.assertLogContains( + "[TextFinder plugin] Finished looking for pattern '" + + UNIQUE_TEXT + + "' in the console output", + build); assertLogContainsMatch(build.getLogFile(), ECHO_UNIQUE_TEXT, build, true); rule.assertBuildStatus(Result.FAILURE, build); } diff --git a/src/test/java/hudson/plugins/textfinder/TextFinderPublisherFreestyleTest.java b/src/test/java/hudson/plugins/textfinder/TextFinderPublisherFreestyleTest.java index a24bd95..10a0023 100644 --- a/src/test/java/hudson/plugins/textfinder/TextFinderPublisherFreestyleTest.java +++ b/src/test/java/hudson/plugins/textfinder/TextFinderPublisherFreestyleTest.java @@ -48,7 +48,12 @@ public void successIfFoundInConsole() throws Exception { project.getPublishersList().add(textFinder); FreeStyleBuild build = project.scheduleBuild2(0).get(); rule.waitForCompletion(build); - rule.assertLogContains("Checking console output", build); + rule.assertLogContains("[TextFinder plugin] Scanning console output...", build); + rule.assertLogContains( + "[TextFinder plugin] Finished looking for pattern '" + + UNIQUE_TEXT + + "' in the console output", + build); assertLogContainsMatch(build.getLogFile(), ECHO_UNIQUE_TEXT, build, true); rule.assertBuildStatus(Result.SUCCESS, build); } @@ -66,7 +71,12 @@ public void failureIfFoundInConsole() throws Exception { project.getPublishersList().add(textFinder); FreeStyleBuild build = project.scheduleBuild2(0).get(); rule.waitForCompletion(build); - rule.assertLogContains("Checking console output", build); + rule.assertLogContains("[TextFinder plugin] Scanning console output...", build); + rule.assertLogContains( + "[TextFinder plugin] Finished looking for pattern '" + + UNIQUE_TEXT + + "' in the console output", + build); assertLogContainsMatch(build.getLogFile(), ECHO_UNIQUE_TEXT, build, true); rule.assertBuildStatus(Result.FAILURE, build); } @@ -85,7 +95,12 @@ public void unstableIfFoundInConsole() throws Exception { project.getPublishersList().add(textFinder); FreeStyleBuild build = project.scheduleBuild2(0).get(); rule.waitForCompletion(build); - rule.assertLogContains("Checking console output", build); + rule.assertLogContains("[TextFinder plugin] Scanning console output...", build); + rule.assertLogContains( + "[TextFinder plugin] Finished looking for pattern '" + + UNIQUE_TEXT + + "' in the console output", + build); assertLogContainsMatch(build.getLogFile(), ECHO_UNIQUE_TEXT, build, true); rule.assertBuildStatus(Result.UNSTABLE, build); } @@ -98,7 +113,12 @@ public void notFoundInConsole() throws Exception { project.getPublishersList().add(textFinder); FreeStyleBuild build = project.scheduleBuild2(0).get(); rule.waitForCompletion(build); - rule.assertLogContains("Checking console output", build); + rule.assertLogContains("[TextFinder plugin] Scanning console output...", build); + rule.assertLogContains( + "[TextFinder plugin] Finished looking for pattern '" + + UNIQUE_TEXT + + "' in the console output", + build); rule.assertBuildStatus(Result.SUCCESS, build); } } diff --git a/src/test/java/hudson/plugins/textfinder/TextFinderPublisherPipelineTest.java b/src/test/java/hudson/plugins/textfinder/TextFinderPublisherPipelineTest.java index 648abf3..9758295 100644 --- a/src/test/java/hudson/plugins/textfinder/TextFinderPublisherPipelineTest.java +++ b/src/test/java/hudson/plugins/textfinder/TextFinderPublisherPipelineTest.java @@ -20,6 +20,7 @@ public class TextFinderPublisherPipelineTest { private static final String UNIQUE_TEXT = "foobar"; private static final String ECHO_UNIQUE_TEXT = "echo " + UNIQUE_TEXT; + private static final String fileSet = "out.txt"; @Rule public JenkinsRule rule = new JenkinsRule(); @@ -54,12 +55,27 @@ public void successIfFoundInFile() throws Exception { WorkflowJob project = rule.createProject(WorkflowJob.class, "pipeline"); project.setDefinition( new CpsFlowDefinition( - "node {writeFile file: 'out.txt', text: 'foobar'}\n" - + "node {findText regexp: 'foobar', fileSet: 'out.txt', succeedIfFound: true}\n")); + "node {writeFile file: '" + + fileSet + + "', text: '" + + UNIQUE_TEXT + + "'}\n" + + "node {findText regexp: '" + + UNIQUE_TEXT + + "', fileSet: '" + + fileSet + + "', succeedIfFound: true}\n")); WorkflowRun build = project.scheduleBuild2(0).get(); rule.waitForCompletion(build); - rule.assertLogContains("Checking foobar", build); - assertLogContainsMatch(new File(getWorkspace(build), "out.txt"), UNIQUE_TEXT, build, false); + rule.assertLogContains( + "[TextFinder plugin] Looking for pattern '" + + UNIQUE_TEXT + + "' in the files at " + + "'" + + fileSet + + "'", + build); + assertLogContainsMatch(new File(getWorkspace(build), fileSet), UNIQUE_TEXT, build, false); rule.assertBuildStatus(Result.SUCCESS, build); } @@ -68,12 +84,27 @@ public void failureIfFoundInFile() throws Exception { WorkflowJob project = rule.createProject(WorkflowJob.class, "pipeline"); project.setDefinition( new CpsFlowDefinition( - "node {writeFile file: 'out.txt', text: 'foobar'}\n" - + "node {findText regexp: 'foobar', fileSet: 'out.txt'}\n")); + "node {writeFile file: '" + + fileSet + + "', text: '" + + UNIQUE_TEXT + + "'}\n" + + "node {findText regexp: '" + + UNIQUE_TEXT + + "', fileSet: '" + + fileSet + + "'}\n")); WorkflowRun build = project.scheduleBuild2(0).get(); rule.waitForCompletion(build); - rule.assertLogContains("Checking foobar", build); - assertLogContainsMatch(new File(getWorkspace(build), "out.txt"), UNIQUE_TEXT, build, false); + rule.assertLogContains( + "[TextFinder plugin] Looking for pattern '" + + UNIQUE_TEXT + + "' in the files at " + + "'" + + fileSet + + "'", + build); + assertLogContainsMatch(new File(getWorkspace(build), fileSet), UNIQUE_TEXT, build, false); rule.assertBuildStatus(Result.FAILURE, build); } @@ -82,12 +113,27 @@ public void unstableIfFoundInFile() throws Exception { WorkflowJob project = rule.createProject(WorkflowJob.class, "pipeline"); project.setDefinition( new CpsFlowDefinition( - "node {writeFile file: 'out.txt', text: 'foobar'}\n" - + "node {findText regexp: 'foobar', fileSet: 'out.txt', unstableIfFound: true}\n")); + "node {writeFile file: '" + + fileSet + + "', text: '" + + UNIQUE_TEXT + + "'}\n" + + "node {findText regexp: '" + + UNIQUE_TEXT + + "', fileSet: '" + + fileSet + + "', unstableIfFound: true}\n")); WorkflowRun build = project.scheduleBuild2(0).get(); rule.waitForCompletion(build); - rule.assertLogContains("Checking foobar", build); - assertLogContainsMatch(new File(getWorkspace(build), "out.txt"), UNIQUE_TEXT, build, false); + rule.assertLogContains( + "[TextFinder plugin] Looking for pattern '" + + UNIQUE_TEXT + + "' in the files at " + + "'" + + fileSet + + "'", + build); + assertLogContainsMatch(new File(getWorkspace(build), fileSet), UNIQUE_TEXT, build, false); rule.assertBuildStatus(Result.UNSTABLE, build); } @@ -96,12 +142,27 @@ public void notBuiltIfFoundInFile() throws Exception { WorkflowJob project = rule.createProject(WorkflowJob.class, "pipeline"); project.setDefinition( new CpsFlowDefinition( - "node {writeFile file: 'out.txt', text: 'foobar'}\n" - + "node {findText regexp: 'foobar', fileSet: 'out.txt', notBuiltIfFound: true}\n")); + "node {writeFile file: '" + + fileSet + + "', text: '" + + UNIQUE_TEXT + + "'}\n" + + "node {findText regexp: '" + + UNIQUE_TEXT + + "', fileSet: '" + + fileSet + + "', notBuiltIfFound: true}\n")); WorkflowRun build = project.scheduleBuild2(0).get(); rule.waitForCompletion(build); - rule.assertLogContains("Checking foobar", build); - assertLogContainsMatch(new File(getWorkspace(build), "out.txt"), UNIQUE_TEXT, build, false); + rule.assertLogContains( + "[TextFinder plugin] Looking for pattern '" + + UNIQUE_TEXT + + "' in the files at " + + "'" + + fileSet + + "'", + build); + assertLogContainsMatch(new File(getWorkspace(build), fileSet), UNIQUE_TEXT, build, false); rule.assertBuildStatus(Result.NOT_BUILT, build); } @@ -110,11 +171,24 @@ public void notFoundInFile() throws Exception { WorkflowJob project = rule.createProject(WorkflowJob.class, "pipeline"); project.setDefinition( new CpsFlowDefinition( - "node {writeFile file: 'out.txt', text: 'foobaz'}\n" - + "node {findText regexp: 'foobar', fileSet: 'out.txt'}\n")); + "node {writeFile file: '" + + fileSet + + "', text: 'foobaz'}\n" + + "node {findText regexp: '" + + UNIQUE_TEXT + + "', fileSet: '" + + fileSet + + "'}\n")); WorkflowRun build = project.scheduleBuild2(0).get(); rule.waitForCompletion(build); - rule.assertLogContains("Checking foobar", build); + rule.assertLogContains( + "[TextFinder plugin] Looking for pattern '" + + UNIQUE_TEXT + + "' in the files at " + + "'" + + fileSet + + "'", + build); rule.assertBuildStatus(Result.SUCCESS, build); } @@ -123,11 +197,22 @@ public void successIfFoundInConsole() throws Exception { WorkflowJob project = rule.createProject(WorkflowJob.class, "pipeline"); project.setDefinition( new CpsFlowDefinition( - "node {isUnix() ? sh('echo foobar') : bat(\"prompt \\$G\\r\\necho foobar\")}\n" - + "node {findText regexp: 'foobar', succeedIfFound: true, alsoCheckConsoleOutput: true}\n")); + "node {isUnix() ? sh('" + + ECHO_UNIQUE_TEXT + + "') : bat(\"prompt \\$G\\r\\n" + + ECHO_UNIQUE_TEXT + + "\")}\n" + + "node {findText regexp: '" + + UNIQUE_TEXT + + "', succeedIfFound: true, alsoCheckConsoleOutput: true}\n")); WorkflowRun build = project.scheduleBuild2(0).get(); rule.waitForCompletion(build); - rule.assertLogContains("Checking console output", build); + rule.assertLogContains("[TextFinder plugin] Scanning console output...", build); + rule.assertLogContains( + "[TextFinder plugin] Finished looking for pattern '" + + UNIQUE_TEXT + + "' in the console output", + build); assertLogContainsMatch(build.getLogFile(), ECHO_UNIQUE_TEXT, build, true); rule.assertBuildStatus(Result.SUCCESS, build); } @@ -137,11 +222,22 @@ public void failureIfFoundInConsole() throws Exception { WorkflowJob project = rule.createProject(WorkflowJob.class, "pipeline"); project.setDefinition( new CpsFlowDefinition( - "node {isUnix() ? sh('echo foobar') : bat(\"prompt \\$G\\r\\necho foobar\")}\n" - + "node {findText regexp: 'foobar', alsoCheckConsoleOutput: true}\n")); + "node {isUnix() ? sh('" + + ECHO_UNIQUE_TEXT + + "') : bat(\"prompt \\$G\\r\\n" + + ECHO_UNIQUE_TEXT + + "\")}\n" + + "node {findText regexp: '" + + UNIQUE_TEXT + + "', alsoCheckConsoleOutput: true}\n")); WorkflowRun build = project.scheduleBuild2(0).get(); rule.waitForCompletion(build); - rule.assertLogContains("Checking console output", build); + rule.assertLogContains("[TextFinder plugin] Scanning console output...", build); + rule.assertLogContains( + "[TextFinder plugin] Finished looking for pattern '" + + UNIQUE_TEXT + + "' in the console output", + build); assertLogContainsMatch(build.getLogFile(), ECHO_UNIQUE_TEXT, build, true); rule.assertBuildStatus(Result.FAILURE, build); } @@ -151,11 +247,22 @@ public void unstableIfFoundInConsole() throws Exception { WorkflowJob project = rule.createProject(WorkflowJob.class, "pipeline"); project.setDefinition( new CpsFlowDefinition( - "node {isUnix() ? sh('echo foobar') : bat(\"prompt \\$G\\r\\necho foobar\")}\n" - + "node {findText regexp: 'foobar', unstableIfFound: true, alsoCheckConsoleOutput: true}\n")); + "node {isUnix() ? sh('" + + ECHO_UNIQUE_TEXT + + "') : bat(\"prompt \\$G\\r\\n" + + ECHO_UNIQUE_TEXT + + "\")}\n" + + "node {findText regexp: '" + + UNIQUE_TEXT + + "', unstableIfFound: true, alsoCheckConsoleOutput: true}\n")); WorkflowRun build = project.scheduleBuild2(0).get(); rule.waitForCompletion(build); - rule.assertLogContains("Checking console output", build); + rule.assertLogContains("[TextFinder plugin] Scanning console output...", build); + rule.assertLogContains( + "[TextFinder plugin] Finished looking for pattern '" + + UNIQUE_TEXT + + "' in the console output", + build); assertLogContainsMatch(build.getLogFile(), ECHO_UNIQUE_TEXT, build, true); rule.assertBuildStatus(Result.UNSTABLE, build); } @@ -165,11 +272,22 @@ public void notBuiltIfFoundInConsole() throws Exception { WorkflowJob project = rule.createProject(WorkflowJob.class, "pipeline"); project.setDefinition( new CpsFlowDefinition( - "node {isUnix() ? sh('echo foobar') : bat(\"prompt \\$G\\r\\necho foobar\")}\n" - + "node {findText regexp: 'foobar', notBuiltIfFound: true, alsoCheckConsoleOutput: true}\n")); + "node {isUnix() ? sh('" + + ECHO_UNIQUE_TEXT + + "') : bat(\"prompt \\$G\\r\\n" + + ECHO_UNIQUE_TEXT + + "\")}\n" + + "node {findText regexp: '" + + UNIQUE_TEXT + + "', notBuiltIfFound: true, alsoCheckConsoleOutput: true}\n")); WorkflowRun build = project.scheduleBuild2(0).get(); rule.waitForCompletion(build); - rule.assertLogContains("Checking console output", build); + rule.assertLogContains("[TextFinder plugin] Scanning console output...", build); + rule.assertLogContains( + "[TextFinder plugin] Finished looking for pattern '" + + UNIQUE_TEXT + + "' in the console output", + build); assertLogContainsMatch(build.getLogFile(), ECHO_UNIQUE_TEXT, build, true); rule.assertBuildStatus(Result.NOT_BUILT, build); } @@ -179,10 +297,17 @@ public void notFoundInConsole() throws Exception { WorkflowJob project = rule.createProject(WorkflowJob.class, "pipeline"); project.setDefinition( new CpsFlowDefinition( - "node {findText regexp: 'foobar', alsoCheckConsoleOutput: true}\n")); + "node {findText regexp: '" + + UNIQUE_TEXT + + "', alsoCheckConsoleOutput: true}\n")); WorkflowRun build = project.scheduleBuild2(0).get(); rule.waitForCompletion(build); - rule.assertLogContains("Checking console output", build); + rule.assertLogContains("[TextFinder plugin] Scanning console output...", build); + rule.assertLogContains( + "[TextFinder plugin] Finished looking for pattern '" + + UNIQUE_TEXT + + "' in the console output", + build); rule.assertBuildStatus(Result.SUCCESS, build); } }