summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYiming Pan <yimingpan@google.com>2022-01-28 16:59:22 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2022-01-28 16:59:22 +0000
commit6d2cd22d94a9702a3adee6356d32569ebc6599ea (patch)
treee226b7311c5bd6cbf83e3d03f826b127ccf180ff
parent5f1a37d6e7ac9e8adf53fa537a5f5cb7b6849e43 (diff)
parente8d50bdbdc2612682655bc9264858e29ad3b271a (diff)
downloadplatform_testing-6d2cd22d94a9702a3adee6356d32569ebc6599ea.tar.gz
Merge "Verify that Java coverage report can be generated."
-rw-r--r--tests/codecoverage/hosttest/src/android/platform/test/CoverageSmokeTest.java72
1 files changed, 58 insertions, 14 deletions
diff --git a/tests/codecoverage/hosttest/src/android/platform/test/CoverageSmokeTest.java b/tests/codecoverage/hosttest/src/android/platform/test/CoverageSmokeTest.java
index 226340dcd..03dff36da 100644
--- a/tests/codecoverage/hosttest/src/android/platform/test/CoverageSmokeTest.java
+++ b/tests/codecoverage/hosttest/src/android/platform/test/CoverageSmokeTest.java
@@ -1,7 +1,9 @@
package android.platform.test.coverage;
+import static com.google.common.base.Verify.verifyNotNull;
import static com.google.common.truth.Truth.assertThat;
+import com.android.tradefed.build.IBuildInfo;
import com.android.tradefed.device.DeviceNotAvailableException;
import com.android.tradefed.metrics.proto.MetricMeasurement.Metric;
import com.android.tradefed.result.TestRunResult;
@@ -9,7 +11,23 @@ import com.android.tradefed.targetprep.TargetSetupError;
import com.android.tradefed.testtype.DeviceJUnit4ClassRunner;
import com.android.tradefed.testtype.junit4.BaseHostJUnit4Test;
import com.android.tradefed.testtype.junit4.DeviceTestRunOptions;
+import com.android.tradefed.util.AdbRootElevator;
+import com.android.tradefed.util.FileUtil;
+import com.google.common.collect.ImmutableMap;
+import java.io.File;
+import java.io.InputStream;
+import java.io.IOException;
+import java.net.URI;
+import java.nio.file.Files;
+import java.nio.file.FileSystem;
+import java.nio.file.FileSystems;
+
+import org.jacoco.core.analysis.Analyzer;
+import org.jacoco.core.analysis.CoverageBuilder;
+import org.jacoco.core.analysis.IBundleCoverage;
+import org.jacoco.core.tools.ExecFileLoader;
+import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -18,28 +36,54 @@ import org.junit.runner.RunWith;
public final class CoverageSmokeTest extends BaseHostJUnit4Test {
private static final String COVERAGE_MEASUREMENT_KEY = "coverageFilePath";
+ private static final String INNER_JAR_PATH =
+ "out/target/common/obj/APPS/CoverageInstrumentationSampleTest_intermediates/jacoco-report-classes.jar";
- @Test
- public void instrumentationTest_generatesJavaCoverage()
- throws DeviceNotAvailableException, TargetSetupError {
+ @Before
+ public void runCoverageDeviceTests() throws DeviceNotAvailableException, TargetSetupError {
installPackage("CoverageInstrumentationSampleTest.apk");
-
- runCoverageDeviceTests();
-
- TestRunResult testRunResult = getLastDeviceRunResults();
- Metric devicePathMetric = testRunResult.getRunProtoMetrics().get(COVERAGE_MEASUREMENT_KEY);
- assertThat(devicePathMetric).isNotNull();
- String testCoveragePath = devicePathMetric.getMeasurements().getSingleString();
- assertThat(testCoveragePath).isNotNull();
- }
-
- private void runCoverageDeviceTests() throws DeviceNotAvailableException {
DeviceTestRunOptions options =
new DeviceTestRunOptions("android.platform.test.coverage")
.setTestClassName(
"android.platform.test.coverage.CoverageInstrumentationTest")
.setTestMethodName("testCoveredMethod")
+ .setDisableHiddenApiCheck(true)
.addInstrumentationArg("coverage", "true");
runDeviceTests(options);
}
+
+ @Test
+ public void instrumentationTest_generatesJavaCoverage()
+ throws DeviceNotAvailableException, IOException {
+ TestRunResult testRunResult = getLastDeviceRunResults();
+ Metric devicePathMetric = testRunResult.getRunProtoMetrics().get(COVERAGE_MEASUREMENT_KEY);
+ String testCoveragePath = devicePathMetric.getMeasurements().getSingleString();
+ ExecFileLoader execFileLoader = new ExecFileLoader();
+ File coverageFile = null;
+ try (AdbRootElevator adbRoot = new AdbRootElevator(getDevice())) {
+ coverageFile = getDevice().pullFile(testCoveragePath);
+ execFileLoader.load(coverageFile);
+ } catch (DeviceNotAvailableException | IOException e) {
+ throw new RuntimeException(e);
+ } finally {
+ FileUtil.deleteFile(coverageFile);
+ }
+ CoverageBuilder builder = new CoverageBuilder();
+ Analyzer analyzer = new Analyzer(execFileLoader.getExecutionDataStore(), builder);
+ IBuildInfo buildInfo = getBuild();
+ File jacocoAllClassesJar =
+ verifyNotNull(
+ buildInfo.getFile("jacoco-report-classes-all.jar"),
+ "Could not get jacoco-report-classes-all.jar from the build.");
+ URI uri = URI.create("jar:file:" + jacocoAllClassesJar.getPath());
+ try (FileSystem zip = FileSystems.newFileSystem(uri, ImmutableMap.of())) {
+ try (InputStream in = Files.newInputStream(zip.getPath(INNER_JAR_PATH))) {
+ analyzer.analyzeAll(in, "jacoco-report-classes.jar");
+ }
+ }
+ IBundleCoverage coverage = builder.getBundle("JaCoCo Coverage Report");
+
+ assertThat(coverage).isNotNull();
+ assertThat(coverage.getPackages()).isNotEmpty();
+ }
}