[NO ISSUE][TEST] Refactor licensing test support

Change-Id: I11385a73302b22f9aaaf91c426df8320f52ebb72
Reviewed-on: https://asterix-gerrit.ics.uci.edu/2479
Sonar-Qube: Jenkins <jenkins@fulliautomatix.ics.uci.edu>
Tested-by: Jenkins <jenkins@fulliautomatix.ics.uci.edu>
Contrib: Jenkins <jenkins@fulliautomatix.ics.uci.edu>
Integration-Tests: Jenkins <jenkins@fulliautomatix.ics.uci.edu>
Reviewed-by: Murtadha Hubail <mhubail@apache.org>
diff --git a/asterixdb/asterix-server/pom.xml b/asterixdb/asterix-server/pom.xml
index 7e86edc..fd6dd79 100644
--- a/asterixdb/asterix-server/pom.xml
+++ b/asterixdb/asterix-server/pom.xml
@@ -620,5 +620,10 @@
       <artifactId>asterix-fuzzyjoin</artifactId>
       <version>${project.version}</version>
     </dependency>
+    <dependency>
+      <groupId>org.apache.hyracks</groupId>
+      <artifactId>hyracks-test-support</artifactId>
+      <scope>test</scope>
+    </dependency>
   </dependencies>
 </project>
diff --git a/asterixdb/asterix-server/src/test/java/org/apache/asterix/test/server/LicensingIT.java b/asterixdb/asterix-server/src/test/java/org/apache/asterix/test/server/LicensingIT.java
index 4ac3abb..60406b8 100644
--- a/asterixdb/asterix-server/src/test/java/org/apache/asterix/test/server/LicensingIT.java
+++ b/asterixdb/asterix-server/src/test/java/org/apache/asterix/test/server/LicensingIT.java
@@ -18,77 +18,56 @@
  */
 package org.apache.asterix.test.server;
 
-import java.io.File;
 import java.io.IOException;
-import java.nio.charset.StandardCharsets;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
 
-import org.apache.commons.io.FileUtils;
+import org.apache.hyracks.test.support.LicensingTestBase;
 import org.apache.hyracks.util.file.FileUtil;
-import org.junit.Assert;
 import org.junit.Before;
 import org.junit.FixMethodOrder;
 import org.junit.Test;
 import org.junit.runners.MethodSorters;
 
 @FixMethodOrder(MethodSorters.JVM)
-public class LicensingIT {
-
-    protected String installerDir;
+public class LicensingIT extends LicensingTestBase {
 
     @Before
     public void setup() {
-        final String pattern = getInstallerDirPattern();
-        final String targetDir = getTargetDir();
-        final String[] list = new File(targetDir).list((dir, name) -> name.matches(pattern));
-        Assert.assertNotNull("installerDir", list);
-        Assert.assertFalse("Ambiguous install dir (" + pattern + "): " + Arrays.toString(list), list.length > 1);
-        Assert.assertEquals("Can't find install dir (" + pattern + ")", 1, list.length);
-        installerDir = FileUtil.joinPath(targetDir, list[0]);
+        initInstallerDir();
     }
 
+    @Override
     protected String getTargetDir() {
         return FileUtil.joinPath("target");
     }
 
+    @Override
     protected String getInstallerDirPattern() {
         return "asterix-server.*-binary-assembly";
     }
 
+    @Override
     protected String pathToLicensingFiles() {
         return "";
     }
 
-    @Test
-    public void testLicenseNoticeFilesPresent() throws IOException {
-        for (String name : getRequiredArtifactNames()) {
-            final String fileName = FileUtil.joinPath(installerDir, pathToLicensingFiles(), name);
-            Assert.assertTrue(fileName + " missing", new File(fileName).exists());
-        }
-    }
-
+    @Override
     protected String[] getRequiredArtifactNames() {
         return org.apache.commons.lang3.ArrayUtils.add(getLicenseArtifactNames(), "NOTICE");
     }
 
-    @Test
-    public void ensureNoMissingLicenses() throws IOException {
-        for (String licenseArtifactName : getLicenseArtifactNames()) {
-            final File licenseFile =
-                    new File(FileUtil.joinPath(installerDir, pathToLicensingFiles(), licenseArtifactName));
-            List<String> badLines = new ArrayList<>();
-            for (String line : FileUtils.readLines(licenseFile, StandardCharsets.UTF_8)) {
-                if (line.matches("^\\s*MISSING:.*")) {
-                    badLines.add(line.trim());
-                }
-            }
-            Assert.assertEquals("Missing licenses in " + licenseFile + ": " + badLines, 0, badLines.size());
-        }
-    }
-
+    @Override
     protected String[] getLicenseArtifactNames() {
         return new String[] { "LICENSE" };
     }
+
+    @Test
+    public void testLicenseNoticeFilesPresent() {
+        verifyAllRequiredArtifactsPresent();
+    }
+
+    @Test
+    public void ensureNoMissingLicenses() throws IOException {
+        verifyMissingLicenses();
+    }
+
 }
diff --git a/hyracks-fullstack/hyracks/hyracks-test-support/pom.xml b/hyracks-fullstack/hyracks/hyracks-test-support/pom.xml
index 67ebc9b..7fa9a12 100644
--- a/hyracks-fullstack/hyracks/hyracks-test-support/pom.xml
+++ b/hyracks-fullstack/hyracks/hyracks-test-support/pom.xml
@@ -112,5 +112,9 @@
       <groupId>org.apache.logging.log4j</groupId>
       <artifactId>log4j-core</artifactId>
     </dependency>
+    <dependency>
+      <groupId>commons-io</groupId>
+      <artifactId>commons-io</artifactId>
+    </dependency>
   </dependencies>
 </project>
diff --git a/hyracks-fullstack/hyracks/hyracks-test-support/src/main/java/org/apache/hyracks/test/support/LicensingTestBase.java b/hyracks-fullstack/hyracks/hyracks-test-support/src/main/java/org/apache/hyracks/test/support/LicensingTestBase.java
new file mode 100644
index 0000000..2fb8446
--- /dev/null
+++ b/hyracks-fullstack/hyracks/hyracks-test-support/src/main/java/org/apache/hyracks/test/support/LicensingTestBase.java
@@ -0,0 +1,77 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.hyracks.test.support;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.charset.StandardCharsets;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.apache.commons.io.FileUtils;
+import org.apache.hyracks.util.file.FileUtil;
+import org.junit.Assert;
+
+public abstract class LicensingTestBase {
+    private String installerDir;
+
+    protected void initInstallerDir() {
+        if (installerDir == null) {
+            final String pattern = getInstallerDirPattern();
+            final String targetDir = getTargetDir();
+            final String[] list = new File(targetDir).list((dir, name) -> name.matches(pattern));
+            Assert.assertNotNull("installerDir", list);
+            Assert.assertFalse("Ambiguous install dir (" + pattern + "): " + Arrays.toString(list), list.length > 1);
+            Assert.assertEquals("Can't find install dir (" + pattern + ")", 1, list.length);
+            installerDir = FileUtil.joinPath(targetDir, list[0]);
+        }
+    }
+
+    protected abstract String getTargetDir();
+
+    protected abstract String getInstallerDirPattern();
+
+    protected abstract String pathToLicensingFiles();
+
+    protected abstract String[] getRequiredArtifactNames();
+
+    protected void verifyMissingLicenses() throws IOException {
+        for (String licenseArtifactName : getLicenseArtifactNames()) {
+            final File licenseFile =
+                    new File(FileUtil.joinPath(installerDir, pathToLicensingFiles(), licenseArtifactName));
+            List<String> badLines = new ArrayList<>();
+            for (String line : FileUtils.readLines(licenseFile, StandardCharsets.UTF_8)) {
+                if (line.matches("^\\s*MISSING:.*")) {
+                    badLines.add(line.trim());
+                }
+            }
+            Assert.assertEquals("Missing licenses in " + licenseFile + ": " + badLines, 0, badLines.size());
+        }
+    }
+
+    protected void verifyAllRequiredArtifactsPresent() {
+        for (String name : getRequiredArtifactNames()) {
+            final String fileName = FileUtil.joinPath(installerDir, pathToLicensingFiles(), name);
+            Assert.assertTrue(fileName + " missing", new File(fileName).exists());
+        }
+    }
+
+    protected abstract String[] getLicenseArtifactNames();
+}