1/*
2 * Copyright (c) 2021-2022 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 <cmath>
17#include <cstdio>
18#include <unistd.h>
19#include <gtest/gtest.h>
20#include <securec.h>
21#include "hdf_base.h"
22#include "osal_time.h"
23#include "bluetooth_audio_session_service.h"
24#include "bluetooth_hci_callback_impl.h"
25
26using namespace OHOS::HDI::Bluetooth::A2dp::V1_0;
27using IHciInterfaceSession = OHOS::HDI::Bluetooth::A2dp::V1_0::IBluetoothAudioSession;
28using IHciInterfaceType = OHOS::HDI::Bluetooth::A2dp::V1_0::BluetoothAudioStatus;
29using OHOS::HDI::Bluetooth::A2dp::V1_0::IBluetoothAudioCallback;
30using namespace testing::ext;
31
32extern "C" IBluetoothAudioSession *BluetoothAudioSessionImplGetInstance(void)
33{
34    return new (std::nothrow) BluetoothAudioSessionService();
35}
36
37namespace {
38    OHOS::sptr<IHciInterfaceSession> g_iBtHci = nullptr;
39    // OHOS::sptr<IBluetoothAudioCallback> g_hciCallbacks = nullptr;
40    sptr<SeClientCallback> g_hciCallbacks = nullptr;
41
42}
43
44class HdfBluetoothHdiTest : public testing::Test {
45public:
46    static void SetUpTestCase();
47    static void TearDownTestCase();
48    void SetUp();
49    void TearDown();
50};
51void HdfBluetoothHdiTest::SetUpTestCase()
52{
53    g_iBtHci = IBluetoothAudioSession::Get(true);
54}
55void HdfBluetoothHdiTest::TearDownTestCase()
56{
57}
58void HdfBluetoothHdiTest::SetUp()
59{
60}
61void HdfBluetoothHdiTest::TearDown()
62{
63}
64
65/**
66  * @tc.name: A2dpBluetoothSession_0100
67  * @tc.desc: the bluetooth a2dp api StartSession test
68  * @tc.type: FUNC
69  */
70HWTEST_F(HdfBluetoothHdiTest, SUB_DriverSystem_A2dpBluetoothSession_0100, TestSize.Level2)
71{
72    g_hciCallbacks = new (std::nothrow) SeClientCallback();
73    ASSERT_NE(nullptr, g_hciCallbacks);
74    std::cout << "g_hciCallbacks = " << g_hciCallbacks << std::endl;
75    ASSERT_NE(nullptr, g_iBtHci);
76    std::cout << "g_iBtHci0100 = " << g_iBtHci << std::endl;
77    SessionType sessionType = SessionType::SOFTWARE_ENCODING;
78    std::shared_ptr<SharedMemQueue<uint8_t>> queue = nullptr;
79    int32_t ret = g_iBtHci->StartSession(sessionType, g_hciCallbacks, queue);
80    std::cout << "A2dpBluetoothSession_0100_ret = " << ret << std::endl;
81    EXPECT_EQ(HDF_SUCCESS, ret);
82}
83
84/**
85  * @tc.name: A2dpBluetoothSession_0600
86  * @tc.desc: the bluetooth a2dp api StopSession test
87  * @tc.type: FUNC
88  */
89HWTEST_F(HdfBluetoothHdiTest, SUB_DriverSystem_A2dpBluetoothSession_0600, TestSize.Level2)
90{
91    ASSERT_NE(nullptr, g_iBtHci);
92    SessionType sessionType = SessionType::UNKNOWN_TYPE;
93    int32_t ret = g_iBtHci->StopSession(sessionType);
94    std::cout << "A2dpBluetoothSession_0600_ret = " << ret << std::endl;
95    EXPECT_EQ(HDF_SUCCESS, ret);
96}
97
98/**
99  * @tc.name: A2dpBluetoothSession_1100
100  * @tc.desc: the bluetooth a2dp api RenderOperationResult test
101  * @tc.type: FUNC
102  */
103
104HWTEST_F(HdfBluetoothHdiTest, SUB_DriverSystem_A2dpBluetoothSession_1100, TestSize.Level2)
105{
106    ASSERT_NE(nullptr, g_iBtHci);
107    Operation operation_render = Operation::SUSPEND_RENDER;
108    Status statusSuss = Status::SUCCESS;
109    int32_t ret = g_iBtHci->RenderOperationResult(operation_render, statusSuss);
110    std::cout << "A2dpBluetoothSession_1100_ret = " << ret << std::endl;
111    EXPECT_EQ(HDF_FAILURE, ret);
112}
113
114/**
115  * @tc.name: A2dpBluetoothSession_1600
116  * @tc.desc: the bluetooth a2dp enum types test
117  * @tc.type: FUNC
118  */
119
120HWTEST_F(HdfBluetoothHdiTest, SUB_DriverSystem_A2dpBluetoothSession_1600, TestSize.Level2)
121{
122    Operation operation_suspend = Operation::SUSPEND_RENDER;
123    std::cout << "Operation SUSPEND_RENDER = " << operation_suspend << std::endl;
124    EXPECT_EQ(operation_suspend, 0);
125
126    Operation operation_start = Operation::START_RENDER;
127    std::cout << "Operation START_RENDER = " << operation_start << std::endl;
128    EXPECT_EQ(operation_start, 1);
129
130    Status staus_success = Status::SUCCESS;
131    std::cout << "Status SUCCESS = " << staus_success << std::endl;
132    EXPECT_EQ(staus_success, 0);
133
134    Status staus_failure = Status::FAILURE;
135    std::cout << "Status FAILURE = " << staus_failure << std::endl;
136    EXPECT_EQ(staus_failure, 1);
137
138    SessionType sessionType_unknownType = SessionType::UNKNOWN_TYPE;
139    std::cout << "SessionType UNKNOWN_TYPE = " << sessionType_unknownType << std::endl;
140
141    SessionType sessionType_softwareEncoding = SessionType::SOFTWARE_ENCODING;
142    std::cout << "SessionType SOFTWARE_ENCODING = " << sessionType_softwareEncoding << std::endl;
143
144    SessionType sessionType_hardwareEncoding = SessionType::HARDWARE_ENCODING;
145    std::cout << "SessionType HARDWARE_ENCODING = " << sessionType_hardwareEncoding << std::endl;
146}