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 <gmock/gmock.h>
18 #include <gtest/gtest.h>
19
20 #include "mock_gki_utils.h"
21 #include "nfc_int.h"
22
TEST(NfcGetStatusNameTest,TestGetStatusName)23 TEST(NfcGetStatusNameTest, TestGetStatusName) {
24 ASSERT_EQ(NFC_GetStatusName(NFC_STATUS_OK), "OK");
25 ASSERT_EQ(NFC_GetStatusName(NFC_STATUS_REJECTED), "REJECTED");
26 ASSERT_EQ(NFC_GetStatusName(NFC_STATUS_MSG_CORRUPTED), "CORRUPTED");
27 ASSERT_EQ(NFC_GetStatusName(NFC_STATUS_BUFFER_FULL), "BUFFER_FULL");
28 ASSERT_EQ(NFC_GetStatusName(NFC_STATUS_FAILED), "FAILED");
29 ASSERT_EQ(NFC_GetStatusName(NFC_STATUS_NOT_INITIALIZED), "NOT_INITIALIZED");
30 ASSERT_EQ(NFC_GetStatusName(NFC_STATUS_SYNTAX_ERROR), "SYNTAX_ERROR");
31 ASSERT_EQ(NFC_GetStatusName(NFC_STATUS_SEMANTIC_ERROR), "SEMANTIC_ERROR");
32 ASSERT_EQ(NFC_GetStatusName(NFC_STATUS_UNKNOWN_GID), "UNKNOWN_GID");
33 ASSERT_EQ(NFC_GetStatusName(NFC_STATUS_UNKNOWN_OID), "UNKNOWN_OID");
34 ASSERT_EQ(NFC_GetStatusName(NFC_STATUS_INVALID_PARAM), "INVALID_PARAM");
35 ASSERT_EQ(NFC_GetStatusName(NFC_STATUS_MSG_SIZE_TOO_BIG), "MSG_SIZE_TOO_BIG");
36 ASSERT_EQ(NFC_GetStatusName(NFC_STATUS_ALREADY_STARTED), "ALREADY_STARTED");
37 ASSERT_EQ(NFC_GetStatusName(NFC_STATUS_ACTIVATION_FAILED),
38 "ACTIVATION_FAILED");
39 ASSERT_EQ(NFC_GetStatusName(NFC_STATUS_TEAR_DOWN), "TEAR_DOWN");
40 ASSERT_EQ(NFC_GetStatusName(NFC_STATUS_RF_TRANSMISSION_ERR),
41 "RF_TRANSMISSION_ERR");
42 ASSERT_EQ(NFC_GetStatusName(NFC_STATUS_RF_PROTOCOL_ERR), "RF_PROTOCOL_ERR");
43 ASSERT_EQ(NFC_GetStatusName(NFC_STATUS_TIMEOUT), "TIMEOUT");
44 ASSERT_EQ(NFC_GetStatusName(NFC_STATUS_EE_INTF_ACTIVE_FAIL),
45 "EE_INTF_ACTIVE_FAIL");
46 ASSERT_EQ(NFC_GetStatusName(NFC_STATUS_EE_TRANSMISSION_ERR),
47 "EE_TRANSMISSION_ERR");
48 ASSERT_EQ(NFC_GetStatusName(NFC_STATUS_EE_PROTOCOL_ERR), "EE_PROTOCOL_ERR");
49 ASSERT_EQ(NFC_GetStatusName(NFC_STATUS_EE_TIMEOUT), "EE_TIMEOUT");
50 ASSERT_EQ(NFC_GetStatusName(NFC_STATUS_CMD_STARTED), "CMD_STARTED");
51 ASSERT_EQ(NFC_GetStatusName(NFC_STATUS_HW_TIMEOUT), "HW_TIMEOUT");
52 ASSERT_EQ(NFC_GetStatusName(NFC_STATUS_CONTINUE), "CONTINUE");
53 ASSERT_EQ(NFC_GetStatusName(NFC_STATUS_REFUSED), "REFUSED");
54 ASSERT_EQ(NFC_GetStatusName(NFC_STATUS_BAD_RESP), "BAD_RESP");
55 ASSERT_EQ(NFC_GetStatusName(NFC_STATUS_CMD_NOT_CMPLTD), "CMD_NOT_CMPLTD");
56 ASSERT_EQ(NFC_GetStatusName(NFC_STATUS_NO_BUFFERS), "NO_BUFFERS");
57 ASSERT_EQ(NFC_GetStatusName(NFC_STATUS_WRONG_PROTOCOL), "WRONG_PROTOCOL");
58 ASSERT_EQ(NFC_GetStatusName(NFC_STATUS_BUSY), "BUSY");
59 ASSERT_EQ(NFC_GetStatusName(NFC_STATUS_LINK_LOSS), "LINK_LOSS");
60 ASSERT_EQ(NFC_GetStatusName(NFC_STATUS_BAD_LENGTH), "BAD_LENGTH");
61 ASSERT_EQ(NFC_GetStatusName(NFC_STATUS_BAD_HANDLE), "BAD_HANDLE");
62 ASSERT_EQ(NFC_GetStatusName(NFC_STATUS_CONGESTED), "CONGESTED");
63
64 // Unknown Status Value
65 ASSERT_EQ(NFC_GetStatusName((tNFC_STATUS)100), "UNKNOWN");
66 }
67
68 class NfcConnCreateTest : public ::testing::Test {
69 protected:
SetUp()70 void SetUp() override { gki_utils = new MockGkiUtils(); }
71
TearDown()72 void TearDown() override { gki_utils = nullptr; }
73 };
74
mock_callback(uint8_t,tNFC_CONN_EVT,tNFC_CONN *)75 static void mock_callback(__attribute__((unused)) uint8_t,
76 __attribute__((unused)) tNFC_CONN_EVT,
77 __attribute__((unused)) tNFC_CONN*) {}
78
TEST_F(NfcConnCreateTest,NfceeSuccess)79 TEST_F(NfcConnCreateTest, NfceeSuccess) {
80 uint8_t dest_type = NCI_DEST_TYPE_NFCEE;
81 uint8_t id = 0x01;
82 uint8_t protocol = 0x02;
83 tNFC_CONN_CBACK* p_cback = mock_callback;
84 nfc_cb.conn_cb[0].conn_id = NFC_ILLEGAL_CONN_ID;
85 nfc_cb.max_conn = 1;
86 EXPECT_CALL(*((MockGkiUtils*)gki_utils), getpoolbuf(::testing::_))
87 .WillOnce(testing::Return(new NFC_HDR()));
88
89 tNFC_STATUS status = NFC_ConnCreate(dest_type, id, protocol, p_cback);
90
91 ASSERT_EQ(status, NFC_STATUS_OK);
92 }
93
TEST_F(NfcConnCreateTest,RemoteSuccess)94 TEST_F(NfcConnCreateTest, RemoteSuccess) {
95 uint8_t dest_type = NCI_DEST_TYPE_REMOTE;
96 uint8_t id = 0x03;
97 uint8_t protocol = 0x04;
98 nfc_cb.conn_cb[0].conn_id = NFC_ILLEGAL_CONN_ID;
99 tNFC_CONN_CBACK* p_cback = mock_callback;
100 nfc_cb.max_conn = 1;
101 EXPECT_CALL(*((MockGkiUtils*)gki_utils), getpoolbuf(::testing::_))
102 .WillOnce(testing::Return(new NFC_HDR()));
103
104 tNFC_STATUS status = NFC_ConnCreate(dest_type, id, protocol, p_cback);
105
106 ASSERT_EQ(status, NFC_STATUS_OK);
107 }
108
TEST_F(NfcConnCreateTest,NfccSuccess)109 TEST_F(NfcConnCreateTest, NfccSuccess) {
110 uint8_t dest_type = NCI_DEST_TYPE_NFCC;
111 uint8_t id = 0x05;
112 uint8_t protocol = 0x06;
113 tNFC_CONN_CBACK* p_cback = mock_callback;
114 nfc_cb.conn_cb[0].conn_id = NFC_ILLEGAL_CONN_ID;
115 nfc_cb.max_conn = 1;
116 EXPECT_CALL(*((MockGkiUtils*)gki_utils), getpoolbuf(::testing::_))
117 .WillOnce(testing::Return(new NFC_HDR()));
118
119 tNFC_STATUS status = NFC_ConnCreate(dest_type, id, protocol, p_cback);
120
121 ASSERT_EQ(status, NFC_STATUS_OK);
122 }
123
124 class NfcMainTest : public ::testing::Test {
125 protected:
SetUp()126 void SetUp() override { gki_utils = new MockGkiUtils(); }
127
TearDown()128 void TearDown() override { gki_utils = nullptr; }
129 };
130
TEST_F(NfcMainTest,FlushData)131 TEST_F(NfcMainTest, FlushData) {
132 uint8_t conn_id = NFC_PEND_CONN_ID;
133 uint8_t bytes1[] = {0x01};
134 uint8_t bytes2[] = {0x02};
135 void* buf1 = &bytes1;
136 void* buf2 = &bytes2;
137 nfc_cb.conn_cb[0].conn_id = NFC_PEND_CONN_ID;
138
139 EXPECT_CALL(*((MockGkiUtils*)gki_utils), dequeue(testing::_))
140 .WillOnce(testing::Return(buf1))
141 .WillOnce(testing::Return(buf2))
142 .WillOnce(testing::Return(nullptr));
143
144 EXPECT_CALL(*((MockGkiUtils*)gki_utils), freebuf(buf1));
145 EXPECT_CALL(*((MockGkiUtils*)gki_utils), freebuf(buf2));
146
147 tNFC_STATUS status = NFC_FlushData(conn_id);
148
149 ASSERT_EQ(status, NFC_STATUS_OK);
150 }
151
TEST_F(NfcMainTest,PowerCycleInvalidStateFailure)152 TEST_F(NfcMainTest, PowerCycleInvalidStateFailure) {
153 nfc_cb.nfc_state = NFC_STATE_NONE;
154 tNFC_STATUS status = NFC_PowerCycleNFCC();
155 ASSERT_EQ(status, NFC_STATUS_FAILED);
156 }