add CleanCacheWorker Robolectric tests

This commit is contained in:
Hans-Christoph Steiner
2021-03-03 12:05:19 +01:00
parent ce7d241196
commit d3be7d692d
4 changed files with 141 additions and 12 deletions

View File

@@ -8,6 +8,7 @@ import android.content.ContextWrapper;
import android.content.pm.ProviderInfo;
import android.net.Uri;
import androidx.test.core.app.ApplicationProvider;
import org.apache.commons.io.IOUtils;
import org.fdroid.fdroid.data.Apk;
import org.fdroid.fdroid.data.ApkProvider;
import org.fdroid.fdroid.data.App;
@@ -190,4 +191,17 @@ public class TestUtils {
modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL);
field.set(null, newValue);
}
public static void ls(File dir) {
Process p = null;
try {
p = Runtime.getRuntime().exec("ls -l " + dir.getAbsolutePath());
p.waitFor();
for (String line : IOUtils.readLines(p.getInputStream())) {
System.out.println(line);
}
} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
}
}

View File

@@ -0,0 +1,93 @@
package org.fdroid.fdroid.work;
import android.content.Context;
import androidx.test.core.app.ApplicationProvider;
import org.fdroid.fdroid.BuildConfig;
import org.fdroid.fdroid.Preferences;
import org.fdroid.fdroid.nearby.LocalRepoManager;
import org.fdroid.fdroid.shadows.ShadowLog;
import org.junit.Assume;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
/**
* Test non-time-based cache deletion methods. Robolectric is lacking full
* support for getting time from files, so methods that rely on time must be
* tested in {@code CleanCacheWorkerTest} in {@code androidTest}.
*/
@RunWith(RobolectricTestRunner.class)
public class CleanCacheWorkerTest {
public static final String TAG = "CleanCacheWorkerTest";
private static final Context CONTEXT = ApplicationProvider.getApplicationContext();
private static final File FILES_DIR = CONTEXT.getFilesDir();
@Before
public void setUp() {
ShadowLog.stream = System.out;
Preferences.setupForTests(CONTEXT);
}
@Test
public void testDeleteOldInstallerFiles() throws IOException {
Assume.assumeTrue(BuildConfig.FLAVOR.startsWith("full"));
ArrayList<File> webRootAssetFiles = new ArrayList<>();
File indexHtml = new File(FILES_DIR, "index.html");
assertTrue(indexHtml.createNewFile());
webRootAssetFiles.add(indexHtml);
for (String name : LocalRepoManager.WEB_ROOT_ASSET_FILES) {
File f = new File(FILES_DIR, name);
assertTrue(f.createNewFile());
webRootAssetFiles.add(f);
}
File apk = new File(FILES_DIR, "fake.apk");
assertTrue(apk.createNewFile());
File giantblob = new File(FILES_DIR, "giantblob");
assertTrue(giantblob.createNewFile());
File obf = new File(FILES_DIR, "fake.obf");
assertTrue(obf.createNewFile());
File zip = new File(FILES_DIR, "fake.zip");
assertTrue(zip.createNewFile());
CleanCacheWorker.deleteOldInstallerFiles(CONTEXT);
assertFalse(apk.exists());
assertFalse(giantblob.exists());
assertFalse(obf.exists());
assertFalse(zip.exists());
for (File f : webRootAssetFiles) {
assertTrue(f.exists());
}
}
/**
* Pure smoke check, Robolectric does not support file times fully.
*/
@Test
public void testDeleteExpiredApksFromCache() {
CleanCacheWorker.deleteExpiredApksFromCache(CONTEXT);
}
/**
* Pure smoke check, Robolectric does not support file times fully.
*/
@Test
public void testDeleteStrayIndexFiles() {
CleanCacheWorker.deleteStrayIndexFiles(CONTEXT);
}
/**
* Pure smoke check, Robolectric does not support file times fully.
*/
@Test
public void testDeleteOldIcons() {
CleanCacheWorker.deleteOldIcons(CONTEXT);
}
}