OpenJDK / jdk / jdk12
changeset 34217:fb4d7b34e67e
8142385: [Testbug] RandomCommandsTest fails with error: Could not parse method pattern
Summary: Fix CompileCommand output processing
Reviewed-by: kvn, iignatyev, neliasso
author | ppunegov |
---|---|
date | Tue, 24 Nov 2015 20:58:53 +0300 |
parents | 2818af1ce748 |
children | 4b22b04519e6 |
files | hotspot/test/compiler/compilercontrol/share/processors/CommandProcessor.java hotspot/test/compiler/compilercontrol/share/processors/QuietProcessor.java hotspot/test/compiler/compilercontrol/share/scenario/Scenario.java |
diffstat | 3 files changed, 46 insertions(+), 73 deletions(-) [+] |
line wrap: on
line diff
--- a/hotspot/test/compiler/compilercontrol/share/processors/CommandProcessor.java Tue Nov 24 20:55:46 2015 +0300 +++ b/hotspot/test/compiler/compilercontrol/share/processors/CommandProcessor.java Tue Nov 24 20:58:53 2015 +0300 @@ -24,8 +24,10 @@ package compiler.compilercontrol.share.processors; import compiler.compilercontrol.share.scenario.CompileCommand; +import jdk.test.lib.Asserts; import jdk.test.lib.OutputAnalyzer; +import java.util.Iterator; import java.util.List; import java.util.function.Consumer; @@ -33,26 +35,56 @@ * Checks that output contains a string with commands and full method pattern */ public class CommandProcessor implements Consumer<OutputAnalyzer> { - protected final List<CompileCommand> commands; + private static final String INVALID_COMMAND_MSG = "CompileCommand: " + + "\\b(unrecognized command|Bad pattern|" + + "An error occurred during parsing)\\b"; + private final Iterator<CompileCommand> nonQuietedIterator; + private final Iterator<CompileCommand> quietedIterator; - public CommandProcessor(List<CompileCommand> commands) { - this.commands = commands; + public CommandProcessor(List<CompileCommand> nonQuieted, + List<CompileCommand> quieted) { + this.nonQuietedIterator = nonQuieted.iterator(); + this.quietedIterator = quieted.iterator(); } @Override public void accept(OutputAnalyzer outputAnalyzer) { - for (CompileCommand command : commands) { + try { + outputAnalyzer.asLines().stream() + .filter(s -> s.startsWith("CompileCommand:")) + .forEachOrdered(this::check); + } catch (Exception e) { + System.err.println(outputAnalyzer.getOutput()); + throw e; + } + } + + private void check(String input) { + if (nonQuietedIterator.hasNext()) { + CompileCommand command = nonQuietedIterator.next(); if (command.isValid()) { - outputAnalyzer.shouldContain("CompileCommand: " - + command.command.name + " " - + command.methodDescriptor.getCanonicalString()); - outputAnalyzer.shouldNotContain("CompileCommand: An error " - + "occurred during parsing"); + Asserts.assertTrue(input.contains(getOutputString(command)), + getOutputString(command) + "missing in output"); } else { - outputAnalyzer.shouldMatch("(CompileCommand: )" - + "(unrecognized command)|(Bad pattern)|" - + "(An error occurred during parsing)"); + Asserts.assertTrue(input.matches(INVALID_COMMAND_MSG), + "Error message missing for: " + getOutputString( + command)); + } + } else if (quietedIterator.hasNext()) { + CompileCommand command = quietedIterator.next(); + if (command.isValid()) { + Asserts.assertFalse(input.contains(getOutputString(command))); + } else { + Asserts.assertTrue(input.matches(INVALID_COMMAND_MSG), + "Error message missing for: " + getOutputString( + command)); } } } + + private String getOutputString(CompileCommand command) { + return "CompileCommand: " + + command.command.name + " " + + command.methodDescriptor.getCanonicalString(); + } }
--- a/hotspot/test/compiler/compilercontrol/share/processors/QuietProcessor.java Tue Nov 24 20:55:46 2015 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,55 +0,0 @@ -/* - * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -package compiler.compilercontrol.share.processors; - -import compiler.compilercontrol.share.scenario.CompileCommand; -import jdk.test.lib.OutputAnalyzer; - -import java.util.List; -import java.util.function.Consumer; - -public class QuietProcessor implements Consumer<OutputAnalyzer> { - private final List<CompileCommand> commands; - - public QuietProcessor(List<CompileCommand> compileCommands) { - commands = compileCommands; - } - - @Override - public void accept(OutputAnalyzer outputAnalyzer) { - for (CompileCommand command : commands) { - if (command.isValid()) { - outputAnalyzer.shouldNotContain("CompileCommand: " - + command.command.name + " " - + command.methodDescriptor.getCanonicalString()); - outputAnalyzer.shouldNotContain("CompileCommand: An error " - + "occurred during parsing"); - } else { - outputAnalyzer.shouldMatch("(CompileCommand: )" - + "(unrecognized command)|(Bad pattern)|" - + "(An error occurred during parsing)"); - } - } - } -}
--- a/hotspot/test/compiler/compilercontrol/share/scenario/Scenario.java Tue Nov 24 20:55:46 2015 +0300 +++ b/hotspot/test/compiler/compilercontrol/share/scenario/Scenario.java Tue Nov 24 20:58:53 2015 +0300 @@ -28,7 +28,6 @@ import compiler.compilercontrol.share.processors.LogProcessor; import compiler.compilercontrol.share.processors.PrintDirectivesProcessor; import compiler.compilercontrol.share.processors.PrintProcessor; -import compiler.compilercontrol.share.processors.QuietProcessor; import jdk.test.lib.Asserts; import jdk.test.lib.OutputAnalyzer; import jdk.test.lib.Pair; @@ -77,8 +76,7 @@ nonQuieted.add(cc); } } - processors.add(new CommandProcessor(nonQuieted)); - processors.add(new QuietProcessor(quieted)); + processors.add(new CommandProcessor(nonQuieted, quieted)); List<String> jcmdExecCommands = new ArrayList<>(); boolean addCommandMet = false; boolean printCommandMet = false; @@ -273,9 +271,7 @@ ccList.addAll(builders.get(Type.OPTION).getCompileCommands()); ccList.addAll(builders.get(Type.FILE).getCompileCommands()); - /* - * Create a list of directives to check which one was printed - */ + // Create a list of directives to check which one was printed List<CompileCommand> directives = new ArrayList<>(); if (jcmdContainsCommand(JcmdType.PRINT)) { if (!isClearedState) {