1 /* 2 * Copyright (C) 2018 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 package com.android.compatibility.common.tradefed.result.suite; 17 18 19 import static org.junit.Assert.assertTrue; 20 21 import com.android.compatibility.common.util.ChecksumReporter.ChecksumValidationException; 22 import com.android.tradefed.metrics.proto.MetricMeasurement.Metric; 23 import com.android.tradefed.result.TestDescription; 24 import com.android.tradefed.result.TestResult; 25 import com.android.tradefed.result.TestRunResult; 26 import com.android.tradefed.util.FileUtil; 27 28 import org.junit.After; 29 import org.junit.Before; 30 import org.junit.Test; 31 import org.junit.runner.RunWith; 32 import org.junit.runners.JUnit4; 33 34 import java.io.File; 35 import java.util.ArrayList; 36 import java.util.Collection; 37 import java.util.HashMap; 38 import java.util.Map.Entry; 39 40 /** 41 * Unit tests for {@link CertificationChecksumHelper}. 42 */ 43 @RunWith(JUnit4.class) 44 public class CertificationChecksumHelperTest { 45 private final static String FINGERPRINT = "thisismyfingerprint"; 46 private File mWorkingDir; 47 private File mFakeLogFile; 48 49 @Before setUp()50 public void setUp() throws Exception { 51 mWorkingDir = FileUtil.createTempDir("certification-tests"); 52 mFakeLogFile = FileUtil.createTempFile("fake-log-file", ".xml", mWorkingDir); 53 FileUtil.writeToFile("Bunch of data to make the file unique", mFakeLogFile); 54 } 55 56 @After tearDown()57 public void tearDown() { 58 FileUtil.recursiveDelete(mWorkingDir); 59 } 60 61 /** 62 * Validation that the checksum generated can be properly checked when re-reading the file. 63 */ 64 @Test testCreateChecksum()65 public void testCreateChecksum() throws ChecksumValidationException { 66 Collection<TestRunResult> results = new ArrayList<>(); 67 TestRunResult run1 = createFakeResults("run1", 2); 68 results.add(run1); 69 TestRunResult run2 = createFakeResults("run2", 3); 70 results.add(run2); 71 boolean res = CertificationChecksumHelper.tryCreateChecksum( 72 mWorkingDir, results, FINGERPRINT); 73 assertTrue(res); 74 // Attempt to parse the results back 75 File checksum = new File(mWorkingDir, CertificationChecksumHelper.NAME); 76 assertTrue(checksum.exists()); 77 CertificationChecksumHelper parser = new CertificationChecksumHelper( 78 mWorkingDir, FINGERPRINT); 79 // Assert that the info are checkable 80 assertTrue(parser.containsFile(mFakeLogFile, mWorkingDir.getName())); 81 // Check run1 82 for (Entry<TestDescription, TestResult> entry : run1.getTestResults().entrySet()) { 83 assertTrue(parser.containsTestResult(entry, run1, FINGERPRINT)); 84 } 85 // Check run2 86 for (Entry<TestDescription, TestResult> entry : run2.getTestResults().entrySet()) { 87 assertTrue(parser.containsTestResult(entry, run2, FINGERPRINT)); 88 } 89 } 90 createFakeResults(String runName, int testCount)91 private TestRunResult createFakeResults(String runName, int testCount) { 92 TestRunResult results = new TestRunResult(); 93 results.testRunStarted(runName, testCount); 94 for (int i = 0; i < testCount; i++) { 95 TestDescription test = new TestDescription("com.class.path", "testMethod" + i); 96 results.testStarted(test); 97 results.testEnded(test, new HashMap<String, Metric>()); 98 } 99 results.testRunEnded(500L, new HashMap<String, Metric>()); 100 return results; 101 } 102 } 103