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