| /* |
| * Copyright (C) 2019 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 com.android.protolog.tool |
| |
| import com.android.json.stream.JsonReader |
| import org.junit.Assert.assertEquals |
| import org.junit.Test |
| import java.io.StringReader |
| |
| class ViewerConfigParserTest { |
| private val parser = ViewerConfigParser() |
| |
| private fun getJSONReader(str: String): JsonReader { |
| return JsonReader(StringReader(str)) |
| } |
| |
| @Test |
| fun parseMessage() { |
| val json = """ |
| { |
| "message": "Test completed successfully: %b", |
| "level": "ERROR", |
| "group": "GENERIC_WM" |
| } |
| """ |
| val msg = parser.parseMessage(getJSONReader(json)) |
| assertEquals("Test completed successfully: %b", msg.messageString) |
| assertEquals("ERROR", msg.level) |
| assertEquals("GENERIC_WM", msg.groupName) |
| } |
| |
| @Test |
| fun parseMessage_reorder() { |
| val json = """ |
| { |
| "group": "GENERIC_WM", |
| "level": "ERROR", |
| "message": "Test completed successfully: %b" |
| } |
| """ |
| val msg = parser.parseMessage(getJSONReader(json)) |
| assertEquals("Test completed successfully: %b", msg.messageString) |
| assertEquals("ERROR", msg.level) |
| assertEquals("GENERIC_WM", msg.groupName) |
| } |
| |
| @Test |
| fun parseMessage_unknownEntry() { |
| val json = """ |
| { |
| "unknown": "unknown entries should not block parsing", |
| "message": "Test completed successfully: %b", |
| "level": "ERROR", |
| "group": "GENERIC_WM" |
| } |
| """ |
| val msg = parser.parseMessage(getJSONReader(json)) |
| assertEquals("Test completed successfully: %b", msg.messageString) |
| assertEquals("ERROR", msg.level) |
| assertEquals("GENERIC_WM", msg.groupName) |
| } |
| |
| @Test(expected = InvalidViewerConfigException::class) |
| fun parseMessage_noMessage() { |
| val json = """ |
| { |
| "level": "ERROR", |
| "group": "GENERIC_WM" |
| } |
| """ |
| parser.parseMessage(getJSONReader(json)) |
| } |
| |
| @Test(expected = InvalidViewerConfigException::class) |
| fun parseMessage_noLevel() { |
| val json = """ |
| { |
| "message": "Test completed successfully: %b", |
| "group": "GENERIC_WM" |
| } |
| """ |
| parser.parseMessage(getJSONReader(json)) |
| } |
| |
| @Test(expected = InvalidViewerConfigException::class) |
| fun parseMessage_noGroup() { |
| val json = """ |
| { |
| "message": "Test completed successfully: %b", |
| "level": "ERROR" |
| } |
| """ |
| parser.parseMessage(getJSONReader(json)) |
| } |
| |
| @Test |
| fun parseGroup() { |
| val json = """ |
| { |
| "tag": "WindowManager" |
| } |
| """ |
| val group = parser.parseGroup(getJSONReader(json)) |
| assertEquals("WindowManager", group.tag) |
| } |
| |
| @Test |
| fun parseGroup_unknownEntry() { |
| val json = """ |
| { |
| "unknown": "unknown entries should not block parsing", |
| "tag": "WindowManager" |
| } |
| """ |
| val group = parser.parseGroup(getJSONReader(json)) |
| assertEquals("WindowManager", group.tag) |
| } |
| |
| @Test(expected = InvalidViewerConfigException::class) |
| fun parseGroup_noTag() { |
| val json = """ |
| { |
| } |
| """ |
| parser.parseGroup(getJSONReader(json)) |
| } |
| |
| @Test |
| fun parseMessages() { |
| val json = """ |
| { |
| "70933285": { |
| "message": "Test completed successfully: %b", |
| "level": "ERROR", |
| "group": "GENERIC_WM" |
| }, |
| "1792430067": { |
| "message": "Attempted to add window to a display that does not exist: %d. Aborting.", |
| "level": "WARN", |
| "group": "ERROR_WM" |
| } |
| } |
| """ |
| val messages = parser.parseMessages(getJSONReader(json)) |
| assertEquals(2, messages.size) |
| val msg1 = |
| ViewerConfigParser.MessageEntry("Test completed successfully: %b", |
| "ERROR", "GENERIC_WM") |
| val msg2 = |
| ViewerConfigParser.MessageEntry("Attempted to add window to a display that " + |
| "does not exist: %d. Aborting.", "WARN", "ERROR_WM") |
| |
| assertEquals(msg1, messages[70933285]) |
| assertEquals(msg2, messages[1792430067]) |
| } |
| |
| @Test(expected = InvalidViewerConfigException::class) |
| fun parseMessages_invalidHash() { |
| val json = """ |
| { |
| "invalid": { |
| "message": "Test completed successfully: %b", |
| "level": "ERROR", |
| "group": "GENERIC_WM" |
| } |
| } |
| """ |
| parser.parseMessages(getJSONReader(json)) |
| } |
| |
| @Test |
| fun parseGroups() { |
| val json = """ |
| { |
| "GENERIC_WM": { |
| "tag": "WindowManager" |
| }, |
| "ERROR_WM": { |
| "tag": "WindowManagerError" |
| } |
| } |
| """ |
| val groups = parser.parseGroups(getJSONReader(json)) |
| assertEquals(2, groups.size) |
| val grp1 = ViewerConfigParser.GroupEntry("WindowManager") |
| val grp2 = ViewerConfigParser.GroupEntry("WindowManagerError") |
| assertEquals(grp1, groups["GENERIC_WM"]) |
| assertEquals(grp2, groups["ERROR_WM"]) |
| } |
| |
| @Test |
| fun parseConfig() { |
| val json = """ |
| { |
| "version": "${Constants.VERSION}", |
| "messages": { |
| "70933285": { |
| "message": "Test completed successfully: %b", |
| "level": "ERROR", |
| "group": "GENERIC_WM" |
| } |
| }, |
| "groups": { |
| "GENERIC_WM": { |
| "tag": "WindowManager" |
| } |
| } |
| } |
| """ |
| val config = parser.parseConfig(getJSONReader(json)) |
| assertEquals(1, config.size) |
| val cfg1 = ViewerConfigParser.ConfigEntry("Test completed successfully: %b", |
| "ERROR", "WindowManager") |
| assertEquals(cfg1, config[70933285]) |
| } |
| |
| @Test(expected = InvalidViewerConfigException::class) |
| fun parseConfig_invalidVersion() { |
| val json = """ |
| { |
| "version": "invalid", |
| "messages": { |
| "70933285": { |
| "message": "Test completed successfully: %b", |
| "level": "ERROR", |
| "group": "GENERIC_WM" |
| } |
| }, |
| "groups": { |
| "GENERIC_WM": { |
| "tag": "WindowManager" |
| } |
| } |
| } |
| """ |
| parser.parseConfig(getJSONReader(json)) |
| } |
| |
| @Test(expected = InvalidViewerConfigException::class) |
| fun parseConfig_noVersion() { |
| val json = """ |
| { |
| "messages": { |
| "70933285": { |
| "message": "Test completed successfully: %b", |
| "level": "ERROR", |
| "group": "GENERIC_WM" |
| } |
| }, |
| "groups": { |
| "GENERIC_WM": { |
| "tag": "WindowManager" |
| } |
| } |
| } |
| """ |
| parser.parseConfig(getJSONReader(json)) |
| } |
| |
| @Test(expected = InvalidViewerConfigException::class) |
| fun parseConfig_noMessages() { |
| val json = """ |
| { |
| "version": "${Constants.VERSION}", |
| "groups": { |
| "GENERIC_WM": { |
| "tag": "WindowManager" |
| } |
| } |
| } |
| """ |
| parser.parseConfig(getJSONReader(json)) |
| } |
| |
| @Test(expected = InvalidViewerConfigException::class) |
| fun parseConfig_noGroups() { |
| val json = """ |
| { |
| "version": "${Constants.VERSION}", |
| "messages": { |
| "70933285": { |
| "message": "Test completed successfully: %b", |
| "level": "ERROR", |
| "group": "GENERIC_WM" |
| } |
| } |
| } |
| """ |
| parser.parseConfig(getJSONReader(json)) |
| } |
| |
| @Test(expected = InvalidViewerConfigException::class) |
| fun parseConfig_missingGroup() { |
| val json = """ |
| { |
| "version": "${Constants.VERSION}", |
| "messages": { |
| "70933285": { |
| "message": "Test completed successfully: %b", |
| "level": "ERROR", |
| "group": "GENERIC_WM" |
| } |
| }, |
| "groups": { |
| "ERROR_WM": { |
| "tag": "WindowManager" |
| } |
| } |
| } |
| """ |
| parser.parseConfig(getJSONReader(json)) |
| } |
| } |