diff options
author | Xin Li <delphij@google.com> | 2020-09-10 17:22:01 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2020-09-10 17:22:01 +0000 |
commit | 8ac6741e47c76bde065f868ea64d2f04541487b9 (patch) | |
tree | 1a679458fdbd8d370692d56791e2bf83acee35b5 /cmds/idmap2/tests/BinaryStreamVisitorTests.cpp | |
parent | 3de940cc40b1e3fdf8224e18a8308a16768cbfa8 (diff) | |
parent | c64112eb974e9aa7638aead998f07a868acfb5a7 (diff) |
Merge "Merge Android R"
Diffstat (limited to 'cmds/idmap2/tests/BinaryStreamVisitorTests.cpp')
-rw-r--r-- | cmds/idmap2/tests/BinaryStreamVisitorTests.cpp | 132 |
1 files changed, 32 insertions, 100 deletions
diff --git a/cmds/idmap2/tests/BinaryStreamVisitorTests.cpp b/cmds/idmap2/tests/BinaryStreamVisitorTests.cpp index 9348ab721493..5fea7bcdaac5 100644 --- a/cmds/idmap2/tests/BinaryStreamVisitorTests.cpp +++ b/cmds/idmap2/tests/BinaryStreamVisitorTests.cpp @@ -18,6 +18,7 @@ #include <sstream> #include <string> #include <utility> +#include <vector> #include "TestHelpers.h" #include "androidfw/ApkAssets.h" @@ -47,118 +48,49 @@ TEST(BinaryStreamVisitorTests, CreateBinaryStreamViaBinaryStreamVisitor) { ASSERT_TRUE(result2); const auto idmap2 = std::move(*result2); + ASSERT_EQ(idmap1->GetHeader()->GetFulfilledPolicies(), + idmap2->GetHeader()->GetFulfilledPolicies()); + ASSERT_EQ(idmap1->GetHeader()->GetEnforceOverlayable(), + idmap2->GetHeader()->GetEnforceOverlayable()); + ASSERT_EQ(idmap1->GetHeader()->GetTargetPath(), idmap2->GetHeader()->GetTargetPath()); ASSERT_EQ(idmap1->GetHeader()->GetTargetCrc(), idmap2->GetHeader()->GetTargetCrc()); ASSERT_EQ(idmap1->GetHeader()->GetTargetPath(), idmap2->GetHeader()->GetTargetPath()); ASSERT_EQ(idmap1->GetData().size(), 1U); ASSERT_EQ(idmap1->GetData().size(), idmap2->GetData().size()); - const auto& data1 = idmap1->GetData()[0]; - const auto& data2 = idmap2->GetData()[0]; - - ASSERT_EQ(data1->GetHeader()->GetTargetPackageId(), data2->GetHeader()->GetTargetPackageId()); - ASSERT_EQ(data1->GetTypeEntries().size(), 2U); - ASSERT_EQ(data1->GetTypeEntries().size(), data2->GetTypeEntries().size()); - ASSERT_EQ(data1->GetTypeEntries()[0]->GetEntry(0), data2->GetTypeEntries()[0]->GetEntry(0)); - ASSERT_EQ(data1->GetTypeEntries()[0]->GetEntry(1), data2->GetTypeEntries()[0]->GetEntry(1)); - ASSERT_EQ(data1->GetTypeEntries()[0]->GetEntry(2), data2->GetTypeEntries()[0]->GetEntry(2)); - ASSERT_EQ(data1->GetTypeEntries()[1]->GetEntry(0), data2->GetTypeEntries()[1]->GetEntry(0)); - ASSERT_EQ(data1->GetTypeEntries()[1]->GetEntry(1), data2->GetTypeEntries()[1]->GetEntry(1)); - ASSERT_EQ(data1->GetTypeEntries()[1]->GetEntry(2), data2->GetTypeEntries()[1]->GetEntry(2)); -} - -TEST(BinaryStreamVisitorTests, CreateIdmapFromApkAssetsInteropWithLoadedIdmap) { - const std::string target_apk_path(GetTestDataPath() + "/target/target.apk"); - std::unique_ptr<const ApkAssets> target_apk = ApkAssets::Load(target_apk_path); - ASSERT_THAT(target_apk, NotNull()); - - const std::string overlay_apk_path(GetTestDataPath() + "/overlay/overlay.apk"); - std::unique_ptr<const ApkAssets> overlay_apk = ApkAssets::Load(overlay_apk_path); - ASSERT_THAT(overlay_apk, NotNull()); - - const auto idmap = - Idmap::FromApkAssets(target_apk_path, *target_apk, overlay_apk_path, *overlay_apk, - PolicyFlags::POLICY_PUBLIC, /* enforce_overlayable */ true); - ASSERT_TRUE(idmap); - - std::stringstream stream; - BinaryStreamVisitor visitor(stream); - (*idmap)->accept(&visitor); - const std::string str = stream.str(); - const StringPiece data(str); - std::unique_ptr<const LoadedIdmap> loaded_idmap = LoadedIdmap::Load(data); - ASSERT_THAT(loaded_idmap, NotNull()); - ASSERT_EQ(loaded_idmap->TargetPackageId(), 0x7f); - - const IdmapEntry_header* header = loaded_idmap->GetEntryMapForType(0x01); - ASSERT_THAT(header, NotNull()); - - EntryId entry; - bool success = LoadedIdmap::Lookup(header, 0x0000, &entry); - ASSERT_TRUE(success); - ASSERT_EQ(entry, 0x0000); - - header = loaded_idmap->GetEntryMapForType(0x02); - ASSERT_THAT(header, NotNull()); - - success = LoadedIdmap::Lookup(header, 0x0000, &entry); // string/a - ASSERT_FALSE(success); - - success = LoadedIdmap::Lookup(header, 0x0001, &entry); // string/b - ASSERT_FALSE(success); - - success = LoadedIdmap::Lookup(header, 0x0002, &entry); // string/c - ASSERT_FALSE(success); - - success = LoadedIdmap::Lookup(header, 0x0003, &entry); // string/policy_odm - ASSERT_FALSE(success); - - success = LoadedIdmap::Lookup(header, 0x0004, &entry); // string/policy_oem - ASSERT_FALSE(success); - - success = LoadedIdmap::Lookup(header, 0x0005, &entry); // string/other - ASSERT_FALSE(success); - - success = LoadedIdmap::Lookup(header, 0x0006, &entry); // string/not_overlayable - ASSERT_FALSE(success); - - success = LoadedIdmap::Lookup(header, 0x0007, &entry); // string/policy_product - ASSERT_FALSE(success); - - success = LoadedIdmap::Lookup(header, 0x0008, &entry); // string/policy_public - ASSERT_FALSE(success); - - success = LoadedIdmap::Lookup(header, 0x0009, &entry); // string/policy_system - ASSERT_FALSE(success); - - success = LoadedIdmap::Lookup(header, 0x000a, &entry); // string/policy_system_vendor - ASSERT_FALSE(success); - - success = LoadedIdmap::Lookup(header, 0x000b, &entry); // string/policy_signature - ASSERT_FALSE(success); + const std::vector<std::unique_ptr<const IdmapData>>& data_blocks1 = idmap1->GetData(); + ASSERT_EQ(data_blocks1.size(), 1U); + const std::unique_ptr<const IdmapData>& data1 = data_blocks1[0]; + ASSERT_THAT(data1, NotNull()); - success = LoadedIdmap::Lookup(header, 0x000c, &entry); // string/str1 - ASSERT_TRUE(success); - ASSERT_EQ(entry, 0x0000); + const std::vector<std::unique_ptr<const IdmapData>>& data_blocks2 = idmap2->GetData(); + ASSERT_EQ(data_blocks2.size(), 1U); + const std::unique_ptr<const IdmapData>& data2 = data_blocks2[0]; + ASSERT_THAT(data2, NotNull()); - success = LoadedIdmap::Lookup(header, 0x000d, &entry); // string/str2 - ASSERT_FALSE(success); + const auto& target_entries1 = data1->GetTargetEntries(); + const auto& target_entries2 = data2->GetTargetEntries(); + ASSERT_EQ(target_entries1.size(), target_entries2.size()); + ASSERT_EQ(target_entries1[0].target_id, target_entries2[0].target_id); + ASSERT_EQ(target_entries1[0].data_value, target_entries2[0].data_value); - success = LoadedIdmap::Lookup(header, 0x000e, &entry); // string/str3 - ASSERT_TRUE(success); - ASSERT_EQ(entry, 0x0001); + ASSERT_EQ(target_entries1[1].target_id, target_entries2[1].target_id); + ASSERT_EQ(target_entries1[1].data_value, target_entries2[1].data_value); - success = LoadedIdmap::Lookup(header, 0x000f, &entry); // string/str4 - ASSERT_TRUE(success); - ASSERT_EQ(entry, 0x0002); + ASSERT_EQ(target_entries1[2].target_id, target_entries2[2].target_id); + ASSERT_EQ(target_entries1[2].data_value, target_entries2[2].data_value); - success = LoadedIdmap::Lookup(header, 0x0010, &entry); // string/x - ASSERT_FALSE(success); + const auto& overlay_entries1 = data1->GetOverlayEntries(); + const auto& overlay_entries2 = data2->GetOverlayEntries(); + ASSERT_EQ(overlay_entries1.size(), overlay_entries2.size()); + ASSERT_EQ(overlay_entries1[0].overlay_id, overlay_entries2[0].overlay_id); + ASSERT_EQ(overlay_entries1[0].target_id, overlay_entries2[0].target_id); - success = LoadedIdmap::Lookup(header, 0x0011, &entry); // string/y - ASSERT_FALSE(success); + ASSERT_EQ(overlay_entries1[1].overlay_id, overlay_entries2[1].overlay_id); + ASSERT_EQ(overlay_entries1[1].target_id, overlay_entries2[1].target_id); - success = LoadedIdmap::Lookup(header, 0x0012, &entry); // string/z - ASSERT_FALSE(success); + ASSERT_EQ(overlay_entries1[2].overlay_id, overlay_entries2[2].overlay_id); + ASSERT_EQ(overlay_entries1[2].target_id, overlay_entries2[2].target_id); } } // namespace android::idmap2 |