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