xref: /aosp_15_r20/system/nfc/tests/src/nfa_ce_api_test.cc (revision 7eba2f3b06c51ae21384f6a4f14577b668a869b3)
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