diff --git a/common/host-side/tradefed/res/config/common-compatibility-config.xml b/common/host-side/tradefed/res/config/common-compatibility-config.xml
index 1b40f16..7ffbea5 100644
--- a/common/host-side/tradefed/res/config/common-compatibility-config.xml
+++ b/common/host-side/tradefed/res/config/common-compatibility-config.xml
@@ -20,5 +20,6 @@
     <logger class="com.android.tradefed.log.FileLogger">
         <option name="log-level-display" value="WARN" />
     </logger>
+    <result_reporter class="com.android.compatibility.common.tradefed.result.ConsoleReporter" />
     <result_reporter class="com.android.compatibility.common.tradefed.result.ResultReporter" />
 </configuration>
diff --git a/common/host-side/tradefed/src/com/android/compatibility/common/tradefed/result/ConsoleReporter.java b/common/host-side/tradefed/src/com/android/compatibility/common/tradefed/result/ConsoleReporter.java
new file mode 100644
index 0000000..19adb3f
--- /dev/null
+++ b/common/host-side/tradefed/src/com/android/compatibility/common/tradefed/result/ConsoleReporter.java
@@ -0,0 +1,151 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed 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 com.android.compatibility.common.tradefed.result;
+
+import com.android.ddmlib.Log;
+import com.android.ddmlib.Log.LogLevel;
+import com.android.ddmlib.testrunner.TestIdentifier;
+import com.android.tradefed.build.IBuildInfo;
+import com.android.tradefed.config.Option;
+import com.android.tradefed.config.OptionClass;
+import com.android.tradefed.config.OptionCopier;
+import com.android.tradefed.log.LogUtil.CLog;
+import com.android.tradefed.result.IShardableListener;
+import com.android.tradefed.result.StubTestInvocationListener;
+import com.android.tradefed.util.TimeUtil;
+
+import java.util.Map;
+
+/**
+ * Write test progress to the test console.
+ */
+public class ConsoleReporter extends StubTestInvocationListener implements IShardableListener {
+
+    private static final String UNKNOWN_DEVICE = "unknown_device";
+
+    @Option(name = "quiet-output", description = "Mute display of test results.")
+    private boolean mQuietOutput = false;
+
+    private String mDeviceSerial = UNKNOWN_DEVICE;
+    private boolean mTestFailed;
+    private String mModuleId;
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void invocationStarted(IBuildInfo buildInfo) {
+        if (buildInfo == null) {
+            CLog.w("buildInfo should not be null");
+            return;
+        }
+
+        mDeviceSerial = buildInfo.getDeviceSerial().replace("%", "%%");
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void testRunStarted(String id, int numTests) {
+        mModuleId = id;
+        log("Starting %s with %d test%s", id, numTests, (numTests > 1) ? "s" : "");
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void testStarted(TestIdentifier test) {
+        mTestFailed = false;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void testFailed(TestIdentifier test, String trace) {
+        log("%s fail: %s", test, trace);
+        mTestFailed = true;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void testIgnored(TestIdentifier test) {
+        log("%s ignore", test);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void testAssumptionFailure(TestIdentifier test, String trace) {
+        log("%s failed assumption: %s", test, trace);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void testEnded(TestIdentifier test, Map<String, String> testMetrics) {
+        if (!mTestFailed) {
+            log("%s pass", test);
+        }
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void testRunFailed(String errorMessage) {
+        log(errorMessage);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void testRunStopped(long elapsedTime) {
+        log("%s stopped (%s)", mModuleId, TimeUtil.formatElapsedTime(elapsedTime));
+    }
+
+    /**
+     * Print out to the console or log silently when mQuietOutput is true.
+     */
+    private void log(String format, Object... args) {
+        // Escape any "%" signs in the device serial.
+        format = String.format("[%s] %s", mDeviceSerial, format);
+
+        if (mQuietOutput) {
+            CLog.i(format, args);
+        } else {
+            CLog.logAndDisplay(LogLevel.INFO, format, args);
+        }
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public IShardableListener clone() {
+        ConsoleReporter clone = new ConsoleReporter();
+        OptionCopier.copyOptionsNoThrow(this, clone);
+        return clone;
+    }
+}
diff --git a/common/host-side/tradefed/src/com/android/compatibility/common/tradefed/result/ResultReporter.java b/common/host-side/tradefed/src/com/android/compatibility/common/tradefed/result/ResultReporter.java
index c609163..ae74c26 100644
--- a/common/host-side/tradefed/src/com/android/compatibility/common/tradefed/result/ResultReporter.java
+++ b/common/host-side/tradefed/src/com/android/compatibility/common/tradefed/result/ResultReporter.java
@@ -64,7 +64,7 @@
 import java.util.Map.Entry;
 
 /**
- * Reporter for Compatibility test results.
+ * Collect test results for an entire invocation and output test results to disk.
  */
 @OptionClass(alias="result-reporter")
 public class ResultReporter implements ILogSaverListener, ITestInvocationListener,
@@ -85,9 +85,6 @@
             importance = Importance.IF_UNSET)
     private Integer mRetrySessionId = null;
 
-    @Option(name = "quiet-output", description = "Mute display of test results.")
-    private boolean mQuietOutput = false;
-
     @Option(name = "result-server", description = "Server to publish test results.")
     private String mResultServer;
 
@@ -154,7 +151,7 @@
                 e.printStackTrace();
             }
             if (mResultDir != null && mResultDir.mkdirs()) {
-                    logResult("Created result dir %s", mResultDir.getAbsolutePath());
+                info("Created result dir %s", mResultDir.getAbsolutePath());
             } else {
                 throw new IllegalArgumentException(String.format("Could not create result dir %s",
                         mResultDir.getAbsolutePath()));
@@ -169,7 +166,7 @@
             e.printStackTrace();
         }
         if (mLogDir != null && mLogDir.mkdirs()) {
-            logResult("Created log dir %s", mLogDir.getAbsolutePath());
+            info("Created log dir %s", mLogDir.getAbsolutePath());
         } else {
             throw new IllegalArgumentException(String.format("Could not create log dir %s",
                     mLogDir.getAbsolutePath()));
@@ -188,7 +185,6 @@
      */
     @Override
     public void testRunStarted(String id, int numTests) {
-        logResult("Starting %s with %d test%s", id, numTests, (numTests > 1) ? "s" : "");
         mCurrentModuleResult = mResult.getOrCreateModule(id);
         if (mDeviceSerial == null || mDeviceSerial.equals("unknown_device")) {
             mResult.addDeviceSerial(mBuild.getDeviceSerial());
@@ -213,7 +209,6 @@
     @Override
     public void testEnded(TestIdentifier test, Map<String, String> metrics) {
         if (mCurrentResult.getResultStatus() == TestStatus.FAIL) {
-            logResult("%s has previously failed", test);
             // Test has previously failed.
             return;
         }
@@ -235,12 +230,6 @@
             // Only claim that we passed when we're certain our result was
             // not any other state.
             mCurrentResult.passed(report);
-            logResult("%s passed", test);
-        } else {
-            // We had some other result (presumably NOT_EXECUTED, but we
-            // leave this more general in case of future expansion of the
-            // TestResult enum.
-            logResult("%s %s", test, mCurrentResult.getResultStatus().getValue());
         }
     }
 
@@ -249,8 +238,7 @@
      */
     @Override
     public void testIgnored(TestIdentifier test) {
-        mCurrentResult.notExecuted();
-        logResult("%s ignored", test);
+        // Ignored tests are not reported
     }
 
     /**
@@ -259,7 +247,6 @@
     @Override
     public void testFailed(TestIdentifier test, String trace) {
         mCurrentResult.failed(trace);
-        logResult("%s failed: %s", test, trace);
     }
 
     /**
@@ -268,7 +255,6 @@
     @Override
     public void testAssumptionFailure(TestIdentifier test, String trace) {
         mCurrentResult.skipped();
-        logResult("%s failed assumption: %s", test, trace);
     }
 
     /**
@@ -276,8 +262,6 @@
      */
     @Override
     public void testRunStopped(long elapsedTime) {
-        logResult("%s stopped after %s", mCurrentModuleResult.getId(),
-                TimeUtil.formatElapsedTime(elapsedTime));
         // ignore
     }
 
@@ -294,7 +278,7 @@
             }
         }
         mCurrentModuleResult.addRuntime(elapsedTime);
-        logResult("%s completed in %s. %d passed, %d failed, %d not executed",
+        info("%s completed in %s. %d passed, %d failed, %d not executed",
                 mCurrentModuleResult.getId(),
                 TimeUtil.formatElapsedTime(elapsedTime),
                 mCurrentModuleResult.countResults(TestStatus.PASS),
@@ -306,8 +290,7 @@
      * {@inheritDoc}
      */
     @Override
-    public void testRunFailed(String id) {
-        logResult("%s failed to run", id);
+    public void testRunFailed(String errorMessage) {
         // ignore
     }
 
@@ -335,7 +318,7 @@
      */
     @Override
     public void invocationEnded(long elapsedTime) {
-        logResult("Invocation completed in %s. %d passed, %d failed, %d not executed",
+        info("Invocation completed in %s. %d passed, %d failed, %d not executed",
                 TimeUtil.formatElapsedTime(elapsedTime),
                 mResult.countResults(TestStatus.PASS),
                 mResult.countResults(TestStatus.FAIL),
@@ -352,11 +335,12 @@
                     mBuildHelper.getSuiteVersion(), mBuildHelper.getSuitePlan(),
                     mBuildHelper.getSuiteBuild(), mResult, mResultDir, mStartTime,
                     elapsedTime + mStartTime, mReferenceUrl);
-            logResult("Result saved at: %s", resultFile.getCanonicalPath());
+            info("Test Result: %s", resultFile.getCanonicalPath());
             copyDynamicConfigFiles(mBuildHelper.getDynamicConfigFiles(), mResultDir);
             copyFormattingFiles(mResultDir);
             // Zip the full test results directory.
             File zippedResults = zipResults(mResultDir);
+            info("Full Result: %s", zippedResults.getCanonicalPath());
             // Save the test result XML.
             if (mUseLogSaver) {
                 FileInputStream fis = null;
@@ -382,8 +366,7 @@
             }
             if (mResultServer != null && !mResultServer.trim().isEmpty() && !mDisableResultPosting) {
                 try {
-                    logResult("Result Server Response: %d",
-                            mUploader.uploadResult(resultFile, mReferenceUrl));
+                    info("Result Server: %d", mUploader.uploadResult(resultFile, mReferenceUrl));
                 } catch (IOException ioe) {
                     CLog.e("[%s] IOException while uploading result.", mDeviceSerial);
                     CLog.e(ioe);
@@ -402,7 +385,7 @@
      */
     @Override
     public void invocationFailed(Throwable cause) {
-        logResult("Invocation failed: %s", cause);
+        warn("Invocation failed: %s", cause);
     }
 
     /**
@@ -413,9 +396,9 @@
         try {
             LogFileSaver saver = new LogFileSaver(mLogDir);
             File logFile = saver.saveAndZipLogData(name, type, stream.createInputStream());
-            logResult("Saved logs for %s in %s", name, logFile.getAbsolutePath());
+            info("Saved logs for %s in %s", name, logFile.getAbsolutePath());
         } catch (IOException e) {
-            logResult("Failed to write log for %s", name);
+            warn("Failed to write log for %s", name);
             e.printStackTrace();
         }
     }
@@ -460,12 +443,10 @@
                 try {
                     FileUtil.writeToFile(configStream, resultFile);
                 } catch (IOException e) {
-                    Log.w(ResultReporter.class.getSimpleName(),
-                            String.format("Failed to write %s to file", resultFileName));
+                    warn("Failed to write %s to file", resultFileName);
                 }
             } else {
-                Log.w(ResultReporter.class.getSimpleName(),
-                        String.format("Failed to load %s from jar", resultFileName));
+                warn("Failed to load %s from jar", resultFileName);
             }
         }
     }
@@ -487,8 +468,7 @@
                 FileUtil.copyFile(configFiles.get(moduleName), resultFile);
                 FileUtil.deleteFile(configFiles.get(moduleName));
             } catch (IOException e) {
-                Log.w(ResultReporter.class.getSimpleName(),
-                        String.format("Failed to copy config file for %s to file", moduleName));
+                warn("Failed to copy config file for %s to file", moduleName);
             }
         }
     }
@@ -506,26 +486,36 @@
                     resultsDir.getName()));
             ZipUtil.createZip(resultsDir, zipResultFile);
         } catch (IOException e) {
-            Log.w(ResultReporter.class.getSimpleName(),
-                    String.format("Failed to create zip for %s", resultsDir.getName()));
+            warn("Failed to create zip for %s", resultsDir.getName());
         }
         return zipResultFile;
     }
 
     /**
-     * @return the mResult
+     *  Log info to the console.
      */
-    public IInvocationResult getResult() {
-        return mResult;
+    private static void info(String format, Object... args) {
+        log(LogLevel.INFO, format, args);
     }
 
-    private void logResult(String format, Object... args) {
-        // Escape any "%" signs in the device serial.
-        format = String.format("[%s] %s", mDeviceSerial.replace("%", "%%"), format);
-        if (mQuietOutput) {
-            CLog.i(format, args);
-        } else {
-            CLog.logAndDisplay(LogLevel.INFO, format, args);
-        }
+    /**
+     *  Log a warning to the console.
+     */
+    private static void warn(String format, Object... args) {
+        log(LogLevel.WARN, format, args);
+    }
+
+    /**
+     * Log a message to the console
+     */
+    private static void log(LogLevel level, String format, Object... args) {
+        CLog.logAndDisplay(level, format, args);
+    }
+
+    /**
+     * For testing
+     */
+    IInvocationResult getResult() {
+        return mResult;
     }
 }
diff --git a/common/host-side/tradefed/tests/src/com/android/compatibility/common/tradefed/testtype/ModuleDefTest.java b/common/host-side/tradefed/tests/src/com/android/compatibility/common/tradefed/testtype/ModuleDefTest.java
index 8714c1d..25d6930 100644
--- a/common/host-side/tradefed/tests/src/com/android/compatibility/common/tradefed/testtype/ModuleDefTest.java
+++ b/common/host-side/tradefed/tests/src/com/android/compatibility/common/tradefed/testtype/ModuleDefTest.java
@@ -22,7 +22,10 @@
 import com.android.tradefed.result.ITestInvocationListener;
 import com.android.tradefed.targetprep.ITargetPreparer;
 import com.android.tradefed.testtype.IAbi;
+import com.android.tradefed.testtype.IAbiReceiver;
 import com.android.tradefed.testtype.IRemoteTest;
+import com.android.tradefed.testtype.IRuntimeHintProvider;
+import com.android.tradefed.testtype.ITestCollector;
 import com.android.tradefed.testtype.ITestFilterReceiver;
 
 import junit.framework.TestCase;
@@ -62,7 +65,8 @@
         assertEquals("Incorrect exclude filter", TEST_1, mockTest.mExcludeFilters.get(0));
     }
 
-    private class MockRemoteTest implements IRemoteTest, ITestFilterReceiver {
+    private class MockRemoteTest implements IRemoteTest, ITestFilterReceiver, IAbiReceiver,
+            IRuntimeHintProvider, ITestCollector {
 
         private final List<String> mIncludeFilters = new ArrayList<>();
         private final List<String> mExcludeFilters = new ArrayList<>();
@@ -92,6 +96,20 @@
             // Do nothing
         }
 
+        @Override
+        public void setAbi(IAbi abi) {
+            // Do nothing
+        }
+
+        @Override
+        public long getRuntimeHint() {
+            return 1L;
+        }
+
+        @Override
+        public void setCollectTestsOnly(boolean shouldCollectTest) {
+            // Do nothing
+        }
     }
 
     private class MockListener extends NoOpTestInvocationListener {}
diff --git a/common/host-side/tradefed/tests/src/com/android/compatibility/common/tradefed/testtype/ShardableTestStub.java b/common/host-side/tradefed/tests/src/com/android/compatibility/common/tradefed/testtype/ShardableTestStub.java
index 52a1aad..d3fe2a7 100644
--- a/common/host-side/tradefed/tests/src/com/android/compatibility/common/tradefed/testtype/ShardableTestStub.java
+++ b/common/host-side/tradefed/tests/src/com/android/compatibility/common/tradefed/testtype/ShardableTestStub.java
@@ -19,16 +19,23 @@
 import com.android.tradefed.config.Option;
 import com.android.tradefed.device.DeviceNotAvailableException;
 import com.android.tradefed.result.ITestInvocationListener;
+import com.android.tradefed.testtype.IAbi;
+import com.android.tradefed.testtype.IAbiReceiver;
 import com.android.tradefed.testtype.IBuildReceiver;
 import com.android.tradefed.testtype.IRemoteTest;
+import com.android.tradefed.testtype.IRuntimeHintProvider;
 import com.android.tradefed.testtype.IShardableTest;
+import com.android.tradefed.testtype.ITestCollector;
+import com.android.tradefed.testtype.ITestFilterReceiver;
 
 import junit.framework.Assert;
 
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.List;
 
-public class ShardableTestStub implements IRemoteTest, IShardableTest, IBuildReceiver {
+public class ShardableTestStub implements IRemoteTest, IShardableTest, IBuildReceiver,
+        IAbiReceiver, IRuntimeHintProvider, ITestCollector, ITestFilterReceiver {
 
     @Option(name = "module")
     String mModule;
@@ -70,4 +77,40 @@
         }
         return mShards;
     }
+
+    @Override
+    public void setAbi(IAbi abi) {
+        // Do nothing
+    }
+
+    @Override
+    public long getRuntimeHint() {
+        return 1L;
+    }
+
+    @Override
+    public void setCollectTestsOnly(boolean shouldCollectTest) {
+        // Do nothing
+    }
+
+    @Override
+    public void addIncludeFilter(String filter) {
+
+    }
+
+    @Override
+    public void addAllIncludeFilters(List<String> filters) {
+
+    }
+
+    @Override
+    public void addExcludeFilter(String filter) {
+
+    }
+
+    @Override
+    public void addAllExcludeFilters(List<String> filters) {
+
+    }
+
 }
diff --git a/common/host-side/tradefed/tests/src/com/android/compatibility/common/tradefed/testtype/TestStub.java b/common/host-side/tradefed/tests/src/com/android/compatibility/common/tradefed/testtype/TestStub.java
index 8a6ab69..3acbcb9 100644
--- a/common/host-side/tradefed/tests/src/com/android/compatibility/common/tradefed/testtype/TestStub.java
+++ b/common/host-side/tradefed/tests/src/com/android/compatibility/common/tradefed/testtype/TestStub.java
@@ -18,9 +18,19 @@
 import com.android.tradefed.config.Option;
 import com.android.tradefed.device.DeviceNotAvailableException;
 import com.android.tradefed.result.ITestInvocationListener;
+import com.android.tradefed.testtype.IAbi;
+import com.android.tradefed.testtype.IAbiReceiver;
+import com.android.tradefed.testtype.IBuildReceiver;
 import com.android.tradefed.testtype.IRemoteTest;
+import com.android.tradefed.testtype.IRuntimeHintProvider;
+import com.android.tradefed.testtype.IShardableTest;
+import com.android.tradefed.testtype.ITestCollector;
+import com.android.tradefed.testtype.ITestFilterReceiver;
 
-public class TestStub implements IRemoteTest {
+import java.util.List;
+
+public class TestStub implements IRemoteTest, IAbiReceiver, IRuntimeHintProvider, ITestCollector,
+        ITestFilterReceiver {
 
     @Option(name = "module")
     String mModule;
@@ -37,4 +47,39 @@
         // Do nothing
     }
 
+    @Override
+    public void setAbi(IAbi abi) {
+        // Do nothing
+    }
+
+    @Override
+    public long getRuntimeHint() {
+        return 1L;
+    }
+
+    @Override
+    public void setCollectTestsOnly(boolean shouldCollectTest) {
+        // Do nothing
+    }
+
+    @Override
+    public void addIncludeFilter(String filter) {
+
+    }
+
+    @Override
+    public void addAllIncludeFilters(List<String> filters) {
+
+    }
+
+    @Override
+    public void addExcludeFilter(String filter) {
+
+    }
+
+    @Override
+    public void addAllExcludeFilters(List<String> filters) {
+
+    }
+
 }
diff --git a/tests/core/runner/src/com/android/cts/core/runner/AndroidJUnitRunnerConstants.java b/tests/core/runner/src/com/android/cts/core/runner/AndroidJUnitRunnerConstants.java
index 8875c13..8bc2f01 100644
--- a/tests/core/runner/src/com/android/cts/core/runner/AndroidJUnitRunnerConstants.java
+++ b/tests/core/runner/src/com/android/cts/core/runner/AndroidJUnitRunnerConstants.java
@@ -92,6 +92,11 @@
     String ARGUMENT_COUNT = "count";
 
     /**
+     * The per test timeout value.
+     */
+    String ARGUMENT_TIMEOUT = "timeout_msec";
+
+    /**
      * Token representing how long (in seconds) the current test took to execute.
      *
      * <p>The equivalent constant in {@code InstrumentationTestRunner} is private.
diff --git a/tests/core/runner/src/com/android/cts/core/runner/CoreTestRunner.java b/tests/core/runner/src/com/android/cts/core/runner/CoreTestRunner.java
index 58f34c3..887762f 100644
--- a/tests/core/runner/src/com/android/cts/core/runner/CoreTestRunner.java
+++ b/tests/core/runner/src/com/android/cts/core/runner/CoreTestRunner.java
@@ -59,6 +59,7 @@
 import static com.android.cts.core.runner.AndroidJUnitRunnerConstants.ARGUMENT_TEST_CLASS;
 import static com.android.cts.core.runner.AndroidJUnitRunnerConstants.ARGUMENT_TEST_FILE;
 import static com.android.cts.core.runner.AndroidJUnitRunnerConstants.ARGUMENT_TEST_PACKAGE;
+import static com.android.cts.core.runner.AndroidJUnitRunnerConstants.ARGUMENT_TIMEOUT;
 
 /**
  * A drop-in replacement for AndroidJUnitTestRunner, which understands the same arguments, and has
@@ -86,6 +87,9 @@
     /** Only log the number of tests, and not run them. */
     private boolean logOnly;
 
+    /** The amount of time in millis to wait for a single test to complete. */
+    private long testTimeout;
+
     /**
      * The container for any test expectations.
      */
@@ -120,6 +124,7 @@
 
         this.logOnly = "true".equalsIgnoreCase(args.getString(ARGUMENT_LOG_ONLY));
         this.testCountOnly = args.getBoolean(ARGUMENT_COUNT);
+        this.testTimeout = parseUnsignedLong(args.getString(ARGUMENT_TIMEOUT), ARGUMENT_TIMEOUT);
 
         try {
             // Get the set of resource names containing the expectations.
@@ -228,7 +233,7 @@
         }
 
         AndroidRunnerParams runnerParams = new AndroidRunnerParams(this, args,
-                logOnly || testCountOnly, -1, false);
+                logOnly || testCountOnly, testTimeout, false /*ignoreSuiteMethods*/);
 
         JUnitCore core = new JUnitCore();
 
@@ -307,4 +312,22 @@
             throw err;
         }
     }
+
+    /**
+     * Parse long from given value - except either Long or String.
+     *
+     * @return the value, -1 if not found
+     * @throws NumberFormatException if value is negative or not a number
+     */
+    private static long parseUnsignedLong(Object value, String name) {
+        if (value != null) {
+            long longValue = Long.parseLong(value.toString());
+            if (longValue < 0) {
+                throw new NumberFormatException(name + " can not be negative");
+            }
+            return longValue;
+        }
+        return -1;
+    }
+
 }
diff --git a/tests/tests/graphics/src/android/opengl/cts/OpenGlEsVersionTest.java b/tests/tests/graphics/src/android/opengl/cts/OpenGlEsVersionTest.java
index 8b99003..77c6da1 100644
--- a/tests/tests/graphics/src/android/opengl/cts/OpenGlEsVersionTest.java
+++ b/tests/tests/graphics/src/android/opengl/cts/OpenGlEsVersionTest.java
@@ -174,7 +174,6 @@
             "EGL_ANDROID_front_buffer_auto_refresh",
             "EGL_EXT_protected_content",
             "EGL_KHR_mutable_render_buffer",
-            "EGL_KHR_reusable_sync",
             "EGL_KHR_wait_sync",
         };
 
diff --git a/tools/cts-tradefed/Android.mk b/tools/cts-tradefed/Android.mk
index 6ae6066..32babe6 100644
--- a/tools/cts-tradefed/Android.mk
+++ b/tools/cts-tradefed/Android.mk
@@ -25,7 +25,7 @@
 LOCAL_SUITE_TARGET_ARCH := $(TARGET_ARCH)
 LOCAL_SUITE_NAME := CTS
 LOCAL_SUITE_FULLNAME := "Compatibility Test Suite"
-LOCAL_SUITE_VERSION := 5.0
+LOCAL_SUITE_VERSION := 7.0
 
 LOCAL_MODULE := cts-tradefed
 
