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