Add fingerprint to packages.map.

No guards to this change because we will guard actually writing the
fingerprint, and right now new storage is not in trunkfood yet. This
change modifies the package map file structure. Note that if the new
storage was in trunkfood, this could (theoretically) cause issues if
there were cross-container READ_WRITE flags (not permitted per
documentation) and if the containers were built at separate aconfig
versions (ie before and after this change). Adding the fingerprint will
help prevent such issues in the future. Incremented the storage version
number as I've changed the format.

Again, fingerprint is not actually written in this CL, it always has a
value of 0.

Updated the test files as well to have the new version and the
fingerprint. Since this changed the package node size, some of the
information in the buckets there (offset) has changed as well.

Also added a test util for flags from another package to test future
changes.

Bug: 316357686
Test: atest aconfig.test
Change-Id: I09e10808492f241fe78028d2757f7d63328623c3
This commit is contained in:
Marybeth Fair
2024-09-05 11:38:50 -04:00
parent 112c4886c7
commit 769d8eed37
30 changed files with 201 additions and 80 deletions

View File

@@ -20,7 +20,6 @@ import static org.junit.Assert.assertEquals;
import android.aconfig.storage.FileType;
import android.aconfig.storage.PackageTable;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
@@ -28,42 +27,40 @@ import org.junit.runners.JUnit4;
@RunWith(JUnit4.class)
public class PackageTableTest {
@Test
public void testPackageTable_rightHeader() throws Exception {
PackageTable packageTable =
PackageTable.fromBytes(TestDataUtils.getTestPackageMapByteBuffer());
PackageTable.Header header = packageTable.getHeader();
assertEquals(1, header.getVersion());
assertEquals("mockup", header.getContainer());
assertEquals(FileType.PACKAGE_MAP, header.getFileType());
assertEquals(209, header.getFileSize());
assertEquals(3, header.getNumPackages());
assertEquals(31, header.getBucketOffset());
assertEquals(59, header.getNodeOffset());
}
@Test
public void testPackageTable_rightHeader() throws Exception {
PackageTable packageTable = PackageTable.fromBytes(TestDataUtils.getTestPackageMapByteBuffer());
PackageTable.Header header = packageTable.getHeader();
assertEquals(2, header.getVersion());
assertEquals("mockup", header.getContainer());
assertEquals(FileType.PACKAGE_MAP, header.getFileType());
assertEquals(209, header.getFileSize());
assertEquals(3, header.getNumPackages());
assertEquals(31, header.getBucketOffset());
assertEquals(59, header.getNodeOffset());
}
@Test
public void testPackageTable_rightNode() throws Exception {
PackageTable packageTable =
PackageTable.fromBytes(TestDataUtils.getTestPackageMapByteBuffer());
@Test
public void testPackageTable_rightNode() throws Exception {
PackageTable packageTable = PackageTable.fromBytes(TestDataUtils.getTestPackageMapByteBuffer());
PackageTable.Node node1 = packageTable.get("com.android.aconfig.storage.test_1");
PackageTable.Node node2 = packageTable.get("com.android.aconfig.storage.test_2");
PackageTable.Node node4 = packageTable.get("com.android.aconfig.storage.test_4");
PackageTable.Node node1 = packageTable.get("com.android.aconfig.storage.test_1");
PackageTable.Node node2 = packageTable.get("com.android.aconfig.storage.test_2");
PackageTable.Node node4 = packageTable.get("com.android.aconfig.storage.test_4");
assertEquals("com.android.aconfig.storage.test_1", node1.getPackageName());
assertEquals("com.android.aconfig.storage.test_2", node2.getPackageName());
assertEquals("com.android.aconfig.storage.test_4", node4.getPackageName());
assertEquals("com.android.aconfig.storage.test_1", node1.getPackageName());
assertEquals("com.android.aconfig.storage.test_2", node2.getPackageName());
assertEquals("com.android.aconfig.storage.test_4", node4.getPackageName());
assertEquals(0, node1.getPackageId());
assertEquals(1, node2.getPackageId());
assertEquals(2, node4.getPackageId());
assertEquals(0, node1.getPackageId());
assertEquals(1, node2.getPackageId());
assertEquals(2, node4.getPackageId());
assertEquals(0, node1.getBooleanStartIndex());
assertEquals(3, node2.getBooleanStartIndex());
assertEquals(6, node4.getBooleanStartIndex());
assertEquals(0, node1.getBooleanStartIndex());
assertEquals(3, node2.getBooleanStartIndex());
assertEquals(6, node4.getBooleanStartIndex());
assertEquals(159, node1.getNextOffset());
assertEquals(175, node1.getNextOffset());
assertEquals(-1, node2.getNextOffset());
assertEquals(-1, node4.getNextOffset());
}