• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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