Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7f1ab0c3 authored by Weilin Xu's avatar Weilin Xu
Browse files

Add VTS for setAudioPortConfig with invalid gain

Added test for setAudioPortConfig with invalid gain input in audio HAL
VTS. Also added HAL version check in audio HAL VTS.

Bug: 336370745
Test: atest VtsHalAudioCoreTargetTest
Change-Id: I0f14c203c253de56ca0c3711927b2dcafa1b0ea7
parent 122597a5
Loading
Loading
Loading
Loading
+45 −0
Original line number Diff line number Diff line
@@ -87,6 +87,7 @@ using aidl::android::media::audio::common::AudioDeviceDescription;
using aidl::android::media::audio::common::AudioDeviceType;
using aidl::android::media::audio::common::AudioDualMonoMode;
using aidl::android::media::audio::common::AudioFormatType;
using aidl::android::media::audio::common::AudioGainConfig;
using aidl::android::media::audio::common::AudioInputFlags;
using aidl::android::media::audio::common::AudioIoFlags;
using aidl::android::media::audio::common::AudioLatencyMode;
@@ -450,6 +451,7 @@ class AudioCoreModuleBase {
    // This is implemented by the 'StreamFixture' utility class.
    static constexpr int kNegativeTestBufferSizeFrames = 256;
    static constexpr int kDefaultLargeBufferSizeFrames = 48000;
    static constexpr int32_t kAidlVersion3 = 3;

    void SetUpImpl(const std::string& moduleName, bool setUpDebug = true) {
        ASSERT_NO_FATAL_FAILURE(ConnectToService(moduleName, setUpDebug));
@@ -478,6 +480,7 @@ class AudioCoreModuleBase {
        if (setUpDebug) {
            ASSERT_NO_FATAL_FAILURE(SetUpDebug());
        }
        ASSERT_TRUE(module->getInterfaceVersion(&aidlVersion).isOk());
    }

    void RestartService() {
@@ -490,6 +493,7 @@ class AudioCoreModuleBase {
        if (setUpDebug) {
            ASSERT_NO_FATAL_FAILURE(SetUpDebug());
        }
        ASSERT_TRUE(module->getInterfaceVersion(&aidlVersion).isOk());
    }

    void SetUpDebug() {
@@ -577,6 +581,7 @@ class AudioCoreModuleBase {
    std::unique_ptr<WithDebugFlags> debug;
    std::vector<AudioPort> initialPorts;
    std::vector<AudioRoute> initialRoutes;
    int32_t aidlVersion;
};

class WithDevicePortConnectedState {
@@ -1821,6 +1826,46 @@ TEST_P(AudioCoreModule, SetAudioPortConfigInvalidPortConfigId) {
    }
}

TEST_P(AudioCoreModule, SetAudioPortConfigInvalidPortAudioGain) {
    if (aidlVersion < kAidlVersion3) {
        GTEST_SKIP() << "Skip for audio HAL version lower than " << kAidlVersion3;
    }
    std::vector<AudioPort> ports;
    ASSERT_IS_OK(module->getAudioPorts(&ports));
    bool atLeastOnePortWithNonemptyGain = false;
    for (const auto port : ports) {
        AudioPortConfig portConfig;
        portConfig.portId = port.id;
        if (port.gains.empty()) {
            continue;
        }
        atLeastOnePortWithNonemptyGain = true;
        int index = 0;
        ASSERT_NE(0, port.gains[index].stepValue) << "Invalid audio port config gain step 0";
        portConfig.gain->index = index;
        AudioGainConfig invalidGainConfig;

        int invalidGain = port.gains[index].maxValue + port.gains[index].stepValue;
        invalidGainConfig.values.push_back(invalidGain);
        portConfig.gain.emplace(invalidGainConfig);
        bool applied = true;
        AudioPortConfig suggestedConfig;
        EXPECT_STATUS(EX_ILLEGAL_ARGUMENT,
                      module->setAudioPortConfig(portConfig, &suggestedConfig, &applied))
                << "invalid port gain " << invalidGain << " lower than min gain";

        invalidGain = port.gains[index].minValue - port.gains[index].stepValue;
        invalidGainConfig.values[0] = invalidGain;
        portConfig.gain.emplace(invalidGainConfig);
        EXPECT_STATUS(EX_ILLEGAL_ARGUMENT,
                      module->setAudioPortConfig(portConfig, &suggestedConfig, &applied))
                << "invalid port gain " << invalidGain << "higher than max gain";
    }
    if (!atLeastOnePortWithNonemptyGain) {
        GTEST_SKIP() << "No audio port contains non-empty gain configuration";
    }
}

TEST_P(AudioCoreModule, TryConnectMissingDevice) {
    // Limit checks to connection types that are known to be detectable by HAL implementations.
    static const std::set<std::string> kCheckedConnectionTypes{