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 com.android.server.cts; 18 19 import static org.junit.Assume.assumeTrue; 20 21 import android.service.usb.UsbAccessoryProto; 22 import android.service.usb.UsbDebuggingManagerProto; 23 import android.service.usb.UsbDeviceFilterProto; 24 import android.service.usb.UsbDeviceManagerProto; 25 import android.service.usb.UsbDeviceProto; 26 import android.service.usb.UsbHandlerProto; 27 import android.service.usb.UsbHostManagerProto; 28 import android.service.usb.UsbProfileGroupSettingsManagerProto; 29 import android.service.usb.UsbServiceDumpProto; 30 import android.service.usb.UsbSettingsDevicePreferenceProto; 31 import android.service.usb.UsbSettingsManagerProto; 32 import com.android.tradefed.device.DeviceNotAvailableException; 33 import com.android.tradefed.device.ITestDevice; 34 35 /** 36 * Tests for the UsbService proto dump. 37 */ 38 public class UsbIncidentTest extends ProtoDumpTestCase { 39 40 /** Value of PackageManager.FEATURE_USB_HOST */ 41 private static final String FEATURE_USB_HOST = "android.hardware.usb.host"; 42 43 /** Value of PackageManager.FEATURE_USB_ACCESSORY */ 44 private static final String FEATURE_USB_ACCESSORY = "android.hardware.usb.accessory"; 45 hasUsbFunctionality(ITestDevice device)46 public static boolean hasUsbFunctionality(ITestDevice device) throws DeviceNotAvailableException { 47 boolean hasUsbHost = device.hasFeature(FEATURE_USB_HOST); 48 boolean hasUsbAccessory = device.hasFeature(FEATURE_USB_ACCESSORY); 49 return hasUsbHost || hasUsbAccessory; 50 } 51 testUsbServiceDump()52 public void testUsbServiceDump() throws Exception { 53 // Devices that don't support USB functionality won't dump a USB service proto. 54 assumeTrue("Device doesn't support USB functionality.", hasUsbFunctionality(getDevice())); 55 56 final UsbServiceDumpProto dump = getDump(UsbServiceDumpProto.parser(), 57 "dumpsys usb --proto"); 58 59 verifyUsbServiceDumpProto(dump, PRIVACY_NONE); 60 } 61 verifyUsbServiceDumpProto(UsbServiceDumpProto dump, final int filterLevel)62 static void verifyUsbServiceDumpProto(UsbServiceDumpProto dump, final int filterLevel) throws Exception { 63 verifyUsbDeviceManagerProto(dump.getDeviceManager(), filterLevel); 64 verifyUsbHostManagerProto(dump.getHostManager(), filterLevel); 65 verifyUsbSettingsManagerProto(dump.getSettingsManager(), filterLevel); 66 } 67 verifyUsbDeviceManagerProto(UsbDeviceManagerProto udmp, final int filterLevel)68 private static void verifyUsbDeviceManagerProto(UsbDeviceManagerProto udmp, final int filterLevel) throws Exception { 69 verifyUsbHandlerProto(udmp.getHandler(), filterLevel); 70 verifyUsbDebuggingManagerProto(udmp.getDebuggingManager(), filterLevel); 71 } 72 verifyUsbHandlerProto(UsbHandlerProto uhp, final int filterLevel)73 private static void verifyUsbHandlerProto(UsbHandlerProto uhp, final int filterLevel) throws Exception { 74 for (UsbHandlerProto.Function f : uhp.getCurrentFunctionsList()) { 75 assertTrue(UsbHandlerProto.Function.getDescriptor().getValues().contains(f.getValueDescriptor())); 76 } 77 for (UsbHandlerProto.Function f : uhp.getScreenUnlockedFunctionsList()) { 78 assertTrue(UsbHandlerProto.Function.getDescriptor().getValues().contains(f.getValueDescriptor())); 79 } 80 verifyUsbAccessoryProto(uhp.getCurrentAccessory(), filterLevel); 81 } 82 verifyUsbAccessoryProto(UsbAccessoryProto uap, final int filterLevel)83 private static void verifyUsbAccessoryProto(UsbAccessoryProto uap, final int filterLevel) throws Exception { 84 if (filterLevel < PRIVACY_LOCAL) { 85 assertTrue(uap.getSerial().isEmpty()); 86 if (filterLevel == PRIVACY_AUTO) { 87 assertTrue(uap.getUri().isEmpty()); 88 } 89 } 90 } 91 verifyUsbDebuggingManagerProto(UsbDebuggingManagerProto udmp, final int filterLevel)92 private static void verifyUsbDebuggingManagerProto(UsbDebuggingManagerProto udmp, final int filterLevel) throws Exception { 93 if (filterLevel < PRIVACY_LOCAL) { 94 assertTrue(udmp.getSystemKeys().isEmpty()); 95 assertTrue(udmp.getUserKeys().isEmpty()); 96 if (filterLevel < PRIVACY_EXPLICIT) { 97 assertTrue(udmp.getLastKeyReceived().isEmpty()); 98 } 99 } 100 } 101 verifyUsbHostManagerProto(UsbHostManagerProto uhmp, final int filterLevel)102 private static void verifyUsbHostManagerProto(UsbHostManagerProto uhmp, final int filterLevel) throws Exception { 103 for (UsbDeviceProto udp : uhmp.getDevicesList()) { 104 verifyUsbDeviceProto(udp, filterLevel); 105 } 106 } 107 verifyUsbDeviceProto(UsbDeviceProto udp, final int filterLevel)108 private static void verifyUsbDeviceProto(UsbDeviceProto udp, final int filterLevel) throws Exception { 109 if (filterLevel < PRIVACY_LOCAL) { 110 assertTrue(udp.getSerialNumber().isEmpty()); 111 } 112 } 113 verifyUsbSettingsManagerProto(UsbSettingsManagerProto usmp, final int filterLevel)114 private static void verifyUsbSettingsManagerProto(UsbSettingsManagerProto usmp, final int filterLevel) throws Exception { 115 for (UsbProfileGroupSettingsManagerProto upgsmp : usmp.getProfileGroupSettingsList()) { 116 verifyUsbProfileGroupSettingsManagerProto(upgsmp, filterLevel); 117 } 118 } 119 verifyUsbProfileGroupSettingsManagerProto(UsbProfileGroupSettingsManagerProto pgsp, final int filterLevel)120 private static void verifyUsbProfileGroupSettingsManagerProto(UsbProfileGroupSettingsManagerProto pgsp, final int filterLevel) throws Exception { 121 for (UsbSettingsDevicePreferenceProto usdp : pgsp.getDevicePreferencesList()) { 122 verifyUsbDeviceFilterProto(usdp.getFilter(), filterLevel); 123 } 124 } 125 verifyUsbDeviceFilterProto(UsbDeviceFilterProto udfp, final int filterLevel)126 private static void verifyUsbDeviceFilterProto(UsbDeviceFilterProto udfp, final int filterLevel) throws Exception { 127 if (filterLevel == PRIVACY_AUTO) { 128 assertTrue(udfp.getSerialNumber().isEmpty()); 129 } 130 } 131 } 132