Search in sources :

Example 31 with PackageStats

use of android.content.pm.PackageStats in project android_frameworks_base by ResurrectionRemix.

the class AppCollectorTest method testOneValidApp.

@Test
public void testOneValidApp() throws Exception {
    addApplication("com.test.app", "testuuid");
    VolumeInfo volume = new VolumeInfo("testuuid", 0, null, null);
    volume.fsUuid = "testuuid";
    AppCollector collector = new AppCollector(mContext, volume);
    PackageStats stats = new PackageStats("com.test.app");
    // Set up this to handle the asynchronous call to the PackageManager. This returns the
    // package info for the specified package.
    doAnswer(new Answer<Void>() {

        @Override
        public Void answer(InvocationOnMock invocation) {
            try {
                ((IPackageStatsObserver.Stub) invocation.getArguments()[2]).onGetStatsCompleted(stats, true);
            } catch (Exception e) {
                // We fail instead of just letting the exception fly because throwing
                // out of the callback like this on the background thread causes the test
                // runner to crash, rather than reporting the failure.
                fail();
            }
            return null;
        }
    }).when(mPm).getPackageSizeInfoAsUser(eq("com.test.app"), eq(0), any());
    // Because getPackageStats is a blocking call, we block execution of the test until the
    // call finishes. In order to finish the call, we need the above answer to execute.
    List<PackageStats> myStats = new ArrayList<>();
    CountDownLatch latch = new CountDownLatch(1);
    new Thread(new Runnable() {

        @Override
        public void run() {
            myStats.addAll(collector.getPackageStats(TIMEOUT));
            latch.countDown();
        }
    }).start();
    latch.await();
    assertThat(myStats).containsExactly(stats);
}
Also used : ArrayList(java.util.ArrayList) VolumeInfo(android.os.storage.VolumeInfo) CountDownLatch(java.util.concurrent.CountDownLatch) InvocationOnMock(org.mockito.invocation.InvocationOnMock) PackageStats(android.content.pm.PackageStats) IPackageStatsObserver(android.content.pm.IPackageStatsObserver) Test(org.junit.Test)

Example 32 with PackageStats

use of android.content.pm.PackageStats in project android_frameworks_base by ResurrectionRemix.

the class DiskStatsFileLoggerTest method testEmulatedExternalStorageCounted.

@Test
public void testEmulatedExternalStorageCounted() throws Exception {
    PackageStats app = new PackageStats("com.test.app");
    app.dataSize = 1000;
    app.externalDataSize = 1000;
    app.cacheSize = 20;
    mPackages.add(app);
    DiskStatsFileLogger logger = new DiskStatsFileLogger(mMainResult, mDownloadsResult, mPackages, 0L);
    logger.dumpToFile(mOutputFile);
    JSONObject output = getOutputFileAsJson();
    JSONArray appSizes = output.getJSONArray(DiskStatsFileLogger.APP_SIZES_KEY);
    assertThat(appSizes.length()).isEqualTo(1);
    assertThat(appSizes.getLong(0)).isEqualTo(2000);
}
Also used : JSONObject(org.json.JSONObject) PackageStats(android.content.pm.PackageStats) JSONArray(org.json.JSONArray) Test(org.junit.Test)

Example 33 with PackageStats

use of android.content.pm.PackageStats in project android_frameworks_base by ResurrectionRemix.

the class DiskStatsFileLoggerTest method testDuplicatePackageNameIsMergedAcrossMultipleUsers.

@Test
public void testDuplicatePackageNameIsMergedAcrossMultipleUsers() throws Exception {
    PackageStats app = new PackageStats("com.test.app");
    app.dataSize = 1000;
    app.externalDataSize = 1000;
    app.cacheSize = 20;
    app.userHandle = 0;
    mPackages.add(app);
    PackageStats secondApp = new PackageStats("com.test.app");
    secondApp.dataSize = 100;
    secondApp.externalDataSize = 100;
    secondApp.cacheSize = 2;
    secondApp.userHandle = 1;
    mPackages.add(secondApp);
    DiskStatsFileLogger logger = new DiskStatsFileLogger(mMainResult, mDownloadsResult, mPackages, 0L);
    logger.dumpToFile(mOutputFile);
    JSONObject output = getOutputFileAsJson();
    assertThat(output.getLong(DiskStatsFileLogger.APP_SIZE_AGG_KEY)).isEqualTo(2200);
    assertThat(output.getLong(DiskStatsFileLogger.APP_CACHE_AGG_KEY)).isEqualTo(22);
    JSONArray packageNames = output.getJSONArray(DiskStatsFileLogger.PACKAGE_NAMES_KEY);
    assertThat(packageNames.length()).isEqualTo(1);
    assertThat(packageNames.getString(0)).isEqualTo("com.test.app");
    JSONArray appSizes = output.getJSONArray(DiskStatsFileLogger.APP_SIZES_KEY);
    assertThat(appSizes.length()).isEqualTo(1);
    assertThat(appSizes.getLong(0)).isEqualTo(2200);
    JSONArray cacheSizes = output.getJSONArray(DiskStatsFileLogger.APP_CACHES_KEY);
    assertThat(cacheSizes.length()).isEqualTo(1);
    assertThat(cacheSizes.getLong(0)).isEqualTo(22);
}
Also used : JSONObject(org.json.JSONObject) PackageStats(android.content.pm.PackageStats) JSONArray(org.json.JSONArray) Test(org.junit.Test)

Example 34 with PackageStats

use of android.content.pm.PackageStats in project android_frameworks_base by crdroidandroid.

the class DiskStatsFileLogger method addAppsToJson.

private void addAppsToJson(JSONObject json) throws JSONException {
    JSONArray names = new JSONArray();
    JSONArray appSizeList = new JSONArray();
    JSONArray cacheSizeList = new JSONArray();
    long appSizeSum = 0L;
    long cacheSizeSum = 0L;
    boolean isExternal = Environment.isExternalStorageEmulated();
    for (Map.Entry<String, PackageStats> entry : mergePackagesAcrossUsers().entrySet()) {
        PackageStats stat = entry.getValue();
        long appSize = stat.codeSize + stat.dataSize;
        long cacheSize = stat.cacheSize;
        if (isExternal) {
            appSize += stat.externalCodeSize + stat.externalDataSize;
            cacheSize += stat.externalCacheSize;
        }
        appSizeSum += appSize;
        cacheSizeSum += cacheSize;
        names.put(stat.packageName);
        appSizeList.put(appSize);
        cacheSizeList.put(cacheSize);
    }
    json.put(PACKAGE_NAMES_KEY, names);
    json.put(APP_SIZES_KEY, appSizeList);
    json.put(APP_CACHES_KEY, cacheSizeList);
    json.put(APP_SIZE_AGG_KEY, appSizeSum);
    json.put(APP_CACHE_AGG_KEY, cacheSizeSum);
}
Also used : JSONArray(org.json.JSONArray) PackageStats(android.content.pm.PackageStats) Map(java.util.Map) ArrayMap(android.util.ArrayMap)

Example 35 with PackageStats

use of android.content.pm.PackageStats in project android_frameworks_base by crdroidandroid.

the class DiskStatsFileLoggerTest method testAppsReported.

@Test
public void testAppsReported() throws Exception {
    PackageStats firstPackage = new PackageStats("com.test.app");
    firstPackage.codeSize = 100;
    firstPackage.dataSize = 1000;
    firstPackage.cacheSize = 20;
    mPackages.add(firstPackage);
    PackageStats secondPackage = new PackageStats("com.test.app2");
    secondPackage.codeSize = 10;
    secondPackage.dataSize = 1;
    secondPackage.cacheSize = 2;
    mPackages.add(secondPackage);
    DiskStatsFileLogger logger = new DiskStatsFileLogger(mMainResult, mDownloadsResult, mPackages, 0L);
    logger.dumpToFile(mOutputFile);
    JSONObject output = getOutputFileAsJson();
    assertThat(output.getLong(DiskStatsFileLogger.APP_SIZE_AGG_KEY)).isEqualTo(1111);
    assertThat(output.getLong(DiskStatsFileLogger.APP_CACHE_AGG_KEY)).isEqualTo(22);
    JSONArray packageNames = output.getJSONArray(DiskStatsFileLogger.PACKAGE_NAMES_KEY);
    assertThat(packageNames.length()).isEqualTo(2);
    JSONArray appSizes = output.getJSONArray(DiskStatsFileLogger.APP_SIZES_KEY);
    assertThat(appSizes.length()).isEqualTo(2);
    JSONArray cacheSizes = output.getJSONArray(DiskStatsFileLogger.APP_CACHES_KEY);
    assertThat(cacheSizes.length()).isEqualTo(2);
    // We need to do this crazy Set over this because the DiskStatsFileLogger provides no
    // guarantee of the ordering of the apps in its output. By using a set, we avoid any order
    // problems.
    ArraySet<AppSizeGrouping> apps = new ArraySet<>();
    for (int i = 0; i < packageNames.length(); i++) {
        AppSizeGrouping app = new AppSizeGrouping(packageNames.getString(i), appSizes.getLong(i), cacheSizes.getLong(i));
        apps.add(app);
    }
    assertThat(apps).containsAllOf(new AppSizeGrouping("com.test.app", 1100, 20), new AppSizeGrouping("com.test.app2", 11, 2));
}
Also used : ArraySet(android.util.ArraySet) JSONObject(org.json.JSONObject) PackageStats(android.content.pm.PackageStats) JSONArray(org.json.JSONArray) Test(org.junit.Test)

Aggregations

PackageStats (android.content.pm.PackageStats)43 Test (org.junit.Test)20 IPackageStatsObserver (android.content.pm.IPackageStatsObserver)13 JSONArray (org.json.JSONArray)12 JSONObject (org.json.JSONObject)12 ArrayList (java.util.ArrayList)11 RemoteException (android.os.RemoteException)8 VolumeInfo (android.os.storage.VolumeInfo)8 CountDownLatch (java.util.concurrent.CountDownLatch)8 PackageManager (android.content.pm.PackageManager)6 ArrayMap (android.util.ArrayMap)6 InvocationOnMock (org.mockito.invocation.InvocationOnMock)6 ApplicationInfo (android.content.pm.ApplicationInfo)5 Message (android.os.Message)5 PackageInfo (android.content.pm.PackageInfo)4 UserInfo (android.content.pm.UserInfo)3 Handler (android.os.Handler)3 ArraySet (android.util.ArraySet)3 LogRunnable (com.android.server.storage.DiskStatsLoggingService.LogRunnable)3 Method (java.lang.reflect.Method)3