Home | History | Annotate | Download | only in tests
      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