This is an automated email from the ASF dual-hosted git repository.

lesun pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-gobblin.git


The following commit(s) were added to refs/heads/master by this push:
     new b021e9c  [GOBBLIN-1365] Adds Github Action workflow for tests
b021e9c is described below

commit b021e9ca48f79cb36c94f3afba592e4603af9d91
Author: William Lo <[email protected]>
AuthorDate: Mon Jan 25 13:20:01 2021 -0800

    [GOBBLIN-1365] Adds Github Action workflow for tests
    
    Closes #3206 from Will-Lo/migrate-to-github-
    actions
---
 .github/workflows/build_and_test.yaml              | 164 +++++++++++++++++++++
 .travis.yml                                        |   2 +
 build.gradle                                       |   1 +
 .../gobblin/password/PasswordManagerTest.java      |   2 +-
 .../gobblin/cluster/ClusterIntegrationTest.java    |   2 +-
 .../gobblin/cluster/GobblinClusterKillTest.java    |   6 +-
 .../gobblin/cluster/GobblinTaskRunnerTest.java     |   4 +-
 .../cluster/HelixAssignedParticipantCheckTest.java |   2 +-
 .../copy/converter/DecryptConverterTest.java       |   2 +-
 .../testing/TestMetastoreDatabaseServer.java       |   8 +-
 .../gobblin/kafka/writer/Kafka1DataWriterTest.java |   1 +
 .../reporter/KafkaKeyValueProducerPusherTest.java  |   1 +
 .../metrics/reporter/KafkaProducerPusherTest.java  |   1 +
 .../src/test/resources/Holidays.xml                | 140 ++++++++++++++++++
 .../filebased/TextFileBasedSourceTest.java         |   2 +-
 .../tunnel/TestTunnelWithArbitraryTCPTraffic.java  |   2 +-
 .../java/org/apache/gobblin/tunnel/TunnelTest.java |   2 +-
 .../gobblin/yarn/GobblinYarnAppLauncherTest.java   |   4 +-
 .../org/apache/gobblin/yarn/YarnServiceTest.java   |  12 +-
 .../yarn/YarnServiceTestWithExpiration.java        |   4 +-
 gradle/scripts/ci-support.gradle                   |  69 +++++++++
 gradle/scripts/testSetup.gradle                    |  27 ++++
 travis/test-coverage.sh                            |   2 +-
 travis/test-default.sh                             |   2 +-
 travis/test-group1.sh                              |   2 +-
 25 files changed, 436 insertions(+), 28 deletions(-)

diff --git a/.github/workflows/build_and_test.yaml 
b/.github/workflows/build_and_test.yaml
new file mode 100644
index 0000000..8c0bfe8
--- /dev/null
+++ b/.github/workflows/build_and_test.yaml
@@ -0,0 +1,164 @@
+#
+# 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.
+#
+
+name: Build and Run Tests
+
+on:
+  push:
+    # Publish only on `master`
+    branches:
+      - master
+  pull_request:
+    branches:
+      - master
+  release:
+    types: [published, edited]
+
+jobs:
+  build:
+    name: Build repository
+    runs-on: ubuntu-latest
+    steps:
+      - name: Check out the repo
+        uses: actions/checkout@v2
+      - name: Set up JDK 1.8
+        uses: actions/setup-java@v1
+        with:
+          java-version: 1.8
+      # Stores external dependencies, can be further improved with Gradle 6.1
+      - name: Cache Gradle Dependencies
+        uses: actions/cache@v2
+        with:
+          path: |
+            ~/.gradle/caches
+            ~/.gradle/wrapper
+          # Only rebuild cache if build.gradle is changed
+          key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle') }}
+          restore-keys: ${{ runner.os }}-gradle
+      - name: Build repository
+        run: |
+          ./gradlew --no-daemon clean build -x test -x javadoc -x findbugsMain 
-x findbugsTest -x checkstyleMain -x checkstyleJmh -x checkstyleTest 
-Dorg.gradle.parallel=true
+
+  test_coverage:
+    runs-on: ubuntu-latest
+    name: Generate test coverage
+    needs: build
+    steps:
+      - name: Check out the repo
+        uses: actions/checkout@v2
+      - name: Set up JDK 1.8
+        uses: actions/setup-java@v1
+        with:
+          java-version: 1.8
+      - name: Cache Gradle Dependencies
+        uses: actions/cache@v2
+        with:
+          path: |
+            ~/.gradle/caches
+            ~/.gradle/wrapper
+          # Only rebuild cache if build.gradle is changed
+          key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle') }}
+          restore-keys: ${{ runner.os }}-gradle
+      - name: Generate code coverage
+        run: |
+          ./gradlew -PskipTestGroup=disabledOnCI -Dorg.gradle.parallel=false 
-DjacocoBuild=1 $GOBBLIN_GRADLE_OPTS jacocoTestCoverage
+
+  static_checks:
+    name: Run static checks
+    runs-on: ubuntu-latest
+    needs: build
+    steps:
+      - name: Check out the repo
+        uses: actions/checkout@v2
+      - name: Set up JDK 1.8
+        uses: actions/setup-java@v1
+        with:
+          java-version: 1.8
+      # Stores external dependencies, can be further improved with Gradle 6.1
+      - name: Cache Gradle Dependencies
+        uses: actions/cache@v2
+        with:
+          path: |
+            ~/.gradle/caches
+            ~/.gradle/wrapper
+          # Only rebuild cache if build.gradle is changed
+          key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle') }}
+          restore-keys: ${{ runner.os }}-gradle
+      - name: Run CheckStyle and FindBugs
+        run: |
+          ./gradlew --no-daemon -x javadoc findbugsMain checkstyleMain 
checkstyleTest checkstyleJmh
+
+  run_tests:
+    timeout-minutes: 60
+    env:
+      GOBBLIN_GRADLE_OPTS: "--no-daemon 
-Dgobblin.metastore.testing.embeddedMysqlEnabled=false 
-PusePreinstalledMysql=true"
+    strategy:
+      matrix:
+        test-group: ["Core Tests", "Service Tests", "Module Tests", "Other 
Tests"]
+      fail-fast: false
+    runs-on: ubuntu-latest
+    needs: build
+    services:
+      mysql:
+        image: mysql:5.7.32
+        env:
+          MYSQL_USER: testUser
+          MYSQL_PASSWORD: testPassword
+          MYSQL_DATABASE: test
+          MYSQL_ROOT_PASSWORD: password
+        ports:
+          - 3306:3306
+        options: --health-cmd="mysqladmin ping" --health-interval=10s 
--health-timeout=5s --health-retries=5
+    steps:
+      - name: Check out the repo
+        uses: actions/checkout@v2
+      - name: Set up JDK 1.8
+        uses: actions/setup-java@v1
+        with:
+          java-version: 1.8
+      - name: Verify mysql connection
+        run: |
+            sudo apt-get install -y mysql-client
+            mysql --host 127.0.0.1 --port 3306 -uroot -ppassword -e "SHOW 
DATABASES"
+      - name: Cache Gradle Dependencies
+        uses: actions/cache@v2
+        with:
+          path: |
+            ~/.gradle/caches
+            ~/.gradle/wrapper
+          # Only rebuild cache if build.gradle is changed
+          key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle') }}
+          restore-keys: ${{ runner.os }}-gradle
+      - name: Run test group ${{ matrix.test-group }}
+        # Write retry logic as integration tests can fail due to timing out or 
network problems
+        run: |
+          ./gradlew getGroupedTests -PgroupName="${{matrix.test-group}}" > 
temp.txt
+          TASKS=$(sed -n 's/CI Task: //p' temp.txt)
+          echo $TASKS
+
+          n=0
+          until [ "$n" -ge 3 ]
+          do
+            ./gradlew -PskipTestGroup=disabledOnCI $GOBBLIN_GRADLE_OPTS $TASKS 
-Dorg.gradle.parallel=false && break
+            n=$((n+1))
+            if [[ $n -lt 3 ]]; then
+              echo "Tests failed, retry attempt number $n"
+            else
+              exit 1
+            fi
+            sleep 10
+          done
diff --git a/.travis.yml b/.travis.yml
index 9053a5a..427e5fb 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -34,6 +34,8 @@ stages:
 
 before_script:
   - mysql -uroot -e "create user testUser identified by 'testPassword';"
+  - mysql -uroot -e "SET PASSWORD FOR 'root'@'localhost' = 
PASSWORD('password')"
+
 script:
   - travis_retry ./travis/test.sh
   - travis_retry ./gradlew jacocoTestReport
diff --git a/build.gradle b/build.gradle
index 7b0679c..3df7eb1 100644
--- a/build.gradle
+++ b/build.gradle
@@ -22,6 +22,7 @@ buildscript {
   apply from: 'gradle/scripts/repositories.gradle'
   apply from: 'gradle/scripts/defaultBuildProperties.gradle'
   apply from: 'gradle/scripts/computeVersions.gradle'
+  apply from: 'gradle/scripts/ci-support.gradle'
 
   apply from: file('gradle/scripts/buildscript.gradle'), to: buildscript
 
diff --git 
a/gobblin-api/src/test/java/org/apache/gobblin/password/PasswordManagerTest.java
 
b/gobblin-api/src/test/java/org/apache/gobblin/password/PasswordManagerTest.java
index f462673..6382982 100644
--- 
a/gobblin-api/src/test/java/org/apache/gobblin/password/PasswordManagerTest.java
+++ 
b/gobblin-api/src/test/java/org/apache/gobblin/password/PasswordManagerTest.java
@@ -33,7 +33,7 @@ import org.testng.annotations.Test;
 
 import com.google.common.io.Files;
 
-@Test(enabled=false, groups = {"disabledOnTravis"} )
+@Test(enabled=false, groups = {"disabledOnCI"} )
 public class PasswordManagerTest {
 
   @Test (enabled=false)
diff --git 
a/gobblin-cluster/src/test/java/org/apache/gobblin/cluster/ClusterIntegrationTest.java
 
b/gobblin-cluster/src/test/java/org/apache/gobblin/cluster/ClusterIntegrationTest.java
index 2fedcb8..fb5b8e5 100644
--- 
a/gobblin-cluster/src/test/java/org/apache/gobblin/cluster/ClusterIntegrationTest.java
+++ 
b/gobblin-cluster/src/test/java/org/apache/gobblin/cluster/ClusterIntegrationTest.java
@@ -146,7 +146,7 @@ public class ClusterIntegrationTest {
    *   We confirm the execution by again inspecting the zNode and ensuring its 
TargetState is START. </li>
    * </ul>
    */
-  @Test (enabled = false, dependsOnMethods = { "testJobShouldGetCancelled" }, 
groups = {"disabledOnTravis"})
+  @Test (enabled = false, dependsOnMethods = { "testJobShouldGetCancelled" }, 
groups = {"disabledOnCI"})
   public void testJobRestartViaSpec() throws Exception {
     Config jobConfigOverrides = 
ClusterIntegrationTestUtils.buildSleepingJob(IntegrationJobCancelSuite.JOB_ID,
         IntegrationJobCancelSuite.TASK_STATE_FILE);
diff --git 
a/gobblin-cluster/src/test/java/org/apache/gobblin/cluster/GobblinClusterKillTest.java
 
b/gobblin-cluster/src/test/java/org/apache/gobblin/cluster/GobblinClusterKillTest.java
index 3fde3e7..4c039bf 100644
--- 
a/gobblin-cluster/src/test/java/org/apache/gobblin/cluster/GobblinClusterKillTest.java
+++ 
b/gobblin-cluster/src/test/java/org/apache/gobblin/cluster/GobblinClusterKillTest.java
@@ -59,7 +59,7 @@ import org.apache.gobblin.testing.AssertWithBackoff;
  */
 // The kill tests are unreliable on Travis
 // Disabled GobblinClusterKillTest until reliability improves
-@Test(enabled=false, groups = {"disabledOnTravis"}, singleThreaded = true)
+@Test(enabled=false, groups = {"disabledOnCI"}, singleThreaded = true)
 public class GobblinClusterKillTest {
   public final static Logger LOG = 
LoggerFactory.getLogger(GobblinClusterKillTest.class);
   public static final String CLASS_NAME_BASED_PATH = 
"org/apache/gobblin/util/test/HelloWorldSource";
@@ -227,7 +227,7 @@ public class GobblinClusterKillTest {
 
   // The kill tests are unreliable on Travis
   // Disabled GobblinClusterKillTest until reliability improves
-  // @Test(groups = { "disabledOnTravis" }, dependsOnMethods = 
"testKillWorker")
+  // @Test(groups = { "disabledOnCI" }, dependsOnMethods = "testKillWorker")
   public void testKillManager() throws IOException, TimeoutException, 
InterruptedException {
     // kill a manager to cause leader election. New leader will schedule a new 
job.
     _clusterManagers[0].disconnectHelixManager();
@@ -268,7 +268,7 @@ public class GobblinClusterKillTest {
 
   // The kill tests are unreliable on Travis
   // Disabled GobblinClusterKillTest until reliability improves
-  // @Test(groups = { "disabledOnTravis" }, enabled=true, dependsOnMethods = 
"testKillManager")
+  // @Test(groups = { "disabledOnCI" }, enabled=true, dependsOnMethods = 
"testKillManager")
   public void testRestartManager() throws IOException, TimeoutException, 
InterruptedException {
     _clusterManagers[0].disconnectHelixManager();
 
diff --git 
a/gobblin-cluster/src/test/java/org/apache/gobblin/cluster/GobblinTaskRunnerTest.java
 
b/gobblin-cluster/src/test/java/org/apache/gobblin/cluster/GobblinTaskRunnerTest.java
index 534eb3b..448a91d 100644
--- 
a/gobblin-cluster/src/test/java/org/apache/gobblin/cluster/GobblinTaskRunnerTest.java
+++ 
b/gobblin-cluster/src/test/java/org/apache/gobblin/cluster/GobblinTaskRunnerTest.java
@@ -204,7 +204,7 @@ public class GobblinTaskRunnerTest {
     Assert.assertTrue(true);
   }
 
-  @Test (groups = {"disabledOnTravis"})
+  @Test (groups = {"disabledOnCI"})
   public void testTaskAssignmentAfterHelixConnectionRetry()
       throws Exception {
     Config jobConfigOverrides = 
ClusterIntegrationTestUtils.buildSleepingJob(JOB_ID, TASK_STATE_FILE);
@@ -230,7 +230,7 @@ public class GobblinTaskRunnerTest {
     helixManager.disconnect();
   }
 
-  @Test (groups = {"disabledOnTravis"}, dependsOnMethods = 
"testSendReceiveShutdownMessage", expectedExceptions = 
ExecutionException.class, expectedExceptionsMessageRegExp = 
".*ContainerHealthCheckException.*")
+  @Test (groups = {"disabledOnCI"}, dependsOnMethods = 
"testSendReceiveShutdownMessage", expectedExceptions = 
ExecutionException.class, expectedExceptionsMessageRegExp = 
".*ContainerHealthCheckException.*")
   public void testShutdownOnHealthCheckFailure() throws Exception {
     this.gobblinTaskRunnerHealthCheck.connectHelixManager();
 
diff --git 
a/gobblin-cluster/src/test/java/org/apache/gobblin/cluster/HelixAssignedParticipantCheckTest.java
 
b/gobblin-cluster/src/test/java/org/apache/gobblin/cluster/HelixAssignedParticipantCheckTest.java
index 40c341e..57d9fd6 100644
--- 
a/gobblin-cluster/src/test/java/org/apache/gobblin/cluster/HelixAssignedParticipantCheckTest.java
+++ 
b/gobblin-cluster/src/test/java/org/apache/gobblin/cluster/HelixAssignedParticipantCheckTest.java
@@ -56,7 +56,7 @@ public class HelixAssignedParticipantCheckTest {
         InstanceType.SPECTATOR, zkConnectString);
   }
 
-  @Test (groups = {"disabledOnTravis"})
+  @Test (groups = {"disabledOnCI"})
   //Test disabled on Travis because cluster integration tests are generally 
flaky on Travis.
   public void testExecute() throws Exception {
     suite.startCluster();
diff --git 
a/gobblin-data-management/src/test/java/org/apache/gobblin/data/management/copy/converter/DecryptConverterTest.java
 
b/gobblin-data-management/src/test/java/org/apache/gobblin/data/management/copy/converter/DecryptConverterTest.java
index 4e48e9a..93d45bc 100644
--- 
a/gobblin-data-management/src/test/java/org/apache/gobblin/data/management/copy/converter/DecryptConverterTest.java
+++ 
b/gobblin-data-management/src/test/java/org/apache/gobblin/data/management/copy/converter/DecryptConverterTest.java
@@ -48,7 +48,7 @@ import 
org.apache.gobblin.data.management.copy.FileAwareInputStream;
 /**
  * Unit tests for {@link DecryptConverter}.
  */
-@Test(enabled=false, groups = { "gobblin.data.management.copy.converter", 
"disabledOnTravis" })
+@Test(enabled=false, groups = { "gobblin.data.management.copy.converter", 
"disabledOnCI" })
 public class DecryptConverterTest {
 
   private final File masterPwdFile = new File("masterPwd");
diff --git 
a/gobblin-metastore/src/test/java/org/apache/gobblin/metastore/testing/TestMetastoreDatabaseServer.java
 
b/gobblin-metastore/src/test/java/org/apache/gobblin/metastore/testing/TestMetastoreDatabaseServer.java
index f2afd86..a18b9d3 100644
--- 
a/gobblin-metastore/src/test/java/org/apache/gobblin/metastore/testing/TestMetastoreDatabaseServer.java
+++ 
b/gobblin-metastore/src/test/java/org/apache/gobblin/metastore/testing/TestMetastoreDatabaseServer.java
@@ -52,6 +52,7 @@ class TestMetastoreDatabaseServer implements Closeable {
 
   private static final String INFORMATION_SCHEMA = "information_schema";
   private static final String ROOT_USER = "root";
+  private static final String ROOT_PASSWORD = "password";
   private static final String DROP_DATABASE_TEMPLATE = "DROP DATABASE IF 
EXISTS %s;";
   private static final String CREATE_DATABASE_TEMPLATE = "CREATE DATABASE %s 
CHARACTER SET = %s COLLATE = %s;";
   private static final String ADD_USER_TEMPLATE = "GRANT ALL ON %s.* TO 
'%s'@'%%';";
@@ -60,9 +61,9 @@ class TestMetastoreDatabaseServer implements Closeable {
   public static final String EMBEDDED_MYSQL_ENABLED_KEY = 
"embeddedMysqlEnabled";
   public static final String EMBEDDED_MYSQL_ENABLED_FULL_KEY =
       CONFIG_PREFIX + "." + EMBEDDED_MYSQL_ENABLED_KEY;
-  public static final String DBUSER_NAME_KEY = "dbUserName";
+  public static final String DBUSER_NAME_KEY = "testUser";
   public static final String DBUSER_NAME_FULL_KEY =  CONFIG_PREFIX + "." + 
DBUSER_NAME_KEY;
-  public static final String DBUSER_PASSWORD_KEY = "dbUserPassword";
+  public static final String DBUSER_PASSWORD_KEY = "testPassword";
   public static final String DBUSER_PASSWORD_FULL_KEY =  CONFIG_PREFIX + "." + 
DBUSER_PASSWORD_KEY;
   public static final String DBHOST_KEY = "dbHost";
   public static final String DBHOST_FULL_KEY =  CONFIG_PREFIX + "." + 
DBHOST_KEY;
@@ -153,7 +154,8 @@ class TestMetastoreDatabaseServer implements Closeable {
   private MySqlJdbcUrl getInformationSchemaJdbcUrl() throws URISyntaxException 
{
     return getBaseJdbcUrl()
         .setPath(INFORMATION_SCHEMA)
-        .setUser(ROOT_USER);
+        .setUser(ROOT_USER)
+        .setPassword(ROOT_PASSWORD);
   }
 
   private Optional<Connection> getConnector(MySqlJdbcUrl jdbcUrl) throws 
SQLException {
diff --git 
a/gobblin-modules/gobblin-kafka-1/src/test/java/org/apache/gobblin/kafka/writer/Kafka1DataWriterTest.java
 
b/gobblin-modules/gobblin-kafka-1/src/test/java/org/apache/gobblin/kafka/writer/Kafka1DataWriterTest.java
index 8a6a7a0..bd0ddfb 100644
--- 
a/gobblin-modules/gobblin-kafka-1/src/test/java/org/apache/gobblin/kafka/writer/Kafka1DataWriterTest.java
+++ 
b/gobblin-modules/gobblin-kafka-1/src/test/java/org/apache/gobblin/kafka/writer/Kafka1DataWriterTest.java
@@ -46,6 +46,7 @@ import static org.mockito.Mockito.*;
 
 
 @Slf4j
+@Test( groups = {"disabledOnCI"} )
 public class Kafka1DataWriterTest {
 
 
diff --git 
a/gobblin-modules/gobblin-kafka-1/src/test/java/org/apache/gobblin/metrics/reporter/KafkaKeyValueProducerPusherTest.java
 
b/gobblin-modules/gobblin-kafka-1/src/test/java/org/apache/gobblin/metrics/reporter/KafkaKeyValueProducerPusherTest.java
index 07b1905..089b1b2 100644
--- 
a/gobblin-modules/gobblin-kafka-1/src/test/java/org/apache/gobblin/metrics/reporter/KafkaKeyValueProducerPusherTest.java
+++ 
b/gobblin-modules/gobblin-kafka-1/src/test/java/org/apache/gobblin/metrics/reporter/KafkaKeyValueProducerPusherTest.java
@@ -39,6 +39,7 @@ import java.io.IOException;
 /**
  * Test {@link KafkaKeyValueProducerPusher}.
  */
+@Test( groups = {"disabledOnCI"} )
 public class KafkaKeyValueProducerPusherTest {
   public static final String TOPIC = 
KafkaKeyValueProducerPusherTest.class.getSimpleName();
 
diff --git 
a/gobblin-modules/gobblin-kafka-1/src/test/java/org/apache/gobblin/metrics/reporter/KafkaProducerPusherTest.java
 
b/gobblin-modules/gobblin-kafka-1/src/test/java/org/apache/gobblin/metrics/reporter/KafkaProducerPusherTest.java
index c369cdc..ca51f82 100644
--- 
a/gobblin-modules/gobblin-kafka-1/src/test/java/org/apache/gobblin/metrics/reporter/KafkaProducerPusherTest.java
+++ 
b/gobblin-modules/gobblin-kafka-1/src/test/java/org/apache/gobblin/metrics/reporter/KafkaProducerPusherTest.java
@@ -37,6 +37,7 @@ import java.io.IOException;
 /**
  * Test {@link org.apache.gobblin.metrics.kafka.KafkaProducerPusher}.
  */
+@Test( groups = {"disabledOnCI"} )
 public class KafkaProducerPusherTest {
   public static final String TOPIC = 
KafkaProducerPusherTest.class.getSimpleName();
 
diff --git 
a/gobblin-modules/gobblin-kafka-common/src/test/resources/Holidays.xml 
b/gobblin-modules/gobblin-kafka-common/src/test/resources/Holidays.xml
new file mode 100644
index 0000000..06b17d5
--- /dev/null
+++ b/gobblin-modules/gobblin-kafka-common/src/test/resources/Holidays.xml
@@ -0,0 +1,140 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<tns:Configuration hierarchy="ca" description="Canada" 
xmlns:tns="http://www.example.org/Holiday"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xsi:schemaLocation="http://www.example.org/Holiday /Holiday.xsd">
+  <tns:Holidays>
+    <tns:Fixed month="JANUARY" day="1" descriptionPropertiesKey="NEW_YEAR"/>
+    <tns:Fixed month="JULY" day="1" descriptionPropertiesKey="NATIONAL_DAY"/>
+    <tns:Fixed month="DECEMBER" day="25" descriptionPropertiesKey="CHRISTMAS"/>
+    <tns:FixedWeekday which="FIRST" weekday="MONDAY" month="SEPTEMBER" 
descriptionPropertiesKey="LABOUR_DAY"/>
+    <tns:ChristianHoliday type="GOOD_FRIDAY"/>
+    <tns:ChristianHoliday type="EASTER" />
+  </tns:Holidays>
+  <tns:SubConfigurations hierarchy="on" description="Ontario">
+    <tns:Holidays>
+      <tns:Fixed month="DECEMBER" day="26" 
descriptionPropertiesKey="BOXING_DAY"/>
+      <tns:RelativeToFixed descriptionPropertiesKey="VICTORIA_DAY">
+        <tns:Weekday>MONDAY</tns:Weekday>
+        <tns:When>BEFORE</tns:When>
+        <tns:Date month="MAY" day="24"/>
+      </tns:RelativeToFixed>
+      <tns:FixedWeekday which="THIRD" weekday="MONDAY" month="FEBRUARY" 
descriptionPropertiesKey="FAMILY_DAY"/>
+      <tns:FixedWeekday which="SECOND" weekday="MONDAY" month="OCTOBER" 
descriptionPropertiesKey="THANKSGIVING"/>
+    </tns:Holidays>
+  </tns:SubConfigurations>
+  <tns:SubConfigurations hierarchy="yt" description="Yukon">
+    <tns:Holidays>
+      <tns:Fixed month="NOVEMBER" day="11" 
descriptionPropertiesKey="REMEMBRANCE"/>
+      <tns:RelativeToFixed descriptionPropertiesKey="VICTORIA_DAY">
+        <tns:Weekday>MONDAY</tns:Weekday>
+        <tns:When>BEFORE</tns:When>
+        <tns:Date month="MAY" day="24"/>
+      </tns:RelativeToFixed>
+      <tns:FixedWeekday which="SECOND" weekday="MONDAY" month="OCTOBER" 
descriptionPropertiesKey="THANKSGIVING"/>
+    </tns:Holidays>
+  </tns:SubConfigurations>
+  <tns:SubConfigurations hierarchy="qc" description="Quebec">
+    <tns:Holidays>
+      <tns:RelativeToFixed descriptionPropertiesKey="VICTORIA_DAY">
+        <tns:Weekday>MONDAY</tns:Weekday>
+        <tns:When>BEFORE</tns:When>
+        <tns:Date month="MAY" day="24"/>
+      </tns:RelativeToFixed>
+      <tns:FixedWeekday which="SECOND" weekday="MONDAY" month="OCTOBER" 
descriptionPropertiesKey="THANKSGIVING"/>
+      <tns:ChristianHoliday type="EASTER_MONDAY"/>
+    </tns:Holidays>
+  </tns:SubConfigurations>
+  <tns:SubConfigurations hierarchy="ns" description="Nova Scotia">
+    <tns:Holidays>
+      <tns:Fixed month="NOVEMBER" day="11" 
descriptionPropertiesKey="REMEMBRANCE"/>
+    </tns:Holidays>
+  </tns:SubConfigurations>
+  <tns:SubConfigurations hierarchy="nb" description="New Brunswick">
+    <tns:Holidays>
+      <tns:Fixed month="NOVEMBER" day="11" 
descriptionPropertiesKey="REMEMBRANCE"/>
+      <tns:FixedWeekday which="FIRST" weekday="MONDAY" month="AUGUST" 
descriptionPropertiesKey="NATIONAL_DAY"/>
+    </tns:Holidays>
+  </tns:SubConfigurations>
+  <tns:SubConfigurations hierarchy="mb" description="Manitoba">
+    <tns:Holidays>
+      <tns:Fixed month="NOVEMBER" day="11" 
descriptionPropertiesKey="REMEMBRANCE"/>
+      <tns:RelativeToFixed descriptionPropertiesKey="VICTORIA_DAY">
+        <tns:Weekday>MONDAY</tns:Weekday>
+        <tns:When>BEFORE</tns:When>
+        <tns:Date month="MAY" day="24"/>
+      </tns:RelativeToFixed>
+      <tns:FixedWeekday which="SECOND" weekday="MONDAY" month="OCTOBER" 
descriptionPropertiesKey="THANKSGIVING"/>
+      <tns:FixedWeekday which="THIRD" weekday="MONDAY" month="FEBRUARY" 
descriptionPropertiesKey="FAMILY_DAY"/>
+    </tns:Holidays>
+  </tns:SubConfigurations>
+  <tns:SubConfigurations hierarchy="nt" description="Northwest Territories">
+    <tns:Holidays>
+      <tns:Fixed month="NOVEMBER" day="11" 
descriptionPropertiesKey="REMEMBRANCE"/>
+      <tns:RelativeToFixed descriptionPropertiesKey="VICTORIA_DAY">
+        <tns:Weekday>MONDAY</tns:Weekday>
+        <tns:When>BEFORE</tns:When>
+        <tns:Date month="MAY" day="24"/>
+      </tns:RelativeToFixed>
+      <tns:FixedWeekday which="SECOND" weekday="MONDAY" month="OCTOBER" 
descriptionPropertiesKey="THANKSGIVING"/>
+      <tns:FixedWeekday which="FIRST" weekday="MONDAY" month="AUGUST" 
descriptionPropertiesKey="CIVIC"/>
+    </tns:Holidays>
+  </tns:SubConfigurations>
+  <tns:SubConfigurations hierarchy="nu" description="Nunavut">
+    <tns:Holidays>
+      <tns:Fixed month="NOVEMBER" day="11" 
descriptionPropertiesKey="REMEMBRANCE"/>
+      <tns:RelativeToFixed descriptionPropertiesKey="VICTORIA_DAY">
+        <tns:Weekday>MONDAY</tns:Weekday>
+        <tns:When>BEFORE</tns:When>
+        <tns:Date month="MAY" day="24"/>
+      </tns:RelativeToFixed>
+      <tns:FixedWeekday which="SECOND" weekday="MONDAY" month="OCTOBER" 
descriptionPropertiesKey="THANKSGIVING"/>
+      <tns:FixedWeekday which="FIRST" weekday="MONDAY" month="AUGUST" 
descriptionPropertiesKey="CIVIC"/>
+    </tns:Holidays>
+  </tns:SubConfigurations>
+  <tns:SubConfigurations hierarchy="bc" description="British Columbia">
+    <tns:Holidays>
+      <tns:Fixed month="NOVEMBER" day="11" 
descriptionPropertiesKey="REMEMBRANCE"/>
+      <tns:RelativeToFixed descriptionPropertiesKey="VICTORIA_DAY">
+        <tns:Weekday>MONDAY</tns:Weekday>
+        <tns:When>BEFORE</tns:When>
+        <tns:Date month="MAY" day="24"/>
+      </tns:RelativeToFixed>
+      <tns:FixedWeekday which="FIRST" weekday="MONDAY" month="AUGUST" 
descriptionPropertiesKey="CIVIC"/>
+      <tns:FixedWeekday which="SECOND" weekday="MONDAY" month="OCTOBER" 
descriptionPropertiesKey="THANKSGIVING"/>
+    </tns:Holidays>
+  </tns:SubConfigurations>
+  <tns:SubConfigurations hierarchy="pe" description="Prince Edward Island">
+    <tns:Holidays>
+      <tns:Fixed month="NOVEMBER" day="11" 
descriptionPropertiesKey="REMEMBRANCE"/>
+    </tns:Holidays>
+  </tns:SubConfigurations>
+  <tns:SubConfigurations hierarchy="sk" description="Saskatchewan">
+    <tns:Holidays>
+      <tns:Fixed month="NOVEMBER" day="11" 
descriptionPropertiesKey="REMEMBRANCE"/>
+      <tns:RelativeToFixed descriptionPropertiesKey="VICTORIA_DAY">
+        <tns:Weekday>MONDAY</tns:Weekday>
+        <tns:When>BEFORE</tns:When>
+        <tns:Date month="MAY" day="24"/>
+      </tns:RelativeToFixed>
+      <tns:FixedWeekday which="THIRD" weekday="MONDAY" month="FEBRUARY" 
descriptionPropertiesKey="FAMILY_DAY"/>
+      <tns:FixedWeekday which="SECOND" weekday="MONDAY" month="OCTOBER" 
descriptionPropertiesKey="THANKSGIVING"/>
+      <tns:FixedWeekday which="FIRST" weekday="MONDAY" month="AUGUST" 
descriptionPropertiesKey="NATIONAL_DAY"/>
+    </tns:Holidays>
+  </tns:SubConfigurations>
+  <tns:SubConfigurations hierarchy="ab" description="Alberta">
+    <tns:Holidays>
+      <tns:Fixed month="NOVEMBER" day="11" 
descriptionPropertiesKey="REMEMBRANCE"/>
+      <tns:RelativeToFixed descriptionPropertiesKey="VICTORIA_DAY">
+        <tns:Weekday>MONDAY</tns:Weekday>
+        <tns:When>BEFORE</tns:When>
+        <tns:Date month="MAY" day="24"/>
+      </tns:RelativeToFixed>
+      <tns:FixedWeekday which="FIRST" weekday="MONDAY" month="AUGUST" 
descriptionPropertiesKey="HERITAGE"/>
+      <tns:FixedWeekday which="THIRD" weekday="MONDAY" month="FEBRUARY" 
descriptionPropertiesKey="FAMILY_DAY"/>
+      <tns:FixedWeekday which="SECOND" weekday="MONDAY" month="OCTOBER" 
descriptionPropertiesKey="THANKSGIVING"/>
+    </tns:Holidays>
+  </tns:SubConfigurations>
+  <tns:SubConfigurations hierarchy="nl" description="Newfoundland and 
Labrador">
+    <tns:Holidays>
+      <tns:Fixed month="NOVEMBER" day="11" 
descriptionPropertiesKey="REMEMBRANCE"/>
+    </tns:Holidays>
+  </tns:SubConfigurations>
+</tns:Configuration>
diff --git 
a/gobblin-runtime/src/test/java/org/apache/gobblin/source/extractor/filebased/TextFileBasedSourceTest.java
 
b/gobblin-runtime/src/test/java/org/apache/gobblin/source/extractor/filebased/TextFileBasedSourceTest.java
index e9cb993..ce21ec9 100644
--- 
a/gobblin-runtime/src/test/java/org/apache/gobblin/source/extractor/filebased/TextFileBasedSourceTest.java
+++ 
b/gobblin-runtime/src/test/java/org/apache/gobblin/source/extractor/filebased/TextFileBasedSourceTest.java
@@ -37,7 +37,7 @@ import org.apache.gobblin.writer.test.TestingEventBuses;
 
 public class TextFileBasedSourceTest {
 
-  @Test(enabled=false, groups = { "disabledOnTravis" })
+  @Test(enabled=false, groups = { "disabledOnCI" })
   public void test() throws Exception {
     File stateStoreDir = Files.createTempDir();
     stateStoreDir.deleteOnExit();
diff --git 
a/gobblin-tunnel/src/test/java/org/apache/gobblin/tunnel/TestTunnelWithArbitraryTCPTraffic.java
 
b/gobblin-tunnel/src/test/java/org/apache/gobblin/tunnel/TestTunnelWithArbitraryTCPTraffic.java
index f8bae8c..cd4fb7a 100644
--- 
a/gobblin-tunnel/src/test/java/org/apache/gobblin/tunnel/TestTunnelWithArbitraryTCPTraffic.java
+++ 
b/gobblin-tunnel/src/test/java/org/apache/gobblin/tunnel/TestTunnelWithArbitraryTCPTraffic.java
@@ -54,7 +54,7 @@ import org.testng.annotations.Test;
  *
  * @author [email protected]
  */
-@Test(enabled=false, singleThreaded = true, groups = { "gobblin.tunnel", 
"disabledOnTravis" })
+@Test(enabled=false, singleThreaded = true, groups = { "gobblin.tunnel", 
"disabledOnCI" })
 public class TestTunnelWithArbitraryTCPTraffic {
   private static final Logger LOG = 
LoggerFactory.getLogger(TestTunnelWithArbitraryTCPTraffic.class);
 
diff --git 
a/gobblin-tunnel/src/test/java/org/apache/gobblin/tunnel/TunnelTest.java 
b/gobblin-tunnel/src/test/java/org/apache/gobblin/tunnel/TunnelTest.java
index 079dcaf..6fb1e75 100644
--- a/gobblin-tunnel/src/test/java/org/apache/gobblin/tunnel/TunnelTest.java
+++ b/gobblin-tunnel/src/test/java/org/apache/gobblin/tunnel/TunnelTest.java
@@ -53,7 +53,7 @@ import static org.testng.Assert.assertTrue;
  *
  * @author [email protected]
  */
-@Test(enabled=false, groups = { "gobblin.tunnel", "disabledOnTravis" })
+@Test(enabled=false, groups = { "gobblin.tunnel", "disabledOnCI" })
 public class TunnelTest {
 
   private ClientAndServer mockServer;
diff --git 
a/gobblin-yarn/src/test/java/org/apache/gobblin/yarn/GobblinYarnAppLauncherTest.java
 
b/gobblin-yarn/src/test/java/org/apache/gobblin/yarn/GobblinYarnAppLauncherTest.java
index 46042c4..e0456fb 100644
--- 
a/gobblin-yarn/src/test/java/org/apache/gobblin/yarn/GobblinYarnAppLauncherTest.java
+++ 
b/gobblin-yarn/src/test/java/org/apache/gobblin/yarn/GobblinYarnAppLauncherTest.java
@@ -256,7 +256,7 @@ public class GobblinYarnAppLauncherTest implements 
HelixMessageTestBase {
    * application successfully. This works fine on local machine though. So 
disabling this and the test
    * below that depends on it on Travis-CI.
    */
-  @Test(enabled=false, groups = { "disabledOnTravis" }, dependsOnMethods = 
"testCreateHelixCluster")
+  @Test(enabled=false, groups = { "disabledOnCI" }, dependsOnMethods = 
"testCreateHelixCluster")
   public void testSetupAndSubmitApplication() throws Exception {
     HelixUtils.createGobblinHelixCluster(
         
this.config.getString(GobblinClusterConfigurationKeys.ZK_CONNECTION_STRING_KEY),
@@ -285,7 +285,7 @@ public class GobblinYarnAppLauncherTest implements 
HelixMessageTestBase {
         YarnApplicationState.RUNNING, "Application may have aborted");
   }
 
-  @Test(enabled=false, groups = { "disabledOnTravis" }, dependsOnMethods = 
"testSetupAndSubmitApplication")
+  @Test(enabled=false, groups = { "disabledOnCI" }, dependsOnMethods = 
"testSetupAndSubmitApplication")
   public void testGetReconnectableApplicationId() throws Exception {
     
Assert.assertEquals(this.gobblinYarnAppLauncher.getReconnectableApplicationId().get(),
 this.applicationId);
     this.yarnClient.killApplication(this.applicationId);
diff --git 
a/gobblin-yarn/src/test/java/org/apache/gobblin/yarn/YarnServiceTest.java 
b/gobblin-yarn/src/test/java/org/apache/gobblin/yarn/YarnServiceTest.java
index 3266298..215e1bd 100644
--- a/gobblin-yarn/src/test/java/org/apache/gobblin/yarn/YarnServiceTest.java
+++ b/gobblin-yarn/src/test/java/org/apache/gobblin/yarn/YarnServiceTest.java
@@ -76,7 +76,7 @@ import org.apache.gobblin.testing.AssertWithBackoff;
 /**
  * Tests for {@link YarnService}.
  */
-@Test(groups = {"gobblin.yarn", "disabledOnTravis"}, singleThreaded=true)
+@Test(groups = {"gobblin.yarn", "disabledOnCI"}, singleThreaded=true)
 public class YarnServiceTest {
   final Logger LOG = LoggerFactory.getLogger(YarnServiceTest.class);
 
@@ -205,7 +205,7 @@ public class YarnServiceTest {
    * Test that the dynamic config is added to the config specified when the 
{@link GobblinApplicationMaster}
    * is instantiated.
    */
-  @Test(groups = {"gobblin.yarn", "disabledOnTravis"})
+  @Test(groups = {"gobblin.yarn", "disabledOnCI"})
   public void testScaleUp() {
     this.yarnService.requestTargetNumberOfContainers(10, 
Collections.EMPTY_SET);
 
@@ -217,7 +217,7 @@ public class YarnServiceTest {
     Assert.assertEquals(this.yarnService.getMatchingRequestsList(64, 
1).size(), 0);
   }
 
-  @Test(groups = {"gobblin.yarn", "disabledOnTravis"}, dependsOnMethods = 
"testScaleUp")
+  @Test(groups = {"gobblin.yarn", "disabledOnCI"}, dependsOnMethods = 
"testScaleUp")
   public void testScaleDownWithInUseInstances() {
     Set<String> inUseInstances = new HashSet<>();
 
@@ -237,7 +237,7 @@ public class YarnServiceTest {
 
   }
 
-  @Test(groups = {"gobblin.yarn", "disabledOnTravis"}, dependsOnMethods = 
"testScaleDownWithInUseInstances")
+  @Test(groups = {"gobblin.yarn", "disabledOnCI"}, dependsOnMethods = 
"testScaleDownWithInUseInstances")
   public void testScaleDown() throws Exception {
     this.yarnService.requestTargetNumberOfContainers(4, Collections.EMPTY_SET);
 
@@ -246,7 +246,7 @@ public class YarnServiceTest {
   }
 
   // Keep this test last since it interferes with the container counts in the 
prior tests.
-  @Test(groups = {"gobblin.yarn", "disabledOnTravis"}, dependsOnMethods = 
"testScaleDown")
+  @Test(groups = {"gobblin.yarn", "disabledOnCI"}, dependsOnMethods = 
"testScaleDown")
   public void testReleasedContainerCache() throws Exception {
     Config modifiedConfig = this.config
         
.withValue(GobblinYarnConfigurationKeys.RELEASED_CONTAINERS_CACHE_EXPIRY_SECS, 
ConfigValueFactory.fromAnyRef("2"));
@@ -266,7 +266,7 @@ public class YarnServiceTest {
     
Assert.assertTrue(yarnService.getReleasedContainerCache().getIfPresent(containerId1)
 == null);
   }
 
-  @Test(groups = {"gobblin.yarn", "disabledOnTravis"}, dependsOnMethods = 
"testReleasedContainerCache")
+  @Test(groups = {"gobblin.yarn", "disabledOnCI"}, dependsOnMethods = 
"testReleasedContainerCache")
   public void testBuildContainerCommand() throws Exception {
     Config modifiedConfig = this.config
         
.withValue(GobblinYarnConfigurationKeys.CONTAINER_JVM_MEMORY_OVERHEAD_MBS_KEY, 
ConfigValueFactory.fromAnyRef("10"))
diff --git 
a/gobblin-yarn/src/test/java/org/apache/gobblin/yarn/YarnServiceTestWithExpiration.java
 
b/gobblin-yarn/src/test/java/org/apache/gobblin/yarn/YarnServiceTestWithExpiration.java
index 564647c..3e876a3 100644
--- 
a/gobblin-yarn/src/test/java/org/apache/gobblin/yarn/YarnServiceTestWithExpiration.java
+++ 
b/gobblin-yarn/src/test/java/org/apache/gobblin/yarn/YarnServiceTestWithExpiration.java
@@ -70,7 +70,7 @@ import org.testng.annotations.Test;
 /**
  * Tests for {@link YarnService}.
  */
-@Test(groups = {"gobblin.yarn", "disabledOnTravis"})
+@Test(groups = {"gobblin.yarn", "disabledOnCI"})
 public class YarnServiceTestWithExpiration {
   final Logger LOG = LoggerFactory.getLogger(YarnServiceTest.class);
 
@@ -201,7 +201,7 @@ public class YarnServiceTestWithExpiration {
    * Test that the yarn service can handle onStartContainerError right
    */
 
-  @Test(groups = {"gobblin.yarn", "disabledOnTravis"})
+  @Test(groups = {"gobblin.yarn", "disabledOnCI"})
   public void testStartError() throws Exception{
     this.expiredYarnService.requestTargetNumberOfContainers(10, 
Collections.EMPTY_SET);
 
diff --git a/gradle/scripts/ci-support.gradle b/gradle/scripts/ci-support.gradle
new file mode 100644
index 0000000..1222b1d
--- /dev/null
+++ b/gradle/scripts/ci-support.gradle
@@ -0,0 +1,69 @@
+/*
+ * 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.
+ */
+
+
+def corePaths = ["gobblin-binary-management", "gobblin-compaction", 
"gobblin-core", "gobblin-data-management",
+                 "gobblin-hive-registration", "gobblin-runtime", 
"gobblin-yarn", "gobblin-metrics-libs", "gobblin-runtime-hadoop"]
+def servicePaths = ["gobblin-api", "gobblin-rest-service", "gobblin-restli", 
"gobblin-service"]
+def modulePaths = ["gobblin-modules"]
+
+task getGroupedTests {
+    doLast {
+        def taskNames = subprojects.findAll {
+            subproject -> subproject.tasks.hasProperty('test')
+        }
+        def includedGroups
+        switch(groupName) {
+            case "Core Tests":
+                includedGroups = taskNames.findAll {task ->
+                    corePaths.any {
+                        task.path.contains(it)
+                    }
+                }
+                break;
+            case "Service Tests":
+                includedGroups = taskNames.findAll {task ->
+                    servicePaths.any {
+                        task.path.contains(it)
+                    }
+                }
+                break;
+            case "Module Tests":
+                includedGroups = taskNames.findAll {task ->
+                    modulePaths.any {
+                        task.path.contains(it)
+                    }
+                }
+                break;
+            case "Other Tests":
+                corePaths.addAll(servicePaths)
+                corePaths.addAll(modulePaths)
+                includedGroups = taskNames.findAll { task ->
+                    !corePaths.any {
+                        task.path.contains(it)
+                    }
+                }
+                break;
+            default:
+                includedGroups = taskNames
+                break;
+        }
+
+        def groupedTaskNames = includedGroups.collect { task -> 
task.tasks.findByName('test').getPath() }
+        println "CI Task: " + groupedTaskNames.join(" ")
+    }
+}
diff --git a/gradle/scripts/testSetup.gradle b/gradle/scripts/testSetup.gradle
index be0c3cb..54f6004 100644
--- a/gradle/scripts/testSetup.gradle
+++ b/gradle/scripts/testSetup.gradle
@@ -35,6 +35,7 @@ subprojects {
       }
       testLogging {
         events "started","skipped","passed","failed"
+        exceptionFormat "full"
       }
       // Some tests require MySQL we can either download an embedded Wix image 
or use a pre-installed version
       if (rootProject.hasProperty('usePreinstalledMysql') && 
Boolean.parseBoolean(rootProject.usePreinstalledMysql)) {
@@ -75,4 +76,30 @@ subprojects {
       }
     }
   }
+
+  tasks.withType(Test) {
+
+    // a collection to track failedTests
+    ext.failedTests = []
+
+    afterTest { descriptor, result ->
+      if (result.resultType == TestResult.ResultType.FAILURE) {
+        String failedTest = "${descriptor.className}::${descriptor.name}"
+        logger.debug("Adding " + failedTest + " to failedTests...")
+        failedTests << [failedTest]
+      }
+    }
+
+    afterSuite { suite, result ->
+      if (!suite.parent) { // will match the outermost suite
+        // logs each failed test
+        if (!failedTests.empty) {
+          logger.lifecycle("Failed tests:")
+          failedTests.each { failedTest ->
+            logger.lifecycle("${failedTest}")
+          }
+        }
+      }
+    }
+  }
 }
diff --git a/travis/test-coverage.sh b/travis/test-coverage.sh
index a2e1443..7e6feda 100755
--- a/travis/test-coverage.sh
+++ b/travis/test-coverage.sh
@@ -28,4 +28,4 @@ script_dir=$(dirname $0)
 source ${script_dir}/test-groups.inc
 
 echo "Starting $0 at " $(date)
-time ./gradlew -PskipTestGroup=disabledOnTravis -Dorg.gradle.parallel=false 
-DjacocoBuild=1 $GOBBLIN_GRADLE_OPTS jacocoTestCoverage
+time ./gradlew -PskipTestGroup=disabledOnCI -Dorg.gradle.parallel=false 
-DjacocoBuild=1 $GOBBLIN_GRADLE_OPTS jacocoTestCoverage
diff --git a/travis/test-default.sh b/travis/test-default.sh
index 08943dd..9be3dcf 100755
--- a/travis/test-default.sh
+++ b/travis/test-default.sh
@@ -29,4 +29,4 @@ source ${script_dir}/test-groups.inc
 
 echo "Starting $0 at " $(date)
 echo "GOBBLIN_GRADLE_OPTS=$GOBBLIN_GRADLE_OPTS"
-time ./gradlew -PskipTestGroup=disabledOnTravis,$TEST_GROUP1 
-Dorg.gradle.parallel=false $GOBBLIN_GRADLE_OPTS test
+time ./gradlew -PskipTestGroup=disabledOnCI,$TEST_GROUP1 
-Dorg.gradle.parallel=false $GOBBLIN_GRADLE_OPTS test
diff --git a/travis/test-group1.sh b/travis/test-group1.sh
index fc04830..fb3b00f 100755
--- a/travis/test-group1.sh
+++ b/travis/test-group1.sh
@@ -32,4 +32,4 @@ echo "Precompiling tests:"
 rm -rf $HOME/.gradle/caches/
 ./gradlew compileTest -Porg.gradle.parallel=false $GOBBLIN_GRADLE_OPTS
 echo "Running tests for $TEST_GROUP1"
-time ./gradlew -PskipTestGroup=disabledOnTravis -PrunTestGroups=$TEST_GROUP1 
-Dorg.gradle.parallel=false $GOBBLIN_GRADLE_OPTS test
\ No newline at end of file
+time ./gradlew -PskipTestGroup=disabledOnCI -PrunTestGroups=$TEST_GROUP1 
-Dorg.gradle.parallel=false $GOBBLIN_GRADLE_OPTS test
\ No newline at end of file

Reply via email to