From 113bd8111a04b3eef9970144800b1e5db1d57776 Mon Sep 17 00:00:00 2001 From: Mikhail Naganov Date: Wed, 18 Mar 2020 14:37:43 -0700 Subject: [PATCH 1/2] Audio Effects: Skip CheckConfig test for non-matching HAL versions In vts-core a test suite for version N can be called for HAL of version M. Since in the case of the Effects HAL the XSD configuration for the effects is version-dependent, the test must not validate the effects config using XSD file for other version. Thus, the configuration validity check must be skipped if no corresponding version of IEffectsFactory is found on the device. Bug: 142397658 Bug: 146015418 Test: atest VtsHalAudioEffectV6_0TargetTest on a device that uses earlier version of Audio HAL; CheckConfig#audioEffectsConfigurationValidation must be IGNORED Change-Id: I4b34cc34091447c04bf8d3e988c9bd4048dc8ef9 Merged-In: I4b34cc34091447c04bf8d3e988c9bd4048dc8ef9 --- .../functional/ValidateAudioEffectsConfiguration.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/audio/effect/all-versions/vts/functional/ValidateAudioEffectsConfiguration.cpp b/audio/effect/all-versions/vts/functional/ValidateAudioEffectsConfiguration.cpp index f9e4aa30eb..9c0135bf93 100644 --- a/audio/effect/all-versions/vts/functional/ValidateAudioEffectsConfiguration.cpp +++ b/audio/effect/all-versions/vts/functional/ValidateAudioEffectsConfiguration.cpp @@ -18,6 +18,12 @@ #include #include +// clang-format off +#include PATH(android/hardware/audio/effect/FILE_VERSION/IEffectsFactory.h) +// clang-format on + +#include +#include #include "utility/ValidateXml.h" @@ -29,6 +35,11 @@ TEST(CheckConfig, audioEffectsConfigurationValidation) { RecordProperty("description", "Verify that the effects configuration file is valid according to the schema"); using namespace android::effectsConfig; + if (android::hardware::getAllHalInstanceNames( + ::android::hardware::audio::effect::CPP_VERSION::IEffectsFactory::descriptor) + .size() == 0) { + GTEST_SKIP() << "No Effects HAL version " STRINGIFY(CPP_VERSION) " on this device"; + } std::vector locations(std::begin(DEFAULT_LOCATIONS), std::end(DEFAULT_LOCATIONS)); const char* xsd = "/data/local/tmp/audio_effects_conf_" STRINGIFY(CPP_VERSION) ".xsd"; From 4e1ad4cb1f9c2cf816d831d3f11cf04baec13e90 Mon Sep 17 00:00:00 2001 From: Mikhail Naganov Date: Thu, 19 Mar 2020 10:44:06 -0700 Subject: [PATCH 2/2] Audio Effects: Run more tests for LoudnessEnhancerEffect Due to incorrect assumptions about test case inheritance in GTests, LoudnessEnhancerEffect wasn't running tests for methods of IEffect interface. The test code has been restructured to fix that via proper parametrization. Bug: 146149801 Test: atest VtsHalAudioEffectV5_0TargetTest Test: atest VtsHalAudioEffectV6_0TargetTest Change-Id: Ie366979880bfc3b7e95a02957451736d724f838f Merged-In: Ie366979880bfc3b7e95a02957451736d724f838f --- .../VtsHalAudioEffectTargetTest.cpp | 70 +++++++++++++------ 1 file changed, 50 insertions(+), 20 deletions(-) diff --git a/audio/effect/all-versions/vts/functional/VtsHalAudioEffectTargetTest.cpp b/audio/effect/all-versions/vts/functional/VtsHalAudioEffectTargetTest.cpp index 390d4ee418..070242fc9d 100644 --- a/audio/effect/all-versions/vts/functional/VtsHalAudioEffectTargetTest.cpp +++ b/audio/effect/all-versions/vts/functional/VtsHalAudioEffectTargetTest.cpp @@ -155,11 +155,20 @@ static const Uuid LOUDNESS_ENHANCER_EFFECT_TYPE = { 0xfe3199be, 0xaed0, 0x413f, 0x87bb, std::array{{0x11, 0x26, 0x0e, 0xb6, 0x3c, 0xf1}}}; +enum { PARAM_FACTORY_NAME, PARAM_EFFECT_UUID }; +using EffectParameter = std::tuple; + +static inline std::string EffectParameterToString( + const ::testing::TestParamInfo& info) { + return ::android::hardware::PrintInstanceNameToString(::testing::TestParamInfo{ + std::get(info.param), info.index}); +} + // The main test class for Audio Effect HIDL HAL. -class AudioEffectHidlTest : public ::testing::TestWithParam { +class AudioEffectHidlTest : public ::testing::TestWithParam { public: void SetUp() override { - effectsFactory = IEffectsFactory::getService(GetParam()); + effectsFactory = IEffectsFactory::getService(std::get(GetParam())); ASSERT_NE(nullptr, effectsFactory.get()); findAndCreateEffect(getEffectType()); @@ -180,7 +189,7 @@ class AudioEffectHidlTest : public ::testing::TestWithParam { RecordProperty("description", description); } - virtual Uuid getEffectType() { return EQUALIZER_EFFECT_TYPE; } + Uuid getEffectType() const { return std::get(GetParam()); } void findAndCreateEffect(const Uuid& type); void findEffectInstance(const Uuid& type, Uuid* uuid); @@ -369,7 +378,9 @@ TEST_P(AudioEffectHidlTest, DisableEnableDisable) { description("Verify Disable -> Enable -> Disable sequence for an effect"); Return ret = effect->disable(); EXPECT_TRUE(ret.isOk()); - EXPECT_EQ(Result::INVALID_ARGUMENTS, ret); + // Note: some legacy effects may return -EINVAL (INVALID_ARGUMENTS), + // more canonical is to return -ENOSYS (NOT_SUPPORTED) + EXPECT_TRUE(ret == Result::NOT_SUPPORTED || ret == Result::INVALID_ARGUMENTS); ret = effect->enable(); EXPECT_TRUE(ret.isOk()); EXPECT_EQ(Result::OK, ret); @@ -519,15 +530,19 @@ TEST_P(AudioEffectHidlTest, SetCurrentConfigForFeature) { // The main test class for Equalizer Audio Effect HIDL HAL. class EqualizerAudioEffectHidlTest : public AudioEffectHidlTest { - public: + public: void SetUp() override { AudioEffectHidlTest::SetUp(); equalizer = IEqualizerEffect::castFrom(effect); ASSERT_NE(nullptr, equalizer.get()); } - protected: - Uuid getEffectType() override { return EQUALIZER_EFFECT_TYPE; } + void TearDown() override { + equalizer.clear(); + AudioEffectHidlTest::TearDown(); + } + + protected: void getNumBands(uint16_t* numBands); void getLevelRange(int16_t* minLevel, int16_t* maxLevel); void getBandFrequencyRange(uint16_t band, uint32_t* minFreq, uint32_t* centerFreq, @@ -765,16 +780,19 @@ TEST_P(EqualizerAudioEffectHidlTest, GetSetAllProperties) { // The main test class for Equalizer Audio Effect HIDL HAL. class LoudnessEnhancerAudioEffectHidlTest : public AudioEffectHidlTest { - public: + public: void SetUp() override { AudioEffectHidlTest::SetUp(); enhancer = ILoudnessEnhancerEffect::castFrom(effect); ASSERT_NE(nullptr, enhancer.get()); } - protected: - Uuid getEffectType() override { return LOUDNESS_ENHANCER_EFFECT_TYPE; } + void TearDown() override { + enhancer.clear(); + AudioEffectHidlTest::TearDown(); + } + protected: sp enhancer; }; @@ -799,19 +817,31 @@ TEST_P(LoudnessEnhancerAudioEffectHidlTest, GetSetTargetGain) { EXPECT_EQ(gain, actualGain); } +INSTANTIATE_TEST_SUITE_P(EffectsFactory, AudioEffectsFactoryHidlTest, + ::testing::ValuesIn(::android::hardware::getAllHalInstanceNames( + IEffectsFactory::descriptor)), + ::android::hardware::PrintInstanceNameToString); INSTANTIATE_TEST_SUITE_P( - EffectsFactory, AudioEffectsFactoryHidlTest, - testing::ValuesIn(android::hardware::getAllHalInstanceNames(IEffectsFactory::descriptor)), - android::hardware::PrintInstanceNameToString); + Equalizer_IEffect, AudioEffectHidlTest, + ::testing::Combine(::testing::ValuesIn(::android::hardware::getAllHalInstanceNames( + IEffectsFactory::descriptor)), + ::testing::Values(EQUALIZER_EFFECT_TYPE)), + EffectParameterToString); INSTANTIATE_TEST_SUITE_P( - Equalizer, AudioEffectHidlTest, - testing::ValuesIn(android::hardware::getAllHalInstanceNames(IEffectsFactory::descriptor)), - android::hardware::PrintInstanceNameToString); + LoudnessEnhancer_IEffect, AudioEffectHidlTest, + ::testing::Combine(::testing::ValuesIn(::android::hardware::getAllHalInstanceNames( + IEffectsFactory::descriptor)), + ::testing::Values(LOUDNESS_ENHANCER_EFFECT_TYPE)), + EffectParameterToString); INSTANTIATE_TEST_SUITE_P( Equalizer, EqualizerAudioEffectHidlTest, - testing::ValuesIn(android::hardware::getAllHalInstanceNames(IEffectsFactory::descriptor)), - android::hardware::PrintInstanceNameToString); + ::testing::Combine(::testing::ValuesIn(::android::hardware::getAllHalInstanceNames( + IEffectsFactory::descriptor)), + ::testing::Values(EQUALIZER_EFFECT_TYPE)), + EffectParameterToString); INSTANTIATE_TEST_SUITE_P( LoudnessEnhancer, LoudnessEnhancerAudioEffectHidlTest, - testing::ValuesIn(android::hardware::getAllHalInstanceNames(IEffectsFactory::descriptor)), - android::hardware::PrintInstanceNameToString); + ::testing::Combine(::testing::ValuesIn(::android::hardware::getAllHalInstanceNames( + IEffectsFactory::descriptor)), + ::testing::Values(LOUDNESS_ENHANCER_EFFECT_TYPE)), + EffectParameterToString);