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

Commit 4b54b1fc authored by Lais Andrade's avatar Lais Andrade
Browse files

Fix vibrator VTS failure on older HAL versions

Fix tests to expect STATUS_UNKNOWN_TRANSACTION as well as
EX_UNSUPPORTED_OPERATION when the vibrator does not have a capability
required for the method being tested.

Older versions of the HAL will return that status code instead of
unsupported, as explained at:
https://source.android.com/devices/architecture/aidl/stable-aidl#versioning-interfaces

Fix: 190526054
Test: VtsHalVibratorTargetTest & VtsHalVibratorManagerTargetTest
Change-Id: I538843fbbdbf8353cd57f1c83392baeabdcbadd2
parent 083efb0b
Loading
Loading
Loading
Loading
+15 −10
Original line number Diff line number Diff line
@@ -71,6 +71,11 @@ class VibratorAidl : public testing::TestWithParam<std::string> {
    std::vector<int32_t> vibratorIds;
};

inline bool isUnknownOrUnsupported(Status status) {
    return status.exceptionCode() == Status::EX_UNSUPPORTED_OPERATION ||
           status.transactionError() == android::UNKNOWN_TRANSACTION;
}

TEST_P(VibratorAidl, ValidateExistingVibrators) {
    sp<IVibrator> vibrator;
    for (auto& id : vibratorIds) {
@@ -101,8 +106,8 @@ TEST_P(VibratorAidl, PrepareSyncedEmptySetIsInvalid) {

TEST_P(VibratorAidl, PrepareSyncedNotSupported) {
    if (!(capabilities & IVibratorManager::CAP_SYNC)) {
        EXPECT_EQ(Status::EX_UNSUPPORTED_OPERATION,
                  manager->prepareSynced(vibratorIds).exceptionCode());
        Status status = manager->prepareSynced(vibratorIds);
        EXPECT_TRUE(isUnknownOrUnsupported(status)) << status;
    }
}

@@ -116,8 +121,8 @@ TEST_P(VibratorAidl, PrepareOnNotSupported) {
        for (auto& id : vibratorIds) {
            EXPECT_TRUE(manager->getVibrator(id, &vibrator).isOk());
            ASSERT_NE(vibrator, nullptr);
            EXPECT_EQ(Status::EX_UNSUPPORTED_OPERATION,
                      vibrator->on(durationMs, nullptr).exceptionCode());
            Status status = vibrator->on(durationMs, nullptr);
            EXPECT_TRUE(isUnknownOrUnsupported(status)) << status;
        }
        EXPECT_TRUE(manager->cancelSynced().isOk());
    }
@@ -134,7 +139,7 @@ TEST_P(VibratorAidl, PreparePerformNotSupported) {
            ASSERT_NE(vibrator, nullptr);
            int32_t lengthMs = 0;
            Status status = vibrator->perform(kEffects[0], kEffectStrengths[0], nullptr, &lengthMs);
            EXPECT_EQ(Status::EX_UNSUPPORTED_OPERATION, status.exceptionCode());
            EXPECT_TRUE(isUnknownOrUnsupported(status)) << status;
        }
        EXPECT_TRUE(manager->cancelSynced().isOk());
    }
@@ -157,7 +162,7 @@ TEST_P(VibratorAidl, PrepareComposeNotSupported) {
            EXPECT_TRUE(manager->getVibrator(id, &vibrator).isOk());
            ASSERT_NE(vibrator, nullptr);
            Status status = vibrator->compose(composite, nullptr);
            EXPECT_EQ(Status::EX_UNSUPPORTED_OPERATION, status.exceptionCode());
            EXPECT_TRUE(isUnknownOrUnsupported(status)) << status;
        }
        EXPECT_TRUE(manager->cancelSynced().isOk());
    }
@@ -191,8 +196,8 @@ TEST_P(VibratorAidl, TriggerWithCallback) {

TEST_P(VibratorAidl, TriggerSyncNotSupported) {
    if (!(capabilities & IVibratorManager::CAP_SYNC)) {
        EXPECT_EQ(Status::EX_UNSUPPORTED_OPERATION,
                  manager->triggerSynced(nullptr).exceptionCode());
        Status status = manager->triggerSynced(nullptr);
        EXPECT_TRUE(isUnknownOrUnsupported(status)) << status;
    }
}

@@ -201,8 +206,8 @@ TEST_P(VibratorAidl, TriggerCallbackNotSupported) {
    if (!(capabilities & IVibratorManager::CAP_TRIGGER_CALLBACK)) {
        sp<CompletionCallback> callback = new CompletionCallback([] {});
        EXPECT_TRUE(manager->prepareSynced(vibratorIds).isOk());
        EXPECT_EQ(Status::EX_UNSUPPORTED_OPERATION,
                  manager->triggerSynced(callback).exceptionCode());
        Status status = manager->triggerSynced(callback);
        EXPECT_TRUE(isUnknownOrUnsupported(status)) << status;
    }
}

+31 −24
Original line number Diff line number Diff line
@@ -112,6 +112,11 @@ class VibratorAidl : public testing::TestWithParam<std::tuple<int32_t, int32_t>>
    int32_t capabilities;
};

inline bool isUnknownOrUnsupported(Status status) {
    return status.exceptionCode() == Status::EX_UNSUPPORTED_OPERATION ||
           status.transactionError() == android::UNKNOWN_TRANSACTION;
}

static float getResonantFrequencyHz(sp<IVibrator> vibrator, int32_t capabilities) {
    float resonantFrequencyHz;
    Status status = vibrator->getResonantFrequency(&resonantFrequencyHz);
@@ -119,7 +124,7 @@ static float getResonantFrequencyHz(sp<IVibrator> vibrator, int32_t capabilities
        EXPECT_GT(resonantFrequencyHz, 0);
        EXPECT_EQ(status.exceptionCode(), Status::EX_NONE);
    } else {
        EXPECT_EQ(status.exceptionCode(), Status::EX_UNSUPPORTED_OPERATION);
        EXPECT_TRUE(isUnknownOrUnsupported(status)) << status;
    }
    return resonantFrequencyHz;
}
@@ -131,7 +136,7 @@ static float getFrequencyResolutionHz(sp<IVibrator> vibrator, int32_t capabiliti
        EXPECT_GT(freqResolutionHz, 0);
        EXPECT_EQ(status.exceptionCode(), Status::EX_NONE);
    } else {
        EXPECT_EQ(status.exceptionCode(), Status::EX_UNSUPPORTED_OPERATION);
        EXPECT_TRUE(isUnknownOrUnsupported(status)) << status;
    }
    return freqResolutionHz;
}
@@ -147,7 +152,7 @@ static float getFrequencyMinimumHz(sp<IVibrator> vibrator, int32_t capabilities)
        EXPECT_GT(freqMinimumHz, 0);
        EXPECT_LE(freqMinimumHz, resonantFrequencyHz);
    } else {
        EXPECT_EQ(status.exceptionCode(), Status::EX_UNSUPPORTED_OPERATION);
        EXPECT_TRUE(isUnknownOrUnsupported(status)) << status;
    }
    return freqMinimumHz;
}
@@ -158,7 +163,7 @@ static float getFrequencyMaximumHz(sp<IVibrator> vibrator, int32_t capabilities)
    if (capabilities & IVibrator::CAP_FREQUENCY_CONTROL) {
        EXPECT_EQ(status.exceptionCode(), Status::EX_NONE);
    } else {
        EXPECT_EQ(status.exceptionCode(), Status::EX_UNSUPPORTED_OPERATION);
        EXPECT_TRUE(isUnknownOrUnsupported(status)) << status;
    }

    float freqMaximumHz =
@@ -219,7 +224,8 @@ TEST_P(VibratorAidl, OnWithCallback) {
TEST_P(VibratorAidl, OnCallbackNotSupported) {
    if (!(capabilities & IVibrator::CAP_ON_CALLBACK)) {
        sp<CompletionCallback> callback = new CompletionCallback([] {});
        EXPECT_EQ(Status::EX_UNSUPPORTED_OPERATION, vibrator->on(250, callback).exceptionCode());
        Status status = vibrator->on(250, callback);
        EXPECT_TRUE(isUnknownOrUnsupported(status)) << status;
    }
}

@@ -240,8 +246,8 @@ TEST_P(VibratorAidl, ValidateEffect) {
                EXPECT_GT(lengthMs, 0);
                usleep(lengthMs * 1000);
            } else {
                EXPECT_EQ(status.exceptionCode(), Status::EX_UNSUPPORTED_OPERATION)
                    << toString(effect) << " " << toString(strength);
                EXPECT_TRUE(isUnknownOrUnsupported(status))
                        << status << " " << toString(effect) << " " << toString(strength);
            }
        }
    }
@@ -270,7 +276,7 @@ TEST_P(VibratorAidl, ValidateEffectWithCallback) {
                EXPECT_TRUE(status.isOk());
                EXPECT_GT(lengthMs, 0);
            } else {
                EXPECT_EQ(status.exceptionCode(), Status::EX_UNSUPPORTED_OPERATION);
                EXPECT_TRUE(isUnknownOrUnsupported(status)) << status;
            }

            if (!status.isOk())
@@ -293,7 +299,7 @@ TEST_P(VibratorAidl, ValidateEffectWithCallbackNotSupported) {
            sp<CompletionCallback> callback = new CompletionCallback([] {});
            int lengthMs;
            Status status = vibrator->perform(effect, strength, callback, &lengthMs);
            EXPECT_EQ(Status::EX_UNSUPPORTED_OPERATION, status.exceptionCode());
            EXPECT_TRUE(isUnknownOrUnsupported(status)) << status;
        }
    }
}
@@ -311,8 +317,8 @@ TEST_P(VibratorAidl, InvalidEffectsUnsupported) {
        for (EffectStrength strength : kInvalidEffectStrengths) {
            int32_t lengthMs;
            Status status = vibrator->perform(effect, strength, nullptr /*callback*/, &lengthMs);
            EXPECT_EQ(status.exceptionCode(), Status::EX_UNSUPPORTED_OPERATION)
                << toString(effect) << " " << toString(strength);
            EXPECT_TRUE(isUnknownOrUnsupported(status))
                    << status << " " << toString(effect) << " " << toString(strength);
        }
    }
}
@@ -338,7 +344,8 @@ TEST_P(VibratorAidl, AmplitudeOutsideRangeFails) {

TEST_P(VibratorAidl, AmplitudeReturnsUnsupportedMatchingCapabilities) {
    if ((capabilities & IVibrator::CAP_AMPLITUDE_CONTROL) == 0) {
        EXPECT_EQ(Status::EX_UNSUPPORTED_OPERATION, vibrator->setAmplitude(1).exceptionCode());
        Status status = vibrator->setAmplitude(1);
        EXPECT_TRUE(isUnknownOrUnsupported(status)) << status;
    }
}

@@ -362,7 +369,7 @@ TEST_P(VibratorAidl, ExternalAmplitudeControl) {
        if (supportsExternalAmplitudeControl) {
            EXPECT_TRUE(amplitudeStatus.isOk());
        } else {
            EXPECT_EQ(amplitudeStatus.exceptionCode(), Status::EX_UNSUPPORTED_OPERATION);
            EXPECT_TRUE(isUnknownOrUnsupported(amplitudeStatus)) << amplitudeStatus;
        }
        EXPECT_TRUE(vibrator->setExternalControl(false).isOk());
    } else {
@@ -372,8 +379,8 @@ TEST_P(VibratorAidl, ExternalAmplitudeControl) {

TEST_P(VibratorAidl, ExternalControlUnsupportedMatchingCapabilities) {
    if ((capabilities & IVibrator::CAP_EXTERNAL_CONTROL) == 0) {
        EXPECT_EQ(Status::EX_UNSUPPORTED_OPERATION,
                  vibrator->setExternalControl(true).exceptionCode());
        Status status = vibrator->setExternalControl(true);
        EXPECT_TRUE(isUnknownOrUnsupported(status)) << status;
    }
}

@@ -410,7 +417,7 @@ TEST_P(VibratorAidl, GetPrimitiveDuration) {
            if (isPrimitiveSupported) {
                EXPECT_EQ(Status::EX_NONE, status.exceptionCode());
            } else {
                EXPECT_EQ(Status::EX_UNSUPPORTED_OPERATION, status.exceptionCode());
                EXPECT_TRUE(isUnknownOrUnsupported(status)) << status;
            }
        }
    }
@@ -473,8 +480,8 @@ TEST_P(VibratorAidl, ComposeUnsupportedPrimitives) {
                effect.primitive = primitive;
                effect.scale = 1.0f;
            }
            EXPECT_EQ(Status::EX_UNSUPPORTED_OPERATION,
                      vibrator->compose(composite, nullptr).exceptionCode());
            Status status = vibrator->compose(composite, nullptr);
            EXPECT_TRUE(isUnknownOrUnsupported(status)) << status;
            vibrator->off();
        }
    }
@@ -618,8 +625,8 @@ TEST_P(VibratorAidl, AlwaysOn) {
                    EXPECT_EQ(Status::EX_NONE, status.exceptionCode())
                        << toString(effect) << " " << toString(strength);
                } else {
                    EXPECT_EQ(Status::EX_UNSUPPORTED_OPERATION, status.exceptionCode())
                        << toString(effect) << " " << toString(strength);
                    EXPECT_TRUE(isUnknownOrUnsupported(status))
                            << status << " " << toString(effect) << " " << toString(strength);
                }
            }
        }
@@ -639,7 +646,7 @@ TEST_P(VibratorAidl, GetQFactor) {
        ASSERT_GT(qFactor, 0);
        EXPECT_EQ(status.exceptionCode(), Status::EX_NONE);
    } else {
        EXPECT_EQ(status.exceptionCode(), Status::EX_UNSUPPORTED_OPERATION);
        EXPECT_TRUE(isUnknownOrUnsupported(status)) << status;
    }
}

@@ -668,7 +675,7 @@ TEST_P(VibratorAidl, GetBandwidthAmplitudeMap) {
            ASSERT_LE(e, 1.0);
        }
    } else {
        EXPECT_EQ(status.exceptionCode(), Status::EX_UNSUPPORTED_OPERATION);
        EXPECT_TRUE(isUnknownOrUnsupported(status)) << status;
    }
}

@@ -690,7 +697,7 @@ TEST_P(VibratorAidl, GetPwleCompositionSizeMax) {
        ASSERT_NE(maxSize, 0);
        EXPECT_EQ(status.exceptionCode(), Status::EX_NONE);
    } else {
        EXPECT_EQ(status.exceptionCode(), Status::EX_UNSUPPORTED_OPERATION);
        EXPECT_TRUE(isUnknownOrUnsupported(status)) << status;
    }
}

@@ -703,7 +710,7 @@ TEST_P(VibratorAidl, GetSupportedBraking) {
        ASSERT_TRUE(isDefaultNoneSupported);
        EXPECT_EQ(status.exceptionCode(), Status::EX_NONE);
    } else {
        EXPECT_EQ(status.exceptionCode(), Status::EX_UNSUPPORTED_OPERATION);
        EXPECT_TRUE(isUnknownOrUnsupported(status)) << status;
    }
}