xref: /aosp_15_r20/system/nfc/tests/src/nfa_dm_main_test.cc (revision 7eba2f3b06c51ae21384f6a4f14577b668a869b3)
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 
17 #include <gtest/gtest.h>
18 #include "nfa_dm_main.cc"
19 
20 // tests for nfa_dm_is_protocol_supported
21 
TEST(NfaDmMainTest,SupportedProtocolsWithoutSelRes)22 TEST(NfaDmMainTest, SupportedProtocolsWithoutSelRes) {
23     EXPECT_TRUE(nfa_dm_is_protocol_supported(NFC_PROTOCOL_T1T, 0));
24     EXPECT_TRUE(nfa_dm_is_protocol_supported(NFC_PROTOCOL_T3T, 0));
25     EXPECT_TRUE(nfa_dm_is_protocol_supported(NFC_PROTOCOL_ISO_DEP, 0));
26     EXPECT_TRUE(nfa_dm_is_protocol_supported(NFC_PROTOCOL_NFC_DEP, 0));
27     EXPECT_TRUE(nfa_dm_is_protocol_supported(NFC_PROTOCOL_T5T, 0));
28     EXPECT_TRUE(nfa_dm_is_protocol_supported(NFC_PROTOCOL_MIFARE, 0));
29     EXPECT_TRUE(nfa_dm_is_protocol_supported(NFA_PROTOCOL_CI, 0));
30 }
31 
TEST(NfaDmMainTest,ProtocolT2TWithMatchingSelRes)32 TEST(NfaDmMainTest, ProtocolT2TWithMatchingSelRes) {
33     EXPECT_TRUE(nfa_dm_is_protocol_supported(NFC_PROTOCOL_T2T, NFC_SEL_RES_NFC_FORUM_T2T));
34 }
35 
TEST(NfaDmMainTest,ProtocolT2TWithNonMatchingSelRes)36 TEST(NfaDmMainTest, ProtocolT2TWithNonMatchingSelRes) {
37     EXPECT_TRUE(nfa_dm_is_protocol_supported(NFC_PROTOCOL_T2T, 0x00));
38     EXPECT_FALSE(nfa_dm_is_protocol_supported(NFC_PROTOCOL_T2T, 0xFF));
39 }
40 
TEST(NfaDmMainTest,UnsupportedProtocols)41 TEST(NfaDmMainTest, UnsupportedProtocols) {
42     EXPECT_TRUE(nfa_dm_is_protocol_supported(0xFF, 0));
43 }
44 
TEST(NfaDmMainTest,EdgeCases)45 TEST(NfaDmMainTest, EdgeCases) {
46     EXPECT_FALSE(nfa_dm_is_protocol_supported(0, 0));
47     EXPECT_TRUE(nfa_dm_is_protocol_supported(0xFF, 0xFF));
48     EXPECT_TRUE(nfa_dm_is_protocol_supported(NFC_PROTOCOL_ISO_DEP, NFC_SEL_RES_NFC_FORUM_T2T));
49 }
50 
51 // tests for nfa_dm_evt_2_str
52 
TEST(NfaDmMainTest,ValidEvents)53 TEST(NfaDmMainTest, ValidEvents) {
54     EXPECT_EQ(std::string(nfa_dm_evt_2_str(NFA_DM_API_ENABLE_EVT)), "NFA_DM_API_ENABLE_EVT");
55     EXPECT_EQ(std::string(nfa_dm_evt_2_str(NFA_DM_API_DISABLE_EVT)), "NFA_DM_API_DISABLE_EVT");
56     EXPECT_EQ(std::string(nfa_dm_evt_2_str(
57             NFA_DM_API_SET_CONFIG_EVT)), "NFA_DM_API_SET_CONFIG_EVT");
58     EXPECT_EQ(std::string(nfa_dm_evt_2_str(
59             NFA_DM_API_GET_CONFIG_EVT)), "NFA_DM_API_GET_CONFIG_EVT");
60     EXPECT_EQ(std::string(nfa_dm_evt_2_str(
61             NFA_DM_API_START_RF_DISCOVERY_EVT)), "NFA_DM_API_START_RF_DISCOVERY_EVT");
62     EXPECT_EQ(std::string(nfa_dm_evt_2_str(
63             NFA_DM_API_STOP_RF_DISCOVERY_EVT)), "NFA_DM_API_STOP_RF_DISCOVERY_EVT");
64     EXPECT_EQ(std::string(nfa_dm_evt_2_str(
65             NFA_DM_API_RELEASE_EXCL_RF_CTRL_EVT)), "NFA_DM_API_RELEASE_EXCL_RF_CTRL_EVT");
66 }
67 
TEST(NfaDmMainTest,UnknownEvents)68 TEST(NfaDmMainTest, UnknownEvents) {
69     EXPECT_EQ(std::string(nfa_dm_evt_2_str(0x1234)), "Unknown or Vendor Specific");
70     EXPECT_EQ(std::string(nfa_dm_evt_2_str(0xFFFF)), "Unknown or Vendor Specific");
71     EXPECT_EQ(std::string(nfa_dm_evt_2_str(0x00FF)), "Unknown or Vendor Specific");
72 }
73 
TEST(NfaDmMainTest,BoundaryEventCodes)74 TEST(NfaDmMainTest, BoundaryEventCodes) {
75     EXPECT_EQ(std::string(nfa_dm_evt_2_str(0x0000)), "NFA_DM_API_ENABLE_EVT");
76     EXPECT_EQ(std::string(nfa_dm_evt_2_str(0xFFFF)), "Unknown or Vendor Specific");
77     EXPECT_EQ(std::string(nfa_dm_evt_2_str(NFA_DM_API_ENABLE_EVT)), "NFA_DM_API_ENABLE_EVT");
78 }
79 
TEST(NfaDmMainTest,EventsNotMapped)80 TEST(NfaDmMainTest, EventsNotMapped) {
81     EXPECT_EQ(std::string(nfa_dm_evt_2_str(0x00A0)), "Unknown or Vendor Specific");
82 }
83 
84 //tests for nfa_dm_check_set_config
85 
TEST(NfaDmMainTest,ValidSingleTypeTLV)86 TEST(NfaDmMainTest, ValidSingleTypeTLV) {
87     uint8_t tlv_list[] = {NFC_PMID_PF_RC, 1, 0x01};
88     uint8_t tlv_list_len = sizeof(tlv_list);
89     EXPECT_EQ(nfa_dm_check_set_config(tlv_list_len, tlv_list, false), NFA_STATUS_OK);
90 }
91 
TEST(NfaDmMainTest,InvalidTLVLength)92 TEST(NfaDmMainTest, InvalidTLVLength) {
93     uint8_t tlv_list[] = {NFC_PMID_PF_RC, 5, 0x01};
94     uint8_t tlv_list_len = sizeof(tlv_list) - 1;
95     EXPECT_EQ(nfa_dm_check_set_config(tlv_list_len, tlv_list, false), NFA_STATUS_FAILED);
96 }
97 
TEST(NfaDmMainTest,ExceedMaxPendingSetConfigs)98 TEST(NfaDmMainTest, ExceedMaxPendingSetConfigs) {
99     nfa_dm_cb.setcfg_pending_num = NFA_DM_SETCONFIG_PENDING_MAX;
100     uint8_t tlv_list[] = {NFC_PMID_PF_RC, 1, 0x01};
101     EXPECT_EQ(nfa_dm_check_set_config(sizeof(tlv_list), tlv_list, false), NFA_STATUS_FAILED);
102 }
103 
TEST(NfaDmMainTest,UpdateRequired)104 TEST(NfaDmMainTest, UpdateRequired) {
105     memset(nfa_dm_cb.params.pf_rc, 0x00, NCI_PARAM_LEN_PF_RC);
106     uint8_t tlv_list[] = {NFC_PMID_PF_RC, 1, 0x01};
107     auto result = nfa_dm_check_set_config(sizeof(tlv_list), tlv_list, false);
108     LOG(VERBOSE) << "Function returned: " << result;
109     LOG(VERBOSE) << "Updated pf_rc[0]: " << (int)nfa_dm_cb.params.pf_rc[1];
110     EXPECT_EQ(result, 0x03);
111     EXPECT_EQ(nfa_dm_cb.params.pf_rc[0], 0x00);
112 }
113 
TEST(NfaDmMainTest,NoUpdateNeeded)114 TEST(NfaDmMainTest, NoUpdateNeeded) {
115     nfa_dm_cb.params.pf_rc[0] = 0x01;
116     uint8_t tlv_list[] = {NFC_PMID_PF_RC, 1, 0x01};
117     EXPECT_EQ(nfa_dm_check_set_config(sizeof(tlv_list), tlv_list, false), 0x03);
118     ASSERT_EQ(nfa_dm_cb.params.pf_rc[0], 0x01);
119 }
120 
TEST(NfaDmMainTest,InvalidType)121 TEST(NfaDmMainTest, InvalidType) {
122     uint8_t tlv_list[] = {0xFF, 1, 0x01};
123     EXPECT_EQ(nfa_dm_check_set_config(sizeof(tlv_list), tlv_list, false), 0x03);
124 }
125 
TEST(NfaDmMainTest,MultipleTLVs)126 TEST(NfaDmMainTest, MultipleTLVs) {
127     uint8_t tlv_list[] = {
128         NFC_PMID_PF_RC, 1, 0x01,
129         NFC_PMID_TOTAL_DURATION, 1, 0x05
130     };
131     uint8_t result = nfa_dm_check_set_config(sizeof(tlv_list), tlv_list, false);
132     EXPECT_EQ(result, 0x03);
133     EXPECT_EQ(nfa_dm_cb.params.pf_rc[0], 0x01);
134 }
135 
TEST(NfaDmMainTest,EmptyTLVList)136 TEST(NfaDmMainTest, EmptyTLVList) {
137     uint8_t* tlv_list = nullptr;
138     EXPECT_EQ(nfa_dm_check_set_config(0, tlv_list, false), 0x03);
139 }
140 
TEST(NfaDmMainTest,ExcessiveTLVLength)141 TEST(NfaDmMainTest, ExcessiveTLVLength) {
142     uint8_t tlv_list[255];
143     memset(tlv_list, 0, sizeof(tlv_list));
144     tlv_list[0] = NFC_PMID_PF_RC;
145     tlv_list[1] = 254;
146     EXPECT_EQ(nfa_dm_check_set_config(sizeof(tlv_list), tlv_list, false), NFA_STATUS_FAILED);
147 }
148 
149