• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2017 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 <ese/ese.h>
18 #include <gtest/gtest.h>
19 
20 ESE_INCLUDE_HW(ESE_HW_FAKE);
21 
22 using ::testing::Test;
23 
24 class EseInterfaceTest : public virtual Test {
25  public:
EseInterfaceTest()26   EseInterfaceTest() : ese_(ESE_INITIALIZER(ESE_HW_FAKE)) {
27   }
~EseInterfaceTest()28   virtual ~EseInterfaceTest() { }
SetUp()29   virtual void SetUp() { }
TearDown()30   virtual void TearDown() { }
31   struct EseInterface ese_;
32 };
33 
TEST_F(EseInterfaceTest,EseNameNull)34 TEST_F(EseInterfaceTest, EseNameNull) {
35   EXPECT_STREQ("NULL EseInterface", ese_name(NULL));
36 };
37 
TEST_F(EseInterfaceTest,EseNameOk)38 TEST_F(EseInterfaceTest, EseNameOk) {
39   EXPECT_STREQ("eSE Fake Hardware", ese_name(&ese_));
40 };
41 
TEST_F(EseInterfaceTest,EseNameUnknown)42 TEST_F(EseInterfaceTest, EseNameUnknown) {
43   struct EseOperations dummy_ops = {
44     .name = NULL,
45   };
46   struct EseInterface dummy = {
47     .ops = &dummy_ops
48   };
49   EXPECT_STREQ("unknown hw", ese_name(&dummy));
50 };
51 
TEST_F(EseInterfaceTest,EseOpenNull)52 TEST_F(EseInterfaceTest, EseOpenNull) {
53   EXPECT_EQ(-1, ese_open(NULL, NULL));
54 };
55 
TEST_F(EseInterfaceTest,EseOpenNoOp)56 TEST_F(EseInterfaceTest, EseOpenNoOp) {
57   struct EseOperations dummy_ops = {
58     .open = NULL,
59   };
60   struct EseInterface dummy = {
61     .ops = &dummy_ops
62   };
63   EXPECT_EQ(0, ese_open(&dummy, NULL));
64 };
65 
TEST_F(EseInterfaceTest,EseOpenOk)66 TEST_F(EseInterfaceTest, EseOpenOk) {
67   EXPECT_EQ(0, ese_open(&ese_, NULL));
68 };
69 
TEST_F(EseInterfaceTest,EseCloseNull)70 TEST_F(EseInterfaceTest, EseCloseNull) {
71   ese_close(NULL);
72 };
73 
TEST_F(EseInterfaceTest,EseCloseNoOp)74 TEST_F(EseInterfaceTest, EseCloseNoOp) {
75   struct EseOperations dummy_ops = {
76     .close = NULL,
77   };
78   struct EseInterface dummy = {
79     .ops = &dummy_ops
80   };
81   /* Will pass without an open first. */
82   ese_close(&dummy);
83 };
84 
TEST_F(EseInterfaceTest,EseCloseOk)85 TEST_F(EseInterfaceTest, EseCloseOk) {
86   EXPECT_EQ(0, ese_open(&ese_, NULL));
87   ese_close(&ese_);
88 };
89 
TEST_F(EseInterfaceTest,EseClosePending)90 TEST_F(EseInterfaceTest, EseClosePending) {
91   EXPECT_EQ(0, ese_open(&ese_, NULL));
92   ese_.ops->hw_transmit(&ese_, NULL, 0, 0);
93   ese_close(&ese_);
94   EXPECT_EQ(0, ese_open(&ese_, NULL));
95   ese_.ops->hw_transmit(&ese_, NULL, 0, 1);
96   ese_.ops->hw_receive(&ese_, NULL, 0, 0);
97   ese_close(&ese_);
98   EXPECT_EQ(0, ese_open(&ese_, NULL));
99   ese_.ops->hw_receive(&ese_, NULL, 0, 1);
100   ese_close(&ese_);
101 };
102 
103 
TEST_F(EseInterfaceTest,EseTransceiveSendNothing)104 TEST_F(EseInterfaceTest, EseTransceiveSendNothing) {
105   EXPECT_EQ(0, ese_open(&ese_, NULL));
106   // Relying on hw transmit/recieve alone is not supported.
107   uint8_t *tx = NULL;
108   uint8_t *rx = NULL;
109   EXPECT_EQ(-1, ese_transceive(&ese_, tx, 0, rx, 0));
110   EXPECT_EQ(-1, ese_transceive(&ese_, tx+1, 0, rx, 0));
111   EXPECT_EQ(-1, ese_transceive(&ese_, tx, 0, rx+1, 0));
112   EXPECT_EQ(-1, ese_transceive(&ese_, tx, 0, rx, 100));
113   EXPECT_EQ(-1, ese_transceive(&ese_, tx, 220, rx, 100));
114   EXPECT_EQ(-1, ese_transceive(&ese_, tx+1, 0, rx+1, 0));
115   ese_close(&ese_);
116 };
117 
TEST_F(EseInterfaceTest,EseTransceiveNoOps)118 TEST_F(EseInterfaceTest, EseTransceiveNoOps) {
119   struct EseOperations dummy_ops = {
120     .open = NULL,
121     .close = NULL,
122     .transceive = NULL,
123     .hw_transmit = NULL,
124     .hw_receive = NULL,
125   };
126   struct EseInterface dummy = {
127     .ops = &dummy_ops
128   };
129   /* Will pass without an open first. */
130   EXPECT_EQ(-1, ese_transceive(&dummy, NULL, 0, NULL, 0));
131   EXPECT_EQ(1, ese_error(&dummy));
132   EXPECT_EQ(-1, ese_error_code(&dummy));
133   EXPECT_STREQ("Hardware supplied no transceive implementation.",
134                ese_error_message(&dummy));
135 };
136 
137 
138