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: 26 EseInterfaceTest() : ese_(ESE_INITIALIZER(ESE_HW_FAKE)) { 27 } 28 virtual ~EseInterfaceTest() { } 29 virtual void SetUp() { } 30 virtual void TearDown() { } 31 struct EseInterface ese_; 32 }; 33 34 TEST_F(EseInterfaceTest, EseNameNull) { 35 EXPECT_STREQ("NULL EseInterface", ese_name(NULL)); 36 }; 37 38 TEST_F(EseInterfaceTest, EseNameOk) { 39 EXPECT_STREQ("eSE Fake Hardware", ese_name(&ese_)); 40 }; 41 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 52 TEST_F(EseInterfaceTest, EseOpenNull) { 53 EXPECT_EQ(-1, ese_open(NULL, NULL)); 54 }; 55 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 66 TEST_F(EseInterfaceTest, EseOpenOk) { 67 EXPECT_EQ(0, ese_open(&ese_, NULL)); 68 }; 69 70 TEST_F(EseInterfaceTest, EseCloseNull) { 71 ese_close(NULL); 72 }; 73 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 85 TEST_F(EseInterfaceTest, EseCloseOk) { 86 EXPECT_EQ(0, ese_open(&ese_, NULL)); 87 ese_close(&ese_); 88 }; 89 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 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 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