1 /*
2 * Copyright (c) 2021 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15 #ifdef IPPOVERUSB_ENABLE
16 #include <gtest/gtest.h>
17 #define private public
18 #include "print_usb_manager.h"
19 #undef private
20 #include "print_ipp_over_usb_constant.h"
21 #include "print_log.h"
22
23 using namespace testing::ext;
24
25 namespace OHOS {
26 namespace Print {
27 static const std::string IPP_PRINTER =
28 R"({"busNum":2,"clazz":0,"configs":[{"attributes":192,"id":1,"interfaces":[{"alternateSetting":0,"clazz":7,)"\
29 R"("endpoints":[{"address":1,"attributes":2,"direction":0,"interfaceId":0,"interval":0,"maxPacketSize":512,)"\
30 R"("number":1,"type":2},{"address":129,"attributes":2,"direction":128,"interfaceId":0,"interval":0,)"\
31 R"("maxPacketSize":512,"number":1,"type":2}],"id":0,"name":"","protocol":2,"subClass":1},{"alternateSetting":0,)"\
32 R"("clazz":255,"endpoints":[{"address":2,"attributes":2,"direction":0,"interfaceId":1,"interval":0,)"\
33 R"("maxPacketSize":512,"number":2,"type":2},{"address":130,"attributes":2,"direction":128,"interfaceId":1,)"\
34 R"("interval":0,"maxPacketSize":512,"number":2,"type":2}],"id":1,"name":"","protocol":255,"subClass":255},)"\
35 R"({"alternateSetting":0,"clazz":7,"endpoints":[{"address":3,"attributes":2,"direction":0,"interfaceId":2,)"\
36 R"("interval":0,"maxPacketSize":512,"number":3,"type":2},{"address":131,"attributes":2,"direction":128,)"\
37 R"("interfaceId":2,"interval":0,"maxPacketSize":512,"number":3,"type":2}],"id":2,"name":"","protocol":4,)"\
38 R"("subClass":1},{"alternateSetting":0,"clazz":7,"endpoints":[{"address":4,"attributes":2,"direction":0,)"\
39 R"("interfaceId":3,"interval":0,"maxPacketSize":512,"number":4,"type":2},{"address":132,"attributes":2,)"\
40 R"("direction":128,"interfaceId":3,"interval":0,"maxPacketSize":512,"number":4,"type":2}],"id":3,"name":"",)"\
41 R"("protocol":4,"subClass":1},{"alternateSetting":0,"clazz":7,"endpoints":[{"address":5,"attributes":2,)"\
42 R"("direction":0,"interfaceId":4,"interval":0,"maxPacketSize":512,"number":5,"type":2},{"address":133,)"\
43 R"("attributes":2,"direction":128,"interfaceId":4,"interval":0,"maxPacketSize":512,"number":5,"type":2}],)"\
44 R"("id":4,"name":"","protocol":4,"subClass":1},{"alternateSetting":0,"clazz":7,"endpoints":[{"address":6,)"\
45 R"("attributes":2,"direction":0,"interfaceId":5,"interval":0,"maxPacketSize":512,"number":6,"type":2},)"\
46 R"({"address":134,"attributes":2,"direction":128,"interfaceId":5,"interval":0,"maxPacketSize":512,)"\
47 R"("number":6,"type":2}],"id":5,"name":" ","protocol":4,"subClass":1}],"isRemoteWakeup":false,)"\
48 R"("isSelfPowered":true,"maxPower":1,"name":" "}],"devAddress":5,"manufacturerName":" ","name":"2-5",)"\
49 R"("productId":4293,"productName":" ","protocol":0,"serial":"","subClass":0,"vendorId":4817,"version":"0404"})";
50
51 static const std::string NON_IPP_PRINTER =
52 R"({"busNum":2,"clazz":0,"configs":[{"attributes":192,"id":1,"interfaces":[{"alternateSetting":0,"clazz":255,)"\
53 R"("endpoints":null,"id":0,"name":" ","protocol":255,"subClass":255}],"isRemoteWakeup":false,)"\
54 R"("isSelfPowered":true,"maxPower":0,"name":" "}],"devAddress":4,"manufacturerName":"Microchip Tech\u0000\u0000)"\
55 R"(\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)"\
56 R"(\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)"\
57 R"(\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)"\
58 R"(\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)"\
59 R"(\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)"\
60 R"(\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)"\
61 R"(\u0000\u0000\u0000","name":"2-4","productId":10048,"productName":"Hub Controller\u0000\u0000\u0000\u0000)"\
62 R"(\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)"\
63 R"(\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)"\
64 R"(\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)"\
65 R"(\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)"\
66 R"(\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)"\
67 R"(\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)"\
68 R"(\u0000", "protocol":0, "serial":"", "subClass":0, "vendorId":1060, "version":"0002"})";
69
70 class PrintUsbManagerTest : public testing::Test {
71 public:
72 static void SetUpTestCase(void);
73 static void TearDownTestCase(void);
74 void SetUp();
75 void TearDown();
76 };
77
SetUpTestCase(void)78 void PrintUsbManagerTest::SetUpTestCase(void)
79 {}
80
TearDownTestCase(void)81 void PrintUsbManagerTest::TearDownTestCase(void)
82 {}
83
SetUp(void)84 void PrintUsbManagerTest::SetUp(void)
85 {
86 static int32_t testNo = 0;
87 PRINT_HILOGI("PrintUsbManagerTest_%{public}d", ++testNo);
88 }
89
TearDown(void)90 void PrintUsbManagerTest::TearDown(void)
91 {}
92
93 /**
94 * @tc.name: PrintUsbManagerTest_001
95 * @tc.desc: Verify the Init function.
96 * @tc.type: FUNC
97 * @tc.require:
98 */
99 HWTEST_F(PrintUsbManagerTest, PrintUsbManagerTest_001, TestSize.Level1)
100 {
101 OHOS::Print::PrintUsbManager printUsbManager;
102 printUsbManager.isInit = false;
103 printUsbManager.isUsbEnable = false;
104 printUsbManager.Init();
105 EXPECT_EQ(true, printUsbManager.isInit);
106 printUsbManager.Init();
107 EXPECT_EQ(true, printUsbManager.isInit);
108 }
109
110 /**
111 * @tc.name: PrintUsbManagerTest_002
112 * @tc.desc: Verify the isExistIppOverUsbPrinter function.
113 * @tc.type: FUNC
114 * @tc.require:
115 */
116 HWTEST_F(PrintUsbManagerTest, PrintUsbManagerTest_002, TestSize.Level1)
117 {
118 OHOS::Print::PrintUsbManager printUsbManager;
119 std::string printerName = "HUAWEI PixLab V1-0105";
120 OHOS::USB::UsbDevice usbDevice;
121 printUsbManager.printDeviceMap[printerName] = usbDevice;
122 bool ret = printUsbManager.isExistIppOverUsbPrinter(printerName);
123 EXPECT_EQ(true, ret);
124 printerName = "";
125 ret = printUsbManager.isExistIppOverUsbPrinter(printerName);
126 EXPECT_EQ(false, ret);
127 }
128
129 /**
130 * @tc.name: PrintUsbManagerTest_003
131 * @tc.desc: Verify the isPrintDevice function.
132 * @tc.type: FUNC
133 * @tc.require:
134 */
135 HWTEST_F(PrintUsbManagerTest, PrintUsbManagerTest_003, TestSize.Level1)
136 {
137 OHOS::Print::PrintUsbManager printUsbManager;
138 printUsbManager.isUsbEnable = false;
139 OHOS::USB::UsbDevice usbDevice;
140 std::string printerName;
141 bool ret = printUsbManager.isPrintDevice(usbDevice, printerName);
142 EXPECT_EQ(false, ret);
143 printerName = "";
144 ret = printUsbManager.isPrintDevice(usbDevice, printerName);
145 EXPECT_EQ(false, ret);
146 }
147
148 /**
149 * @tc.name: PrintUsbManagerTest_004
150 * @tc.desc: Verify the RefreshUsbPrinterDevice function.
151 * @tc.type: FUNC
152 * @tc.require:
153 */
154 HWTEST_F(PrintUsbManagerTest, PrintUsbManagerTest_004, TestSize.Level1)
155 {
156 OHOS::Print::PrintUsbManager printUsbManager;
157 printUsbManager.isUsbEnable = false;
158 vector<USB::UsbDevice> devlist;
159 int32_t ret = ERR_OK;
160 printUsbManager.RefreshUsbPrinterDevice();
161 if (printUsbManager.isUsbEnable) {
162 ret = USB::UsbSrvClient::GetInstance().GetDevices(devlist);
163 }
164 for (auto& dev : devlist) {
165 auto iter = printUsbManager.printDeviceMap.find(dev.GetName());
166 EXPECT_TRUE(iter != printUsbManager.printDeviceMap.end());
167 }
168 OHOS::USB::UsbDevice usbDevice;
169 printUsbManager.GetProductName(usbDevice);
170 printUsbManager.RefreshUsbPrinterDevice();
171 }
172
173 /**
174 * @tc.name: PrintUsbManagerTest_005
175 * @tc.desc: Verify the GetProductName function.
176 * @tc.type: FUNC
177 * @tc.require:
178 */
179 HWTEST_F(PrintUsbManagerTest, PrintUsbManagerTest_005, TestSize.Level1)
180 {
181 OHOS::Print::PrintUsbManager printUsbManager;
182 printUsbManager.isUsbEnable = false;
183 OHOS::USB::UsbDevice usbDevice;
184 std::string printerName = printUsbManager.GetProductName(usbDevice);
185 EXPECT_EQ("-", printerName);
186 printUsbManager.isUsbEnable = true;
187 printerName = printUsbManager.GetProductName(usbDevice);
188 }
189
190 /**
191 * @tc.name: PrintUsbManagerTest_006
192 * @tc.desc: Verify the QueryPrinterInfoFromStringDescriptor function.
193 * @tc.type: FUNC
194 * @tc.require:
195 */
196 HWTEST_F(PrintUsbManagerTest, PrintUsbManagerTest_006, TestSize.Level1)
197 {
198 OHOS::Print::PrintUsbManager printUsbManager;
199 printUsbManager.isUsbEnable = false;
200 OHOS::USB::USBDevicePipe usbDevicePipe;
201 uint16_t indexInStringDescriptor = USB_VALUE_DESCRIPTOR_INDEX_PRODUCT_NAME;
202 std::string printerInfo =
203 printUsbManager.QueryPrinterInfoFromStringDescriptor(usbDevicePipe, indexInStringDescriptor);
204 EXPECT_EQ("", printerInfo);
205 printUsbManager.isUsbEnable = true;
206 printerInfo =
207 printUsbManager.QueryPrinterInfoFromStringDescriptor(usbDevicePipe, indexInStringDescriptor);
208 }
209
210 /**
211 * @tc.name: PrintUsbManagerTest_007
212 * @tc.desc: Verify the ConnectUsbPinter function.
213 * @tc.type: FUNC
214 * @tc.require:
215 */
216 HWTEST_F(PrintUsbManagerTest, PrintUsbManagerTest_007, TestSize.Level1)
217 {
218 OHOS::Print::PrintUsbManager printUsbManager;
219 printUsbManager.isUsbEnable = false;
220 std::string printerName = "HUAWEI PixLab V1-0105";
221 OHOS::USB::USBDevicePipe usbDevicePipe;
222 printUsbManager.printPipeMap[printerName] = usbDevicePipe;
223 OHOS::USB::UsbDevice usbDevice;
224 printUsbManager.printDeviceMap[printerName] = usbDevice;
225 bool ret = printUsbManager.ConnectUsbPinter(printerName);
226 EXPECT_EQ(ret, true);
227 printUsbManager.DisConnectUsbPinter(printerName);
228 }
229
230 /**
231 * @tc.name: PrintUsbManagerTest_09
232 * @tc.desc: Verify the BulkTransferWrite function.
233 * @tc.type: FUNC
234 * @tc.require:
235 */
236 HWTEST_F(PrintUsbManagerTest, PrintUsbManagerTest_09, TestSize.Level1)
237 {
238 OHOS::Print::PrintUsbManager printUsbManager;
239 printUsbManager.isUsbEnable = false;
240 std::string printerName = "HUAWEI PixLab V1-0105";
241 std::vector<uint8_t> vectorRequestBuffer;
242 int32_t ret =
243 printUsbManager.BulkTransferWrite(printerName, Operation::Get_Printer_Attributes, vectorRequestBuffer);
244 EXPECT_GT(0, ret);
245 ret = printUsbManager.BulkTransferWrite(printerName, Operation::Send_Document, vectorRequestBuffer);
246 EXPECT_GT(0, ret);
247 ret = printUsbManager.BulkTransferWrite(printerName, Operation::Common, vectorRequestBuffer);
248 EXPECT_GT(0, ret);
249 }
250
251 /**
252 * @tc.name: PrintUsbManagerTest_010
253 * @tc.desc: Verify the BulkTransferRead function.
254 * @tc.type: FUNC
255 * @tc.require:
256 */
257 HWTEST_F(PrintUsbManagerTest, PrintUsbManagerTest_010, TestSize.Level1)
258 {
259 OHOS::Print::PrintUsbManager printUsbManager;
260 printUsbManager.isUsbEnable = false;
261 std::string printerName = "HUAWEI PixLab V1-0105";
262 std::vector<uint8_t> vectorRequestBuffer;
263 int32_t ret = printUsbManager.BulkTransferRead(printerName, Operation::Get_Printer_Attributes, vectorRequestBuffer);
264 EXPECT_GT(0, ret);
265 ret = printUsbManager.BulkTransferRead(printerName, Operation::Send_Document, vectorRequestBuffer);
266 EXPECT_GT(0, ret);
267 ret = printUsbManager.BulkTransferRead(printerName, Operation::Common, vectorRequestBuffer);
268 EXPECT_GT(0, ret);
269 }
270
271 /**
272 * @tc.name: PrintUsbManagerTest_011
273 * @tc.desc: Verify the DealUsbDevStatusChange function.
274 * @tc.type: FUNC
275 * @tc.require:
276 */
277 HWTEST_F(PrintUsbManagerTest, PrintUsbManagerTest_011, TestSize.Level1)
278 {
279 OHOS::Print::PrintUsbManager printUsbManager;
280 printUsbManager.isUsbEnable = false;
281 bool isAttach = true;
282 std::string devStr = IPP_PRINTER;
283 std::string devStrNull = "";
284 printUsbManager.DealUsbDevStatusChange(devStr, isAttach);
285 isAttach = false;
286 printUsbManager.DealUsbDevStatusChange(devStr, isAttach);
287 printUsbManager.DealUsbDevStatusChange(devStrNull, isAttach);
288 isAttach = true;
289 devStr = NON_IPP_PRINTER;
290 printUsbManager.DealUsbDevStatusChange(NON_IPP_PRINTER, isAttach);
291 }
292
293 /**
294 * @tc.name: PrintUsbManagerTest_012
295 * @tc.desc: Verify the GetPrinterName function.
296 * @tc.type: FUNC
297 * @tc.require:
298 */
299 HWTEST_F(PrintUsbManagerTest, PrintUsbManagerTest_012, TestSize.Level1)
300 {
301 OHOS::Print::PrintUsbManager printUsbManager;
302 printUsbManager.isUsbEnable = false;
303 std::string name = "HUAWEI PixLab V1-0105";
304 std::string printerName = printUsbManager.GetPrinterName(name);
305 EXPECT_EQ("", printerName);
306 OHOS::USB::UsbDevice usbDevice;
307 printUsbManager.printDeviceMap[printerName] = usbDevice;
308 printUsbManager.GetPrinterName(usbDevice.GetName());
309 }
310
311 HWTEST_F(PrintUsbManagerTest, PrintUsbManagerTest_013, TestSize.Level1)
312 {
313 OHOS::Print::PrintUsbManager printUsbManager;
314 printUsbManager.isUsbEnable = false;
315 std::string name = "HUAWEI PixLab V1-0105";
316 OHOS::USB::USBDevicePipe usbDevicePipe;
317 OHOS::USB::UsbDevice usbDevice;
318 bool ret = printUsbManager.AllocateInterface(name, usbDevice, usbDevicePipe);
319 EXPECT_EQ(false, ret);
320 std::vector<std::pair<int32_t, int32_t>> printerIndex;
321 printUsbManager.printerIndexMap[name] = printerIndex;
322 printUsbManager.isUsbEnable = true;
323 ret = printUsbManager.AllocateInterface(name, usbDevice, usbDevicePipe);
324 EXPECT_EQ(false, ret);
325 }
326
327 HWTEST_F(PrintUsbManagerTest, PrintUsbManagerTest_014, TestSize.Level1)
328 {
329 OHOS::Print::PrintUsbManager printUsbManager;
330 printUsbManager.isUsbEnable = false;
331 std::string name = "HUAWEI PixLab V1-0105";
332 OHOS::USB::UsbDevice usbDevice;
333 printUsbManager.printDeviceMap[name] = usbDevice;
334 printUsbManager.DisConnectUsbPinter(name);
335 EXPECT_EQ(printUsbManager.printPipeMap.find(name), printUsbManager.printPipeMap.end());
336 EXPECT_EQ(printUsbManager.printTranIndexMap.find(name), printUsbManager.printTranIndexMap.end());
337 }
338
339 HWTEST_F(PrintUsbManagerTest, PrintUsbManagerTest_015, TestSize.Level1)
340 {
341 OHOS::Print::PrintUsbManager printUsbManager;
342 printUsbManager.isUsbEnable = false;
343 std::string name = "HUAWEI PixLab V1-0105";
344 OHOS::USB::USBDevicePipe usbDevicePipe;
345 printUsbManager.printPipeMap[name] = usbDevicePipe;
346 printUsbManager.DisConnectUsbPinter(name);
347 EXPECT_NE(printUsbManager.printPipeMap.find(name), printUsbManager.printPipeMap.end());
348 EXPECT_EQ(printUsbManager.printTranIndexMap.find(name), printUsbManager.printTranIndexMap.end());
349 }
350
351 HWTEST_F(PrintUsbManagerTest, PrintUsbManagerTest_016, TestSize.Level1)
352 {
353 OHOS::Print::PrintUsbManager printUsbManager;
354 printUsbManager.isUsbEnable = false;
355 std::string name = "";
356 printUsbManager.DisConnectUsbPinter(name);
357 EXPECT_EQ(printUsbManager.printPipeMap.find(name), printUsbManager.printPipeMap.end());
358 EXPECT_EQ(printUsbManager.printTranIndexMap.find(name), printUsbManager.printTranIndexMap.end());
359 }
360
361 HWTEST_F(PrintUsbManagerTest, PrintUsbManagerTest_017, TestSize.Level1)
362 {
363 OHOS::Print::PrintUsbManager printUsbManager;
364 printUsbManager.isUsbEnable = false;
365 std::string printerName = "";
366 OHOS::USB::UsbDevice usbDevice;
367 printUsbManager.printDeviceMap[printerName] = usbDevice;
368 bool ret = printUsbManager.ConnectUsbPinter(printerName);
369 EXPECT_EQ(ret, false);
370 }
371
372 HWTEST_F(PrintUsbManagerTest, PrintUsbManagerTest_018, TestSize.Level1)
373 {
374 OHOS::Print::PrintUsbManager printUsbManager;
375 printUsbManager.isUsbEnable = false;
376 std::string printerName = "";
377 bool ret = printUsbManager.ConnectUsbPinter(printerName);
378 EXPECT_EQ(ret, false);
379 }
380
381 HWTEST_F(PrintUsbManagerTest, PrintUsbManagerTest_019, TestSize.Level1)
382 {
383 OHOS::Print::PrintUsbManager printUsbManager;
384 printUsbManager.isUsbEnable = false;
385 std::string printerName = "HUAWEI PixLab V1-0105";
386 bool ret = printUsbManager.ConnectUsbPinter(printerName);
387 EXPECT_EQ(ret, false);
388 }
389
390 HWTEST_F(PrintUsbManagerTest, PrintUsbManagerTest_020, TestSize.Level1)
391 {
392 OHOS::Print::PrintUsbManager printUsbManager;
393 printUsbManager.isUsbEnable = false;
394 OHOS::USB::UsbDevice usbDevice;
395 std::string printerName = "HUAWEI PixLab V1-0105";
396 EXPECT_EQ(printUsbManager.isPrintDevice(usbDevice, printerName), false);
397 }
398
399 HWTEST_F(PrintUsbManagerTest, PrintUsbManagerTest_021, TestSize.Level1)
400 {
401 OHOS::Print::PrintUsbManager printUsbManager;
402 printUsbManager.isUsbEnable = false;
403 std::string name = "";
404 OHOS::USB::USBDevicePipe usbDevicePipe;
405 OHOS::USB::UsbDevice usbDevice;
406 bool ret = printUsbManager.AllocateInterface(name, usbDevice, usbDevicePipe);
407 EXPECT_EQ(false, ret);
408 }
409 } // namespace Print
410 } // namespace OHOS
411 #endif // IPPOVERUSB_ENABLE