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

Commit 0f7e83f4 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Add a test case to verify that multiple UIDs are handled correctly in...

Merge "Add a test case to verify that multiple UIDs are handled correctly in ConnectivityBlobStore." into main
parents db85c369 6fce20c1
Loading
Loading
Loading
Loading
+13 −5
Original line number Diff line number Diff line
@@ -68,6 +68,14 @@ public class ConnectivityBlobStore {
        mDb.execSQL(CREATE_TABLE);
    }

    /**
     * Get the calling uid. Method is intended to be overridden in the unit tests.
     */
    @VisibleForTesting
    protected int getCallingUidMockable() {
        return Binder.getCallingUid();
    }

    /**
     * Stores the blob under the name in the database. Existing blobs by the same name will be
     * replaced.
@@ -78,7 +86,7 @@ public class ConnectivityBlobStore {
     * @hide
     */
    public boolean put(@NonNull String name, @NonNull byte[] blob) {
        final int ownerUid = Binder.getCallingUid();
        final int ownerUid = getCallingUidMockable();
        final ContentValues values = new ContentValues();
        values.put("owner", ownerUid);
        values.put("name", name);
@@ -101,7 +109,7 @@ public class ConnectivityBlobStore {
     * @hide
     */
    public byte[] get(@NonNull String name) {
        final int ownerUid = Binder.getCallingUid();
        final int ownerUid = getCallingUidMockable();
        try (Cursor cursor = mDb.query(TABLENAME,
                new String[] {"blob"} /* columns */,
                "owner=? AND name=?" /* selection */,
@@ -127,7 +135,7 @@ public class ConnectivityBlobStore {
     * @hide
     */
    public boolean remove(@NonNull String name) {
        final int ownerUid = Binder.getCallingUid();
        final int ownerUid = getCallingUidMockable();
        try {
            final int res = mDb.delete(TABLENAME,
                    "owner=? AND name=?" /* whereClause */,
@@ -146,7 +154,7 @@ public class ConnectivityBlobStore {
     * @hide
     */
    public boolean removeAll() {
        final int ownerUid = Binder.getCallingUid();
        final int ownerUid = getCallingUidMockable();
        try {
            final int numRowsRemoved = mDb.delete(TABLENAME, "owner=?" /* whereClause */,
                    new String[] {Integer.toString(ownerUid)} /* whereArgs */);
@@ -170,7 +178,7 @@ public class ConnectivityBlobStore {
     * @hide
     */
    public String[] list(@NonNull String prefix) {
        final int ownerUid = Binder.getCallingUid();
        final int ownerUid = getCallingUidMockable();
        final List<String> names = new ArrayList<String>();
        try (Cursor cursor = mDb.query(TABLENAME,
                new String[] {"name"} /* columns */,
+54 −10
Original line number Diff line number Diff line
@@ -41,12 +41,27 @@ public class ConnectivityBlobStoreTest {
    private static final String DATABASE_FILENAME = "ConnectivityBlobStore.db";
    private static final String TEST_NAME = "TEST_NAME";
    private static final byte[] TEST_BLOB = new byte[] {(byte) 10, (byte) 90, (byte) 45, (byte) 12};
    private static final int TEST_UID = 1234;

    private Context mContext;
    private File mFile;

    private ConnectivityBlobStore createConnectivityBlobStore() {
        return new ConnectivityBlobStore(mFile);
    // Local subclass to allow us to override methods for testing.
    private class TestConnectivityBlobStore extends ConnectivityBlobStore {
        private int mCallingUid = TEST_UID;

        TestConnectivityBlobStore() {
            super(mFile);
        }

        @Override
        protected int getCallingUidMockable() {
            return mCallingUid;
        }

        public void setCallingUid(int newCallingUid) {
            mCallingUid = newCallingUid;
        }
    }

    @Before
@@ -63,7 +78,7 @@ public class ConnectivityBlobStoreTest {
    @Test
    public void testFileCreateDelete() {
        assertFalse(mFile.exists());
        createConnectivityBlobStore();
        ConnectivityBlobStore connectivityBlobStore = new ConnectivityBlobStore(mFile);
        assertTrue(mFile.exists());

        assertTrue(mContext.deleteDatabase(DATABASE_FILENAME));
@@ -72,7 +87,7 @@ public class ConnectivityBlobStoreTest {

    @Test
    public void testPutAndGet() throws Exception {
        final ConnectivityBlobStore connectivityBlobStore = createConnectivityBlobStore();
        final TestConnectivityBlobStore connectivityBlobStore = new TestConnectivityBlobStore();
        assertNull(connectivityBlobStore.get(TEST_NAME));

        assertTrue(connectivityBlobStore.put(TEST_NAME, TEST_BLOB));
@@ -86,7 +101,7 @@ public class ConnectivityBlobStoreTest {

    @Test
    public void testRemove() throws Exception {
        final ConnectivityBlobStore connectivityBlobStore = createConnectivityBlobStore();
        final TestConnectivityBlobStore connectivityBlobStore = new TestConnectivityBlobStore();
        assertNull(connectivityBlobStore.get(TEST_NAME));
        assertFalse(connectivityBlobStore.remove(TEST_NAME));

@@ -102,7 +117,7 @@ public class ConnectivityBlobStoreTest {

    @Test
    public void testRemoveAll() throws Exception {
        final ConnectivityBlobStore connectivityBlobStore = createConnectivityBlobStore();
        final TestConnectivityBlobStore connectivityBlobStore = new TestConnectivityBlobStore();
        final int numEntries = 5;
        for (int i = 0; i < numEntries; i++) {
            assertTrue(connectivityBlobStore.put(TEST_NAME + i, TEST_BLOB));
@@ -117,11 +132,40 @@ public class ConnectivityBlobStoreTest {
        assertTrue(connectivityBlobStore.removeAll());
    }

    @Test
    public void testRemoveAll_multipleUids() throws Exception {
        final TestConnectivityBlobStore connectivityBlobStore = new TestConnectivityBlobStore();
        final int numEntries = 5;
        final int uid1 = TEST_UID, uid2 = TEST_UID + 1;

        // Add several entries as UID 1.
        connectivityBlobStore.setCallingUid(uid1);
        for (int i = 0; i < numEntries; i++) {
            assertTrue(connectivityBlobStore.put(TEST_NAME + i, TEST_BLOB));
        }
        assertEquals(numEntries, connectivityBlobStore.list("").length);

        // Add several entries as UID 2.
        connectivityBlobStore.setCallingUid(uid2);
        for (int i = 0; i < numEntries; i++) {
            assertTrue(connectivityBlobStore.put(TEST_NAME + i, TEST_BLOB));
        }
        assertEquals(numEntries, connectivityBlobStore.list("").length);

        // Clear all entries as UID 2.
        connectivityBlobStore.removeAll();
        assertEquals(0, connectivityBlobStore.list("").length);

        // All entries added by UID 1 should still exist.
        connectivityBlobStore.setCallingUid(uid1);
        assertEquals(numEntries, connectivityBlobStore.list("").length);
    }

    @Test
    public void testMultipleNames() throws Exception {
        final String name1 = TEST_NAME + "1";
        final String name2 = TEST_NAME + "2";
        final ConnectivityBlobStore connectivityBlobStore = createConnectivityBlobStore();
        final TestConnectivityBlobStore connectivityBlobStore = new TestConnectivityBlobStore();

        assertNull(connectivityBlobStore.get(name1));
        assertNull(connectivityBlobStore.get(name2));
@@ -163,7 +207,7 @@ public class ConnectivityBlobStoreTest {
                "1",
                "2"
        };
        final ConnectivityBlobStore connectivityBlobStore = createConnectivityBlobStore();
        final TestConnectivityBlobStore connectivityBlobStore = new TestConnectivityBlobStore();

        for (int i = 0; i < unsortedNames.length; i++) {
            assertTrue(connectivityBlobStore.put(unsortedNames[i], TEST_BLOB));
@@ -181,7 +225,7 @@ public class ConnectivityBlobStoreTest {
        };
        // The '_' in the prefix should not be treated as a wildcard so the only match is "000".
        final String[] expected = new String[] {"000"};
        final ConnectivityBlobStore connectivityBlobStore = createConnectivityBlobStore();
        final TestConnectivityBlobStore connectivityBlobStore = new TestConnectivityBlobStore();

        for (int i = 0; i < unsortedNames.length; i++) {
            assertTrue(connectivityBlobStore.put(unsortedNames[i], TEST_BLOB));
@@ -200,7 +244,7 @@ public class ConnectivityBlobStoreTest {
        };
        // The '%' in the prefix should not be treated as a wildcard so the only match is "0".
        final String[] expected = new String[] {"0"};
        final ConnectivityBlobStore connectivityBlobStore = createConnectivityBlobStore();
        final TestConnectivityBlobStore connectivityBlobStore = new TestConnectivityBlobStore();

        for (int i = 0; i < unsortedNames.length; i++) {
            assertTrue(connectivityBlobStore.put(unsortedNames[i], TEST_BLOB));