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