blob: 827cecafa84d9d6a3173d345e1b26bf975cc57b2 [file] [log] [blame]
/*
* 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 com.android.server.cts;
import android.service.print.ActivePrintServiceProto;
import android.service.print.CachedPrintJobProto;
import android.service.print.PrinterDiscoverySessionProto;
import android.service.print.PrintDocumentInfoProto;
import android.service.print.PrinterIdProto;
import android.service.print.PrinterInfoProto;
import android.service.print.PrintJobInfoProto;
import android.service.print.PrintServiceDumpProto;
import android.service.print.PrintSpoolerInternalStateProto;
import android.service.print.PrintSpoolerStateProto;
import android.service.print.PrintUserStateProto;
import com.android.tradefed.device.DeviceNotAvailableException;
import com.android.tradefed.device.ITestDevice;
import com.android.tradefed.log.LogUtil;
/**
* Test proto dump of print
*/
public class PrintProtoTest extends ProtoDumpTestCase {
/**
* Test that print dump is reasonable
*
* @throws Exception
*/
public void testDump() throws Exception {
// If the device doesn't support printing, then pass.
if (!supportsPrinting(getDevice())) {
LogUtil.CLog.d("Bypass as android.software.print is not supported.");
return;
}
PrintServiceDumpProto dump = getDump(PrintServiceDumpProto.parser(),
"dumpsys print --proto");
verifyPrintServiceDumpProto(dump, PRIVACY_NONE);
}
static void verifyPrintServiceDumpProto(PrintServiceDumpProto dump, final int filterLevel) throws Exception {
if (dump.getUserStatesCount() > 0) {
PrintUserStateProto userState = dump.getUserStatesList().get(0);
assertEquals(0, userState.getUserId());
}
for (PrintUserStateProto pus : dump.getUserStatesList()) {
for (ActivePrintServiceProto aps : pus.getActiveServicesList()) {
verifyActivePrintServiceProto(aps, filterLevel);
}
for (CachedPrintJobProto cpj : pus.getCachedPrintJobsList()) {
verifyPrintJobInfoProto(cpj.getPrintJob(), filterLevel);
}
for (PrinterDiscoverySessionProto pds : pus.getDiscoverySessionsList()) {
verifyPrinterDiscoverySessionProto(pds, filterLevel);
}
verifyPrintSpoolerStateProto(pus.getPrintSpoolerState(), filterLevel);
}
}
private static void verifyActivePrintServiceProto(ActivePrintServiceProto aps, final int filterLevel) throws Exception {
for (PrinterIdProto pip : aps.getTrackedPrintersList()) {
verifyPrinterIdProto(pip, filterLevel);
}
}
private static void verifyPrinterDiscoverySessionProto(PrinterDiscoverySessionProto pds, final int filterLevel) throws Exception {
for (PrinterIdProto pip : pds.getTrackedPrinterRequestsList()) {
verifyPrinterIdProto(pip, filterLevel);
}
for (PrinterInfoProto pip : pds.getPrinterList()) {
verifyPrinterInfoProto(pip, filterLevel);
}
}
private static void verifyPrintDocumentInfoProto(PrintDocumentInfoProto pdi, final int filterLevel) throws Exception {
if (filterLevel == PRIVACY_AUTO) {
assertTrue(pdi.getName().isEmpty());
}
assertTrue(0 <= pdi.getPageCount());
assertTrue(0 <= pdi.getDataSize());
}
private static void verifyPrinterIdProto(PrinterIdProto pip, final int filterLevel) throws Exception {
if (filterLevel == PRIVACY_AUTO) {
assertTrue(pip.getLocalId().isEmpty());
}
}
private static void verifyPrinterInfoProto(PrinterInfoProto pip, final int filterLevel) throws Exception {
verifyPrinterIdProto(pip.getId(), filterLevel);
if (filterLevel == PRIVACY_AUTO) {
assertTrue(pip.getName().isEmpty());
assertTrue(pip.getDescription().isEmpty());
}
assertTrue(
PrinterInfoProto.Status.getDescriptor().getValues()
.contains(pip.getStatus().getValueDescriptor()));
}
private static void verifyPrintJobInfoProto(PrintJobInfoProto pji, final int filterLevel) throws Exception {
if (filterLevel == PRIVACY_AUTO) {
assertTrue(pji.getLabel().isEmpty());
assertTrue(pji.getPrintJobId().isEmpty());
assertTrue(pji.getTag().isEmpty());
}
assertTrue(
PrintJobInfoProto.State.getDescriptor().getValues()
.contains(pji.getState().getValueDescriptor()));
verifyPrinterIdProto(pji.getPrinter(), filterLevel);
verifyPrintDocumentInfoProto(pji.getDocumentInfo(), filterLevel);
}
private static void verifyPrintSpoolerStateProto(PrintSpoolerStateProto pss, final int filterLevel) throws Exception {
verifyPrintSpoolerInternalStateProto(pss.getInternalState(), filterLevel);
}
private static void verifyPrintSpoolerInternalStateProto(PrintSpoolerInternalStateProto psis, final int filterLevel) throws Exception {
for (PrintJobInfoProto pji : psis.getPrintJobsList()) {
verifyPrintJobInfoProto(pji, filterLevel);
}
if (filterLevel == PRIVACY_AUTO) {
assertTrue(0 == psis.getPrintJobFilesCount());
}
}
static boolean supportsPrinting(ITestDevice device) throws DeviceNotAvailableException {
return device.hasFeature("android.software.print");
}
}