| /* |
| * 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.protologtool |
| |
| import org.junit.Assert.assertEquals |
| import org.junit.Test |
| |
| class CommandOptionsTest { |
| companion object { |
| val TEST_JAVA_SRC = listOf( |
| "frameworks/base/services/core/java/com/android/server/wm/" + |
| "AccessibilityController.java", |
| "frameworks/base/services/core/java/com/android/server/wm/ActivityDisplay.java", |
| "frameworks/base/services/core/java/com/android/server/wm/" + |
| "ActivityMetricsLaunchObserver.java" |
| ) |
| private const val TEST_PROTOLOG_CLASS = "com.android.server.wm.ProtoLog" |
| private const val TEST_PROTOLOGIMPL_CLASS = "com.android.server.wm.ProtoLogImpl" |
| private const val TEST_PROTOLOGGROUP_CLASS = "com.android.server.wm.ProtoLogGroup" |
| private const val TEST_PROTOLOGGROUP_JAR = "out/soong/.intermediates/frameworks/base/" + |
| "services/core/services.core.wm.protologgroups/android_common/javac/" + |
| "services.core.wm.protologgroups.jar" |
| private const val TEST_SRC_JAR = "out/soong/.temp/sbox175955373/" + |
| "services.core.wm.protolog.srcjar" |
| private const val TEST_VIEWER_JSON = "out/soong/.temp/sbox175955373/" + |
| "services.core.wm.protolog.json" |
| private const val TEST_LOG = "./test_log.pb" |
| } |
| |
| @Test(expected = InvalidCommandException::class) |
| fun noCommand() { |
| CommandOptions(arrayOf()) |
| } |
| |
| @Test(expected = InvalidCommandException::class) |
| fun invalidCommand() { |
| val testLine = "invalid" |
| CommandOptions(testLine.split(' ').toTypedArray()) |
| } |
| |
| @Test |
| fun transformClasses() { |
| val testLine = "transform-protolog-calls --protolog-class $TEST_PROTOLOG_CLASS " + |
| "--protolog-impl-class $TEST_PROTOLOGIMPL_CLASS " + |
| "--loggroups-class $TEST_PROTOLOGGROUP_CLASS " + |
| "--loggroups-jar $TEST_PROTOLOGGROUP_JAR " + |
| "--output-srcjar $TEST_SRC_JAR ${TEST_JAVA_SRC.joinToString(" ")}" |
| val cmd = CommandOptions(testLine.split(' ').toTypedArray()) |
| assertEquals(CommandOptions.TRANSFORM_CALLS_CMD, cmd.command) |
| assertEquals(TEST_PROTOLOG_CLASS, cmd.protoLogClassNameArg) |
| assertEquals(TEST_PROTOLOGIMPL_CLASS, cmd.protoLogImplClassNameArg) |
| assertEquals(TEST_PROTOLOGGROUP_CLASS, cmd.protoLogGroupsClassNameArg) |
| assertEquals(TEST_PROTOLOGGROUP_JAR, cmd.protoLogGroupsJarArg) |
| assertEquals(TEST_SRC_JAR, cmd.outputSourceJarArg) |
| assertEquals(TEST_JAVA_SRC, cmd.javaSourceArgs) |
| } |
| |
| @Test(expected = InvalidCommandException::class) |
| fun transformClasses_noProtoLogClass() { |
| val testLine = "transform-protolog-calls " + |
| "--protolog-impl-class $TEST_PROTOLOGIMPL_CLASS " + |
| "--loggroups-class $TEST_PROTOLOGGROUP_CLASS " + |
| "--loggroups-jar $TEST_PROTOLOGGROUP_JAR " + |
| "--output-srcjar $TEST_SRC_JAR ${TEST_JAVA_SRC.joinToString(" ")}" |
| CommandOptions(testLine.split(' ').toTypedArray()) |
| } |
| |
| @Test(expected = InvalidCommandException::class) |
| fun transformClasses_noProtoLogImplClass() { |
| val testLine = "transform-protolog-calls --protolog-class $TEST_PROTOLOG_CLASS " + |
| "--loggroups-class $TEST_PROTOLOGGROUP_CLASS " + |
| "--loggroups-jar $TEST_PROTOLOGGROUP_JAR " + |
| "--output-srcjar $TEST_SRC_JAR ${TEST_JAVA_SRC.joinToString(" ")}" |
| CommandOptions(testLine.split(' ').toTypedArray()) |
| } |
| |
| @Test(expected = InvalidCommandException::class) |
| fun transformClasses_noProtoLogGroupClass() { |
| val testLine = "transform-protolog-calls --protolog-class $TEST_PROTOLOG_CLASS " + |
| "--protolog-impl-class $TEST_PROTOLOGIMPL_CLASS " + |
| "--loggroups-jar $TEST_PROTOLOGGROUP_JAR " + |
| "--output-srcjar $TEST_SRC_JAR ${TEST_JAVA_SRC.joinToString(" ")}" |
| CommandOptions(testLine.split(' ').toTypedArray()) |
| } |
| |
| @Test(expected = InvalidCommandException::class) |
| fun transformClasses_noProtoLogGroupJar() { |
| val testLine = "transform-protolog-calls --protolog-class $TEST_PROTOLOG_CLASS " + |
| "--protolog-impl-class $TEST_PROTOLOGIMPL_CLASS " + |
| "--loggroups-class $TEST_PROTOLOGGROUP_CLASS " + |
| "--output-srcjar $TEST_SRC_JAR ${TEST_JAVA_SRC.joinToString(" ")}" |
| CommandOptions(testLine.split(' ').toTypedArray()) |
| } |
| |
| @Test(expected = InvalidCommandException::class) |
| fun transformClasses_noOutJar() { |
| val testLine = "transform-protolog-calls --protolog-class $TEST_PROTOLOG_CLASS " + |
| "--protolog-impl-class $TEST_PROTOLOGIMPL_CLASS " + |
| "--loggroups-class $TEST_PROTOLOGGROUP_CLASS " + |
| "--loggroups-jar $TEST_PROTOLOGGROUP_JAR " + |
| TEST_JAVA_SRC.joinToString(" ") |
| CommandOptions(testLine.split(' ').toTypedArray()) |
| } |
| |
| @Test(expected = InvalidCommandException::class) |
| fun transformClasses_noJavaInput() { |
| val testLine = "transform-protolog-calls --protolog-class $TEST_PROTOLOG_CLASS " + |
| "--protolog-impl-class $TEST_PROTOLOGIMPL_CLASS " + |
| "--loggroups-class $TEST_PROTOLOGGROUP_CLASS " + |
| "--loggroups-jar $TEST_PROTOLOGGROUP_JAR " + |
| "--output-srcjar $TEST_SRC_JAR" |
| CommandOptions(testLine.split(' ').toTypedArray()) |
| } |
| |
| @Test(expected = InvalidCommandException::class) |
| fun transformClasses_invalidProtoLogClass() { |
| val testLine = "transform-protolog-calls --protolog-class invalid " + |
| "--protolog-impl-class $TEST_PROTOLOGIMPL_CLASS " + |
| "--loggroups-class $TEST_PROTOLOGGROUP_CLASS " + |
| "--loggroups-jar $TEST_PROTOLOGGROUP_JAR " + |
| "--output-srcjar $TEST_SRC_JAR ${TEST_JAVA_SRC.joinToString(" ")}" |
| CommandOptions(testLine.split(' ').toTypedArray()) |
| } |
| |
| @Test(expected = InvalidCommandException::class) |
| fun transformClasses_invalidProtoLogImplClass() { |
| val testLine = "transform-protolog-calls --protolog-class $TEST_PROTOLOG_CLASS " + |
| "--protolog-impl-class invalid " + |
| "--loggroups-class $TEST_PROTOLOGGROUP_CLASS " + |
| "--loggroups-jar $TEST_PROTOLOGGROUP_JAR " + |
| "--output-srcjar $TEST_SRC_JAR ${TEST_JAVA_SRC.joinToString(" ")}" |
| CommandOptions(testLine.split(' ').toTypedArray()) |
| } |
| |
| @Test(expected = InvalidCommandException::class) |
| fun transformClasses_invalidProtoLogGroupClass() { |
| val testLine = "transform-protolog-calls --protolog-class $TEST_PROTOLOG_CLASS " + |
| "--protolog-impl-class $TEST_PROTOLOGIMPL_CLASS " + |
| "--loggroups-class invalid " + |
| "--loggroups-jar $TEST_PROTOLOGGROUP_JAR " + |
| "--output-srcjar $TEST_SRC_JAR ${TEST_JAVA_SRC.joinToString(" ")}" |
| CommandOptions(testLine.split(' ').toTypedArray()) |
| } |
| |
| @Test(expected = InvalidCommandException::class) |
| fun transformClasses_invalidProtoLogGroupJar() { |
| val testLine = "transform-protolog-calls --protolog-class $TEST_PROTOLOG_CLASS " + |
| "--protolog-impl-class $TEST_PROTOLOGIMPL_CLASS " + |
| "--loggroups-class $TEST_PROTOLOGGROUP_CLASS " + |
| "--loggroups-jar invalid.txt " + |
| "--output-srcjar $TEST_SRC_JAR ${TEST_JAVA_SRC.joinToString(" ")}" |
| CommandOptions(testLine.split(' ').toTypedArray()) |
| } |
| |
| @Test(expected = InvalidCommandException::class) |
| fun transformClasses_invalidOutJar() { |
| val testLine = "transform-protolog-calls --protolog-class $TEST_PROTOLOG_CLASS " + |
| "--protolog-impl-class $TEST_PROTOLOGIMPL_CLASS " + |
| "--loggroups-class $TEST_PROTOLOGGROUP_CLASS " + |
| "--loggroups-jar $TEST_PROTOLOGGROUP_JAR " + |
| "--output-srcjar invalid.db ${TEST_JAVA_SRC.joinToString(" ")}" |
| CommandOptions(testLine.split(' ').toTypedArray()) |
| } |
| |
| @Test(expected = InvalidCommandException::class) |
| fun transformClasses_invalidJavaInput() { |
| val testLine = "transform-protolog-calls --protolog-class $TEST_PROTOLOG_CLASS " + |
| "--protolog-impl-class $TEST_PROTOLOGIMPL_CLASS " + |
| "--loggroups-class $TEST_PROTOLOGGROUP_CLASS " + |
| "--loggroups-jar $TEST_PROTOLOGGROUP_JAR " + |
| "--output-srcjar $TEST_SRC_JAR invalid.py" |
| CommandOptions(testLine.split(' ').toTypedArray()) |
| } |
| |
| @Test(expected = InvalidCommandException::class) |
| fun transformClasses_unknownParam() { |
| val testLine = "transform-protolog-calls --protolog-class $TEST_PROTOLOG_CLASS " + |
| "--unknown test --protolog-impl-class $TEST_PROTOLOGIMPL_CLASS " + |
| "--loggroups-class $TEST_PROTOLOGGROUP_CLASS " + |
| "--loggroups-jar $TEST_PROTOLOGGROUP_JAR " + |
| "--output-srcjar $TEST_SRC_JAR ${TEST_JAVA_SRC.joinToString(" ")}" |
| CommandOptions(testLine.split(' ').toTypedArray()) |
| } |
| |
| @Test(expected = InvalidCommandException::class) |
| fun transformClasses_noValue() { |
| val testLine = "transform-protolog-calls --protolog-class $TEST_PROTOLOG_CLASS " + |
| "--protolog-impl-class " + |
| "--loggroups-class $TEST_PROTOLOGGROUP_CLASS " + |
| "--loggroups-jar $TEST_PROTOLOGGROUP_JAR " + |
| "--output-srcjar $TEST_SRC_JAR ${TEST_JAVA_SRC.joinToString(" ")}" |
| CommandOptions(testLine.split(' ').toTypedArray()) |
| } |
| |
| @Test |
| fun generateConfig() { |
| val testLine = "generate-viewer-config --protolog-class $TEST_PROTOLOG_CLASS " + |
| "--loggroups-class $TEST_PROTOLOGGROUP_CLASS " + |
| "--loggroups-jar $TEST_PROTOLOGGROUP_JAR " + |
| "--viewer-conf $TEST_VIEWER_JSON ${TEST_JAVA_SRC.joinToString(" ")}" |
| val cmd = CommandOptions(testLine.split(' ').toTypedArray()) |
| assertEquals(CommandOptions.GENERATE_CONFIG_CMD, cmd.command) |
| assertEquals(TEST_PROTOLOG_CLASS, cmd.protoLogClassNameArg) |
| assertEquals(TEST_PROTOLOGGROUP_CLASS, cmd.protoLogGroupsClassNameArg) |
| assertEquals(TEST_PROTOLOGGROUP_JAR, cmd.protoLogGroupsJarArg) |
| assertEquals(TEST_VIEWER_JSON, cmd.viewerConfigJsonArg) |
| assertEquals(TEST_JAVA_SRC, cmd.javaSourceArgs) |
| } |
| |
| @Test(expected = InvalidCommandException::class) |
| fun generateConfig_noViewerConfig() { |
| val testLine = "generate-viewer-config --protolog-class $TEST_PROTOLOG_CLASS " + |
| "--loggroups-class $TEST_PROTOLOGGROUP_CLASS " + |
| "--loggroups-jar $TEST_PROTOLOGGROUP_JAR " + |
| TEST_JAVA_SRC.joinToString(" ") |
| CommandOptions(testLine.split(' ').toTypedArray()) |
| } |
| |
| @Test(expected = InvalidCommandException::class) |
| fun generateConfig_invalidViewerConfig() { |
| val testLine = "generate-viewer-config --protolog-class $TEST_PROTOLOG_CLASS " + |
| "--loggroups-class $TEST_PROTOLOGGROUP_CLASS " + |
| "--loggroups-jar $TEST_PROTOLOGGROUP_JAR " + |
| "--viewer-conf invalid.yaml ${TEST_JAVA_SRC.joinToString(" ")}" |
| CommandOptions(testLine.split(' ').toTypedArray()) |
| } |
| |
| @Test |
| fun readLog() { |
| val testLine = "read-log --viewer-conf $TEST_VIEWER_JSON $TEST_LOG" |
| val cmd = CommandOptions(testLine.split(' ').toTypedArray()) |
| assertEquals(CommandOptions.READ_LOG_CMD, cmd.command) |
| assertEquals(TEST_VIEWER_JSON, cmd.viewerConfigJsonArg) |
| assertEquals(TEST_LOG, cmd.logProtofileArg) |
| } |
| } |