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

Commit 906d4623 authored by Hansen Kurli's avatar Hansen Kurli
Browse files

Implement ConnectivityBlobStore list

Implement list(), including tests.

Bug: 307903113
Test: atest ConnectivityBlobStoreTest
Change-Id: Iac799d37fd69ed008b0d8972e8320308e4451a1c
parent 6215859b
Loading
Loading
Loading
Loading
+35 −0
Original line number Original line Diff line number Diff line
@@ -27,6 +27,8 @@ import android.util.Log;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.annotations.VisibleForTesting;


import java.io.File;
import java.io.File;
import java.util.ArrayList;
import java.util.List;


/**
/**
 * Database for storing blobs with a key of name strings.
 * Database for storing blobs with a key of name strings.
@@ -135,4 +137,37 @@ public class ConnectivityBlobStore {
            return false;
            return false;
        }
        }
    }
    }

    /**
     * Lists the name suffixes stored in the database matching the given prefix, sorted in
     * ascending order.
     *
     * @param prefix String of prefix to list from the stored names.
     * @return An array of strings representing the name suffixes stored in the database
     *         matching the given prefix, sorted in ascending order.
     *         The return value may be empty but never null.
     * @hide
     */
    public String[] list(@NonNull String prefix) {
        final int ownerUid = Binder.getCallingUid();
        final List<String> names = new ArrayList<String>();
        try (Cursor cursor = mDb.query(TABLENAME,
                new String[] {"name"} /* columns */,
                "owner=? AND name LIKE ?" /* selection */,
                new String[] {Integer.toString(ownerUid), prefix + "%"} /* selectionArgs */,
                null /* groupBy */,
                null /* having */,
                "name ASC" /* orderBy */)) {
            if (cursor.moveToFirst()) {
                do {
                    final String name = cursor.getString(0);
                    names.add(name.substring(prefix.length()));
                } while (cursor.moveToNext());
            }
        } catch (SQLException e) {
            Log.e(TAG, "Error in listing " + prefix + ": " + e);
        }

        return names.toArray(new String[names.size()]);
    }
}
}
+24 −0
Original line number Original line Diff line number Diff line
@@ -129,4 +129,28 @@ public class ConnectivityBlobStoreTest {
        assertNull(connectivityBlobStore.get(name2));
        assertNull(connectivityBlobStore.get(name2));
        assertFalse(connectivityBlobStore.remove(name2));
        assertFalse(connectivityBlobStore.remove(name2));
    }
    }

    @Test
    public void testList() throws Exception {
        final String[] unsortedNames = new String[] {
                TEST_NAME + "1",
                TEST_NAME + "2",
                TEST_NAME + "0",
                "NON_MATCHING_PREFIX",
                "MATCHING_SUFFIX_" + TEST_NAME
        };
        // Expected to match and discard the prefix and be in increasing sorted order.
        final String[] expected = new String[] {
                "0",
                "1",
                "2"
        };
        final ConnectivityBlobStore connectivityBlobStore = createConnectivityBlobStore();

        for (int i = 0; i < unsortedNames.length; i++) {
            assertTrue(connectivityBlobStore.put(unsortedNames[i], TEST_BLOB));
        }
        final String[] actual = connectivityBlobStore.list(TEST_NAME /* prefix */);
        assertArrayEquals(expected, actual);
    }
}
}