Home | History | Annotate | Download | only in util
      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 
     17 package android.net.util;
     18 
     19 import static org.junit.Assert.assertEquals;
     20 import static org.junit.Assert.assertTrue;
     21 
     22 import android.support.test.filters.SmallTest;
     23 import android.support.test.runner.AndroidJUnit4;
     24 
     25 import org.junit.Test;
     26 import org.junit.runner.RunWith;
     27 
     28 import java.io.ByteArrayOutputStream;
     29 import java.io.PrintWriter;
     30 import java.util.ArrayList;
     31 import java.util.Vector;
     32 
     33 @RunWith(AndroidJUnit4.class)
     34 @SmallTest
     35 public class SharedLogTest {
     36     private static final String TIMESTAMP_PATTERN = "\\d{2}:\\d{2}:\\d{2}";
     37     private static final String TIMESTAMP = "HH:MM:SS";
     38 
     39     @Test
     40     public void testBasicOperation() {
     41         final SharedLog logTop = new SharedLog("top");
     42         logTop.mark("first post!");
     43 
     44         final SharedLog logLevel2a = logTop.forSubComponent("twoA");
     45         final SharedLog logLevel2b = logTop.forSubComponent("twoB");
     46         logLevel2b.e("2b or not 2b");
     47         logLevel2a.w("second post?");
     48 
     49         final SharedLog logLevel3 = logLevel2a.forSubComponent("three");
     50         logTop.log("still logging");
     51         logLevel3.log("3 >> 2");
     52         logLevel2a.mark("ok: last post");
     53 
     54         final String[] expected = {
     55             " - MARK first post!",
     56             " - [twoB] ERROR 2b or not 2b",
     57             " - [twoA] WARN second post?",
     58             " - still logging",
     59             " - [twoA.three] 3 >> 2",
     60             " - [twoA] MARK ok: last post",
     61         };
     62         // Verify the logs are all there and in the correct order.
     63         verifyLogLines(expected, logTop);
     64 
     65         // In fact, because they all share the same underlying LocalLog,
     66         // every subcomponent SharedLog's dump() is identical.
     67         verifyLogLines(expected, logLevel2a);
     68         verifyLogLines(expected, logLevel2b);
     69         verifyLogLines(expected, logLevel3);
     70     }
     71 
     72     private static void verifyLogLines(String[] expected, SharedLog log) {
     73         final ByteArrayOutputStream ostream = new ByteArrayOutputStream();
     74         final PrintWriter pw = new PrintWriter(ostream, true);
     75         log.dump(null, pw, null);
     76 
     77         final String dumpOutput = ostream.toString();
     78         assertTrue(dumpOutput != null);
     79         assertTrue(!"".equals(dumpOutput));
     80 
     81         final String[] lines = dumpOutput.split("\n");
     82         assertEquals(expected.length, lines.length);
     83 
     84         for (int i = 0; i < expected.length; i++) {
     85             String got = lines[i];
     86             String want = expected[i];
     87             assertTrue(String.format("'%s' did not contain '%s'", got, want), got.endsWith(want));
     88             assertTrue(String.format("'%s' did not contain a %s timestamp", got, TIMESTAMP),
     89                     got.replaceFirst(TIMESTAMP_PATTERN, TIMESTAMP).contains(TIMESTAMP));
     90         }
     91     }
     92 }
     93