Fix MetadataReporter tests

Test: unit tests
Change-Id: Ifeef98b722cfc3d90e4127dbf927d8b22288ad93
diff --git a/common/host-side/tradefed/src/com/android/compatibility/common/tradefed/build/CompatibilityBuildHelper.java b/common/host-side/tradefed/src/com/android/compatibility/common/tradefed/build/CompatibilityBuildHelper.java
index 235d71b..73f8638 100644
--- a/common/host-side/tradefed/src/com/android/compatibility/common/tradefed/build/CompatibilityBuildHelper.java
+++ b/common/host-side/tradefed/src/com/android/compatibility/common/tradefed/build/CompatibilityBuildHelper.java
@@ -33,15 +33,16 @@
 
     public static final String MODULE_IDS = "MODULE_IDS";
 
-    private static final String ROOT_DIR = "ROOT_DIR";
+    public static final String ROOT_DIR = "ROOT_DIR";
+    public static final String SUITE_NAME = "SUITE_NAME";
+    public static final String START_TIME_MS = "START_TIME_MS";
+
     private static final String ROOT_DIR2 = "ROOT_DIR2";
     private static final String SUITE_BUILD = "SUITE_BUILD";
-    private static final String SUITE_NAME = "SUITE_NAME";
     private static final String SUITE_FULL_NAME = "SUITE_FULL_NAME";
     private static final String SUITE_VERSION = "SUITE_VERSION";
     private static final String SUITE_PLAN = "SUITE_PLAN";
     private static final String RESULT_DIR = "RESULT_DIR";
-    private static final String START_TIME_MS = "START_TIME_MS";
     private static final String CONFIG_PATH_PREFIX = "DYNAMIC_CONFIG_FILE:";
     private static final String DYNAMIC_CONFIG_OVERRIDE_URL = "DYNAMIC_CONFIG_OVERRIDE_URL";
     private static final String COMMAND_LINE_ARGS = "command_line_args";
diff --git a/common/host-side/tradefed/src/com/android/compatibility/common/tradefed/result/MetadataReporter.java b/common/host-side/tradefed/src/com/android/compatibility/common/tradefed/result/MetadataReporter.java
index ef04fed..5f94a88 100644
--- a/common/host-side/tradefed/src/com/android/compatibility/common/tradefed/result/MetadataReporter.java
+++ b/common/host-side/tradefed/src/com/android/compatibility/common/tradefed/result/MetadataReporter.java
@@ -16,23 +16,15 @@
 
 package com.android.compatibility.common.tradefed.result;
 
-import com.android.json.stream.JsonWriter;
-
 import com.android.compatibility.common.tradefed.build.CompatibilityBuildHelper;
-import com.android.compatibility.common.tradefed.testtype.CompatibilityTest;
-import com.android.compatibility.common.tradefed.testtype.CompatibilityTest.RetryType;
-import com.android.compatibility.common.util.ResultHandler;
 import com.android.ddmlib.testrunner.TestIdentifier;
+import com.android.json.stream.JsonWriter;
 import com.android.tradefed.build.IBuildInfo;
 import com.android.tradefed.config.Option;
-import com.android.tradefed.config.Option.Importance;
-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.FileUtil;
-import com.android.tradefed.util.TimeUtil;
 
 import java.io.File;
 import java.io.FileNotFoundException;
@@ -51,14 +43,9 @@
     @Option(name = "include-failure-time", description = "Include timing about tests that failed.")
     private boolean mIncludeFailures = false;
 
-    @Option(name = "min-test-duration-sec", description = "Ignore test durations less than this.")
-    private int mMinTestDurationSec = 2;
-
-    @Option(name = CompatibilityTest.RETRY_OPTION,
-            shortName = 'r',
-            description = "retry a previous session.",
-            importance = Importance.IF_UNSET)
-    private Integer mRetrySessionId = null;
+    @Option(name = "min-test-duration", description = "Ignore test durations less than this.",
+            isTimeVal = true)
+    private long mMinTestDuration = 2 * 1000;
 
     private static final String METADATA_DIR = "metadata";
     private CompatibilityBuildHelper mBuildHelper;
@@ -145,17 +132,17 @@
      */
     @Override
     public void testEnded(TestIdentifier test, Map<String, String> testMetrics) {
-        long duration = (System.currentTimeMillis() - mStartTime) / 1000;
+        long duration = System.currentTimeMillis() - mStartTime;
         if (mTestFailed && !mIncludeFailures) {
             return;
         }
-        if (duration < mMinTestDurationSec) {
+        if (duration < mMinTestDuration) {
             return;
         }
 
         TestMetadata metadata = new TestMetadata();
         metadata.testId = buildTestId(test);
-        metadata.seconds = duration;
+        metadata.seconds = duration / 1000; // convert to second for reporting
         mTestMetadata.add(metadata);
     }
 
diff --git a/common/host-side/tradefed/tests/src/com/android/compatibility/common/tradefed/result/MetadataReporterTest.java b/common/host-side/tradefed/tests/src/com/android/compatibility/common/tradefed/result/MetadataReporterTest.java
index 65e1837..dba3128 100644
--- a/common/host-side/tradefed/tests/src/com/android/compatibility/common/tradefed/result/MetadataReporterTest.java
+++ b/common/host-side/tradefed/tests/src/com/android/compatibility/common/tradefed/result/MetadataReporterTest.java
@@ -18,29 +18,25 @@
 
 import com.android.compatibility.common.tradefed.build.CompatibilityBuildHelper;
 import com.android.compatibility.common.util.AbiUtils;
-import com.android.compatibility.common.util.ICaseResult;
-import com.android.compatibility.common.util.IInvocationResult;
-import com.android.compatibility.common.util.IModuleResult;
-import com.android.compatibility.common.util.ITestResult;
-import com.android.compatibility.common.util.TestStatus;
 import com.android.ddmlib.testrunner.TestIdentifier;
 import com.android.tradefed.build.BuildInfo;
 import com.android.tradefed.build.IBuildInfo;
 import com.android.tradefed.config.OptionSetter;
 import com.android.tradefed.util.FileUtil;
+import com.android.tradefed.util.RunUtil;
 
 import junit.framework.TestCase;
 
 import java.io.File;
-import java.io.FileFilter;
 import java.util.Collection;
 import java.util.HashMap;
-import java.util.List;
 
+/**
+ * Unit Tests for {@link MetadataReporter}
+ */
 public class MetadataReporterTest extends TestCase {
 
-    private static final String MIN_TEST_DURATION = "2";
-    private static final String ROOT_PROPERTY = "TESTS_ROOT";
+    private static final String MIN_TEST_DURATION = "10";
     private static final String BUILD_NUMBER = "2";
     private static final String SUITE_PLAN = "cts";
     private static final String DYNAMIC_CONFIG_URL = "";
@@ -54,17 +50,8 @@
     private static final String METHOD_1 = "testBlah1";
     private static final String METHOD_2 = "testBlah2";
     private static final String METHOD_3 = "testBlah3";
-    private static final String TEST_1 = String.format("%s#%s", CLASS, METHOD_1);
-    private static final String TEST_2 = String.format("%s#%s", CLASS, METHOD_2);
-    private static final String TEST_3 = String.format("%s#%s", CLASS, METHOD_3);
     private static final String STACK_TRACE = "Something small is not alright\n " +
             "at four.big.insects.Marley.sing(Marley.java:10)";
-    private static final String RESULT_DIR = "result123";
-    private static final String[] FORMATTING_FILES = {
-        "compatibility_result.css",
-        "compatibility_result.xsd",
-        "compatibility_result.xsl",
-        "logo.png"};
     private static final long START_TIME = 123456L;
 
     private MetadataReporter mReporter;
@@ -77,16 +64,15 @@
 
     @Override
     public void setUp() throws Exception {
-
         mReporter = new MetadataReporter();
         OptionSetter setter = new OptionSetter(mReporter);
-        setter.setOptionValue("min-test-duration-sec", MIN_TEST_DURATION);
+        setter.setOptionValue("min-test-duration", MIN_TEST_DURATION);
         mRoot = FileUtil.createTempDir(ROOT_DIR_NAME);
         mBase = new File(mRoot, BASE_DIR_NAME);
         mBase.mkdirs();
         mTests = new File(mBase, TESTCASES);
         mTests.mkdirs();
-        System.setProperty(ROOT_PROPERTY, mRoot.getAbsolutePath());
+        System.setProperty(CompatibilityBuildHelper.ROOT_DIR, mRoot.getAbsolutePath());
         mBuildInfo = new BuildInfo(BUILD_NUMBER, "", "");
         mBuildHelper = new CompatibilityBuildHelper(mBuildInfo);
         mBuildHelper.init(SUITE_PLAN, DYNAMIC_CONFIG_URL, START_TIME);
@@ -98,22 +84,26 @@
         FileUtil.recursiveDelete(mRoot);
     }
 
+    /**
+     * Test that when tests execute faster than the threshold we do not report then.
+     */
     public void testResultReportingFastTests() throws Exception {
         mReporter.invocationStarted(mBuildInfo);
         mReporter.testRunStarted(ID, 3);
-        runFastTests();
-
+        runTests(0l);
         Collection<MetadataReporter.TestMetadata> metadata = mReporter.getTestMetadata();
         assertTrue(metadata.isEmpty());
-
         mReporter.testRunEnded(10, new HashMap<String, String>());
         mReporter.invocationEnded(10);
     }
 
+    /**
+     * Test that when tests execute slower than the limit we report them if they passed.
+     */
     public void testResultReportingSlowTests() throws Exception {
         mReporter.invocationStarted(mBuildInfo);
         mReporter.testRunStarted(ID, 3);
-        runSlowTests();
+        runTests(50l);
 
         Collection<MetadataReporter.TestMetadata> metadata = mReporter.getTestMetadata();
         assertEquals(metadata.size(), 2); // Two passing slow tests.
@@ -122,46 +112,28 @@
         mReporter.invocationEnded(10);
     }
 
-
     /** Run 4 test. */
-    private void runFastTests() {
+    private void runTests(long waitTime) {
         TestIdentifier test1 = new TestIdentifier(CLASS, METHOD_1);
         mReporter.testStarted(test1);
+        RunUtil.getDefault().sleep(waitTime);
         mReporter.testEnded(test1, new HashMap<String, String>());
 
         TestIdentifier test2 = new TestIdentifier(CLASS, METHOD_2);
         mReporter.testStarted(test2);
+        RunUtil.getDefault().sleep(waitTime);
         mReporter.testEnded(test1, new HashMap<String, String>());
 
         TestIdentifier test3 = new TestIdentifier(CLASS, METHOD_3);
         mReporter.testStarted(test3);
+        RunUtil.getDefault().sleep(waitTime);
         mReporter.testFailed(test3, STACK_TRACE);
+        mReporter.testEnded(test3, new HashMap<String, String>());
 
         TestIdentifier test4 = new TestIdentifier(CLASS, METHOD_3);
         mReporter.testStarted(test4);
+        RunUtil.getDefault().sleep(waitTime);
         mReporter.testIgnored(test4);
-    }
-
-    /** Run 4 tests with delays. 2 passing, 1 failed, 1 ignored. */
-    private void runSlowTests() throws InterruptedException {
-        TestIdentifier test1 = new TestIdentifier(CLASS, METHOD_1);
-        mReporter.testStarted(test1);
-        Thread.sleep(3000);
-        mReporter.testEnded(test1, new HashMap<String, String>());
-
-        TestIdentifier test2 = new TestIdentifier(CLASS, METHOD_2);
-        mReporter.testStarted(test2);
-        Thread.sleep(3000);
-        mReporter.testEnded(test1, new HashMap<String, String>());
-
-        TestIdentifier test3 = new TestIdentifier(CLASS, METHOD_3);
-        mReporter.testStarted(test3);
-        Thread.sleep(3000);
-        mReporter.testFailed(test3, STACK_TRACE);
-
-        TestIdentifier test4 = new TestIdentifier(CLASS, METHOD_3);
-        mReporter.testStarted(test4);
-        Thread.sleep(3000);
-        mReporter.testIgnored(test4);
+        mReporter.testEnded(test4, new HashMap<String, String>());
     }
 }