• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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*)&reg_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*)&reg_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*)&reg_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*)&reg_info);
102     EXPECT_CALL(mock_handler, OnNDEFData(::testing::_, ::testing::_)).Times(0);
103     bool result = nfa_dm_ndef_dereg_hdlr((tNFA_DM_MSG*)&reg_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*)&reg_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*)&reg_info1);
127     bool result1 = nfa_dm_ndef_dereg_hdlr((tNFA_DM_MSG*)&reg_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*)&reg_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*)&reg_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*)&reg_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*)&reg_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*)&reg_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*)&reg_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*)&reg_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*)&reg_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*)&reg_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*)&reg_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*)&reg_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*)&reg_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*)&reg_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*)&reg_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*)&reg_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*)&reg_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