• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 }