Home | History | Annotate | Download | only in metrics
      1 /*
      2  * Copyright (C) 2017 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 android.metrics;
     17 
     18 import android.metrics.MetricsReader.Event;
     19 import android.support.test.filters.LargeTest;
     20 
     21 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
     22 
     23 import junit.framework.TestCase;
     24 
     25 import java.util.Collection;
     26 
     27 @LargeTest
     28 public class MetricsReaderTest extends TestCase {
     29     private static final int FULL_N = 10;
     30     private static final int CHECKPOINTED_N = 4;
     31     private static final int PID = 1;
     32     private static final int UID = 2;
     33 
     34     class FakeLogReader extends MetricsReader.LogReader {
     35         MetricsReader.Event[] mEvents;
     36         private long mHorizonMs;
     37 
     38         public FakeLogReader() {
     39             mEvents = new MetricsReader.Event[FULL_N];
     40             for (int i = 0; i < FULL_N; i++) {
     41                 mEvents[i] = new MetricsReader.Event(
     42                         1000L + i,
     43                         PID,
     44                         UID,
     45                         new LogMaker(i).serialize());
     46             }
     47         }
     48 
     49         @Override
     50         public void readEvents(int[] tags, long horizonMs, Collection<Event> events) {
     51             mHorizonMs = horizonMs;
     52             for (int i = 0; i < mEvents.length; i++) {
     53                 events.add(mEvents[i]);
     54             }
     55         }
     56 
     57         @Override
     58         public void writeCheckpoint(int tag) {
     59             int i = FULL_N - CHECKPOINTED_N - 1;
     60             mEvents[i].setData(new LogMaker(MetricsEvent.METRICS_CHECKPOINT)
     61                     .setSubtype(tag)
     62                     .serialize());
     63         }
     64     }
     65     FakeLogReader mLogReader;
     66     MetricsReader mReader = new MetricsReader();
     67 
     68     public void setUp() {
     69         mLogReader = new FakeLogReader();
     70         mReader.setLogReader(mLogReader);
     71     }
     72 
     73     public void testNonBlockingRead() {
     74         mReader.read(0);
     75         assertEquals(0, mLogReader.mHorizonMs);
     76         for (int i = 0; i < FULL_N; i++) {
     77             assertTrue(mReader.hasNext());
     78             LogMaker log = mReader.next();
     79             assertEquals(i, log.getCategory());
     80         }
     81     }
     82 
     83     public void testReset() {
     84         mReader.read(0);
     85         while (mReader.hasNext()) {
     86             mReader.next();
     87         }
     88         mReader.reset();
     89         for (int i = 0; i < FULL_N; i++) {
     90             assertTrue(mReader.hasNext());
     91             LogMaker log = mReader.next();
     92             assertEquals(i, log.getCategory());
     93         }
     94     }
     95 
     96     public void testPidUid() {
     97         mReader.read(0);
     98         LogMaker log = mReader.next();
     99         assertEquals(PID, log.getProcessId());
    100         assertEquals(UID, log.getUid());
    101     }
    102 
    103     public void testBlockingRead_readResetsHorizon() {
    104         mReader.read(1000);
    105         assertEquals(1000, mLogReader.mHorizonMs);
    106     }
    107 
    108     public void testWriteCheckpoint() {
    109         mReader.checkpoint();
    110         mReader.read(0);
    111         int m = FULL_N - CHECKPOINTED_N;
    112         for (int i = m; i < FULL_N; i++) {
    113             assertTrue(mReader.hasNext());
    114             LogMaker log = mReader.next();
    115             assertEquals(i, log.getCategory());
    116         }
    117     }
    118 }
    119