8210519: build/releaseFile/CheckSource.java failed additional sources found
Reviewed-by: mikael, dholmes, ihse
--- a/test/jdk/build/releaseFile/CheckSource.java Wed Sep 12 14:24:17 2018 +0200
+++ b/test/jdk/build/releaseFile/CheckSource.java Wed Sep 12 08:46:25 2018 -0700
@@ -34,9 +34,13 @@
import java.io.FileReader;
import java.io.FileNotFoundException;
import java.io.IOException;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
public class CheckSource {
+ public static final String SRC_HASH_REGEXP = ":((hg)|(git)):[a-z0-9]*\\+?";
+
CheckSource(String dataFile, boolean isOpenJDK) {
// Read data files
readFile(dataFile, isOpenJDK);
@@ -44,6 +48,7 @@
private void readFile(String fileName, boolean isOpenJDK) {
String fishForSOURCE = null;
+ String implementor = null;
File file = new File(fileName);
@@ -65,7 +70,13 @@
// grab SOURCE line
if (readIn.startsWith("SOURCE=")) {
fishForSOURCE = readIn;
- break;
+ continue;
+ }
+
+ // grab IMPLEMENTOR line
+ if (readIn.startsWith("IMPLEMENTOR=")) {
+ implementor = readIn;
+ continue;
}
}
} catch (FileNotFoundException fileExcept) {
@@ -79,27 +90,46 @@
// was SOURCE even found?
if (fishForSOURCE == null) {
throw new RuntimeException("SOURCE line was not found!");
- } else {
- // OK it was found, did it have correct sources?
- System.out.println("The source string found: " + fishForSOURCE);
+ }
+ System.out.println("The source string found: " + fishForSOURCE);
- // First it MUST have .: regardless of closed or openJDK
- if (!fishForSOURCE.contains(".:")) {
- throw new RuntimeException("The test failed, .: not found!");
- }
- // take out the .: source path
- fishForSOURCE = fishForSOURCE.replace(".:", "");
+ // Extract the value of SOURCE=
+ Pattern valuePattern = Pattern.compile("SOURCE=\"(.*)\"");
+ Matcher valueMatcher = valuePattern.matcher(fishForSOURCE);
+ if (!valueMatcher.matches()) {
+ throw new RuntimeException("SOURCE string has bad format, should be SOURCE=\"<value>\"");
+ }
+ String valueString = valueMatcher.group(1);
+
+ // Check if implementor is Oracle
+ boolean isOracle = (implementor != null) && implementor.contains("Oracle Corporation");
+
+ String[] values = valueString.split(" ");
- // if its closedJDK it MUST have open:
- if (!isOpenJDK && !fishForSOURCE.contains("open:")) {
- throw new RuntimeException("The test failed, open: not found!");
- }
- // take out the open: source path
- fishForSOURCE = fishForSOURCE.replace("open:", "");
+ // First value MUST start with ".:" regardless of Oracle or OpenJDK
+ String rootRegexp = "\\." + SRC_HASH_REGEXP;
+ if (!values[0].matches(rootRegexp)) {
+ throw new RuntimeException("The test failed, first element did not match regexp: " + rootRegexp);
+ }
- // if any other source exists, that's an error
- if (fishForSOURCE.contains(":")) {
- throw new RuntimeException("The test failed, additional sources found!");
+ // If it's an Oracle build, it can be either OpenJDK or OracleJDK. Other
+ // builds may have any number of additional elements in any format.
+ if (isOracle) {
+ if (isOpenJDK) {
+ if (values.length != 1) {
+ throw new RuntimeException("The test failed, wrong number of elements in SOURCE list." +
+ " Should be 1 for Oracle built OpenJDK.");
+ }
+ } else {
+ if (values.length != 2) {
+ throw new RuntimeException("The test failed, wrong number of elements in SOURCE list." +
+ " Should be 2 for OracleJDK.");
+ }
+ // Second value MUST start with "open:" for OracleJDK
+ String openRegexp = "open" + SRC_HASH_REGEXP;
+ if (!values[1].matches(openRegexp)) {
+ throw new RuntimeException("The test failed, second element did not match regexp: " + openRegexp);
+ }
}
}
@@ -114,7 +144,6 @@
System.out.println("JDK Path : " + jdkPath);
System.out.println("Runtime Name : " + runtime);
- new CheckSource(jdkPath + "/release",
- runtime.contains("OpenJDK"));
+ new CheckSource(jdkPath + "/release", runtime.contains("OpenJDK"));
}
}