• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 android.service.print.ActivePrintServiceProto;
20 import android.service.print.CachedPrintJobProto;
21 import android.service.print.PrinterDiscoverySessionProto;
22 import android.service.print.PrintDocumentInfoProto;
23 import android.service.print.PrinterIdProto;
24 import android.service.print.PrinterInfoProto;
25 import android.service.print.PrintJobInfoProto;
26 import android.service.print.PrintServiceDumpProto;
27 import android.service.print.PrintSpoolerInternalStateProto;
28 import android.service.print.PrintSpoolerStateProto;
29 import android.service.print.PrintUserStateProto;
30 
31 import com.android.tradefed.device.DeviceNotAvailableException;
32 import com.android.tradefed.device.ITestDevice;
33 import com.android.tradefed.log.LogUtil;
34 
35 /**
36  * Test proto dump of print
37  */
38 public class PrintProtoTest extends ProtoDumpTestCase {
39     /**
40      * Test that print dump is reasonable
41      *
42      * @throws Exception
43      */
testDump()44     public void testDump() throws Exception {
45         // If the device doesn't support printing, then pass.
46         if (!supportsPrinting(getDevice())) {
47             LogUtil.CLog.d("Bypass as android.software.print is not supported.");
48             return;
49         }
50 
51         PrintServiceDumpProto dump = getDump(PrintServiceDumpProto.parser(),
52                 "dumpsys print --proto");
53 
54         verifyPrintServiceDumpProto(dump, PRIVACY_NONE);
55     }
56 
verifyPrintServiceDumpProto(PrintServiceDumpProto dump, final int filterLevel)57     static void verifyPrintServiceDumpProto(PrintServiceDumpProto dump, final int filterLevel) throws Exception {
58         for (PrintUserStateProto pus : dump.getUserStatesList()) {
59             for (ActivePrintServiceProto aps : pus.getActiveServicesList()) {
60                 verifyActivePrintServiceProto(aps, filterLevel);
61             }
62             for (CachedPrintJobProto cpj : pus.getCachedPrintJobsList()) {
63                 verifyPrintJobInfoProto(cpj.getPrintJob(), filterLevel);
64             }
65             for (PrinterDiscoverySessionProto pds : pus.getDiscoverySessionsList()) {
66                 verifyPrinterDiscoverySessionProto(pds, filterLevel);
67             }
68             verifyPrintSpoolerStateProto(pus.getPrintSpoolerState(), filterLevel);
69         }
70     }
71 
verifyActivePrintServiceProto(ActivePrintServiceProto aps, final int filterLevel)72     private static void verifyActivePrintServiceProto(ActivePrintServiceProto aps, final int filterLevel) throws Exception {
73         for (PrinterIdProto pip : aps.getTrackedPrintersList()) {
74             verifyPrinterIdProto(pip, filterLevel);
75         }
76     }
77 
verifyPrinterDiscoverySessionProto(PrinterDiscoverySessionProto pds, final int filterLevel)78     private static void verifyPrinterDiscoverySessionProto(PrinterDiscoverySessionProto pds, final int filterLevel) throws Exception {
79         for (PrinterIdProto pip : pds.getTrackedPrinterRequestsList()) {
80             verifyPrinterIdProto(pip, filterLevel);
81         }
82         for (PrinterInfoProto pip : pds.getPrinterList()) {
83             verifyPrinterInfoProto(pip, filterLevel);
84         }
85     }
86 
verifyPrintDocumentInfoProto(PrintDocumentInfoProto pdi, final int filterLevel)87     private static void verifyPrintDocumentInfoProto(PrintDocumentInfoProto pdi, final int filterLevel) throws Exception {
88         if (filterLevel == PRIVACY_AUTO) {
89             assertTrue(pdi.getName().isEmpty());
90         }
91         assertTrue(0 <= pdi.getPageCount());
92         assertTrue(0 <= pdi.getDataSize());
93     }
94 
verifyPrinterIdProto(PrinterIdProto pip, final int filterLevel)95     private static void verifyPrinterIdProto(PrinterIdProto pip, final int filterLevel) throws Exception {
96         if (filterLevel == PRIVACY_AUTO) {
97             assertTrue(pip.getLocalId().isEmpty());
98         }
99     }
100 
verifyPrinterInfoProto(PrinterInfoProto pip, final int filterLevel)101     private static void verifyPrinterInfoProto(PrinterInfoProto pip, final int filterLevel) throws Exception {
102         verifyPrinterIdProto(pip.getId(), filterLevel);
103         if (filterLevel == PRIVACY_AUTO) {
104             assertTrue(pip.getName().isEmpty());
105             assertTrue(pip.getDescription().isEmpty());
106         }
107         assertTrue(
108                 PrinterInfoProto.Status.getDescriptor().getValues()
109                         .contains(pip.getStatus().getValueDescriptor()));
110     }
111 
verifyPrintJobInfoProto(PrintJobInfoProto pji, final int filterLevel)112     private static void verifyPrintJobInfoProto(PrintJobInfoProto pji, final int filterLevel) throws Exception {
113         if (filterLevel == PRIVACY_AUTO) {
114             assertTrue(pji.getLabel().isEmpty());
115             assertTrue(pji.getPrintJobId().isEmpty());
116             assertTrue(pji.getTag().isEmpty());
117         }
118         assertTrue(
119                 PrintJobInfoProto.State.getDescriptor().getValues()
120                         .contains(pji.getState().getValueDescriptor()));
121         verifyPrinterIdProto(pji.getPrinter(), filterLevel);
122         verifyPrintDocumentInfoProto(pji.getDocumentInfo(), filterLevel);
123     }
124 
verifyPrintSpoolerStateProto(PrintSpoolerStateProto pss, final int filterLevel)125     private static void verifyPrintSpoolerStateProto(PrintSpoolerStateProto pss, final int filterLevel) throws Exception {
126         verifyPrintSpoolerInternalStateProto(pss.getInternalState(), filterLevel);
127     }
128 
verifyPrintSpoolerInternalStateProto(PrintSpoolerInternalStateProto psis, final int filterLevel)129     private static void verifyPrintSpoolerInternalStateProto(PrintSpoolerInternalStateProto psis, final int filterLevel) throws Exception {
130         for (PrintJobInfoProto pji : psis.getPrintJobsList()) {
131             verifyPrintJobInfoProto(pji, filterLevel);
132         }
133         if (filterLevel == PRIVACY_AUTO) {
134             assertTrue(0 == psis.getPrintJobFilesCount());
135         }
136     }
137 
supportsPrinting(ITestDevice device)138     static boolean supportsPrinting(ITestDevice device) throws DeviceNotAvailableException {
139         return device.hasFeature("android.software.print");
140     }
141 }
142