• Home
  • History
  • Annotate
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1  /*
2   * Copyright (C) 2019 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.collectors;
17  
18  import static org.junit.Assert.assertFalse;
19  import static org.junit.Assert.assertNull;
20  import static org.junit.Assert.assertTrue;
21  import static org.mockito.Mockito.doReturn;
22  import static org.mockito.Mockito.mock;
23  
24  import com.android.tradefed.config.OptionSetter;
25  import com.android.tradefed.device.metric.DeviceMetricData;
26  import com.android.tradefed.device.metric.FilePullerDeviceMetricCollector;
27  import com.android.tradefed.invoker.IInvocationContext;
28  import com.android.tradefed.result.CollectingTestListener;
29  import com.android.tradefed.result.TestRunResult;
30  import com.android.tradefed.testtype.DeviceJUnit4ClassRunner;
31  import com.android.tradefed.testtype.junit4.BaseHostJUnit4Test;
32  import com.android.tradefed.testtype.junit4.DeviceTestRunOptions;
33  
34  import org.junit.Before;
35  import org.junit.Test;
36  import org.junit.runner.RunWith;
37  
38  import java.io.File;
39  import java.io.FileInputStream;
40  import java.io.IOException;
41  import java.net.URLConnection;
42  import java.util.Arrays;
43  
44  /**
45   * Host side tests for the logcat collector, this ensure that we are able to use the collector in a
46   * similar way as the infra.
47   *
48   * <p>Command: mm CollectorHostsideLibTest CollectorDeviceLibTest -j16
49   *
50   * <p>tradefed.sh run commandAndExit template/local_min --template:map test=CollectorHostsideLibTest
51   */
52  @RunWith(DeviceJUnit4ClassRunner.class)
53  public class LogcatCollectorHostTest extends BaseHostJUnit4Test {
54      private static final String TEST_APK = "CollectorDeviceLibTest.apk";
55      private static final String PACKAGE_NAME = "android.device.collectors";
56      private static final String AJUR_RUNNER = "androidx.test.runner.AndroidJUnitRunner";
57  
58      private static final String LOGCAT_COLLECTOR =
59              "android.device.collectors.LogcatCollector";
60  
61      private IInvocationContext mContext;
62      private DeviceTestRunOptions mOptions = null;
63  
64      @Before
setUp()65      public void setUp() throws Exception {
66          installPackage(TEST_APK);
67          assertTrue(isPackageInstalled(PACKAGE_NAME));
68          mOptions = new DeviceTestRunOptions(PACKAGE_NAME);
69          mOptions.setRunner(AJUR_RUNNER);
70          mOptions.addInstrumentationArg("listener", LOGCAT_COLLECTOR);
71          mOptions.setTestClassName("android.device.tests.TestEvents");
72          mOptions.setDisableIsolatedStorage(true);
73  
74          mContext = mock(IInvocationContext.class);
75          doReturn(Arrays.asList(getDevice())).when(mContext).getDevices();
76          doReturn(Arrays.asList(getBuild())).when(mContext).getBuildInfos();
77      }
78  
79      @Test
testCollect()80      public void testCollect() throws Exception {
81          TestFilePullerDeviceMetricCollector collector = new TestFilePullerDeviceMetricCollector();
82          OptionSetter optionSetter = new OptionSetter(collector);
83          String pattern = String.format("%s_.*", LOGCAT_COLLECTOR);
84          optionSetter.setOptionValue("pull-pattern-keys", pattern);
85          collector.init(mContext, new CollectingTestListener());
86          mOptions.addExtraListener(collector);
87          mOptions.setCheckResults(false);
88          runDeviceTests(mOptions);
89          TestRunResult results = getLastDeviceRunResults();
90          assertFalse(results.isRunFailure());
91          // Ensure we actually collected something
92          assertTrue(collector.mCollectedOnce);
93      }
94  
95      private class TestFilePullerDeviceMetricCollector extends FilePullerDeviceMetricCollector {
96  
97          public boolean mCollectedOnce = false;
98  
99          @Override
processMetricFile(String key, File metricFile, DeviceMetricData runData)100          public void processMetricFile(String key, File metricFile, DeviceMetricData runData) {
101              try {
102                  assertTrue(metricFile.getName().endsWith(".txt"));
103                  String mime =
104                          URLConnection.guessContentTypeFromStream(new FileInputStream(metricFile));
105                  assertNull(mime); // guessContentTypeFromStream returns null for text/plain
106              } catch (IOException e) {
107                  throw new RuntimeException(e);
108              } finally {
109                  assertTrue(metricFile.delete());
110              }
111              mCollectedOnce = true;
112          }
113  
114          @Override
processMetricDirectory( String key, File metricDirectory, DeviceMetricData runData)115          public void processMetricDirectory(
116                  String key, File metricDirectory, DeviceMetricData runData) {}
117      }
118  }
119