1 #include <gtest/gtest.h>
2 #include <gmock/gmock.h>
3 #include "nfa_ce_api.h"
4 #include "nfa_ce_int.h"
5 #include "nfa_api.h"
6 #include <android-base/logging.h>
7 #include "nfa_ce_api.cc"
8
9 class MockSystemFunctions {
10 public:
11 MOCK_METHOD(void*, GKI_getbuf, (uint16_t size), ());
12 MOCK_METHOD(void, nfa_sys_sendmsg, (tNFA_CE_MSG* p_msg), ());
13 MOCK_METHOD(tNFA_STATUS, nfa_ce_api_deregister_listen, (tNFA_HANDLE handle,
14 uint16_t listen_type), ());
15
16 };
17
18 class NfaCeApiTest : public ::testing::Test {
19 protected:
20 MockSystemFunctions mock_sys_funcs;
21
22 tNFA_STATUS (*configure_local_tag)(tNFA_PROTOCOL_MASK protocol_mask,
23 uint8_t* p_ndef_data,
24 uint16_t ndef_cur_size,
25 uint16_t ndef_max_size, bool read_only,
26 uint8_t uid_len, uint8_t* p_uid);
27
SetUp()28 void SetUp() override {
29 // Pointing to the original function for testing
30 configure_local_tag = &NFA_CeConfigureLocalTag;
31 }
32
TearDown()33 void TearDown() override {
34 // No cleanup needed for this test case
35 }
36 };
37
TEST_F(NfaCeApiTest,InvalidProtocolMaskWithNonNullNDEFData)38 TEST_F(NfaCeApiTest, InvalidProtocolMaskWithNonNullNDEFData) {
39 tNFA_PROTOCOL_MASK invalid_protocol_mask = 0xFF;
40 uint8_t valid_ndef_data[] = {0x01, 0x02, 0x03};
41 uint16_t ndef_cur_size = 3;
42 uint16_t ndef_max_size = 1024;
43 bool read_only = false;
44 uint8_t uid_len = 0;
45 uint8_t* p_uid = nullptr;
46 tNFA_STATUS status = configure_local_tag(invalid_protocol_mask, valid_ndef_data, ndef_cur_size,
47 ndef_max_size, read_only, uid_len, p_uid);
48 EXPECT_EQ(status, NFA_STATUS_INVALID_PARAM);
49 }
50
TEST_F(NfaCeApiTest,NullNDEFDataWithProtocolMask)51 TEST_F(NfaCeApiTest, NullNDEFDataWithProtocolMask) {
52 tNFA_PROTOCOL_MASK protocol_mask = NFA_PROTOCOL_MASK_ISO_DEP;
53 uint8_t* p_ndef_data = nullptr;
54 uint16_t ndef_cur_size = 3;
55 uint16_t ndef_max_size = 1024;
56 bool read_only = false;
57 uint8_t uid_len = 0;
58 uint8_t* p_uid = nullptr;
59 tNFA_STATUS status = configure_local_tag(protocol_mask, p_ndef_data, ndef_cur_size,
60 ndef_max_size, read_only, uid_len, p_uid);
61 EXPECT_EQ(status, NFA_STATUS_INVALID_PARAM);
62 }
63
TEST_F(NfaCeApiTest,InvalidProtocolMaskForType1Type2)64 TEST_F(NfaCeApiTest, InvalidProtocolMaskForType1Type2) {
65 tNFA_PROTOCOL_MASK protocol_mask = NFA_PROTOCOL_MASK_T1T;
66 uint8_t valid_ndef_data[] = {0x01, 0x02, 0x03};
67 uint16_t ndef_cur_size = 3;
68 uint16_t ndef_max_size = 1024;
69 bool read_only = false;
70 uint8_t uid_len = 0;
71 uint8_t* p_uid = nullptr;
72 tNFA_STATUS status = configure_local_tag(protocol_mask, valid_ndef_data, ndef_cur_size,
73 ndef_max_size, read_only, uid_len, p_uid);
74 EXPECT_EQ(status, NFA_STATUS_INVALID_PARAM);
75 }
76
TEST_F(NfaCeApiTest,NonZeroUIDLengthWithProtocolMask)77 TEST_F(NfaCeApiTest, NonZeroUIDLengthWithProtocolMask) {
78 tNFA_PROTOCOL_MASK protocol_mask = NFA_PROTOCOL_MASK_ISO_DEP;
79 uint8_t valid_ndef_data[] = {0x01, 0x02, 0x03};
80 uint16_t ndef_cur_size = 3;
81 uint16_t ndef_max_size = 1024;
82 bool read_only = false;
83 uint8_t uid_len = 4;
84 uint8_t p_uid[] = {0x01, 0x02, 0x03, 0x04};
85 tNFA_STATUS status = configure_local_tag(protocol_mask, valid_ndef_data, ndef_cur_size,
86 ndef_max_size, read_only, uid_len, p_uid);
87 EXPECT_EQ(status, NFA_STATUS_INVALID_PARAM);
88 }
89
TEST_F(NfaCeApiTest,InvalidParamNullCallback)90 TEST_F(NfaCeApiTest, InvalidParamNullCallback) {
91 uint8_t aid[NFC_MAX_AID_LEN] = {0x01, 0x02};
92 uint8_t aid_len = 2;
93 tNFA_CONN_CBACK* p_conn_cback = nullptr;
94 tNFA_STATUS status = NFA_CeRegisterAidOnDH(aid, aid_len, p_conn_cback);
95 EXPECT_EQ(status, NFA_STATUS_INVALID_PARAM);
96 }
97
TEST_F(NfaCeApiTest,InvalidParamAidLenZero)98 TEST_F(NfaCeApiTest, InvalidParamAidLenZero) {
99 uint8_t aid[NFC_MAX_AID_LEN] = {0x01, 0x02};
100 uint8_t aid_len = 0;
101 tNFA_CONN_CBACK* p_conn_cback = reinterpret_cast<tNFA_CONN_CBACK*>(0x1234);
102 tNFA_STATUS status = NFA_CeRegisterAidOnDH(aid, aid_len, p_conn_cback);
103 EXPECT_EQ(status, NFA_STATUS_INVALID_PARAM);
104 }
105
TEST_F(NfaCeApiTest,InvalidParamNullAid)106 TEST_F(NfaCeApiTest, InvalidParamNullAid) {
107 uint8_t* aid = nullptr;
108 uint8_t aid_len = 2;
109 tNFA_CONN_CBACK* p_conn_cback = reinterpret_cast<tNFA_CONN_CBACK*>(0x1234);
110 tNFA_STATUS status = NFA_CeRegisterAidOnDH(aid, aid_len, p_conn_cback);
111 EXPECT_EQ(status, NFA_STATUS_INVALID_PARAM);
112 }
113
TEST_F(NfaCeApiTest,NullFelicaCallback)114 TEST_F(NfaCeApiTest, NullFelicaCallback) {
115 uint16_t system_code = 0x1234;
116 uint8_t nfcid2[NCI_RF_F_UID_LEN] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08 };
117 uint8_t t3tPmm[NCI_T3T_PMM_LEN] = { 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80 };
118 tNFA_STATUS status = NFA_CeRegisterFelicaSystemCodeOnDH(system_code, nfcid2, t3tPmm, nullptr);
119 EXPECT_EQ(status, NFA_STATUS_INVALID_PARAM);
120 }
121
TEST_F(NfaCeApiTest,DeregisterFelicaSystemCodeOnDH_InvalidListenInfo)122 TEST_F(NfaCeApiTest, DeregisterFelicaSystemCodeOnDH_InvalidListenInfo) {
123 tNFA_HANDLE valid_handle = 0x1234;
124 uint32_t invalid_listen_info = 0x9999;
125 EXPECT_CALL(mock_sys_funcs, nfa_sys_sendmsg(testing::_)).Times(0);
126 tNFA_STATUS status = nfa_ce_api_deregister_listen(valid_handle, invalid_listen_info);
127 EXPECT_EQ(status, NFA_STATUS_BAD_HANDLE);
128 }
129
TEST_F(NfaCeApiTest,DeregisterFelicaSystemCodeOnDH_InvalidHandleAndListenInfo)130 TEST_F(NfaCeApiTest, DeregisterFelicaSystemCodeOnDH_InvalidHandleAndListenInfo) {
131 tNFA_HANDLE invalid_handle = 0x4321;
132 uint32_t invalid_listen_info = 0x9999;
133 EXPECT_CALL(mock_sys_funcs, nfa_sys_sendmsg(testing::_)).Times(0);
134 tNFA_STATUS status = nfa_ce_api_deregister_listen(invalid_handle, invalid_listen_info);
135 EXPECT_EQ(status, NFA_STATUS_BAD_HANDLE);
136 }
137
138