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

Commit a8bf907f authored by Raj Goparaju's avatar Raj Goparaju
Browse files

Adding VTS tests for IAudioControl#registerModuleChangeCallback



Tests the following:
a) successful registration
b) successful un-registration
b) exception check
   - double registration
   - nullptr registration
   - unsupported feature

Bug: 261647905
Test: run vts --module VtsAidlHalAudioControlTest

Change-Id: I7336c9e8dd8e3ca444e77218fc1150e5528dba32
Signed-off-by: default avatarRaj Goparaju <rajgoparaju@google.com>
parent 27a02e11
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -39,7 +39,7 @@ cc_test {
        "libxml2",
    ],
    static_libs: [
        "android.hardware.automotive.audiocontrol-V2-cpp",
        "android.hardware.automotive.audiocontrol-V3-cpp",
        "libgmock",
    ],
    test_suites: [
+48 −0
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@

#include <android/hardware/automotive/audiocontrol/BnAudioGainCallback.h>
#include <android/hardware/automotive/audiocontrol/BnFocusListener.h>
#include <android/hardware/automotive/audiocontrol/BnModuleChangeCallback.h>
#include <android/hardware/automotive/audiocontrol/IAudioControl.h>
#include <android/log.h>
#include <binder/IServiceManager.h>
@@ -34,10 +35,14 @@ using android::hardware::automotive::audiocontrol::AudioFocusChange;
using android::hardware::automotive::audiocontrol::AudioGainConfigInfo;
using android::hardware::automotive::audiocontrol::BnAudioGainCallback;
using android::hardware::automotive::audiocontrol::BnFocusListener;
using android::hardware::automotive::audiocontrol::BnModuleChangeCallback;
using android::hardware::automotive::audiocontrol::DuckingInfo;
using android::hardware::automotive::audiocontrol::IAudioControl;
using android::hardware::automotive::audiocontrol::IModuleChangeCallback;
using android::hardware::automotive::audiocontrol::MutingInfo;
using android::hardware::automotive::audiocontrol::Reasons;
using ::testing::AnyOf;
using ::testing::Eq;

#include "android_audio_policy_configuration_V7_0.h"

@@ -55,6 +60,8 @@ class AudioControlAidl : public testing::TestWithParam<std::string> {
        ASSERT_NE(audioControl, nullptr);
    }

    void TearDown() override { audioControl = nullptr; }

    sp<IAudioControl> audioControl;
    int32_t capabilities;
};
@@ -226,6 +233,47 @@ TEST_P(AudioControlAidl, AudioGainCallbackRegistration) {
    ASSERT_TRUE(audioControl->registerGainCallback(gainCallback2).isOk());
}

/*
 * Test Module change Callback registration.
 *
 * Verifies that:
 * - setModuleChangeCallback succeeds
 * - setting a double callback fails with exception
 * - clearModuleChangeCallback succeeds
 * - setting with nullptr callback fails with exception
 * - closing handle does not crash
 */
struct ModuleChangeCallbackMock : BnModuleChangeCallback {
    MOCK_METHOD(Status, onAudioPortsChanged,
                (const std::vector<android::media::audio::common::AudioPort>& audioPorts));
};

TEST_P(AudioControlAidl, RegisterModuleChangeCallbackTwiceThrowsException) {
    ALOGI("Register Module change callback test");
    // make sure no stale callbacks.
    audioControl->clearModuleChangeCallback();

    sp<ModuleChangeCallbackMock> moduleChangeCallback = new ModuleChangeCallbackMock();
    auto status = audioControl->setModuleChangeCallback(moduleChangeCallback);
    EXPECT_THAT(status.exceptionCode(),
                AnyOf(Eq(Status::EX_NONE), Eq(Status::EX_UNSUPPORTED_OPERATION)));
    if (!status.isOk()) return;

    sp<ModuleChangeCallbackMock> moduleChangeCallback2 = new ModuleChangeCallbackMock();
    // no need to check for unsupported feature
    EXPECT_EQ(Status::EX_ILLEGAL_STATE,
              audioControl->setModuleChangeCallback(moduleChangeCallback2).exceptionCode());
    ASSERT_TRUE(audioControl->clearModuleChangeCallback().isOk());
    ASSERT_TRUE(audioControl->setModuleChangeCallback(moduleChangeCallback2).isOk());
}

TEST_P(AudioControlAidl, RegisterModuleChangeNullCallbackThrowsException) {
    ALOGI("Register Module change callback with nullptr test");
    auto status = audioControl->setModuleChangeCallback(nullptr);
    EXPECT_THAT(status.exceptionCode(),
                AnyOf(Eq(Status::EX_ILLEGAL_ARGUMENT), Eq(Status::EX_UNSUPPORTED_OPERATION)));
}

GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(AudioControlAidl);
INSTANTIATE_TEST_SUITE_P(
        Audiocontrol, AudioControlAidl,