VtsHalAudioEffectV2_0TargetTest.cpp revision ed2bb4e8f851688c09f7639a9183b1285aa0967c
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 "AudioEffectHidlHalTest" 18#include <android-base/logging.h> 19#include <cutils/native_handle.h> 20 21#include <android/hardware/audio/effect/2.0/IEffectsFactory.h> 22#include <android/hardware/audio/effect/2.0/types.h> 23 24#include <VtsHalHidlTargetTestBase.h> 25 26using ::android::hardware::audio::common::V2_0::Uuid; 27using ::android::hardware::audio::effect::V2_0::EffectDescriptor; 28using ::android::hardware::audio::effect::V2_0::IEffect; 29using ::android::hardware::audio::effect::V2_0::IEffectsFactory; 30using ::android::hardware::audio::effect::V2_0::Result; 31using ::android::hardware::Return; 32using ::android::hardware::Status; 33using ::android::hardware::Void; 34using ::android::hardware::hidl_vec; 35using ::android::sp; 36 37// The main test class for Audio Effect HIDL HAL. 38class AudioEffectHidlTest : public ::testing::VtsHalHidlTargetTestBase { 39 public: 40 virtual void SetUp() override { 41 effectsFactory = ::testing::VtsHalHidlTargetTestBase::getService<IEffectsFactory>(); 42 ASSERT_NE(effectsFactory, nullptr); 43 } 44 45 virtual void TearDown() override {} 46 47 sp<IEffectsFactory> effectsFactory; 48}; 49 50// A class for test environment setup (kept since this file is a template). 51class AudioEffectHidlEnvironment : public ::testing::Environment { 52 public: 53 virtual void SetUp() {} 54 virtual void TearDown() {} 55 56 private: 57}; 58 59TEST_F(AudioEffectHidlTest, EnumerateEffects) { 60 Result retval = Result::NOT_INITIALIZED; 61 size_t effectCount = 0; 62 Return<void> ret = effectsFactory->getAllDescriptors( 63 [&](Result r, const hidl_vec<EffectDescriptor>& result) { 64 retval = r; 65 effectCount = result.size(); 66 }); 67 EXPECT_TRUE(ret.isOk()); 68 EXPECT_EQ(retval, Result::OK); 69 EXPECT_GT(effectCount, 0u); 70} 71 72TEST_F(AudioEffectHidlTest, CreateEffect) { 73 bool gotEffect = false; 74 Uuid effectUuid; 75 Return<void> ret = effectsFactory->getAllDescriptors( 76 [&](Result r, const hidl_vec<EffectDescriptor>& result) { 77 if (r == Result::OK && result.size() > 0) { 78 gotEffect = true; 79 effectUuid = result[0].uuid; 80 } 81 }); 82 ASSERT_TRUE(ret.isOk()); 83 ASSERT_TRUE(gotEffect); 84 Result retval = Result::NOT_INITIALIZED; 85 sp<IEffect> effect; 86 ret = effectsFactory->createEffect( 87 effectUuid, 1 /* session */, 1 /* ioHandle */, 88 [&](Result r, const sp<IEffect>& result, uint64_t /*effectId*/) { 89 retval = r; 90 if (r == Result::OK) { 91 effect = result; 92 } 93 }); 94 EXPECT_TRUE(ret.isOk()); 95 EXPECT_EQ(retval, Result::OK); 96 EXPECT_NE(effect, nullptr); 97} 98 99TEST_F(AudioEffectHidlTest, GetDescriptor) { 100 hidl_vec<EffectDescriptor> allDescriptors; 101 Return<void> ret = effectsFactory->getAllDescriptors( 102 [&](Result r, const hidl_vec<EffectDescriptor>& result) { 103 if (r == Result::OK) { 104 allDescriptors = result; 105 } 106 }); 107 ASSERT_TRUE(ret.isOk()); 108 ASSERT_GT(allDescriptors.size(), 0u); 109 for (size_t i = 0; i < allDescriptors.size(); ++i) { 110 ret = effectsFactory->getDescriptor( 111 allDescriptors[i].uuid, [&](Result r, const EffectDescriptor& result) { 112 EXPECT_EQ(r, Result::OK); 113 EXPECT_EQ(result, allDescriptors[i]); 114 }); 115 } 116 EXPECT_TRUE(ret.isOk()); 117} 118 119int main(int argc, char** argv) { 120 ::testing::AddGlobalTestEnvironment(new AudioEffectHidlEnvironment); 121 ::testing::InitGoogleTest(&argc, argv); 122 int status = RUN_ALL_TESTS(); 123 LOG(INFO) << "Test result = " << status; 124 return status; 125} 126