Home | History | Annotate | Download | only in functional
      1 /*
      2  * Copyright (C) 2016 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 #define LOG_TAG "ir_hidl_hal_test"
     18 
     19 #include <android-base/logging.h>
     20 
     21 #include <android/hardware/ir/1.0/IConsumerIr.h>
     22 #include <android/hardware/ir/1.0/types.h>
     23 
     24 #include <VtsHalHidlTargetTestBase.h>
     25 #include <VtsHalHidlTargetTestEnvBase.h>
     26 #include <algorithm>
     27 
     28 using ::android::hardware::ir::V1_0::IConsumerIr;
     29 using ::android::hardware::ir::V1_0::ConsumerIrFreqRange;
     30 using ::android::hardware::hidl_vec;
     31 using ::android::hardware::Return;
     32 using ::android::sp;
     33 
     34 // Test environment for Ir
     35 class ConsumerIrHidlEnvironment : public ::testing::VtsHalHidlTargetTestEnvBase {
     36  public:
     37   // get the test environment singleton
     38   static ConsumerIrHidlEnvironment* Instance() {
     39     static ConsumerIrHidlEnvironment* instance = new ConsumerIrHidlEnvironment;
     40     return instance;
     41   }
     42 
     43   virtual void registerTestServices() override { registerTestService<IConsumerIr>(); }
     44  private:
     45   ConsumerIrHidlEnvironment() {}
     46 };
     47 
     48 // The main test class for IR HIDL HAL.
     49 class ConsumerIrHidlTest : public ::testing::VtsHalHidlTargetTestBase {
     50  public:
     51   virtual void SetUp() override {
     52     ir = ::testing::VtsHalHidlTargetTestBase::getService<IConsumerIr>(
     53       ConsumerIrHidlEnvironment::Instance()->getServiceName<IConsumerIr>());
     54     ASSERT_NE(ir, nullptr);
     55   }
     56 
     57   virtual void TearDown() override {}
     58 
     59   sp<IConsumerIr> ir;
     60 };
     61 
     62 // Test transmit() for the min and max frequency of every available range
     63 TEST_F(ConsumerIrHidlTest, TransmitTest) {
     64   bool success;
     65   hidl_vec<ConsumerIrFreqRange> ranges;
     66   auto cb = [&](bool s, hidl_vec<ConsumerIrFreqRange> v) {
     67     ranges = v;
     68     success = s;
     69   };
     70   Return<void> ret = ir->getCarrierFreqs(cb);
     71   ASSERT_TRUE(ret.isOk());
     72   ASSERT_TRUE(success);
     73 
     74   if (ranges.size() > 0) {
     75     uint32_t len = 16;
     76     hidl_vec<int32_t> vec;
     77     vec.resize(len);
     78     std::fill(vec.begin(), vec.end(), 1000);
     79     for (auto range = ranges.begin(); range != ranges.end(); range++) {
     80       EXPECT_TRUE(ir->transmit(range->min, vec));
     81       EXPECT_TRUE(ir->transmit(range->max, vec));
     82     }
     83   }
     84 }
     85 
     86 // Test transmit() when called with invalid frequencies
     87 TEST_F(ConsumerIrHidlTest, BadFreqTest) {
     88   uint32_t len = 16;
     89   hidl_vec<int32_t> vec;
     90   vec.resize(len);
     91   std::fill(vec.begin(), vec.end(), 1);
     92   EXPECT_FALSE(ir->transmit(-1, vec));
     93 }
     94 
     95 int main(int argc, char **argv) {
     96   ::testing::AddGlobalTestEnvironment(ConsumerIrHidlEnvironment::Instance());
     97   ::testing::InitGoogleTest(&argc, argv);
     98   ConsumerIrHidlEnvironment::Instance()->init(&argc, argv);
     99   int status = RUN_ALL_TESTS();
    100   LOG(INFO) << "Test result = " << status;
    101   return status;
    102 }
    103