Add force downgrade to vendor stability test
Bug: 183154648
Bug: 177664629
Test: atest binderStabilityTest
Change-Id: I8fdd4df355a0ca269fed2898e54088e8f55ccc37
diff --git a/libs/binder/tests/binderStabilityTest.cpp b/libs/binder/tests/binderStabilityTest.cpp
index dbd3f4e..cb309bd 100644
--- a/libs/binder/tests/binderStabilityTest.cpp
+++ b/libs/binder/tests/binderStabilityTest.cpp
@@ -132,7 +132,7 @@
EXPECT_TRUE(Stability::requiresVintfDeclaration(BadStableBinder::vintf()));
}
-TEST(BinderStability, ForceDowngradeStability) {
+TEST(BinderStability, ForceDowngradeToLocalStability) {
sp<IBinder> someBinder = BadStableBinder::vintf();
EXPECT_TRUE(Stability::requiresVintfDeclaration(someBinder));
@@ -143,7 +143,7 @@
EXPECT_FALSE(Stability::requiresVintfDeclaration(someBinder));
}
-TEST(BinderStability, NdkForceDowngradeStability) {
+TEST(BinderStability, NdkForceDowngradeToLocalStability) {
sp<IBinder> someBinder = BadStableBinder::vintf();
EXPECT_TRUE(Stability::requiresVintfDeclaration(someBinder));
@@ -154,6 +154,33 @@
EXPECT_FALSE(Stability::requiresVintfDeclaration(someBinder));
}
+TEST(BinderStability, ForceDowngradeToVendorStability) {
+ sp<IBinder> serverBinder = android::defaultServiceManager()->getService(kSystemStabilityServer);
+ auto server = interface_cast<IBinderStabilityTest>(serverBinder);
+
+ ASSERT_NE(nullptr, server.get());
+ ASSERT_NE(nullptr, IInterface::asBinder(server)->remoteBinder());
+
+ {
+ sp<BadStableBinder> binder = BadStableBinder::vintf();
+
+ EXPECT_TRUE(Stability::requiresVintfDeclaration(binder));
+ EXPECT_TRUE(server->sendAndCallBinder(binder).isOk());
+ EXPECT_TRUE(binder->gotUserTransaction);
+ }
+ {
+ sp<BadStableBinder> binder = BadStableBinder::vintf();
+
+ // This method should never be called directly. This is done only for the test.
+ Stability::forceDowngradeToVendorStability(binder);
+
+ // Binder downgraded to vendor stability, cannot be called from system context
+ EXPECT_FALSE(Stability::requiresVintfDeclaration(binder));
+ EXPECT_EQ(BAD_TYPE, server->sendAndCallBinder(binder).exceptionCode());
+ EXPECT_FALSE(binder->gotUserTransaction);
+ }
+}
+
TEST(BinderStability, VintfStabilityServerMustBeDeclaredInManifest) {
sp<IBinder> vintfServer = BadStableBinder::vintf();