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

Commit 0a2b52b3 authored by Treehugger Robot's avatar Treehugger Robot Committed by Gerrit Code Review
Browse files

Merge "Add VTS for setAudioPortConfig with invalid gain" into main

parents ee843ed4 349aea21
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{