4
4
5
5
#include " client.h"
6
6
7
+ #include " src/connectivity/bluetooth/core/bt-host/att/att.h"
7
8
#include " src/connectivity/bluetooth/core/bt-host/common/test_helpers.h"
8
9
#include " src/connectivity/bluetooth/core/bt-host/l2cap/fake_channel_test.h"
9
10
@@ -14,6 +15,14 @@ constexpr UUID kTestUuid1(uint16_t{0xDEAD});
14
15
constexpr UUID kTestUuid2 (uint16_t {0xBEEF });
15
16
constexpr UUID kTestUuid3 ({0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 });
16
17
18
+ att::Result<uint16_t > MtuResultFromErrCode (att::ErrorCode ecode) {
19
+ return fitx::error (att::Error (ecode));
20
+ }
21
+
22
+ att::Result<uint16_t > MtuResultFromHostErrCode (HostError ecode) {
23
+ return fitx::error (att::Error (ecode));
24
+ }
25
+
17
26
// clang-format off
18
27
const StaticByteBuffer kDiscoverPrimaryRequest (
19
28
0x10 , // opcode: read by group type request
@@ -98,13 +107,8 @@ TEST_F(ClientTest, ExchangeMTUMalformedResponse) {
98
107
kPreferredMTU , 0x00 // client rx mtu: kPreferredMTU
99
108
);
100
109
101
- // Initialize to a non-zero value.
102
- uint16_t final_mtu = kPreferredMTU ;
103
- att::Result<> status = fitx::ok ();
104
- auto mtu_cb = [&](att::Result<> cb_status, uint16_t val) {
105
- final_mtu = val;
106
- status = cb_status;
107
- };
110
+ std::optional<att::Result<uint16_t >> result;
111
+ auto mtu_cb = [&](att::Result<uint16_t > cb_result) { result = cb_result; };
108
112
109
113
att ()->set_preferred_mtu (kPreferredMTU );
110
114
@@ -122,8 +126,8 @@ TEST_F(ClientTest, ExchangeMTUMalformedResponse) {
122
126
123
127
RunLoopUntilIdle ();
124
128
125
- EXPECT_EQ ( ToResult (HostError:: kPacketMalformed ), status );
126
- EXPECT_EQ (0 , final_mtu );
129
+ ASSERT_TRUE (result. has_value () );
130
+ EXPECT_EQ (MtuResultFromHostErrCode (HostError:: kPacketMalformed ), *result );
127
131
EXPECT_TRUE (fake_chan ()->link_error ());
128
132
}
129
133
@@ -135,12 +139,8 @@ TEST_F(ClientTest, ExchangeMTUErrorNotSupported) {
135
139
kPreferredMTU , 0x00 // client rx mtu: kPreferredMTU
136
140
);
137
141
138
- uint16_t final_mtu = 0 ;
139
- att::Result<> status = fitx::ok ();
140
- auto mtu_cb = [&](att::Result<> cb_status, uint16_t val) {
141
- final_mtu = val;
142
- status = cb_status;
143
- };
142
+ std::optional<att::Result<uint16_t >> result;
143
+ auto mtu_cb = [&](att::Result<uint16_t > cb_result) { result = cb_result; };
144
144
145
145
// Set the initial MTU to something other than the default LE MTU since we
146
146
// want to confirm that the MTU changes to the default.
@@ -154,16 +154,15 @@ TEST_F(ClientTest, ExchangeMTUErrorNotSupported) {
154
154
155
155
// Respond with "Request Not Supported". This will cause us to switch to the
156
156
// default MTU.
157
- fake_chan ()->Receive (StaticByteBuffer (0x01 , // opcode: error response
158
- 0x02 , // request: exchange MTU
159
- 0x00 , 0x00 , // handle: 0
160
- 0x06 // error: Request Not Supported
161
- ));
157
+ fake_chan ()->Receive (StaticByteBuffer (att::kErrorResponse , // opcode
158
+ att::kExchangeMTURequest , // request opcode
159
+ 0x00 , 0x00 , // handle: 0
160
+ att::ErrorCode::kRequestNotSupported ));
162
161
163
162
RunLoopUntilIdle ();
164
163
165
- EXPECT_EQ ( ToResult (att::ErrorCode:: kRequestNotSupported ), status );
166
- EXPECT_EQ (att::kLEMinMTU , final_mtu );
164
+ ASSERT_TRUE (result. has_value () );
165
+ EXPECT_EQ (MtuResultFromErrCode ( att::ErrorCode:: kRequestNotSupported ), *result );
167
166
EXPECT_EQ (att::kLEMinMTU , att ()->mtu ());
168
167
}
169
168
@@ -174,12 +173,8 @@ TEST_F(ClientTest, ExchangeMTUErrorOther) {
174
173
kPreferredMTU , 0x00 // client rx mtu: kPreferredMTU
175
174
);
176
175
177
- uint16_t final_mtu = kPreferredMTU ;
178
- att::Result<> status = fitx::ok ();
179
- auto mtu_cb = [&](att::Result<> cb_status, uint16_t val) {
180
- final_mtu = val;
181
- status = cb_status;
182
- };
176
+ std::optional<att::Result<uint16_t >> result;
177
+ auto mtu_cb = [&](att::Result<uint16_t > cb_result) { result = cb_result; };
183
178
184
179
att ()->set_preferred_mtu (kPreferredMTU );
185
180
EXPECT_EQ (att::kLEMinMTU , att ()->mtu ());
@@ -190,16 +185,15 @@ TEST_F(ClientTest, ExchangeMTUErrorOther) {
190
185
ASSERT_TRUE (Expect (kExpectedRequest ));
191
186
192
187
// Respond with an error. The MTU should remain unchanged.
193
- fake_chan ()->Receive (StaticByteBuffer (0x01 , // opcode: error response
194
- 0x02 , // request: exchange MTU
195
- 0x00 , 0x00 , // handle: 0
196
- 0x0E // error: Unlikely Error
197
- ));
188
+ fake_chan ()->Receive (StaticByteBuffer (att::kErrorResponse , // opcode
189
+ att::kExchangeMTURequest , // request opcode
190
+ 0x00 , 0x00 , // handle: 0
191
+ att::ErrorCode::kUnlikelyError ));
198
192
199
193
RunLoopUntilIdle ();
200
194
201
- EXPECT_EQ ( ToResult (att::ErrorCode:: kUnlikelyError ), status );
202
- EXPECT_EQ (0 , final_mtu );
195
+ ASSERT_TRUE (result. has_value () );
196
+ EXPECT_EQ (MtuResultFromErrCode (att::ErrorCode:: kUnlikelyError ), *result );
203
197
EXPECT_EQ (att::kLEMinMTU , att ()->mtu ());
204
198
}
205
199
@@ -213,12 +207,8 @@ TEST_F(ClientTest, ExchangeMTUSelectLocal) {
213
207
kPreferredMTU , 0x00 // client rx mtu: kPreferredMTU
214
208
);
215
209
216
- uint16_t final_mtu = 0 ;
217
- att::Result<> status = fitx::ok ();
218
- auto mtu_cb = [&](att::Result<> cb_status, uint16_t val) {
219
- final_mtu = val;
220
- status = cb_status;
221
- };
210
+ std::optional<att::Result<uint16_t >> result;
211
+ auto mtu_cb = [&](att::Result<uint16_t > cb_result) { result = cb_result; };
222
212
223
213
att ()->set_preferred_mtu (kPreferredMTU );
224
214
@@ -234,9 +224,8 @@ TEST_F(ClientTest, ExchangeMTUSelectLocal) {
234
224
));
235
225
236
226
RunLoopUntilIdle ();
237
-
238
- EXPECT_EQ (fitx::ok (), status);
239
- EXPECT_EQ (kPreferredMTU , final_mtu);
227
+ ASSERT_TRUE (result.has_value ());
228
+ EXPECT_EQ (att::Result<uint16_t >(fitx::ok (kPreferredMTU )), *result);
240
229
EXPECT_EQ (kPreferredMTU , att ()->mtu ());
241
230
}
242
231
@@ -250,12 +239,8 @@ TEST_F(ClientTest, ExchangeMTUSelectRemote) {
250
239
kPreferredMTU , 0x00 // client rx mtu: kPreferredMTU
251
240
);
252
241
253
- uint16_t final_mtu = 0 ;
254
- att::Result<> status = fitx::ok ();
255
- auto mtu_cb = [&](att::Result<> cb_status, uint16_t val) {
256
- final_mtu = val;
257
- status = cb_status;
258
- };
242
+ std::optional<att::Result<uint16_t >> result;
243
+ auto mtu_cb = [&](att::Result<uint16_t > cb_result) { result = cb_result; };
259
244
260
245
att ()->set_preferred_mtu (kPreferredMTU );
261
246
@@ -272,8 +257,8 @@ TEST_F(ClientTest, ExchangeMTUSelectRemote) {
272
257
273
258
RunLoopUntilIdle ();
274
259
275
- EXPECT_EQ ( fitx::ok (), status );
276
- EXPECT_EQ (kServerRxMTU , final_mtu );
260
+ ASSERT_TRUE (result. has_value () );
261
+ EXPECT_EQ (att::Result< uint16_t >( fitx::ok ( kServerRxMTU )), *result );
277
262
EXPECT_EQ (kServerRxMTU , att ()->mtu ());
278
263
}
279
264
@@ -287,12 +272,8 @@ TEST_F(ClientTest, ExchangeMTUSelectDefault) {
287
272
kPreferredMTU , 0x00 // client rx mtu: kPreferredMTU
288
273
);
289
274
290
- uint16_t final_mtu = 0 ;
291
- att::Result<> status = fitx::ok ();
292
- auto mtu_cb = [&](att::Result<> cb_status, uint16_t val) {
293
- final_mtu = val;
294
- status = cb_status;
295
- };
275
+ std::optional<att::Result<uint16_t >> result;
276
+ auto mtu_cb = [&](att::Result<uint16_t > cb_result) { result = cb_result; };
296
277
297
278
att ()->set_preferred_mtu (kPreferredMTU );
298
279
@@ -309,8 +290,8 @@ TEST_F(ClientTest, ExchangeMTUSelectDefault) {
309
290
310
291
RunLoopUntilIdle ();
311
292
312
- EXPECT_EQ ( fitx::ok (), status );
313
- EXPECT_EQ (att::kLEMinMTU , final_mtu );
293
+ ASSERT_TRUE (result. has_value () );
294
+ EXPECT_EQ (att::Result< uint16_t >( fitx::ok (att:: kLEMinMTU )), *result );
314
295
EXPECT_EQ (att::kLEMinMTU , att ()->mtu ());
315
296
}
316
297
@@ -3213,12 +3194,8 @@ TEST_F(ClientTest, ReadRequestSuccessNotTruncatedWhenMtuAllowsMaxValueLength) {
3213
3194
LowerBits (kPreferredMTU ), UpperBits (kPreferredMTU ) // client rx mtu
3214
3195
);
3215
3196
3216
- uint16_t final_mtu = 0 ;
3217
- att::Result<> mtu_status = fitx::ok ();
3218
- auto mtu_cb = [&](att::Result<> cb_status, uint16_t val) {
3219
- final_mtu = val;
3220
- mtu_status = cb_status;
3221
- };
3197
+ std::optional<att::Result<uint16_t >> result;
3198
+ auto mtu_cb = [&](att::Result<uint16_t > cb_result) { result = cb_result; };
3222
3199
3223
3200
// Initiate the request on the loop since Expect() below blocks.
3224
3201
async::PostTask (dispatcher (), [this , mtu_cb] { client ()->ExchangeMTU (mtu_cb); });
@@ -3232,8 +3209,8 @@ TEST_F(ClientTest, ReadRequestSuccessNotTruncatedWhenMtuAllowsMaxValueLength) {
3232
3209
));
3233
3210
3234
3211
RunLoopUntilIdle ();
3235
- EXPECT_EQ ( fitx::ok (), mtu_status );
3236
- EXPECT_EQ (kPreferredMTU , final_mtu );
3212
+ ASSERT_TRUE (result. has_value () );
3213
+ EXPECT_EQ (att::Result< uint16_t >( fitx::ok ( kPreferredMTU )), *result );
3237
3214
EXPECT_EQ (kPreferredMTU , att ()->mtu ());
3238
3215
3239
3216
constexpr att::Handle kHandle = 0x0001 ;
@@ -3386,6 +3363,7 @@ TEST_F(ClientTest, ReadByTypeRequestSuccess128BitUUID) {
3386
3363
EXPECT_TRUE (cb_called);
3387
3364
EXPECT_FALSE (fake_chan ()->link_error ());
3388
3365
}
3366
+
3389
3367
TEST_F (ClientTest, ReadByTypeRequestError) {
3390
3368
constexpr att::Handle kStartHandle = 0x0001 ;
3391
3369
constexpr att::Handle kEndHandle = 0xFFFF ;
0 commit comments