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 #include <gmock/gmock.h>
16 #include <gtest/gtest.h>
17 #include "bluetooth_hfp_hf.h"
18 #include "bluetooth_host.h"
19 
20 using namespace testing;
21 using namespace testing::ext;
22 
23 namespace OHOS {
24 namespace Bluetooth {
25 using namespace std;
26 
27 constexpr int TIME = 2;
28 
29 class HandsFreeUnitObserverCommon : public HandsFreeUnitObserver {
30 public:
31     HandsFreeUnitObserverCommon() = default;
32     virtual ~HandsFreeUnitObserverCommon() = default;
33 
OnConnectionStateChanged(const BluetoothRemoteDevice & device,int state,int cause)34     virtual void OnConnectionStateChanged(const BluetoothRemoteDevice &device, int state, int cause) {}
OnScoStateChanged(const BluetoothRemoteDevice & device,int state)35     virtual void OnScoStateChanged(const BluetoothRemoteDevice &device, int state) {}
OnCallChanged(const BluetoothRemoteDevice & device,const HandsFreeUnitCall & call)36     virtual void OnCallChanged(const BluetoothRemoteDevice &device, const HandsFreeUnitCall &call) {}
OnSignalStrengthChanged(const BluetoothRemoteDevice & device,int signal)37     virtual void OnSignalStrengthChanged(const BluetoothRemoteDevice &device, int signal) {}
OnRegistrationStatusChanged(const BluetoothRemoteDevice & device,int status)38     virtual void OnRegistrationStatusChanged(const BluetoothRemoteDevice &device, int status) {}
OnRoamingStatusChanged(const BluetoothRemoteDevice & device,int status)39     virtual void OnRoamingStatusChanged(const BluetoothRemoteDevice &device, int status) {}
OnOperatorSelectionChanged(const BluetoothRemoteDevice & device,const std::string & name)40     virtual void OnOperatorSelectionChanged(const BluetoothRemoteDevice &device, const std::string &name) {}
OnSubscriberNumberChanged(const BluetoothRemoteDevice & device,const std::string & number)41     virtual void OnSubscriberNumberChanged(const BluetoothRemoteDevice &device, const std::string &number) {}
OnVoiceRecognitionStatusChanged(const BluetoothRemoteDevice & device,int status)42     virtual void OnVoiceRecognitionStatusChanged(const BluetoothRemoteDevice &device, int status) {}
OnInBandRingToneChanged(const BluetoothRemoteDevice & device,int status)43     virtual void OnInBandRingToneChanged(const BluetoothRemoteDevice &device, int status) {}
44 
45 private:
46 };
47 static std::shared_ptr<HandsFreeUnitObserverCommon> observer_ =
48     std::make_shared<HandsFreeUnitObserverCommon>();
49 static HandsFreeUnit *profile_;
50 static BluetoothHost *host_;
51 class HandsFreeUnitTest : public testing::Test {
52 public:
HandsFreeUnitTest()53     HandsFreeUnitTest()
54     {}
~HandsFreeUnitTest()55     ~HandsFreeUnitTest()
56     {}
57 
58     static void SetUpTestCase(void);
59     static void TearDownTestCase(void);
60     void SetUp();
61     void TearDown();
62 };
63 
64 
SetUpTestCase(void)65 void HandsFreeUnitTest::SetUpTestCase(void)
66 {
67 
68 }
TearDownTestCase(void)69 void HandsFreeUnitTest::TearDownTestCase(void)
70 {
71 
72 }
SetUp()73 void HandsFreeUnitTest::SetUp()
74 {
75     host_ = &BluetoothHost::GetDefaultHost();
76     host_->EnableBt();
77     host_->EnableBle();
78     sleep(TIME);
79 }
80 
TearDown()81 void HandsFreeUnitTest::TearDown()
82 {
83     host_->DisableBt();
84     host_->DisableBle();
85     host_ = nullptr;
86 }
87 
88 
89 /*
90  * @tc.number: HandsFreeUnit001
91  * @tc.name: GetProfile
92  * @tc.desc: Get the instance of HandsFreeAudioGateway object.
93 */
94 HWTEST_F(HandsFreeUnitTest, HandsFreeUnit_UnitTest_GetProfile, TestSize.Level1)
95 {
96     GTEST_LOG_(INFO) << "HandsFreeAudioGateway_UnitTest_GetProfile start";
97 
98     profile_ = HandsFreeUnit::GetProfile();
99 
100     GTEST_LOG_(INFO) << "HandsFreeAudioGateway_UnitTest_GetProfile end";
101 }
102 
103 /*
104  * @tc.number: HandsFreeUnit002
105  * @tc.name: ConnectSco
106  * @tc.desc:  Initiate the establishment of an audio connection to remote AG device.
107 */
108 HWTEST_F(HandsFreeUnitTest, HandsFreeUnit_UnitTest_ConnectSco, TestSize.Level1)
109 {
110     GTEST_LOG_(INFO) << "HandsFreeAudioGateway_UnitTest_ConnectSco start";
111 
112     profile_ = HandsFreeUnit::GetProfile();
113     BluetoothRemoteDevice device;
114     EXPECT_EQ(profile_->ConnectSco(device), true);
115 
116     GTEST_LOG_(INFO) << "HandsFreeAudioGateway_UnitTest_ConnectSco end";
117 }
118 
119 /*
120  * @tc.number: HandsFreeUnit003
121  * @tc.name: DisconnectSco
122  * @tc.desc: Release the audio connection from remote HF device.
123 */
124 HWTEST_F(HandsFreeUnitTest, HandsFreeUnit_UnitTest_DisconnectSco, TestSize.Level1)
125 {
126     GTEST_LOG_(INFO) << "HandsFreeAudioGateway_UnitTest_DisconnectSco start";
127 
128     profile_ = HandsFreeUnit::GetProfile();
129     BluetoothRemoteDevice device;
130     EXPECT_EQ(profile_->DisconnectSco(device), true);
131 
132     GTEST_LOG_(INFO) << "HandsFreeAudioGateway_UnitTest_DisconnectSco end";
133 }
134 
135 /*
136  * @tc.number: HandsFreeUnit004
137  * @tc.name: GetDevicesByStates
138  * @tc.desc: Get remote AG device list which are in the specified states.
139 */
140 HWTEST_F(HandsFreeUnitTest, HandsFreeUnit_UnitTest_GetDevicesByStates, TestSize.Level1)
141 {
142     GTEST_LOG_(INFO) << "HandsFreeAudioGateway_UnitTest_GetDevicesByStates start";
143 
144     profile_ = HandsFreeUnit::GetProfile();
145     BluetoothRemoteDevice device;
146     vector<int> states = {static_cast<int>(BTConnectState::CONNECTED)};
147     vector<BluetoothRemoteDevice> devices = profile_->GetDevicesByStates(states);
148 
149     GTEST_LOG_(INFO) << "HandsFreeAudioGateway_UnitTest_GetDevicesByStates end";
150 }
151 
152 /*
153  * @tc.number: HandsFreeUnit005
154  * @tc.name: GetDeviceState
155  * @tc.desc: Get the connection state of the specified remote AG device.
156 */
157 HWTEST_F(HandsFreeUnitTest, HandsFreeUnit_UnitTest_GetDeviceState, TestSize.Level1)
158 {
159     GTEST_LOG_(INFO) << "HandsFreeAudioGateway_UnitTest_GetDeviceState start";
160 
161     profile_ = HandsFreeUnit::GetProfile();
162     BluetoothRemoteDevice device;
163     EXPECT_EQ(profile_->GetDeviceState(device), 0);
164 
165     GTEST_LOG_(INFO) << "HandsFreeAudioGateway_UnitTest_GetDeviceState end";
166 }
167 
168 /*
169  * @tc.number: HandsFreeUnit006
170  * @tc.name: GetScoState
171  * @tc.desc: Get the Audio connection state of the specified remote AG device.
172 */
173 HWTEST_F(HandsFreeUnitTest, HandsFreeUnit_UnitTest_GetScoState, TestSize.Level1)
174 {
175     GTEST_LOG_(INFO) << "HandsFreeAudioGateway_UnitTest_GetScoState start";
176 
177     profile_ = HandsFreeUnit::GetProfile();
178     BluetoothRemoteDevice device;
179     EXPECT_EQ(profile_->GetScoState(device), 0);
180 
181     GTEST_LOG_(INFO) << "HandsFreeAudioGateway_UnitTest_GetScoState end";
182 }
183 
184 /*
185  * @tc.number: HandsFreeUnit007
186  * @tc.name: SendDTMFTone
187  * @tc.desc: Send DTMF tone code to remote AG device.
188 */
189 HWTEST_F(HandsFreeUnitTest, HandsFreeUnit_UnitTest_SendDTMFTone, TestSize.Level1)
190 {
191     GTEST_LOG_(INFO) << "HandsFreeAudioGateway_UnitTest_SendDTMFTone start";
192 
193     profile_ = HandsFreeUnit::GetProfile();
194     BluetoothRemoteDevice device;
195     EXPECT_EQ(profile_->SendDTMFTone(device, 0), true);
196 
197     GTEST_LOG_(INFO) << "HandsFreeAudioGateway_UnitTest_SendDTMFTone end";
198 }
199 
200 
201 /*
202  * @tc.number: HandsFreeUnit008
203  * @tc.name: Connect
204  * @tc.desc: Initiate the establishment of a service level connection to remote AG device.
205 */
206 HWTEST_F(HandsFreeUnitTest, HandsFreeUnit_UnitTest_Connect, TestSize.Level1)
207 {
208     GTEST_LOG_(INFO) << "HandsFreeAudioGateway_UnitTest_Connect start";
209 
210     profile_ = HandsFreeUnit::GetProfile();
211     BluetoothRemoteDevice device;
212     EXPECT_EQ(profile_->Connect(device), true);
213 
214     GTEST_LOG_(INFO) << "HandsFreeAudioGateway_UnitTest_Connect end";
215 }
216 
217 /*
218  * @tc.number: HandsFreeUnit009
219  * @tc.name: Disconnect
220  * @tc.desc: Release the audio connection from remote AG device.
221 */
222 HWTEST_F(HandsFreeUnitTest, HandsFreeUnit_UnitTest_Disconnect, TestSize.Level1)
223 {
224     GTEST_LOG_(INFO) << "HandsFreeAudioGateway_UnitTest_Disconnect start";
225 
226     profile_ = HandsFreeUnit::GetProfile();
227     BluetoothRemoteDevice device;
228     EXPECT_EQ(profile_->Disconnect(device), true);
229 
230     GTEST_LOG_(INFO) << "HandsFreeAudioGateway_UnitTest_Disconnect end";
231 }
232 
233 
234 /*
235  * @tc.number: HandsFreeUnit010
236  * @tc.name: OpenVoiceRecognition
237  * @tc.desc: Open voice recognition.
238 */
239 HWTEST_F(HandsFreeUnitTest, HandsFreeUnit_UnitTest_OpenVoiceRecognition, TestSize.Level1)
240 {
241     GTEST_LOG_(INFO) << "HandsFreeAudioGateway_UnitTest_OpenVoiceRecognition start";
242 
243     profile_ = HandsFreeUnit::GetProfile();
244     BluetoothRemoteDevice device;
245     EXPECT_EQ(profile_->OpenVoiceRecognition(device), true);
246 
247     GTEST_LOG_(INFO) << "HandsFreeAudioGateway_UnitTest_OpenVoiceRecognition end";
248 }
249 
250 /*
251  * @tc.number: HandsFreeUnit011
252  * @tc.name: CloseVoiceRecognition
253  * @tc.desc: Close voice recognition.
254 */
255 HWTEST_F(HandsFreeUnitTest, HandsFreeUnit_UnitTest_CloseVoiceRecognition, TestSize.Level1)
256 {
257     GTEST_LOG_(INFO) << "HandsFreeAudioGateway_UnitTest_CloseVoiceRecognition start";
258 
259     profile_ = HandsFreeUnit::GetProfile();
260     BluetoothRemoteDevice device;
261     EXPECT_EQ(profile_->CloseVoiceRecognition(device), true);
262 
263     GTEST_LOG_(INFO) << "HandsFreeAudioGateway_UnitTest_CloseVoiceRecognition end";
264 }
265 
266 /*
267  * @tc.number: HandsFreeUnit012
268  * @tc.name: GetExistingCalls
269  * @tc.desc: Get a list of all existing calls.
270 */
271 HWTEST_F(HandsFreeUnitTest, HandsFreeUnit_UnitTest_GetExistingCalls, TestSize.Level1)
272 {
273     GTEST_LOG_(INFO) << "HandsFreeAudioGateway_UnitTest_GetExistingCalls start";
274 
275     profile_ = HandsFreeUnit::GetProfile();
276     BluetoothRemoteDevice device;
277     vector<HandsFreeUnitCall> calls = profile_->GetExistingCalls(device);
278 
279     GTEST_LOG_(INFO) << "HandsFreeAudioGateway_UnitTest_GetExistingCalls end";
280 }
281 
282 /*
283  * @tc.number: HandsFreeUnit013
284  * @tc.name: AcceptIncomingCall
285  * @tc.desc: Accept an incoming call.
286 */
287 HWTEST_F(HandsFreeUnitTest, HandsFreeUnit_UnitTest_AcceptIncomingCall, TestSize.Level1)
288 {
289     GTEST_LOG_(INFO) << "HandsFreeAudioGateway_UnitTest_AcceptIncomingCall start";
290 
291     profile_ = HandsFreeUnit::GetProfile();
292     BluetoothRemoteDevice device;
293     EXPECT_EQ(profile_->AcceptIncomingCall(device, 0), true);
294 
295     GTEST_LOG_(INFO) << "HandsFreeAudioGateway_UnitTest_AcceptIncomingCall end";
296 }
297 
298 /*
299  * @tc.number: HandsFreeUnit014
300  * @tc.name: HoldActiveCall
301  * @tc.desc: Hold an active call.
302 */
303 HWTEST_F(HandsFreeUnitTest, HandsFreeUnit_UnitTest_HoldActiveCall, TestSize.Level1)
304 {
305     GTEST_LOG_(INFO) << "HandsFreeAudioGateway_UnitTest_HoldActiveCall start";
306 
307     profile_ = HandsFreeUnit::GetProfile();
308     BluetoothRemoteDevice device;
309     EXPECT_EQ(profile_->HoldActiveCall(device), true);
310 
311     GTEST_LOG_(INFO) << "HandsFreeAudioGateway_UnitTest_HoldActiveCall end";
312 }
313 
314 /*
315  * @tc.number: HandsFreeUnit015
316  * @tc.name: RejectIncomingCall
317  * @tc.desc: Reject an incoming call.
318 */
319 HWTEST_F(HandsFreeUnitTest, HandsFreeUnit_UnitTest_RejectIncomingCall, TestSize.Level1)
320 {
321     GTEST_LOG_(INFO) << "HandsFreeAudioGateway_UnitTest_RejectIncomingCall start";
322 
323     profile_ = HandsFreeUnit::GetProfile();
324     BluetoothRemoteDevice device;
325     EXPECT_EQ(profile_->RejectIncomingCall(device), true);
326 
327     GTEST_LOG_(INFO) << "HandsFreeAudioGateway_UnitTest_RejectIncomingCall end";
328 }
329 
330 /*
331  * @tc.number: HandsFreeUnit016
332  * @tc.name: FinishActiveCall
333  * @tc.desc: Start dial with specified call number.
334 */
335 HWTEST_F(HandsFreeUnitTest, HandsFreeUnit_UnitTest_FinishActiveCall, TestSize.Level1)
336 {
337     GTEST_LOG_(INFO) << "HandsFreeAudioGateway_UnitTest_FinishActiveCall start";
338 
339     profile_ = HandsFreeUnit::GetProfile();
340     BluetoothRemoteDevice device;
341     HandsFreeUnitCall call;
342     EXPECT_EQ(profile_->FinishActiveCall(device, call), true);
343 
344     GTEST_LOG_(INFO) << "HandsFreeAudioGateway_UnitTest_FinishActiveCall end";
345 }
346 
347 /*
348  * @tc.number: HandsFreeUnit017
349  * @tc.name: StartDial
350  * @tc.desc: Start dial with specified call number.
351 */
352 HWTEST_F(HandsFreeUnitTest, HandsFreeUnit_UnitTest_StartDial, TestSize.Level1)
353 {
354     GTEST_LOG_(INFO) << "HandsFreeAudioGateway_UnitTest_StartDial start";
355 
356     BluetoothRemoteDevice device;
357     std::string number = "000";
358     profile_ = HandsFreeUnit::GetProfile();
359     std::optional<HandsFreeUnitCall> call = profile_->StartDial(device, number);
360 
361     GTEST_LOG_(INFO) << "HandsFreeAudioGateway_UnitTest_StartDial end";
362 }
363 
364 /*
365  * @tc.number: HandsFreeUnit018
366  * @tc.name: RegisterObserver
367  * @tc.desc: Register HandsFree Unit observer instance.
368 */
369 HWTEST_F(HandsFreeUnitTest, HandsFreeUnit_UnitTest_RegisterObserver, TestSize.Level1)
370 {
371     GTEST_LOG_(INFO) << "HandsFreeAudioGateway_UnitTest_RegisterObserver start";
372 
373     profile_ = HandsFreeUnit::GetProfile();
374     profile_->RegisterObserver(observer_);
375 
376     GTEST_LOG_(INFO) << "HandsFreeAudioGateway_UnitTest_RegisterObserver end";
377 }
378 
379 /*
380  * @tc.number: HandsFreeUnit019
381  * @tc.name: DeregisterObserver
382  * @tc.desc: Deregister HandsFree Unit observer instance.
383 */
384 HWTEST_F(HandsFreeUnitTest, HandsFreeUnit_UnitTest_DeregisterObserver, TestSize.Level1)
385 {
386     GTEST_LOG_(INFO) << "HandsFreeAudioGateway_UnitTest_DeregisterObserver start";
387 
388     profile_ = HandsFreeUnit::GetProfile();
389     profile_->DeregisterObserver(observer_);
390 
391     GTEST_LOG_(INFO) << "HandsFreeAudioGateway_UnitTest_DeregisterObserver end";
392 }
393 
394 }  // namespace Bluetooth
395 }  // namespace OHOS