blob: 702df95516f7656157dd0b5ae0196efc47c3736c [file] [log] [blame]
Chienyuan Huanga1020f02023-12-04 12:31:43 +00001/*
2 * Copyright (C) 2023 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#include <aidl/Gtest.h>
18#include <aidl/Vintf.h>
19#include <aidl/android/hardware/bluetooth/ranging/BnBluetoothChannelSoundingSessionCallback.h>
20#include <aidl/android/hardware/bluetooth/ranging/IBluetoothChannelSounding.h>
21#include <aidl/android/hardware/bluetooth/ranging/IBluetoothChannelSoundingSessionCallback.h>
22#include <android-base/logging.h>
23#include <android/binder_manager.h>
24#include <android/binder_process.h>
25#include <binder/IServiceManager.h>
26#include <utils/Log.h>
27
28using aidl::android::hardware::bluetooth::ranging::
29 BluetoothChannelSoundingParameters;
30using aidl::android::hardware::bluetooth::ranging::
31 BnBluetoothChannelSoundingSessionCallback;
32using aidl::android::hardware::bluetooth::ranging::ChannelSoudingRawData;
33using aidl::android::hardware::bluetooth::ranging::CsSecurityLevel;
34using aidl::android::hardware::bluetooth::ranging::IBluetoothChannelSounding;
35using aidl::android::hardware::bluetooth::ranging::
36 IBluetoothChannelSoundingSession;
37using aidl::android::hardware::bluetooth::ranging::
38 IBluetoothChannelSoundingSessionCallback;
39using aidl::android::hardware::bluetooth::ranging::RangingResult;
40using aidl::android::hardware::bluetooth::ranging::Reason;
41using aidl::android::hardware::bluetooth::ranging::ResultType;
42using aidl::android::hardware::bluetooth::ranging::SessionType;
43using aidl::android::hardware::bluetooth::ranging::VendorSpecificData;
44using ndk::ScopedAStatus;
45
46class BluetoothChannelSoundingSessionCallback
47 : public BnBluetoothChannelSoundingSessionCallback {
48 public:
49 ScopedAStatus onOpened(Reason reason) override;
50 ScopedAStatus onOpenFailed(Reason reason) override;
51 ScopedAStatus onResult(const RangingResult& in_result) override;
52 ScopedAStatus onClose(Reason reason) override;
53 ScopedAStatus onCloseFailed(Reason reason) override;
54};
55
56ScopedAStatus BluetoothChannelSoundingSessionCallback::onOpened(
57 Reason /*reason*/) {
58 return ::ndk::ScopedAStatus::ok();
59}
60ScopedAStatus BluetoothChannelSoundingSessionCallback::onOpenFailed(
61 Reason /*reason*/) {
62 return ::ndk::ScopedAStatus::ok();
63}
64ScopedAStatus BluetoothChannelSoundingSessionCallback::onResult(
65 const RangingResult& /*in_result*/) {
66 return ::ndk::ScopedAStatus::ok();
67}
68ScopedAStatus BluetoothChannelSoundingSessionCallback::onClose(
69 Reason /*reason*/) {
70 return ::ndk::ScopedAStatus::ok();
71}
72ScopedAStatus BluetoothChannelSoundingSessionCallback::onCloseFailed(
73 Reason /*reason*/) {
74 return ::ndk::ScopedAStatus::ok();
75}
76
77class BluetoothRangingTest : public ::testing::TestWithParam<std::string> {
78 public:
79 virtual void SetUp() override {
80 ALOGI("SetUp Ranging Test");
81 bluetooth_channel_sounding_ = IBluetoothChannelSounding::fromBinder(
82 ndk::SpAIBinder(AServiceManager_waitForService(GetParam().c_str())));
83 ASSERT_NE(bluetooth_channel_sounding_, nullptr);
84 }
85
86 virtual void TearDown() override {
87 ALOGI("TearDown Ranging Test");
88 bluetooth_channel_sounding_ = nullptr;
89 ASSERT_EQ(bluetooth_channel_sounding_, nullptr);
90 }
91
92 ScopedAStatus getVendorSpecificData(
93 std::optional<std::vector<std::optional<VendorSpecificData>>>*
94 _aidl_return);
95 ScopedAStatus getSupportedSessionTypes(
96 std::optional<std::vector<SessionType>>* _aidl_return);
97 ScopedAStatus getMaxSupportedCsSecurityLevel(CsSecurityLevel* _aidl_return);
98 ScopedAStatus openSession(
99 const BluetoothChannelSoundingParameters& in_params,
100 const std::shared_ptr<IBluetoothChannelSoundingSessionCallback>&
101 in_callback,
102 std::shared_ptr<IBluetoothChannelSoundingSession>* _aidl_return);
103
104 ScopedAStatus initBluetoothChannelSoundingSession(
105 std::shared_ptr<IBluetoothChannelSoundingSession>* session) {
106 BluetoothChannelSoundingParameters params;
107 std::shared_ptr<BluetoothChannelSoundingSessionCallback> callback = nullptr;
108 callback =
109 ndk::SharedRefBase::make<BluetoothChannelSoundingSessionCallback>();
110 ScopedAStatus status = openSession(params, callback, session);
111 return status;
112 }
113
114 private:
115 std::shared_ptr<IBluetoothChannelSounding> bluetooth_channel_sounding_;
116};
117
118ScopedAStatus BluetoothRangingTest::getVendorSpecificData(
119 std::optional<std::vector<std::optional<VendorSpecificData>>>*
120 _aidl_return) {
121 return bluetooth_channel_sounding_->getVendorSpecificData(_aidl_return);
122}
123ScopedAStatus BluetoothRangingTest::getSupportedSessionTypes(
124 std::optional<std::vector<SessionType>>* _aidl_return) {
125 return bluetooth_channel_sounding_->getSupportedSessionTypes(_aidl_return);
126}
127
128ScopedAStatus BluetoothRangingTest::getMaxSupportedCsSecurityLevel(
129 CsSecurityLevel* _aidl_return) {
130 return bluetooth_channel_sounding_->getMaxSupportedCsSecurityLevel(
131 _aidl_return);
132}
133ScopedAStatus BluetoothRangingTest::openSession(
134 const BluetoothChannelSoundingParameters& in_params,
135 const std::shared_ptr<IBluetoothChannelSoundingSessionCallback>&
136 in_callback,
137 std::shared_ptr<IBluetoothChannelSoundingSession>* _aidl_return) {
138 return bluetooth_channel_sounding_->openSession(in_params, in_callback,
139 _aidl_return);
140}
141
142TEST_P(BluetoothRangingTest, SetupAndTearDown) {}
143
144TEST_P(BluetoothRangingTest, GetVendorSpecificData) {
145 std::optional<std::vector<std::optional<VendorSpecificData>>>
146 vendor_specific_data;
147 ScopedAStatus status = getVendorSpecificData(&vendor_specific_data);
148 ASSERT_TRUE(status.isOk());
149}
150
151TEST_P(BluetoothRangingTest, GetSupportedSessionTypes) {
152 std::optional<std::vector<SessionType>> supported_session_types;
153 ScopedAStatus status = getSupportedSessionTypes(&supported_session_types);
154 ASSERT_TRUE(status.isOk());
155}
156
157TEST_P(BluetoothRangingTest, GetMaxSupportedCsSecurityLevel) {
158 CsSecurityLevel security_level;
159 ScopedAStatus status = getMaxSupportedCsSecurityLevel(&security_level);
160 ASSERT_TRUE(status.isOk());
161}
162
163TEST_P(BluetoothRangingTest, OpenSession) {
164 BluetoothChannelSoundingParameters params;
165 std::shared_ptr<BluetoothChannelSoundingSessionCallback> callback = nullptr;
166 callback =
167 ndk::SharedRefBase::make<BluetoothChannelSoundingSessionCallback>();
168 std::shared_ptr<IBluetoothChannelSoundingSession> session;
169 ScopedAStatus status = openSession(params, callback, &session);
170 ASSERT_TRUE(status.isOk());
171}
172
173TEST_P(BluetoothRangingTest, GetVendorSpecificReplies) {
174 std::shared_ptr<IBluetoothChannelSoundingSession> session;
175 auto status = initBluetoothChannelSoundingSession(&session);
176 ASSERT_TRUE(status.isOk());
177 if (session != nullptr) {
178 std::optional<std::vector<std::optional<VendorSpecificData>>>
179 vendor_specific_data;
180 status = session->getVendorSpecificReplies(&vendor_specific_data);
181 ASSERT_TRUE(status.isOk());
182 }
183}
184
185TEST_P(BluetoothRangingTest, GetSupportedResultTypes) {
186 std::shared_ptr<IBluetoothChannelSoundingSession> session;
187 auto status = initBluetoothChannelSoundingSession(&session);
188 ASSERT_TRUE(status.isOk());
189 if (session != nullptr) {
190 std::vector<ResultType> supported_result_types;
191 status = session->getSupportedResultTypes(&supported_result_types);
192 ASSERT_TRUE(status.isOk());
193 }
194}
195
196TEST_P(BluetoothRangingTest, IsAbortedProcedureRequired) {
197 std::shared_ptr<IBluetoothChannelSoundingSession> session;
198 auto status = initBluetoothChannelSoundingSession(&session);
199 ASSERT_TRUE(status.isOk());
200 if (session != nullptr) {
201 bool is_abort_procedure_required = true;
202 status = session->isAbortedProcedureRequired(&is_abort_procedure_required);
203 ASSERT_TRUE(status.isOk());
204 }
205}
206
207TEST_P(BluetoothRangingTest, WriteRawData) {
208 std::shared_ptr<IBluetoothChannelSoundingSession> session;
209 auto status = initBluetoothChannelSoundingSession(&session);
210 ASSERT_TRUE(status.isOk());
211 if (session != nullptr) {
212 ChannelSoudingRawData raw_data;
213 status = session->writeRawData(raw_data);
214 ASSERT_TRUE(status.isOk());
215 }
216}
217
218TEST_P(BluetoothRangingTest, CloseSession) {
219 std::shared_ptr<IBluetoothChannelSoundingSession> session;
220 auto status = initBluetoothChannelSoundingSession(&session);
221 ASSERT_TRUE(status.isOk());
222 if (session != nullptr) {
223 status = session->close(Reason::LOCAL_STACK_REQUEST);
224 ASSERT_TRUE(status.isOk());
225 }
226}
227
228GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(BluetoothRangingTest);
229INSTANTIATE_TEST_SUITE_P(PerInstance, BluetoothRangingTest,
230 testing::ValuesIn(android::getAidlHalInstanceNames(
231 IBluetoothChannelSounding::descriptor)),
232 android::PrintInstanceNameToString);
233
234int main(int argc, char** argv) {
235 ::testing::InitGoogleTest(&argc, argv);
236 ABinderProcess_startThreadPool();
237 int status = RUN_ALL_TESTS();
238 ALOGI("Test result = %d", status);
239 return status;
240}