diff options
author | Ryan Mitchell <rtmitchell@google.com> | 2020-05-29 23:00:50 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2020-05-29 23:00:50 +0000 |
commit | b04a16d744ebca79d4a7e9738a017515b682a249 (patch) | |
tree | c19c1b09d14684b9e35125b3042e5868d9948e37 /cmds/idmap2 | |
parent | 23383e30acd36f7cbde2deb56f1dd84215e33227 (diff) | |
parent | 41b850d0a8bb33c33b70aa4a4716b1961d5abf00 (diff) |
Merge "Persist implicit overlay configurator actor policy" into rvc-dev am: 41b850d0a8
Change-Id: I9337e44ed7c662d26e0518cca1f93e00d2952e71
Diffstat (limited to 'cmds/idmap2')
-rw-r--r-- | cmds/idmap2/libidmap2/ResourceMapping.cpp | 3 | ||||
-rw-r--r-- | cmds/idmap2/tests/ResourceMappingTests.cpp | 70 |
2 files changed, 17 insertions, 56 deletions
diff --git a/cmds/idmap2/libidmap2/ResourceMapping.cpp b/cmds/idmap2/libidmap2/ResourceMapping.cpp index f82c8f1af713..44acbcaf8ace 100644 --- a/cmds/idmap2/libidmap2/ResourceMapping.cpp +++ b/cmds/idmap2/libidmap2/ResourceMapping.cpp @@ -61,7 +61,8 @@ Result<Unit> CheckOverlayable(const LoadedPackage& target_package, const ResourceId& target_resource) { static constexpr const PolicyBitmask sDefaultPolicies = PolicyFlags::ODM_PARTITION | PolicyFlags::OEM_PARTITION | PolicyFlags::SYSTEM_PARTITION | - PolicyFlags::VENDOR_PARTITION | PolicyFlags::PRODUCT_PARTITION | PolicyFlags::SIGNATURE; + PolicyFlags::VENDOR_PARTITION | PolicyFlags::PRODUCT_PARTITION | PolicyFlags::SIGNATURE | + PolicyFlags::ACTOR_SIGNATURE; // If the resource does not have an overlayable definition, allow the resource to be overlaid if // the overlay is preinstalled or signed with the same signature as the target. diff --git a/cmds/idmap2/tests/ResourceMappingTests.cpp b/cmds/idmap2/tests/ResourceMappingTests.cpp index de039f440e33..5754eaf078a9 100644 --- a/cmds/idmap2/tests/ResourceMappingTests.cpp +++ b/cmds/idmap2/tests/ResourceMappingTests.cpp @@ -287,66 +287,26 @@ TEST(ResourceMappingTests, ResourcesFromApkAssetsNoDefinedOverlayableAndNoTarget R::overlay::string::str4, false /* rewrite */)); } -// Overlays that are neither pre-installed nor signed with the same signature as the target cannot -// overlay packages that have not defined overlayable resources. -TEST(ResourceMappingTests, ResourcesFromApkAssetsDefaultPoliciesPublicFail) { - auto resources = TestGetResourceMapping("/target/target-no-overlayable.apk", - "/overlay/overlay-no-name.apk", PolicyFlags::PUBLIC, - /* enforce_overlayable */ true); - - ASSERT_TRUE(resources) << resources.GetErrorMessage(); - ASSERT_EQ(resources->GetTargetToOverlayMap().size(), 0U); -} -// Overlays that are pre-installed or are signed with the same signature as the target can overlay -// packages that have not defined overlayable resources. +// Overlays that are pre-installed or are signed with the same signature as the target/actor can +// overlay packages that have not defined overlayable resources. TEST(ResourceMappingTests, ResourcesFromApkAssetsDefaultPolicies) { - auto CheckEntries = [&](const PolicyBitmask& fulfilled_policies) -> void { + constexpr PolicyBitmask kDefaultPolicies = + PolicyFlags::SIGNATURE | PolicyFlags::ACTOR_SIGNATURE | PolicyFlags::PRODUCT_PARTITION | + PolicyFlags::SYSTEM_PARTITION | PolicyFlags::VENDOR_PARTITION | PolicyFlags::ODM_PARTITION | + PolicyFlags::OEM_PARTITION; + + for (PolicyBitmask policy = 1U << (sizeof(PolicyBitmask) * 8 - 1); policy > 0; + policy = policy >> 1U) { auto resources = TestGetResourceMapping("/target/target-no-overlayable.apk", "/system-overlay-invalid/system-overlay-invalid.apk", - fulfilled_policies, - /* enforce_overlayable */ true); - + policy, /* enforce_overlayable */ true); ASSERT_TRUE(resources) << resources.GetErrorMessage(); - auto& res = *resources; - ASSERT_EQ(resources->GetTargetToOverlayMap().size(), 10U); - ASSERT_RESULT(MappingExists(res, R::target::string::not_overlayable, Res_value::TYPE_REFERENCE, - R::system_overlay_invalid::string::not_overlayable, - false /* rewrite */)); - ASSERT_RESULT(MappingExists(res, R::target::string::other, Res_value::TYPE_REFERENCE, - R::system_overlay_invalid::string::other, false /* rewrite */)); - ASSERT_RESULT(MappingExists(res, R::target::string::policy_actor, Res_value::TYPE_REFERENCE, - R::system_overlay_invalid::string::policy_actor, - false /* rewrite */)); - ASSERT_RESULT(MappingExists(res, R::target::string::policy_odm, Res_value::TYPE_REFERENCE, - R::system_overlay_invalid::string::policy_odm, - false /* rewrite */)); - ASSERT_RESULT(MappingExists(res, R::target::string::policy_oem, Res_value::TYPE_REFERENCE, - R::system_overlay_invalid::string::policy_oem, - false /* rewrite */)); - ASSERT_RESULT(MappingExists(res, R::target::string::policy_product, Res_value::TYPE_REFERENCE, - R::system_overlay_invalid::string::policy_product, - false /* rewrite */)); - ASSERT_RESULT(MappingExists(res, R::target::string::policy_public, Res_value::TYPE_REFERENCE, - R::system_overlay_invalid::string::policy_public, - false /* rewrite */)); - ASSERT_RESULT(MappingExists(res, R::target::string::policy_signature, Res_value::TYPE_REFERENCE, - R::system_overlay_invalid::string::policy_signature, - false /* rewrite */)); - ASSERT_RESULT(MappingExists(res, R::target::string::policy_system, Res_value::TYPE_REFERENCE, - R::system_overlay_invalid::string::policy_system, - false /* rewrite */)); - ASSERT_RESULT(MappingExists( - res, R::target::string::policy_system_vendor, Res_value::TYPE_REFERENCE, - R::system_overlay_invalid::string::policy_system_vendor, false /* rewrite */)); - }; - - CheckEntries(PolicyFlags::SIGNATURE); - CheckEntries(PolicyFlags::PRODUCT_PARTITION); - CheckEntries(PolicyFlags::SYSTEM_PARTITION); - CheckEntries(PolicyFlags::VENDOR_PARTITION); - CheckEntries(PolicyFlags::ODM_PARTITION); - CheckEntries(PolicyFlags::OEM_PARTITION); + + const size_t expected_overlaid = (policy & kDefaultPolicies) != 0 ? 10U : 0U; + ASSERT_EQ(expected_overlaid, resources->GetTargetToOverlayMap().size()) + << "Incorrect number of resources overlaid through policy " << policy; + } } } // namespace android::idmap2 |