96 lines
3.5 KiB
Java
96 lines
3.5 KiB
Java
/*
|
|
* Copyright (C) 2017 The Android Open Source Project
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
package android.net.util;
|
|
|
|
import static org.junit.Assert.assertEquals;
|
|
import static org.junit.Assert.assertTrue;
|
|
|
|
import androidx.test.filters.SmallTest;
|
|
import androidx.test.runner.AndroidJUnit4;
|
|
|
|
import org.junit.Test;
|
|
import org.junit.runner.RunWith;
|
|
|
|
import java.io.ByteArrayOutputStream;
|
|
import java.io.PrintWriter;
|
|
|
|
@RunWith(AndroidJUnit4.class)
|
|
@SmallTest
|
|
public class SharedLogTest {
|
|
private static final String TIMESTAMP_PATTERN = "\\d{2}:\\d{2}:\\d{2}";
|
|
private static final String TIMESTAMP = "HH:MM:SS";
|
|
|
|
@Test
|
|
public void testBasicOperation() {
|
|
final SharedLog logTop = new SharedLog("top");
|
|
logTop.mark("first post!");
|
|
|
|
final SharedLog logLevel2a = logTop.forSubComponent("twoA");
|
|
final SharedLog logLevel2b = logTop.forSubComponent("twoB");
|
|
logLevel2b.e("2b or not 2b");
|
|
logLevel2b.e("No exception", null);
|
|
logLevel2b.e("Wait, here's one", new Exception("Test"));
|
|
logLevel2a.w("second post?");
|
|
|
|
final SharedLog logLevel3 = logLevel2a.forSubComponent("three");
|
|
logTop.log("still logging");
|
|
logLevel3.log("3 >> 2");
|
|
logLevel2a.mark("ok: last post");
|
|
|
|
final String[] expected = {
|
|
" - MARK first post!",
|
|
" - [twoB] ERROR 2b or not 2b",
|
|
" - [twoB] ERROR No exception",
|
|
// No stacktrace in shared log, only in logcat
|
|
" - [twoB] ERROR Wait, here's one: Test",
|
|
" - [twoA] WARN second post?",
|
|
" - still logging",
|
|
" - [twoA.three] 3 >> 2",
|
|
" - [twoA] MARK ok: last post",
|
|
};
|
|
// Verify the logs are all there and in the correct order.
|
|
verifyLogLines(expected, logTop);
|
|
|
|
// In fact, because they all share the same underlying LocalLog,
|
|
// every subcomponent SharedLog's dump() is identical.
|
|
verifyLogLines(expected, logLevel2a);
|
|
verifyLogLines(expected, logLevel2b);
|
|
verifyLogLines(expected, logLevel3);
|
|
}
|
|
|
|
private static void verifyLogLines(String[] expected, SharedLog log) {
|
|
final ByteArrayOutputStream ostream = new ByteArrayOutputStream();
|
|
final PrintWriter pw = new PrintWriter(ostream, true);
|
|
log.dump(null, pw, null);
|
|
|
|
final String dumpOutput = ostream.toString();
|
|
assertTrue(dumpOutput != null);
|
|
assertTrue(!"".equals(dumpOutput));
|
|
|
|
final String[] lines = dumpOutput.split("\n");
|
|
assertEquals(expected.length, lines.length);
|
|
|
|
for (int i = 0; i < expected.length; i++) {
|
|
String got = lines[i];
|
|
String want = expected[i];
|
|
assertTrue(String.format("'%s' did not contain '%s'", got, want), got.endsWith(want));
|
|
assertTrue(String.format("'%s' did not contain a %s timestamp", got, TIMESTAMP),
|
|
got.replaceFirst(TIMESTAMP_PATTERN, TIMESTAMP).contains(TIMESTAMP));
|
|
}
|
|
}
|
|
}
|