8210519: build/releaseFile/CheckSource.java failed additional sources found jdk-12+11
authorerikj
Wed, 12 Sep 2018 08:46:25 -0700
changeset 51712 f0f5d23449d3
parent 51711 3aafd7015d87
child 51713 d424675a9743
8210519: build/releaseFile/CheckSource.java failed additional sources found Reviewed-by: mikael, dholmes, ihse
test/jdk/build/releaseFile/CheckSource.java
--- 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"));
     }
 }