119e95205Sopenharmony_ci/* 219e95205Sopenharmony_ci * Copyright (C) 2021-2022 Huawei Device Co., Ltd. 319e95205Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 419e95205Sopenharmony_ci * you may not use this file except in compliance with the License. 519e95205Sopenharmony_ci * You may obtain a copy of the License at 619e95205Sopenharmony_ci * 719e95205Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 819e95205Sopenharmony_ci * 919e95205Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 1019e95205Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 1119e95205Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1219e95205Sopenharmony_ci * See the License for the specific language governing permissions and 1319e95205Sopenharmony_ci * limitations under the License. 1419e95205Sopenharmony_ci */ 1519e95205Sopenharmony_ci#include <gmock/gmock.h> 1619e95205Sopenharmony_ci#include <gtest/gtest.h> 1719e95205Sopenharmony_ci#include "bluetooth_a2dp_snk.h" 1819e95205Sopenharmony_ci#include "bluetooth_host.h" 1919e95205Sopenharmony_ci 2019e95205Sopenharmony_ciusing namespace testing; 2119e95205Sopenharmony_ciusing namespace testing::ext; 2219e95205Sopenharmony_ci 2319e95205Sopenharmony_cinamespace OHOS { 2419e95205Sopenharmony_cinamespace Bluetooth { 2519e95205Sopenharmony_ciusing namespace std; 2619e95205Sopenharmony_ci 2719e95205Sopenharmony_ciconstexpr int TIME = 4; 2819e95205Sopenharmony_ci 2919e95205Sopenharmony_ciclass A2dpSinkObserverCommon : public A2dpSinkObserver { 3019e95205Sopenharmony_cipublic: 3119e95205Sopenharmony_ci A2dpSinkObserverCommon() = default; 3219e95205Sopenharmony_ci virtual ~A2dpSinkObserverCommon() = default; 3319e95205Sopenharmony_ci 3419e95205Sopenharmony_ci virtual void OnConnectionStateChanged(const BluetoothRemoteDevice &device, int state, int cause) {} 3519e95205Sopenharmony_ci 3619e95205Sopenharmony_ciprivate: 3719e95205Sopenharmony_ci}; 3819e95205Sopenharmony_ci 3919e95205Sopenharmony_ci 4019e95205Sopenharmony_cistatic std::shared_ptr<A2dpSinkObserverCommon> observer_ = std::make_shared<A2dpSinkObserverCommon>(); 4119e95205Sopenharmony_cistatic A2dpSink *profile_; 4219e95205Sopenharmony_cistatic BluetoothHost *host_; 4319e95205Sopenharmony_ci 4419e95205Sopenharmony_ci 4519e95205Sopenharmony_ciclass A2dpSinkTest : public testing::Test { 4619e95205Sopenharmony_cipublic: 4719e95205Sopenharmony_ci A2dpSinkTest() 4819e95205Sopenharmony_ci {} 4919e95205Sopenharmony_ci ~A2dpSinkTest() 5019e95205Sopenharmony_ci {} 5119e95205Sopenharmony_ci 5219e95205Sopenharmony_ci static void SetUpTestCase(void); 5319e95205Sopenharmony_ci static void TearDownTestCase(void); 5419e95205Sopenharmony_ci void SetUp(); 5519e95205Sopenharmony_ci void TearDown(); 5619e95205Sopenharmony_ci 5719e95205Sopenharmony_ci}; 5819e95205Sopenharmony_ci 5919e95205Sopenharmony_ci 6019e95205Sopenharmony_civoid A2dpSinkTest::SetUpTestCase(void) 6119e95205Sopenharmony_ci{ 6219e95205Sopenharmony_ci 6319e95205Sopenharmony_ci} 6419e95205Sopenharmony_civoid A2dpSinkTest::TearDownTestCase(void) 6519e95205Sopenharmony_ci{ 6619e95205Sopenharmony_ci 6719e95205Sopenharmony_ci} 6819e95205Sopenharmony_civoid A2dpSinkTest::SetUp() 6919e95205Sopenharmony_ci{ 7019e95205Sopenharmony_ci host_ = &BluetoothHost::GetDefaultHost(); 7119e95205Sopenharmony_ci host_->EnableBt(); 7219e95205Sopenharmony_ci host_->EnableBle(); 7319e95205Sopenharmony_ci sleep(TIME); 7419e95205Sopenharmony_ci} 7519e95205Sopenharmony_ci 7619e95205Sopenharmony_civoid A2dpSinkTest::TearDown() 7719e95205Sopenharmony_ci{ 7819e95205Sopenharmony_ci host_->DisableBt(); 7919e95205Sopenharmony_ci host_->DisableBle(); 8019e95205Sopenharmony_ci host_ = nullptr; 8119e95205Sopenharmony_ci sleep(TIME); 8219e95205Sopenharmony_ci} 8319e95205Sopenharmony_ci 8419e95205Sopenharmony_ci/* 8519e95205Sopenharmony_ci * @tc.number: A2dpSink001 8619e95205Sopenharmony_ci * @tc.name: GetProfile 8719e95205Sopenharmony_ci * @tc.desc: Get a2dp sink instance 8819e95205Sopenharmony_ci*/ 8919e95205Sopenharmony_ciHWTEST_F(A2dpSinkTest, A2dpSink_UnitTest_GetProfile, TestSize.Level1) 9019e95205Sopenharmony_ci{ 9119e95205Sopenharmony_ci GTEST_LOG_(INFO) << "A2dpSink_UnitTest_GetProfile start"; 9219e95205Sopenharmony_ci 9319e95205Sopenharmony_ci profile_ = A2dpSink::GetProfile(); 9419e95205Sopenharmony_ci 9519e95205Sopenharmony_ci GTEST_LOG_(INFO) << "A2dpSink_UnitTest_GetProfile end"; 9619e95205Sopenharmony_ci} 9719e95205Sopenharmony_ci 9819e95205Sopenharmony_ci/* 9919e95205Sopenharmony_ci * @tc.number: A2dpSink002 10019e95205Sopenharmony_ci * @tc.name: GetPlayingState 10119e95205Sopenharmony_ci * @tc.desc: Get device playing state by address when peer device is on connected 10219e95205Sopenharmony_ci*/ 10319e95205Sopenharmony_ciHWTEST_F(A2dpSinkTest, A2dpSink_UnitTest_GetPlayingState, TestSize.Level1) 10419e95205Sopenharmony_ci{ 10519e95205Sopenharmony_ci GTEST_LOG_(INFO) << "A2dpSink_UnitTest_GetPlayingState start"; 10619e95205Sopenharmony_ci 10719e95205Sopenharmony_ci profile_ = A2dpSink::GetProfile(); 10819e95205Sopenharmony_ci BluetoothRemoteDevice device; 10919e95205Sopenharmony_ci int state = profile_->GetPlayingState(device); 11019e95205Sopenharmony_ci EXPECT_EQ(state, BT_SUCCESS); 11119e95205Sopenharmony_ci GTEST_LOG_(INFO) << "A2dpSink_UnitTest_GetPlayingState end"; 11219e95205Sopenharmony_ci} 11319e95205Sopenharmony_ci 11419e95205Sopenharmony_ci/* 11519e95205Sopenharmony_ci * @tc.number: A2dpSink003 11619e95205Sopenharmony_ci * @tc.name: Connect 11719e95205Sopenharmony_ci * @tc.desc: Connect to the peer bluetooth device 11819e95205Sopenharmony_ci*/ 11919e95205Sopenharmony_ciHWTEST_F(A2dpSinkTest, A2dpSink_UnitTest_Connect, TestSize.Level1) 12019e95205Sopenharmony_ci{ 12119e95205Sopenharmony_ci GTEST_LOG_(INFO) << "A2dpSink_UnitTest_Connect start"; 12219e95205Sopenharmony_ci 12319e95205Sopenharmony_ci profile_ = A2dpSink::GetProfile(); 12419e95205Sopenharmony_ci BluetoothRemoteDevice device; 12519e95205Sopenharmony_ci bool isOK = profile_->Connect(device); 12619e95205Sopenharmony_ci EXPECT_EQ(isOK, true); 12719e95205Sopenharmony_ci GTEST_LOG_(INFO) << "A2dpSink_UnitTest_Connect end"; 12819e95205Sopenharmony_ci} 12919e95205Sopenharmony_ci 13019e95205Sopenharmony_ci/* 13119e95205Sopenharmony_ci * @tc.number: A2dpSink004 13219e95205Sopenharmony_ci * @tc.name: Disconnect 13319e95205Sopenharmony_ci * @tc.desc: Disconnect with the peer bluetooth service 13419e95205Sopenharmony_ci*/ 13519e95205Sopenharmony_ciHWTEST_F(A2dpSinkTest, A2dpSink_UnitTest_Disconnect, TestSize.Level1) 13619e95205Sopenharmony_ci{ 13719e95205Sopenharmony_ci GTEST_LOG_(INFO) << "A2dpSink_UnitTest_Disconnect start"; 13819e95205Sopenharmony_ci 13919e95205Sopenharmony_ci profile_ = A2dpSink::GetProfile(); 14019e95205Sopenharmony_ci BluetoothRemoteDevice device; 14119e95205Sopenharmony_ci bool isOK = profile_->Disconnect(device); 14219e95205Sopenharmony_ci EXPECT_EQ(isOK, true); 14319e95205Sopenharmony_ci GTEST_LOG_(INFO) << "A2dpSink_UnitTest_Disconnect end"; 14419e95205Sopenharmony_ci} 14519e95205Sopenharmony_ci 14619e95205Sopenharmony_ci/* 14719e95205Sopenharmony_ci * @tc.number: A2dpSink005 14819e95205Sopenharmony_ci * @tc.name: RegisterObserver 14919e95205Sopenharmony_ci * @tc.desc: Register callback function of framework 15019e95205Sopenharmony_ci*/ 15119e95205Sopenharmony_ciHWTEST_F(A2dpSinkTest, A2dpSink_UnitTest_RegisterObserver, TestSize.Level1) 15219e95205Sopenharmony_ci{ 15319e95205Sopenharmony_ci GTEST_LOG_(INFO) << "A2dpSink_UnitTest_RegisterObserver start"; 15419e95205Sopenharmony_ci 15519e95205Sopenharmony_ci profile_ = A2dpSink::GetProfile(); 15619e95205Sopenharmony_ci profile_->RegisterObserver(observer_); 15719e95205Sopenharmony_ci GTEST_LOG_(INFO) << "A2dpSink_UnitTest_RegisterObserver end"; 15819e95205Sopenharmony_ci} 15919e95205Sopenharmony_ci 16019e95205Sopenharmony_ci/* 16119e95205Sopenharmony_ci * @tc.number: A2dpSink006 16219e95205Sopenharmony_ci * @tc.name: DeregisterObserver 16319e95205Sopenharmony_ci * @tc.desc: Deregister callback function of framework 16419e95205Sopenharmony_ci*/ 16519e95205Sopenharmony_ciHWTEST_F(A2dpSinkTest, A2dpSink_UnitTest_DeregisterObserver, TestSize.Level1) 16619e95205Sopenharmony_ci{ 16719e95205Sopenharmony_ci GTEST_LOG_(INFO) << "A2dpSink_UnitTest_DeregisterObserver start"; 16819e95205Sopenharmony_ci 16919e95205Sopenharmony_ci profile_ = A2dpSink::GetProfile(); 17019e95205Sopenharmony_ci profile_->DeregisterObserver(observer_); 17119e95205Sopenharmony_ci GTEST_LOG_(INFO) << "A2dpSink_UnitTest_DeregisterObserver end"; 17219e95205Sopenharmony_ci} 17319e95205Sopenharmony_ci 17419e95205Sopenharmony_ci/* 17519e95205Sopenharmony_ci * @tc.number: HandsFreeUnit007 17619e95205Sopenharmony_ci * @tc.name: GetDeviceState 17719e95205Sopenharmony_ci * @tc.desc: Get device connection state by address 17819e95205Sopenharmony_ci*/ 17919e95205Sopenharmony_ciHWTEST_F(A2dpSinkTest, A2dpSink_UnitTest_GetDeviceState, TestSize.Level1) 18019e95205Sopenharmony_ci{ 18119e95205Sopenharmony_ci GTEST_LOG_(INFO) << "A2dpSink_UnitTest_GetDeviceState start"; 18219e95205Sopenharmony_ci 18319e95205Sopenharmony_ci profile_ = A2dpSink::GetProfile(); 18419e95205Sopenharmony_ci BluetoothRemoteDevice device; 18519e95205Sopenharmony_ci EXPECT_EQ(profile_->GetDeviceState(device), 0); 18619e95205Sopenharmony_ci 18719e95205Sopenharmony_ci GTEST_LOG_(INFO) << "A2dpSink_UnitTest_GetDeviceState end"; 18819e95205Sopenharmony_ci} 18919e95205Sopenharmony_ci 19019e95205Sopenharmony_ci/* 19119e95205Sopenharmony_ci * @tc.number: HandsFreeUnit008 19219e95205Sopenharmony_ci * @tc.name: GetDevicesByStates 19319e95205Sopenharmony_ci * @tc.desc: Get devices by connection states 19419e95205Sopenharmony_ci*/ 19519e95205Sopenharmony_ciHWTEST_F(A2dpSinkTest, A2dpSink_UnitTest_GetDevicesByStates, TestSize.Level1) 19619e95205Sopenharmony_ci{ 19719e95205Sopenharmony_ci GTEST_LOG_(INFO) << "A2dpSink_UnitTest_GetDevicesByStates start"; 19819e95205Sopenharmony_ci 19919e95205Sopenharmony_ci profile_ = A2dpSink::GetProfile(); 20019e95205Sopenharmony_ci BluetoothRemoteDevice device; 20119e95205Sopenharmony_ci vector<int> states = {static_cast<int>(BTConnectState::CONNECTED)}; 20219e95205Sopenharmony_ci vector<BluetoothRemoteDevice> devices = profile_->GetDevicesByStates(states); 20319e95205Sopenharmony_ci 20419e95205Sopenharmony_ci GTEST_LOG_(INFO) << "A2dpSink_UnitTest_GetDevicesByStates end"; 20519e95205Sopenharmony_ci} 20619e95205Sopenharmony_ci 20719e95205Sopenharmony_ci/* 20819e95205Sopenharmony_ci * @tc.number: HandsFreeUnit009 20919e95205Sopenharmony_ci * @tc.name: GetConnectStrategy 21019e95205Sopenharmony_ci * @tc.desc: Get connect strategy by address 21119e95205Sopenharmony_ci*/ 21219e95205Sopenharmony_ciHWTEST_F(A2dpSinkTest, A2dpSink_UnitTest_GetConnectStrategy, TestSize.Level1) 21319e95205Sopenharmony_ci{ 21419e95205Sopenharmony_ci GTEST_LOG_(INFO) << "A2dpSink_UnitTest_GetConnectStrategy start"; 21519e95205Sopenharmony_ci 21619e95205Sopenharmony_ci profile_ = A2dpSink::GetProfile(); 21719e95205Sopenharmony_ci BluetoothRemoteDevice device; 21819e95205Sopenharmony_ci EXPECT_EQ(profile_->GetConnectStrategy(device), 0); 21919e95205Sopenharmony_ci 22019e95205Sopenharmony_ci GTEST_LOG_(INFO) << "A2dpSink_UnitTest_GetConnectStrategy end"; 22119e95205Sopenharmony_ci} 22219e95205Sopenharmony_ci 22319e95205Sopenharmony_ci/* 22419e95205Sopenharmony_ci * @tc.number: HandsFreeUnit010 22519e95205Sopenharmony_ci * @tc.name: SetConnectStrategy 22619e95205Sopenharmony_ci * @tc.desc: Set connect strategy by address 22719e95205Sopenharmony_ci*/ 22819e95205Sopenharmony_ciHWTEST_F(A2dpSinkTest, A2dpSink_UnitTest_SetConnectStrategy, TestSize.Level1) 22919e95205Sopenharmony_ci{ 23019e95205Sopenharmony_ci GTEST_LOG_(INFO) << "A2dpSink_UnitTest_SetConnectStrategy start"; 23119e95205Sopenharmony_ci 23219e95205Sopenharmony_ci profile_ = A2dpSink::GetProfile(); 23319e95205Sopenharmony_ci BluetoothRemoteDevice device; 23419e95205Sopenharmony_ci bool isOK = profile_->SetConnectStrategy(device,2); 23519e95205Sopenharmony_ci EXPECT_EQ(isOK, false); 23619e95205Sopenharmony_ci 23719e95205Sopenharmony_ci GTEST_LOG_(INFO) << "A2dpSink_UnitTest_SetConnectStrategy end"; 23819e95205Sopenharmony_ci} 23919e95205Sopenharmony_ci} // namespace Bluetooth 24019e95205Sopenharmony_ci} // namespace OHOS