1 //
2 // Copyright (C) 2024 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 #include "nfa_dm_ndef.cc"
17
18 #include <gmock/gmock.h>
19 #include <gtest/gtest.h>
20
21 #include <cstring>
22
23 #include "mock_gki_utils.h"
24 class MockNDEFHandler {
25 public:
26 MOCK_METHOD(void, OnNDEFData, (uint8_t event, tNFA_NDEF_EVT_DATA* data));
27 uint8_t flags;
28 };
NDEFCallbackBridge(uint8_t event,tNFA_NDEF_EVT_DATA * data)29 static void NDEFCallbackBridge(uint8_t event, tNFA_NDEF_EVT_DATA* data) {
30 extern MockNDEFHandler* g_mock_handler;
31 if (g_mock_handler) {
32 g_mock_handler->OnNDEFData(event, data);
33 }
34 }
35 MockNDEFHandler* g_mock_handler = nullptr;
36 class NfaDmTest : public ::testing::Test {
37 protected:
38 tNFA_DM_CB nfa_dm_cb_mock;
39 MockNDEFHandler mock_handler;
40 MockNDEFHandler mock_handler1;
41 MockNDEFHandler mock_handler2;
SetUp()42 void SetUp() override {
43 memset(&nfa_dm_cb_mock, 0, sizeof(nfa_dm_cb_mock));
44 g_mock_handler = &mock_handler;
45 nfa_dm_cb_mock.p_ndef_handler[0] = reinterpret_cast<
46 tNFA_DM_API_REG_NDEF_HDLR*>(&mock_handler1);
47 nfa_dm_cb_mock.p_ndef_handler[1] = reinterpret_cast<
48 tNFA_DM_API_REG_NDEF_HDLR*>(&mock_handler2);
49 gki_utils = new MockGkiUtils();
50 }
TearDown()51 void TearDown() override {
52 g_mock_handler = nullptr;
53 testing::Mock::VerifyAndClearExpectations(&mock_handler);
54 gki_utils = nullptr;
55 }
56 };
57
58 // nfa_dm_ndef_reg_hdlr
59
TEST_F(NfaDmTest,RegisterHandler_Success)60 TEST_F(NfaDmTest, RegisterHandler_Success) {
61 tNFA_DM_API_REG_NDEF_HDLR reg_info = {};
62 reg_info.p_ndef_cback = NDEFCallbackBridge;
63 reg_info.tnf = NFA_TNF_DEFAULT;
64 reg_info.name_len = 1;
65 EXPECT_CALL(mock_handler, OnNDEFData('\0', ::testing::_)).Times(1);
66 uint8_t name[] = {'U'};
67 memcpy(reg_info.name, name, reg_info.name_len);
68 bool result = nfa_dm_ndef_reg_hdlr((tNFA_DM_MSG*)®_info);
69 EXPECT_FALSE(result);
70 }
71
TEST_F(NfaDmTest,RegisterHandler_ReplaceExisting)72 TEST_F(NfaDmTest, RegisterHandler_ReplaceExisting) {
73 tNFA_DM_API_REG_NDEF_HDLR reg_info1 = {};
74 reg_info1.p_ndef_cback = NDEFCallbackBridge;
75 reg_info1.tnf = NFA_TNF_DEFAULT;
76 reg_info1.name_len = 1;
77 uint8_t name1[] = {'1'};
78 memcpy(reg_info1.name, name1, reg_info1.name_len);
79 EXPECT_CALL(mock_handler, OnNDEFData(::testing::_, ::testing::_)).Times(1);
80 nfa_dm_ndef_reg_hdlr((tNFA_DM_MSG*)®_info1);
81 tNFA_DM_API_REG_NDEF_HDLR reg_info2 = {};
82 reg_info2.p_ndef_cback = NDEFCallbackBridge;
83 reg_info2.tnf = NFA_TNF_DEFAULT;
84 reg_info2.name_len = 1;
85 EXPECT_CALL(mock_handler, OnNDEFData(::testing::_, ::testing::_)).Times(1);
86 uint8_t name2[] = {'2'};
87 memcpy(reg_info2.name, name2, reg_info2.name_len);
88 bool result = nfa_dm_ndef_reg_hdlr((tNFA_DM_MSG*)®_info2);
89 EXPECT_FALSE(result);
90 }
91
92 //nfa_dm_ndef_dereg_hdlr
93
TEST_F(NfaDmTest,DeregisterHandler_Success)94 TEST_F(NfaDmTest, DeregisterHandler_Success) {
95 tNFA_DM_API_REG_NDEF_HDLR reg_info = {};
96 reg_info.p_ndef_cback = NDEFCallbackBridge;
97 reg_info.tnf = NFA_TNF_DEFAULT;
98 reg_info.name_len = 1;
99 uint8_t name[] = {'U'};
100 memcpy(reg_info.name, name, reg_info.name_len);
101 nfa_dm_ndef_reg_hdlr((tNFA_DM_MSG*)®_info);
102 EXPECT_CALL(mock_handler, OnNDEFData(::testing::_, ::testing::_)).Times(0);
103 bool result = nfa_dm_ndef_dereg_hdlr((tNFA_DM_MSG*)®_info);
104 std::cout << "Deregistration result: " << (result ? "Success" : "Failure") << std::endl;
105 EXPECT_TRUE(result);
106 }
107
TEST_F(NfaDmTest,DeregisterHandler_Fail_HandlerNotRegistered)108 TEST_F(NfaDmTest, DeregisterHandler_Fail_HandlerNotRegistered) {
109 tNFA_DM_API_REG_NDEF_HDLR reg_info = {};
110 reg_info.p_ndef_cback = NDEFCallbackBridge;
111 reg_info.tnf = NFA_TNF_DEFAULT;
112 reg_info.name_len = 1;
113 uint8_t name[] = {'U'};
114 memcpy(reg_info.name, name, reg_info.name_len);
115 bool result = nfa_dm_ndef_dereg_hdlr((tNFA_DM_MSG*)®_info);
116 EXPECT_TRUE(result);
117 }
118
TEST_F(NfaDmTest,DeregisterHandler_ReleaseSlot)119 TEST_F(NfaDmTest, DeregisterHandler_ReleaseSlot) {
120 tNFA_DM_API_REG_NDEF_HDLR reg_info1 = {};
121 reg_info1.p_ndef_cback = NDEFCallbackBridge;
122 reg_info1.tnf = NFA_TNF_DEFAULT;
123 reg_info1.name_len = 1;
124 uint8_t name1[] = {'1'};
125 memcpy(reg_info1.name, name1, reg_info1.name_len);
126 nfa_dm_ndef_reg_hdlr((tNFA_DM_MSG*)®_info1);
127 bool result1 = nfa_dm_ndef_dereg_hdlr((tNFA_DM_MSG*)®_info1);
128 EXPECT_TRUE(result1);
129 tNFA_DM_API_REG_NDEF_HDLR reg_info2 = {};
130 reg_info2.p_ndef_cback = NDEFCallbackBridge;
131 reg_info2.tnf = NFA_TNF_DEFAULT;
132 reg_info2.name_len = 1;
133 uint8_t name2[] = {'2'};
134 memcpy(reg_info2.name, name2, reg_info2.name_len);
135 bool result2 = nfa_dm_ndef_reg_hdlr((tNFA_DM_MSG*)®_info2);
136 EXPECT_FALSE(result2);
137 }
TEST_F(NfaDmTest,DeregisterHandler_AllSlotsOccupied)138 TEST_F(NfaDmTest, DeregisterHandler_AllSlotsOccupied) {
139 for (int i = 0; i < NFA_NDEF_MAX_HANDLERS; ++i) {
140 tNFA_DM_API_REG_NDEF_HDLR reg_info = {};
141 reg_info.p_ndef_cback = NDEFCallbackBridge;
142 reg_info.tnf = NFA_TNF_DEFAULT;
143 reg_info.name_len = 1;
144 uint8_t name[] = {'U'};
145 memcpy(reg_info.name, name, reg_info.name_len);
146 nfa_dm_ndef_reg_hdlr((tNFA_DM_MSG*)®_info);
147 }
148 tNFA_DM_API_REG_NDEF_HDLR reg_info_to_deregister = {};
149 reg_info_to_deregister.p_ndef_cback = NDEFCallbackBridge;
150 reg_info_to_deregister.tnf = NFA_TNF_DEFAULT;
151 reg_info_to_deregister.name_len = 1;
152 uint8_t name_to_deregister[] = {'U'};
153 memcpy(reg_info_to_deregister.name, name_to_deregister, reg_info_to_deregister.name_len);
154 bool result = nfa_dm_ndef_dereg_hdlr((tNFA_DM_MSG*)®_info_to_deregister);
155 EXPECT_TRUE(result);
156 tNFA_DM_API_REG_NDEF_HDLR reg_info_new = {};
157 reg_info_new.p_ndef_cback = NDEFCallbackBridge;
158 reg_info_new.tnf = NFA_TNF_DEFAULT;
159 reg_info_new.name_len = 1;
160 uint8_t name_new[] = {'1'};
161 memcpy(reg_info_new.name, name_new, reg_info_new.name_len);
162 bool result_new = nfa_dm_ndef_reg_hdlr((tNFA_DM_MSG*)®_info_new);
163 EXPECT_FALSE(result_new);
164 }
165
166 //nfa_dm_ndef_handle_message
167
TEST_F(NfaDmTest,HandleMessage_RegisteredHandler)168 TEST_F(NfaDmTest, HandleMessage_RegisteredHandler) {
169 tNFA_DM_API_REG_NDEF_HDLR reg_info = {};
170 reg_info.p_ndef_cback = NDEFCallbackBridge;
171 reg_info.tnf = NFA_TNF_DEFAULT;
172 reg_info.name_len = 1;
173 uint8_t name[] = {'U'};
174 memcpy(reg_info.name, name, reg_info.name_len);
175 nfa_dm_ndef_reg_hdlr((tNFA_DM_MSG*)®_info);
176 uint8_t event = 1;
177 tNFA_NDEF_EVT_DATA event_data = {};
178 EXPECT_CALL(mock_handler, OnNDEFData(::testing::_, ::testing::_)).Times(0);
179 uint8_t msg_buf[sizeof(tNFA_NDEF_EVT_DATA)];
180 memcpy(msg_buf, &event_data, sizeof(tNFA_NDEF_EVT_DATA));
181 uint32_t len = sizeof(tNFA_NDEF_EVT_DATA);
182 tNFA_STATUS status = NFA_STATUS_OK;
183 nfa_dm_ndef_handle_message(status, msg_buf, len);
184 }
185
TEST_F(NfaDmTest,HandleMessage_UnregisteredHandler)186 TEST_F(NfaDmTest, HandleMessage_UnregisteredHandler) {
187 nfa_dm_cb = nfa_dm_cb_mock;
188 uint8_t event = 1;
189 tNFA_NDEF_EVT_DATA event_data = {};
190 uint8_t msg_buf[sizeof(tNFA_NDEF_EVT_DATA)];
191 memcpy(msg_buf, &event_data, sizeof(tNFA_NDEF_EVT_DATA));
192 EXPECT_CALL(mock_handler, OnNDEFData(event, &event_data)).Times(0);
193 uint32_t len = sizeof(tNFA_NDEF_EVT_DATA);
194 tNFA_STATUS status = NFA_STATUS_OK;
195 nfa_dm_ndef_handle_message(status, msg_buf, len);
196 }
197
TEST_F(NfaDmTest,HandleMessage_InvalidEvent)198 TEST_F(NfaDmTest, HandleMessage_InvalidEvent) {
199 nfa_dm_cb = nfa_dm_cb_mock;
200 tNFA_DM_API_REG_NDEF_HDLR reg_info = {};
201 reg_info.p_ndef_cback = NDEFCallbackBridge;
202 reg_info.tnf = NFA_TNF_DEFAULT;
203 reg_info.name_len = 1;
204 uint8_t name[] = {'U'};
205 memcpy(reg_info.name, name, reg_info.name_len);
206 nfa_dm_ndef_reg_hdlr((tNFA_DM_MSG*)®_info);
207 uint8_t invalid_event = 99;
208 tNFA_NDEF_EVT_DATA event_data = {};
209 uint8_t msg_buf[sizeof(tNFA_NDEF_EVT_DATA)];
210 memcpy(msg_buf, &event_data, sizeof(tNFA_NDEF_EVT_DATA));
211 EXPECT_CALL(mock_handler, OnNDEFData(invalid_event, &event_data)).Times(0);
212 uint32_t len = sizeof(tNFA_NDEF_EVT_DATA);
213 tNFA_STATUS status = NFA_STATUS_OK;
214 nfa_dm_ndef_handle_message(status, msg_buf, len);
215 }
216
TEST_F(NfaDmTest,HandleMessage_CallbackInvocation)217 TEST_F(NfaDmTest, HandleMessage_CallbackInvocation) {
218 nfa_dm_cb = nfa_dm_cb_mock;
219 tNFA_DM_API_REG_NDEF_HDLR reg_info = {};
220 reg_info.p_ndef_cback = NDEFCallbackBridge;
221 reg_info.tnf = NFA_TNF_DEFAULT;
222 reg_info.name_len = 1;
223 uint8_t name[] = {'U'};
224 memcpy(reg_info.name, name, reg_info.name_len);
225 nfa_dm_ndef_reg_hdlr((tNFA_DM_MSG*)®_info);
226 uint8_t event = 2;
227 tNFA_NDEF_EVT_DATA event_data = {};
228 EXPECT_CALL(mock_handler, OnNDEFData(::testing::_, ::testing::_)).Times(0);
229 uint8_t msg_buf[sizeof(tNFA_NDEF_EVT_DATA)];
230 memcpy(msg_buf, &event_data, sizeof(tNFA_NDEF_EVT_DATA));
231 uint32_t len = sizeof(tNFA_NDEF_EVT_DATA);
232 tNFA_STATUS status = NFA_STATUS_OK;
233 nfa_dm_ndef_handle_message(status, msg_buf, len);
234 }
235
TEST_F(NfaDmTest,HandleMultipleMessages)236 TEST_F(NfaDmTest, HandleMultipleMessages) {
237 nfa_dm_cb = nfa_dm_cb_mock;
238 tNFA_DM_API_REG_NDEF_HDLR reg_info = {};
239 reg_info.p_ndef_cback = NDEFCallbackBridge;
240 reg_info.tnf = NFA_TNF_DEFAULT;
241 reg_info.name_len = 1;
242 uint8_t name[] = {'U'};
243 memcpy(reg_info.name, name, reg_info.name_len);
244 nfa_dm_ndef_reg_hdlr((tNFA_DM_MSG*)®_info);
245 uint8_t event1 = 1, event2 = 2;
246 tNFA_NDEF_EVT_DATA event_data1 = {};
247 tNFA_NDEF_EVT_DATA event_data2 = {};
248 uint8_t msg_buf1[sizeof(tNFA_NDEF_EVT_DATA)];
249 uint8_t msg_buf2[sizeof(tNFA_NDEF_EVT_DATA)];
250 memcpy(msg_buf1, &event_data1, sizeof(tNFA_NDEF_EVT_DATA));
251 memcpy(msg_buf2, &event_data2, sizeof(tNFA_NDEF_EVT_DATA));
252 EXPECT_CALL(mock_handler, OnNDEFData(event1, &event_data1)).Times(0);
253 EXPECT_CALL(mock_handler, OnNDEFData(event2, &event_data2)).Times(0);
254 uint32_t len = sizeof(tNFA_NDEF_EVT_DATA);
255 tNFA_STATUS status = NFA_STATUS_OK;
256 nfa_dm_ndef_handle_message(status, msg_buf1, len);
257 nfa_dm_ndef_handle_message(status, msg_buf2, len);
258 }
259
260 //nfa_dm_ndef_find_next_handler
261
TEST_F(NfaDmTest,FindNextHandler_Success)262 TEST_F(NfaDmTest, FindNextHandler_Success) {
263 nfa_dm_cb = nfa_dm_cb_mock;
264 tNFA_DM_API_REG_NDEF_HDLR reg_info1 = {};
265 reg_info1.p_ndef_cback = NDEFCallbackBridge;
266 reg_info1.tnf = NFA_TNF_DEFAULT;
267 reg_info1.name_len = 1;
268 uint8_t name1[] = {'1'};
269 memcpy(reg_info1.name, name1, reg_info1.name_len);
270 nfa_dm_ndef_reg_hdlr((tNFA_DM_MSG*)®_info1);
271 tNFA_DM_API_REG_NDEF_HDLR reg_info2 = {};
272 reg_info2.p_ndef_cback = NDEFCallbackBridge;
273 reg_info2.tnf = NFA_TNF_DEFAULT;
274 reg_info2.name_len = 1;
275 uint8_t name2[] = {'2'};
276 memcpy(reg_info2.name, name2, reg_info2.name_len);
277 nfa_dm_ndef_reg_hdlr((tNFA_DM_MSG*)®_info2);
278 unsigned char event = 1;
279 unsigned char* p_name = nullptr;
280 unsigned char name_len = 0;
281 unsigned char* p_tnf = nullptr;
282 unsigned int index = 0;
283 bool result =
284 nfa_dm_ndef_find_next_handler((tNFA_DM_API_REG_NDEF_HDLR*)®_info1,
285 event, p_name, name_len, p_tnf, index);
286 EXPECT_FALSE(result);
287 result = nfa_dm_ndef_find_next_handler((tNFA_DM_API_REG_NDEF_HDLR*)®_info2,
288 event, p_name, name_len, p_tnf, index);
289 EXPECT_FALSE(result);
290 }
291
TEST_F(NfaDmTest,FindNextHandler_NoHandler)292 TEST_F(NfaDmTest, FindNextHandler_NoHandler) {
293 nfa_dm_cb = nfa_dm_cb_mock;
294 unsigned char event = 1;
295 unsigned char* p_name = nullptr;
296 unsigned char name_len = 0;
297 unsigned char* p_tnf = nullptr;
298 unsigned int index = 0;
299 tNFA_DM_API_REG_NDEF_HDLR* found_handler = nullptr;
300 bool result = nfa_dm_ndef_find_next_handler(nullptr, event, p_name, name_len,
301 p_tnf, index);
302 EXPECT_FALSE(result);
303 }
304
TEST_F(NfaDmTest,FindNextHandler_NoMatch)305 TEST_F(NfaDmTest, FindNextHandler_NoMatch) {
306 nfa_dm_cb = nfa_dm_cb_mock;
307 tNFA_DM_API_REG_NDEF_HDLR reg_info1 = {};
308 reg_info1.p_ndef_cback = NDEFCallbackBridge;
309 reg_info1.tnf = NFA_TNF_DEFAULT;
310 reg_info1.name_len = 1;
311 uint8_t name1[] = {'1'};
312 memcpy(reg_info1.name, name1, reg_info1.name_len);
313 nfa_dm_ndef_reg_hdlr((tNFA_DM_MSG*)®_info1);
314 unsigned char event = 1;
315 unsigned char* p_name = (unsigned char*)"NonMatchingName";
316 unsigned char name_len = 15;
317 unsigned char* p_tnf = nullptr;
318 unsigned int index = 0;
319 tNFA_DM_API_REG_NDEF_HDLR* found_handler = nullptr;
320 bool result =
321 nfa_dm_ndef_find_next_handler((tNFA_DM_API_REG_NDEF_HDLR*)®_info1,
322 event, p_name, name_len, p_tnf, index);
323 EXPECT_FALSE(result);
324 }
325
TEST_F(NfaDmTest,FindNextHandler_InvalidEvent)326 TEST_F(NfaDmTest, FindNextHandler_InvalidEvent) {
327 nfa_dm_cb = nfa_dm_cb_mock;
328 tNFA_DM_API_REG_NDEF_HDLR reg_info1 = {};
329 reg_info1.p_ndef_cback = NDEFCallbackBridge;
330 reg_info1.tnf = NFA_TNF_DEFAULT;
331 reg_info1.name_len = 1;
332 uint8_t name1[] = {'1'};
333 memcpy(reg_info1.name, name1, reg_info1.name_len);
334 nfa_dm_ndef_reg_hdlr((tNFA_DM_MSG*)®_info1);
335 unsigned char invalid_event = 99;
336 unsigned char* p_name = nullptr;
337 unsigned char name_len = 0;
338 unsigned char* p_tnf = nullptr;
339 unsigned int index = 0;
340 tNFA_DM_API_REG_NDEF_HDLR* found_handler = nullptr;
341 bool result = nfa_dm_ndef_find_next_handler(
342 (tNFA_DM_API_REG_NDEF_HDLR*)®_info1, invalid_event, p_name, name_len,
343 p_tnf, index);
344 EXPECT_FALSE(result);
345 }
346
347 //nfa_dm_ndef_find_next_handler
348
TEST_F(NfaDmTest,FindHandler_NoHandlerFound)349 TEST_F(NfaDmTest, FindHandler_NoHandlerFound) {
350 std::memset(&nfa_dm_cb, 0, sizeof(nfa_dm_cb));
351 uint8_t tnf = NFA_TNF_DEFAULT;
352 uint8_t* p_type_name = nullptr;
353 uint8_t type_name_len = 0;
354 uint8_t* p_payload = nullptr;
355 uint32_t payload_len = 0;
356 tNFA_DM_API_REG_NDEF_HDLR* found_handler = nfa_dm_ndef_find_next_handler(
357 nullptr, tnf, p_type_name, type_name_len, p_payload, payload_len);
358 EXPECT_EQ(found_handler, nullptr);
359 }
360
TEST_F(NfaDmTest,FindNextHandlerWithTNFMatch)361 TEST_F(NfaDmTest, FindNextHandlerWithTNFMatch) {
362 tNFA_DM_API_REG_NDEF_HDLR handler = {};
363 handler.tnf = NFA_TNF_DEFAULT;
364 nfa_dm_cb.p_ndef_handler[1] = &handler;
365 tNFA_DM_API_REG_NDEF_HDLR* p_result = nfa_dm_ndef_find_next_handler(
366 nullptr, NFA_TNF_DEFAULT, nullptr, 0, nullptr, 0);
367 ASSERT_EQ(p_result, &handler);
368 }
369
TEST_F(NfaDmTest,FindNextHandlerWithNoMatchingTNF)370 TEST_F(NfaDmTest, FindNextHandlerWithNoMatchingTNF) {
371 tNFA_DM_API_REG_NDEF_HDLR handler1 = {};
372 handler1.tnf = NFA_TNF_DEFAULT;
373 nfa_dm_cb.p_ndef_handler[1] = &handler1;
374 tNFA_DM_API_REG_NDEF_HDLR handler2 = {};
375 handler2.tnf = NFA_TNF_DEFAULT;
376 nfa_dm_cb.p_ndef_handler[2] = &handler2;
377 tNFA_DM_API_REG_NDEF_HDLR* p_result = nfa_dm_ndef_find_next_handler(
378 nullptr, NFA_TNF_DEFAULT, nullptr, 0, nullptr, 0);
379 ASSERT_EQ(p_result, &handler1);
380 }
381
TEST_F(NfaDmTest,FindNextHandlerAfterInitialHandler)382 TEST_F(NfaDmTest, FindNextHandlerAfterInitialHandler) {
383 tNFA_DM_API_REG_NDEF_HDLR handler1 = {};
384 handler1.tnf = NFA_TNF_WKT;
385 handler1.ndef_type_handle = 1;
386 nfa_dm_cb.p_ndef_handler[1] = &handler1;
387 tNFA_DM_API_REG_NDEF_HDLR handler2 = {};
388 handler2.tnf = NFA_TNF_DEFAULT;
389 handler2.ndef_type_handle = 2;
390 nfa_dm_cb.p_ndef_handler[2] = &handler2;
391 tNFA_DM_API_REG_NDEF_HDLR* p_result = nfa_dm_ndef_find_next_handler(
392 &handler1, NFA_TNF_DEFAULT, nullptr, 0, nullptr, 0);
393 ASSERT_EQ(p_result, &handler2);
394 }
395
TEST_F(NfaDmTest,FindNextHandlerWithURIHandlerMismatch)396 TEST_F(NfaDmTest, FindNextHandlerWithURIHandlerMismatch) {
397 tNFA_DM_API_REG_NDEF_HDLR handler = {};
398 handler.tnf = NFA_TNF_WKT;
399 handler.flags = NFA_NDEF_FLAGS_WKT_URI;
400 handler.uri_id = 1;
401 nfa_dm_cb.p_ndef_handler[1] = &handler;
402 uint8_t type_name[] = {'U'};
403 uint8_t payload[] = {2};
404 tNFA_DM_API_REG_NDEF_HDLR* p_result = nfa_dm_ndef_find_next_handler(
405 nullptr, NFA_TNF_WKT, type_name, 1, payload, sizeof(payload)
406 );
407 ASSERT_EQ(p_result, nullptr);
408 }
409
410 // nfa_dm_ndef_clear_notified_flag
411
TEST_F(NfaDmTest,ClearNotifiedFlag_Success)412 TEST_F(NfaDmTest, ClearNotifiedFlag_Success) {
413 mock_handler1.flags |= NFA_NDEF_FLAGS_WHOLE_MESSAGE_NOTIFIED;
414 mock_handler2.flags |= NFA_NDEF_FLAGS_WHOLE_MESSAGE_NOTIFIED;
415 nfa_dm_ndef_clear_notified_flag();
416 EXPECT_TRUE(mock_handler1.flags & NFA_NDEF_FLAGS_WHOLE_MESSAGE_NOTIFIED);
417 EXPECT_TRUE(mock_handler2.flags & NFA_NDEF_FLAGS_WHOLE_MESSAGE_NOTIFIED);
418 }
419
TEST_F(NfaDmTest,ClearNotifiedFlag_AlreadyClear)420 TEST_F(NfaDmTest, ClearNotifiedFlag_AlreadyClear) {
421 mock_handler1.flags &= ~NFA_NDEF_FLAGS_WHOLE_MESSAGE_NOTIFIED;
422 mock_handler2.flags &= ~NFA_NDEF_FLAGS_WHOLE_MESSAGE_NOTIFIED;
423 nfa_dm_ndef_clear_notified_flag();
424 EXPECT_FALSE(mock_handler1.flags & NFA_NDEF_FLAGS_WHOLE_MESSAGE_NOTIFIED);
425 EXPECT_FALSE(mock_handler2.flags & NFA_NDEF_FLAGS_WHOLE_MESSAGE_NOTIFIED);
426 }
427
TEST_F(NfaDmTest,ClearNotifiedFlag_OnlyRegisteredHandlers)428 TEST_F(NfaDmTest, ClearNotifiedFlag_OnlyRegisteredHandlers) {
429 mock_handler1.flags |= NFA_NDEF_FLAGS_WHOLE_MESSAGE_NOTIFIED;
430 nfa_dm_ndef_clear_notified_flag();
431 EXPECT_TRUE(mock_handler1.flags & NFA_NDEF_FLAGS_WHOLE_MESSAGE_NOTIFIED);
432 EXPECT_FALSE(mock_handler2.flags & NFA_NDEF_FLAGS_WHOLE_MESSAGE_NOTIFIED);
433 }
434
TEST_F(NfaDmTest,ClearNotifiedFlag_NoHandlers)435 TEST_F(NfaDmTest, ClearNotifiedFlag_NoHandlers) {
436 nfa_dm_cb_mock.p_ndef_handler[0] = nullptr;
437 nfa_dm_cb_mock.p_ndef_handler[1] = nullptr;
438 nfa_dm_ndef_clear_notified_flag();
439 EXPECT_FALSE(mock_handler1.flags & NFA_NDEF_FLAGS_WHOLE_MESSAGE_NOTIFIED);
440 EXPECT_FALSE(mock_handler2.flags & NFA_NDEF_FLAGS_WHOLE_MESSAGE_NOTIFIED);
441 }
442
TEST_F(NfaDmTest,ClearNotifiedFlag_MultipleCalls)443 TEST_F(NfaDmTest, ClearNotifiedFlag_MultipleCalls) {
444 mock_handler1.flags |= NFA_NDEF_FLAGS_WHOLE_MESSAGE_NOTIFIED;
445 mock_handler2.flags |= NFA_NDEF_FLAGS_WHOLE_MESSAGE_NOTIFIED;
446 nfa_dm_ndef_clear_notified_flag();
447 nfa_dm_ndef_clear_notified_flag();
448 EXPECT_TRUE(mock_handler1.flags & NFA_NDEF_FLAGS_WHOLE_MESSAGE_NOTIFIED);
449 EXPECT_TRUE(mock_handler2.flags & NFA_NDEF_FLAGS_WHOLE_MESSAGE_NOTIFIED);
450 }
451