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: Raj Goparaju <rajgoparaju@google.com>
diff --git a/automotive/audiocontrol/aidl/vts/VtsHalAudioControlTargetTest.cpp b/automotive/audiocontrol/aidl/vts/VtsHalAudioControlTargetTest.cpp
index f4f5eef..f4e3b5a 100644
--- a/automotive/audiocontrol/aidl/vts/VtsHalAudioControlTargetTest.cpp
+++ b/automotive/audiocontrol/aidl/vts/VtsHalAudioControlTargetTest.cpp
@@ -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::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 @@
ASSERT_NE(audioControl, nullptr);
}
+ void TearDown() override { audioControl = nullptr; }
+
sp<IAudioControl> audioControl;
int32_t capabilities;
};
@@ -226,6 +233,47 @@
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,