1 /*
2 * Copyright (c) 2024 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
16 #include <gtest/gtest.h>
17 #define private public
18 #include "vendor_manager.h"
19 #undef private
20 #include "vendor_ppd_driver.h"
21 #include "print_constant.h"
22 #include "print_log.h"
23 #include "vendor_ipp_everywhere.h"
24 #include "mock/mock_print_service_ability.h"
25 #include "mock/mock_vendor_ppd_driver.h"
26
27 using namespace testing;
28 using namespace testing::ext;
29
30 namespace {
31 const int WAIT_TIME_MS = 100;
32 const std::string PRINTER_TEST_IP = "192.168.2.222";
33 }
34
35 namespace OHOS {
36 namespace Print {
37 class VendorManagerTest : public testing::Test {
38 public:
39 static void SetUpTestCase(void);
40 static void TearDownTestCase(void);
41 void SetUp();
42 void TearDown();
43 };
44
SetUpTestCase(void)45 void VendorManagerTest::SetUpTestCase(void) {}
46
TearDownTestCase(void)47 void VendorManagerTest::TearDownTestCase(void) {}
48
SetUp(void)49 void VendorManagerTest::SetUp(void)
50 {
51 static int32_t testNo = 0;
52 PRINT_HILOGI("VendorManagerTest_%{public}d", ++testNo);
53 }
54
TearDown(void)55 void VendorManagerTest::TearDown(void) {}
56
57 HWTEST_F(VendorManagerTest, VendorManagerTest_0001, TestSize.Level1)
58 {
59 std::string vendorName = "test.vendor";
60 std::string printerId = "test.printer.id";
61 std::string globalVendorName = VendorManager::GetGlobalVendorName(vendorName);
62 std::string globalPrinterId = VendorManager::GetGlobalPrinterId(globalVendorName, printerId);
63 EXPECT_STREQ(VendorManager::ExtractVendorName(globalVendorName).c_str(), vendorName.c_str());
64 EXPECT_STREQ(VendorManager::ExtractGlobalVendorName(globalPrinterId).c_str(), globalVendorName.c_str());
65 EXPECT_STREQ(VendorManager::ExtractPrinterId(globalPrinterId).c_str(), printerId.c_str());
66 EXPECT_TRUE(VendorManager::ExtractPrinterId("").empty());
67 EXPECT_TRUE(VendorManager::ExtractGlobalVendorName("").empty());
68 EXPECT_TRUE(VendorManager::ExtractVendorName("").empty());
69 }
70
71 HWTEST_F(VendorManagerTest, VendorManagerTest_0002, TestSize.Level1)
72 {
73 VendorManager vendorManager;
74 EXPECT_TRUE(vendorManager.Init(nullptr, false));
75 EXPECT_TRUE(vendorManager.Init(nullptr, false));
76 ThreadSyncWait syncWait;
77 vendorManager.StartDiscovery();
78 syncWait.Wait(WAIT_TIME_MS);
79 vendorManager.StopDiscovery();
80 syncWait.Wait(WAIT_TIME_MS);
81 vendorManager.StartStatusMonitor();
82 vendorManager.StartStatusMonitor();
83 syncWait.Wait(WAIT_TIME_MS);
84 vendorManager.StopStatusMonitor();
85 vendorManager.StopStatusMonitor();
86 syncWait.Wait(WAIT_TIME_MS);
87 vendorManager.UnInit();
88 }
89
90 HWTEST_F(VendorManagerTest, VendorManagerTest_0003, TestSize.Level1)
91 {
92 MockPrintServiceAbility mock;
93 VendorManager vendorManager;
94 EXPECT_TRUE(vendorManager.Init(&mock, false));
95 ThreadSyncWait syncWait;
96 vendorManager.StartDiscovery();
97 syncWait.Wait(WAIT_TIME_MS);
98 vendorManager.StopDiscovery();
99 syncWait.Wait(WAIT_TIME_MS);
100 vendorManager.StartStatusMonitor();
101 EXPECT_FALSE(vendorManager.ConnectPrinterByIp(PRINTER_TEST_IP, "ipp"));
102 syncWait.Wait(WAIT_TIME_MS);
103 vendorManager.StopStatusMonitor();
104 EXPECT_FALSE(vendorManager.ConnectPrinterByIp("test", ""));
105 EXPECT_FALSE(vendorManager.QueryPrinterInfo("vendor:test", 0));
106 EXPECT_FALSE(vendorManager.QueryPrinterInfo("test:", 0));
107 EXPECT_FALSE(vendorManager.QueryPrinterInfo(":test", 0));
108 syncWait.Wait(WAIT_TIME_MS);
109 vendorManager.UnInit();
110 }
111
112 HWTEST_F(VendorManagerTest, VendorManagerTest_0005, TestSize.Level2)
113 {
114 MockPrintServiceAbility mock;
115 VendorManager vendorManager;
116 EXPECT_TRUE(vendorManager.Init(&mock, false));
117 auto vendorIppEverywhere = std::make_shared<VendorIppEveryWhere>();
118 ASSERT_NE(vendorIppEverywhere, nullptr);
119 EXPECT_TRUE(vendorManager.LoadVendorDriver(vendorIppEverywhere));
120 std::string vendorName = vendorIppEverywhere->GetVendorName();
121 std::string globalVendorName = VendorManager::GetGlobalVendorName(vendorName);
122 std::string printerId = PRINTER_TEST_IP;
123 std::string globalPrinterId = VendorManager::GetGlobalPrinterId(globalVendorName, printerId);
124 EXPECT_FALSE(vendorManager.IsConnectingPrinter(globalPrinterId, ""));
125 vendorManager.SetConnectingPrinter(ConnectMethod::ID_AUTO, "");
126 EXPECT_FALSE(vendorManager.IsConnectingPrinter("", ""));
127 vendorManager.SetConnectingPrinter(ConnectMethod::ID_AUTO, globalPrinterId);
128 EXPECT_TRUE(vendorManager.IsConnectingPrinter(globalPrinterId, ""));
129 vendorManager.SetConnectingPrinter(ConnectMethod::IP_AUTO, printerId);
130 EXPECT_FALSE(vendorManager.IsConnectingPrinter(globalPrinterId, ""));
131 EXPECT_TRUE(vendorManager.IsConnectingPrinter(globalPrinterId, printerId));
132 vendorManager.UnInit();
133 }
134
135 HWTEST_F(VendorManagerTest, VendorManagerTest_0006, TestSize.Level2)
136 {
137 VendorManager vendorManager;
138 EXPECT_TRUE(vendorManager.Init(nullptr, false));
139 EXPECT_FALSE(vendorManager.LoadVendorDriver(nullptr));
140 PrinterInfo printerInfo;
141 std::string ppdDriverVendorName = "driver.ppd";
142 EXPECT_EQ(vendorManager.AddPrinterToDiscovery("", printerInfo), EXTENSION_ERROR_CALLBACK_FAIL);
143 EXPECT_EQ(vendorManager.AddPrinterToDiscovery(ppdDriverVendorName, printerInfo), EXTENSION_ERROR_CALLBACK_FAIL);
144 EXPECT_EQ(vendorManager.UpdatePrinterToDiscovery("", printerInfo), EXTENSION_ERROR_CALLBACK_FAIL);
145 EXPECT_EQ(vendorManager.RemovePrinterFromDiscovery("", ""), EXTENSION_ERROR_CALLBACK_FAIL);
146 EXPECT_EQ(vendorManager.AddPrinterToCupsWithPpd("", "", ""), EXTENSION_ERROR_CALLBACK_FAIL);
147 EXPECT_EQ(vendorManager.AddPrinterToCupsWithPpd(ppdDriverVendorName, "", ""), EXTENSION_ERROR_CALLBACK_FAIL);
148 EXPECT_EQ(vendorManager.RemovePrinterFromCups("", ""), EXTENSION_ERROR_CALLBACK_FAIL);
149 EXPECT_FALSE(vendorManager.OnPrinterPpdQueried("", PRINTER_TEST_IP, ""));
150 EXPECT_FALSE(vendorManager.MonitorPrinterStatus(":id", true));
151 EXPECT_FALSE(vendorManager.MonitorPrinterStatus("fwk.driver:", true));
152 EXPECT_FALSE(vendorManager.MonitorPrinterStatus("fwk.:printer.id", true));
153 EXPECT_FALSE(vendorManager.MonitorPrinterStatus("fwk.driver:printer.id", true));
154 PrinterCapability printerCap;
155 EXPECT_FALSE(vendorManager.QueryPrinterCapabilityByUri(PRINTER_TEST_IP, printerCap));
156 PrinterStatus status = PRINTER_STATUS_UNAVAILABLE;
157 EXPECT_FALSE(vendorManager.QueryPrinterStatusByUri(PRINTER_TEST_IP, status));
158 PrinterVendorStatus vendorStatus;
159 EXPECT_TRUE(vendorManager.OnPrinterStatusChanged("vendor", PRINTER_TEST_IP, vendorStatus));
160 vendorManager.UnInit();
161 }
162
163 HWTEST_F(VendorManagerTest, VendorManagerTest_0009, TestSize.Level2)
164 {
165 MockPrintServiceAbility mock;
166 VendorManager vendorManager;
167 EXPECT_TRUE(vendorManager.Init(&mock, true));
168 ThreadSyncWait syncWait;
169 syncWait.Wait(WAIT_TIME_MS);
170 vendorManager.StartDiscovery();
171 vendorManager.UnInit();
172 vendorManager.UnInit();
173 EXPECT_TRUE(vendorManager.Init(&mock, true));
174 syncWait.Wait(WAIT_TIME_MS);
175 vendorManager.UnInit();
176 }
177
178 HWTEST_F(VendorManagerTest, VendorManagerTest_0012, TestSize.Level1)
179 {
180 VendorManager vendorManager;
181 std::string vendorName = "test";
182 EXPECT_FALSE(vendorManager.IsPrivatePpdDriver(vendorName));
183 vendorName = "driver.bsuni";
184 EXPECT_FALSE(vendorManager.IsPrivatePpdDriver(vendorName));
185 EXPECT_TRUE(vendorManager.IsPrivatePpdDriver(VENDOR_PPD_DRIVER));
186 }
187 } // namespace Print
188 } // namespace OHOS