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 <thread>
17 #include <gtest/gtest.h>
18 #define private public
19 #define protected public
20 #include "vendor_ppd_driver.h"
21 #undef private
22 #undef protected
23 #include "vendor_manager.h"
24 #include "print_constant.h"
25 #include "print_log.h"
26 #include "mock/mock_vendor_manager.h"
27
28 using namespace testing;
29 using namespace testing::ext;
30
31 namespace OHOS {
32 namespace Print {
33 class VendorPpdDriverTest : public testing::Test {
34 public:
35 static void SetUpTestCase(void);
36 static void TearDownTestCase(void);
37 void SetUp();
38 void TearDown();
39 };
40
SetUpTestCase(void)41 void VendorPpdDriverTest::SetUpTestCase(void) {}
42
TearDownTestCase(void)43 void VendorPpdDriverTest::TearDownTestCase(void) {}
44
SetUp(void)45 void VendorPpdDriverTest::SetUp(void)
46 {
47 static int32_t testNo = 0;
48 PRINT_HILOGI("VendorPpdDriverTest_%{public}d", ++testNo);
49 }
50
TearDown(void)51 void VendorPpdDriverTest::TearDown(void) {}
52
53 HWTEST_F(VendorPpdDriverTest, GetVendorName_ShouldReturnVendorName_WhenCalled, TestSize.Level0)
54 {
55 VendorPpdDriver vendorDriver;
56 EXPECT_EQ(vendorDriver.GetVendorName(), VENDOR_PPD_DRIVER);
57 }
58
59 HWTEST_F(VendorPpdDriverTest, OnPrinterDiscovered_ShouldSetConnectingVendorGroupAndPrinterInfo_WhenCalled,
60 TestSize.Level0)
61 {
62 VendorPpdDriver vendorDriver;
63 std::string vendorName = "TestVendor";
64 PrinterInfo printerInfo;
65 printerInfo.SetPrinterId("12345");
66 vendorDriver.OnPrinterDiscovered(vendorName, printerInfo);
67 EXPECT_EQ(vendorDriver.connectingVendorGroup, vendorName);
68 EXPECT_EQ(vendorDriver.connectingPrinterInfo->GetPrinterId(), "12345");
69 }
70
71 HWTEST_F(VendorPpdDriverTest, QueryProperty_ShouldReturnFalse_WhenPrinterIdDoesNotMatch,
72 TestSize.Level1)
73 {
74 VendorPpdDriver vendorDriver;
75 std::string vendorName = "TestVendor";
76 std::string printerId = "12345";
77 std::string key = "testKey";
78 std::string value;
79 EXPECT_FALSE(vendorDriver.QueryProperty(printerId, key, value));
80 PrinterInfo printerInfo;
81 printerInfo.SetPrinterId(printerId);
82 vendorDriver.OnPrinterDiscovered(vendorName, printerInfo);
83 EXPECT_FALSE(vendorDriver.QueryProperty("23", key, value));
84 }
85
86 HWTEST_F(VendorPpdDriverTest, QueryProperty_ShouldReturnTrue_WhenKeyIsCupsPpdNameAndQuerySucceeds,
87 TestSize.Level1)
88 {
89 MockVendorManager mock;
90 VendorPpdDriver vendorDriver;
91 EXPECT_TRUE(vendorDriver.Init(&mock));
92 EXPECT_CALL(mock, QueryPPDInformation(_, _)).WillOnce(Return(false)).WillRepeatedly(Return(true));
93 std::string vendorName = "TestVendor";
94 std::string printerId = "12345";
95 std::string key = PRINTER_PROPERTY_KEY_CUPS_PPD_NAME;
96 std::string value;
97 PrinterInfo printerInfo;
98 printerInfo.SetPrinterMake("TestMake");
99 printerInfo.SetPrinterId(printerId);
100 vendorDriver.OnPrinterDiscovered(vendorName, printerInfo);
101 EXPECT_FALSE(vendorDriver.QueryProperty(printerId, key, value));
102 value = "test";
103 // success call to cupsd but response is empty string
104 EXPECT_FALSE(vendorDriver.QueryProperty(printerId, key, value));
105 }
106
107 HWTEST_F(VendorPpdDriverTest, QueryPpdName_ShouldReturnFalse_WhenVendorManagerIsNull,
108 TestSize.Level1)
109 {
110 VendorPpdDriver vendorDriver;
111 EXPECT_TRUE(vendorDriver.QueryPpdName("TestMake").empty());
112 }
113
114 /**
115 * @tc.name: DiscoverBackendPrinters_WhenDiscoverOne_ShouldAddIt
116 * @tc.desc: when discover one device should add it.
117 * @tc.type: FUNC
118 * @tc.require:
119 */
120 HWTEST_F(VendorPpdDriverTest, DiscoverBackendPrinters_WhenDiscoverOne_ShouldAddIt, TestSize.Level1)
121 {
122 MockVendorManager mock;
123 VendorPpdDriver vendorDriver;
124 EXPECT_TRUE(vendorDriver.Init(&mock));
125 PrinterInfo info;
126 info.SetPrinterId("test1");
127 std::vector<PrinterInfo> infoVec = { info };
128 EXPECT_CALL(mock, DiscoverBackendPrinters(_, _)).Times(1)
129 .WillRepeatedly(DoAll(SetArgReferee<1>(infoVec), Return(E_PRINT_NONE)));
130 EXPECT_CALL(mock, AddPrinterToDiscovery(_, _)).Times(1).WillRepeatedly(Return(E_PRINT_NONE));
131 EXPECT_CALL(mock, RemovePrinterFromDiscovery(_, _)).Times(0);
132 vendorDriver.DiscoverBackendPrinters();
133 }
134
135 /**
136 * @tc.name: DiscoverBackendPrinters_WhenLoseOne_ShouldRemoveIt
137 * @tc.desc: when lose one discovered device should remote it.
138 * @tc.type: FUNC
139 * @tc.require:
140 */
141 HWTEST_F(VendorPpdDriverTest, DiscoverBackendPrinters_WhenLoseOne_ShouldRemoveIt, TestSize.Level1)
142 {
143 MockVendorManager mock;
144 VendorPpdDriver vendorDriver;
145 EXPECT_TRUE(vendorDriver.Init(&mock));
146 vendorDriver.discoveredPrinters_["test1"] = true;
147 EXPECT_CALL(mock, DiscoverBackendPrinters(_, _)).Times(1).WillRepeatedly(Return(E_PRINT_NONE));
148 EXPECT_CALL(mock, AddPrinterToDiscovery(_, _)).Times(0);
149 EXPECT_CALL(mock, RemovePrinterFromDiscovery(_, _)).Times(1).WillRepeatedly(Return(E_PRINT_NONE));
150 vendorDriver.DiscoverBackendPrinters();
151 }
152
153 /**
154 * @tc.name: DiscoverBackendPrinters_WhenLoseOne_ShouldRemoveIt
155 * @tc.desc: when woke normolly.
156 * @tc.type: FUNC
157 * @tc.require:
158 */
159 HWTEST_F(VendorPpdDriverTest, DiscoverBackendPrinters_ShouldWorkNormolly, TestSize.Level1)
160 {
161 MockVendorManager mock;
162 VendorPpdDriver vendorDriver;
163 EXPECT_TRUE(vendorDriver.Init(&mock));
164 PrinterInfo info;
165 info.SetPrinterId("test1");
166 std::vector<PrinterInfo> infoVec = { info };
167 vendorDriver.discoveredPrinters_["test2"] = true;
168 EXPECT_CALL(mock, DiscoverBackendPrinters(_, _)).Times(1)
169 .WillRepeatedly(DoAll(SetArgReferee<1>(infoVec), Return(E_PRINT_NONE)));
170 EXPECT_CALL(mock, AddPrinterToDiscovery(_, _)).Times(1).WillRepeatedly(Return(E_PRINT_NONE));
171 EXPECT_CALL(mock, RemovePrinterFromDiscovery(_, _)).Times(1).WillRepeatedly(Return(E_PRINT_NONE));
172 vendorDriver.DiscoverBackendPrinters();
173 }
174
175 /**
176 * @tc.name: StartAndStopDiscovery_ShouldWorkNormolly
177 * @tc.desc: Start and stop discovery when woke normolly.
178 * @tc.type: FUNC
179 * @tc.require:
180 */
181 HWTEST_F(VendorPpdDriverTest, StartAndStopDiscovery_ShouldWorkNormolly, TestSize.Level1)
182 {
183 MockVendorManager mock;
184 VendorPpdDriver vendorDriver;
185 EXPECT_TRUE(vendorDriver.Init(&mock));
186 PrinterInfo info;
187 info.SetPrinterId("test1");
188 std::vector<PrinterInfo> infoVec = { info };
189 EXPECT_CALL(mock, DiscoverBackendPrinters(_, _)).Times(1)
190 .WillRepeatedly(DoAll(SetArgReferee<1>(infoVec), Return(E_PRINT_NONE)));
191 EXPECT_CALL(mock, AddPrinterToDiscovery(_, _)).Times(1).WillRepeatedly(Return(E_PRINT_NONE));
192 EXPECT_CALL(mock, RemovePrinterFromDiscovery(_, _)).Times(1).WillRepeatedly(Return(E_PRINT_NONE));
193 vendorDriver.OnStartDiscovery();
194 std::this_thread::sleep_for(std::chrono::seconds(10));
195 vendorDriver.OnStopDiscovery();
196 }
197
198 /**
199 * @tc.name: StartAndStopDiscovery_ShouldWorkNormolly
200 * @tc.desc: Start and stop discovery when woke normolly.
201 * @tc.type: FUNC
202 * @tc.require:
203 */
204 HWTEST_F(VendorPpdDriverTest, AllCallVendorMgrFunc_WhenAfterUninit_ShouldFail, TestSize.Level1)
205 {
206 MockVendorManager mock;
207 VendorPpdDriver vendorDriver;
208 EXPECT_TRUE(vendorDriver.Init(&mock));
209 vendorDriver.vendorManager = nullptr;
210 PrinterInfo printerInfo;
211 EXPECT_FALSE(vendorDriver.OnQueryCapability("", 0));
212 EXPECT_TRUE(vendorDriver.QueryPpdName("").empty());
213 vendorDriver.DiscoverBackendPrinters();
214 vendorDriver.OnStartDiscovery();
215 vendorDriver.OnStopDiscovery();
216 EXPECT_FALSE(vendorDriver.TryConnectByPpdDriver(printerInfo));
217 }
218 } // namespace Print
219 } // namespace OHOS
220