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 17 package com.android.protolog.tool 18 19 import com.android.json.stream.JsonReader 20 import com.android.protolog.tool.ViewerConfigBuilder.LogCall 21 import org.junit.Assert.assertEquals 22 import org.junit.Test 23 import org.mockito.Mockito 24 import java.io.StringReader 25 26 class ViewerConfigBuilderTest { 27 companion object { 28 private val TAG1 = "WM_TEST" 29 private val TAG2 = "WM_DEBUG" 30 private val TEST1 = ViewerConfigParser.ConfigEntry("test1", LogLevel.INFO.name, TAG1) 31 private val TEST2 = ViewerConfigParser.ConfigEntry("test2", LogLevel.DEBUG.name, TAG2) 32 private val TEST3 = ViewerConfigParser.ConfigEntry("test3", LogLevel.ERROR.name, TAG2) 33 private val GROUP1 = LogGroup("TEST_GROUP", true, true, TAG1) 34 private val GROUP2 = LogGroup("DEBUG_GROUP", true, true, TAG2) 35 private val GROUP3 = LogGroup("DEBUG_GROUP", true, true, TAG2) 36 private val GROUP_DISABLED = LogGroup("DEBUG_GROUP", false, true, TAG2) 37 private val GROUP_TEXT_DISABLED = LogGroup("DEBUG_GROUP", true, false, TAG2) 38 private const val PATH = "/tmp/test.java" 39 } 40 41 private val configBuilder = ViewerConfigBuilder(Mockito.mock(ProtoLogCallProcessor::class.java)) 42 43 private fun parseConfig(json: String): Map<Int, ViewerConfigParser.ConfigEntry> { 44 return ViewerConfigParser().parseConfig(JsonReader(StringReader(json))) 45 } 46 47 @Test 48 fun processClass() { 49 configBuilder.addLogCalls(listOf( 50 LogCall(TEST1.messageString, LogLevel.INFO, GROUP1, PATH), 51 LogCall(TEST2.messageString, LogLevel.DEBUG, GROUP2, PATH), 52 LogCall(TEST3.messageString, LogLevel.ERROR, GROUP3, PATH)).withContext()) 53 54 val parsedConfig = parseConfig(configBuilder.build()) 55 assertEquals(3, parsedConfig.size) 56 assertEquals(TEST1, parsedConfig[CodeUtils.hash(PATH, 57 TEST1.messageString, LogLevel.INFO, GROUP1)]) 58 assertEquals(TEST2, parsedConfig[CodeUtils.hash(PATH, TEST2.messageString, 59 LogLevel.DEBUG, GROUP2)]) 60 assertEquals(TEST3, parsedConfig[CodeUtils.hash(PATH, TEST3.messageString, 61 LogLevel.ERROR, GROUP3)]) 62 } 63 64 @Test 65 fun processClass_nonUnique() { 66 configBuilder.addLogCalls(listOf( 67 LogCall(TEST1.messageString, LogLevel.INFO, GROUP1, PATH), 68 LogCall(TEST1.messageString, LogLevel.INFO, GROUP1, PATH), 69 LogCall(TEST1.messageString, LogLevel.INFO, GROUP1, PATH)).withContext()) 70 71 val parsedConfig = parseConfig(configBuilder.build()) 72 assertEquals(1, parsedConfig.size) 73 assertEquals(TEST1, parsedConfig[CodeUtils.hash(PATH, TEST1.messageString, 74 LogLevel.INFO, GROUP1)]) 75 } 76 77 @Test 78 fun processClass_disabled() { 79 configBuilder.addLogCalls(listOf( 80 LogCall(TEST1.messageString, LogLevel.INFO, GROUP1, PATH), 81 LogCall(TEST2.messageString, LogLevel.DEBUG, GROUP_DISABLED, PATH), 82 LogCall(TEST3.messageString, LogLevel.ERROR, GROUP_TEXT_DISABLED, PATH)) 83 .withContext()) 84 85 val parsedConfig = parseConfig(configBuilder.build()) 86 assertEquals(2, parsedConfig.size) 87 assertEquals(TEST1, parsedConfig[CodeUtils.hash( 88 PATH, TEST1.messageString, LogLevel.INFO, GROUP1)]) 89 assertEquals(TEST3, parsedConfig[CodeUtils.hash( 90 PATH, TEST3.messageString, LogLevel.ERROR, GROUP_TEXT_DISABLED)]) 91 } 92 93 private fun List<LogCall>.withContext() = map { it to ParsingContext() } 94 } 95