From c14e28e4febd0cd40c7c3cf2fbcfd5b4d290a5aa Mon Sep 17 00:00:00 2001 From: Will Reichert Date: Tue, 20 Jan 2026 12:19:39 -0500 Subject: [PATCH] fixes stream-logging --- .../tools/qdup/config/RunConfig.java | 5 +--- .../tools/qdup/config/RunConfigBuilder.java | 8 +++--- .../io/hyperfoil/tools/qdup/cli/QDupTest.java | 28 +++++++++++++++++++ 3 files changed, 33 insertions(+), 8 deletions(-) diff --git a/qDup-core/src/main/java/io/hyperfoil/tools/qdup/config/RunConfig.java b/qDup-core/src/main/java/io/hyperfoil/tools/qdup/config/RunConfig.java index 878dcf4a..06b95148 100644 --- a/qDup-core/src/main/java/io/hyperfoil/tools/qdup/config/RunConfig.java +++ b/qDup-core/src/main/java/io/hyperfoil/tools/qdup/config/RunConfig.java @@ -77,7 +77,6 @@ public void setColorTerminal(Boolean colorTerminal) { private Set tracePatterns; private int timeout = 10; - private boolean streamLogging; private Globals globals; private String consoleFormatPattern; @@ -95,7 +94,6 @@ protected RunConfig( Set tracePatterns, List skipStages, Globals globals, - boolean streamLogging, String consoleFormatPattern){ this.name = name; this.errors = errors; @@ -112,12 +110,11 @@ protected RunConfig( this.tracePatterns = new HashSet<>(tracePatterns); this.skipStages = skipStages; this.globals = globals; - this.streamLogging = streamLogging; this.consoleFormatPattern = consoleFormatPattern; } public String getConsoleFormatPattern(){return consoleFormatPattern;} - public boolean isStreamLogging(){return streamLogging;} + public boolean isStreamLogging(){return globals.getSetting(Globals.STREAM_LOGGING,false);} public boolean hasSkipStages(){return !skipStages.isEmpty();} public List getSkipStages(){return skipStages;} diff --git a/qDup-core/src/main/java/io/hyperfoil/tools/qdup/config/RunConfigBuilder.java b/qDup-core/src/main/java/io/hyperfoil/tools/qdup/config/RunConfigBuilder.java index 129bc10d..104cbbce 100644 --- a/qDup-core/src/main/java/io/hyperfoil/tools/qdup/config/RunConfigBuilder.java +++ b/qDup-core/src/main/java/io/hyperfoil/tools/qdup/config/RunConfigBuilder.java @@ -80,7 +80,6 @@ public class RunConfigBuilder { private Globals globals; private List errors; private List skipStages; - private boolean streamLogging = false; private String consoleFormatPattern; private boolean isValid = false; @@ -133,10 +132,12 @@ public void addSkipStage(Stage stage){ } } public void setStreamLogging(Boolean streamLogging){ - this.streamLogging = streamLogging; + if(streamLogging) { + this.globals.addSetting(Globals.STREAM_LOGGING, streamLogging); + } } public boolean isStreamLogging(){ - return streamLogging; + return globals.getSetting(Globals.STREAM_LOGGING,false); } public int errorCount() { return errors.size(); @@ -655,7 +656,6 @@ public RunConfig buildConfig(Parser yamlParser) { getTracePatterns(), skipStages, globals, - streamLogging, consoleFormatPattern ); if(yamlParser.isAbortOnExitCode()){ diff --git a/qDup/src/test/java/io/hyperfoil/tools/qdup/cli/QDupTest.java b/qDup/src/test/java/io/hyperfoil/tools/qdup/cli/QDupTest.java index 6fa9abca..20351c29 100644 --- a/qDup/src/test/java/io/hyperfoil/tools/qdup/cli/QDupTest.java +++ b/qDup/src/test/java/io/hyperfoil/tools/qdup/cli/QDupTest.java @@ -198,6 +198,34 @@ public void main_exit_sh_ignore(QuarkusMainLauncher launcher) throws IOException LaunchResult result = launcher.launch("--ignore-exit-code", "--fullPath","/tmp","--identity",getIdentity(),configPath.toString()); assertEquals(0,result.exitCode()); } + @Test + public void stream_logging(QuarkusMainLauncher launcher) throws IOException { + Path configPath = Files.writeString(File.createTempFile("qdup",".yaml").toPath(), + """ + scripts: + doit: + - sh: echo -e "one\\ntwo\\nthree" + hosts: + target: HOST_TARGET + roles: + test: + hosts: + - target + run-scripts: + - doit + """.replaceAll("HOST_TARGET",getHost().toString())); + configPath.toFile().deleteOnExit(); + LaunchResult result = launcher.launch("--stream-logging", "--fullPath","/tmp","--identity",getIdentity(),configPath.toString()); + assertEquals(0,result.exitCode()); + File runLog = new File("/tmp/run.log"); + assertTrue(runLog.exists()); + String content = Files.readString(runLog.toPath()); + + assertTrue(content.contains("] one"),"expending one with log prefix:\n"+content); + assertTrue(content.contains("] two"),"expending two with log prefix:\n"+content); + assertTrue(content.contains("] three"),"expending three with log prefix:\n"+content); + + } @Test public void main_exit_invalid_yaml(QuarkusMainLauncher launcher) throws IOException {