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

Commit 04364ede authored by Kevin Rocard's avatar Kevin Rocard
Browse files

Audio HAL VTS: Sanitize setMode input



Some values of AudioMode are exposed although implementation detail.
Make sure the client can not use them.

Test: vts-tradefed run vts --module VtsHalAudioV2_0Target
Test: call/play music/record/video...
Bug: 36311550
Change-Id: If513c2a06efa8a92459f0af80c63232fc63302b0
Signed-off-by: default avatarKevin Rocard <krocard@google.com>
parent f8500dcb
Loading
Loading
Loading
Loading
+12 −0
Original line number Diff line number Diff line
@@ -132,6 +132,18 @@ Return<Result> PrimaryDevice::setVoiceVolume(float volume) {
}

Return<Result> PrimaryDevice::setMode(AudioMode mode) {
    // INVALID, CURRENT, CNT, MAX are reserved for internal use.
    // TODO: remove the values from the HIDL interface
    switch (mode) {
        case AudioMode::NORMAL:
        case AudioMode::RINGTONE:
        case AudioMode::IN_CALL:
        case AudioMode::IN_COMMUNICATION:
            break;  // Valid values
        default:
            return Result::INVALID_ARGUMENTS;
    };

    return mDevice->analyzeStatus(
        "set_mode", mDevice->device()->set_mode(
                        mDevice->device(), static_cast<audio_mode_t>(mode)));
+10 −6
Original line number Diff line number Diff line
@@ -1291,18 +1291,22 @@ TEST_F(AudioPrimaryHidlTest, setVoiceVolume) {
}

TEST_F(AudioPrimaryHidlTest, setMode) {
    doc::test("Make sure setMode always succeeds if mode is valid");
    doc::test(
        "Make sure setMode always succeeds if mode is valid "
        "and fails otherwise");
    // Test Invalid values
    for (AudioMode mode :
         {AudioMode::INVALID, AudioMode::CURRENT, AudioMode::CNT}) {
        SCOPED_TRACE("mode=" + toString(mode));
        ASSERT_RESULT(Result::INVALID_ARGUMENTS, device->setMode(mode));
    }
    // Test valid values
    for (AudioMode mode :
         {AudioMode::IN_CALL, AudioMode::IN_COMMUNICATION, AudioMode::RINGTONE,
          AudioMode::CURRENT,
          AudioMode::NORMAL /* Make sure to leave the test in normal mode */}) {
        SCOPED_TRACE("mode=" + toString(mode));
        ASSERT_OK(device->setMode(mode));
    }

    // FIXME: Missing api doc. What should the impl do if the mode is invalid ?
    ASSERT_RESULT(Result::INVALID_ARGUMENTS,
                  device->setMode(AudioMode::INVALID));
}

TEST_F(BoolAccessorPrimaryHidlTest, BtScoNrecEnabled) {