From 857bc5c29e433215b233ce3bef3976286c8e922a Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Thu, 18 Feb 2021 11:40:22 +0100 Subject: [PATCH] tests: run shutdown() on tested ContentProviders to reduce memory usage Hopefully? --- app/src/test/java/org/fdroid/fdroid/TestUtils.java | 6 ++++-- .../fdroid/fdroid/data/AppPrefsProviderTest.java | 7 ------- .../org/fdroid/fdroid/data/AppProviderTest.java | 1 - .../fdroid/fdroid/data/CategoryProviderTest.java | 7 ------- .../org/fdroid/fdroid/data/DatabaseMigration.java | 13 ++++++++++--- .../org/fdroid/fdroid/data/FDroidProviderTest.java | 7 ++++--- .../fdroid/fdroid/data/PreferredSignatureTest.java | 2 +- .../fdroid/fdroid/data/SuggestedVersionTest.java | 1 - 8 files changed, 19 insertions(+), 25 deletions(-) diff --git a/app/src/test/java/org/fdroid/fdroid/TestUtils.java b/app/src/test/java/org/fdroid/fdroid/TestUtils.java index 170f03f8a..a24c8d7b0 100644 --- a/app/src/test/java/org/fdroid/fdroid/TestUtils.java +++ b/app/src/test/java/org/fdroid/fdroid/TestUtils.java @@ -18,6 +18,7 @@ import org.fdroid.fdroid.data.RepoProviderTest; import org.fdroid.fdroid.data.Schema; import org.mockito.AdditionalAnswers; import org.robolectric.Robolectric; +import org.robolectric.android.controller.ContentProviderController; import java.io.File; import java.io.FileOutputStream; @@ -118,10 +119,11 @@ public class TestUtils { return RepoProviderTest.insertRepo(context, repoUrl, "", "", ""); } - public static void registerContentProvider(String authority, Class providerClass) { + public static ContentProviderController registerContentProvider( + String authority, Class providerClass) { ProviderInfo info = new ProviderInfo(); info.authority = authority; - Robolectric.buildContentProvider(providerClass).create(info); + return Robolectric.buildContentProvider(providerClass).create(info); } public static File copyResourceToTempFile(String resourceName) { diff --git a/app/src/test/java/org/fdroid/fdroid/data/AppPrefsProviderTest.java b/app/src/test/java/org/fdroid/fdroid/data/AppPrefsProviderTest.java index 6dc24d58e..36c9bb24e 100644 --- a/app/src/test/java/org/fdroid/fdroid/data/AppPrefsProviderTest.java +++ b/app/src/test/java/org/fdroid/fdroid/data/AppPrefsProviderTest.java @@ -2,8 +2,6 @@ package org.fdroid.fdroid.data; import android.app.Application; import org.fdroid.fdroid.Assert; -import org.fdroid.fdroid.TestUtils; -import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.RobolectricTestRunner; @@ -18,11 +16,6 @@ import static org.junit.Assert.assertTrue; @RunWith(RobolectricTestRunner.class) public class AppPrefsProviderTest extends FDroidProviderTest { - @Before - public void setup() { - TestUtils.registerContentProvider(AppProvider.getAuthority(), AppProvider.class); - } - @SuppressWarnings({"PMD.EqualsNull", "EqualsWithItself", "EqualsBetweenInconvertibleTypes", "ObjectEqualsNull"}) @Test public void prefEquality() { diff --git a/app/src/test/java/org/fdroid/fdroid/data/AppProviderTest.java b/app/src/test/java/org/fdroid/fdroid/data/AppProviderTest.java index f09f67afd..80ed08f39 100644 --- a/app/src/test/java/org/fdroid/fdroid/data/AppProviderTest.java +++ b/app/src/test/java/org/fdroid/fdroid/data/AppProviderTest.java @@ -50,7 +50,6 @@ public class AppProviderTest extends FDroidProviderTest { @Before public void setup() { defaultLocale = Locale.getDefault(); - TestUtils.registerContentProvider(AppProvider.getAuthority(), AppProvider.class); Preferences.setupForTests(context); } diff --git a/app/src/test/java/org/fdroid/fdroid/data/CategoryProviderTest.java b/app/src/test/java/org/fdroid/fdroid/data/CategoryProviderTest.java index abb625e4b..6f71026ab 100644 --- a/app/src/test/java/org/fdroid/fdroid/data/CategoryProviderTest.java +++ b/app/src/test/java/org/fdroid/fdroid/data/CategoryProviderTest.java @@ -5,11 +5,9 @@ import android.content.ContentResolver; import android.content.ContentValues; import android.database.Cursor; import android.net.Uri; -import org.fdroid.fdroid.TestUtils; import org.fdroid.fdroid.Utils; import org.fdroid.fdroid.data.Schema.AppMetadataTable.Cols; import org.fdroid.fdroid.mock.MockRepo; -import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.RobolectricTestRunner; @@ -28,11 +26,6 @@ import static org.junit.Assert.assertEquals; @RunWith(RobolectricTestRunner.class) public class CategoryProviderTest extends FDroidProviderTest { - @Before - public void setup() { - TestUtils.registerContentProvider(AppProvider.getAuthority(), AppProvider.class); - } - /** * Different repositories can specify a different set of categories for the same package. * In this case, only the repository with the highest priority should get to choose which diff --git a/app/src/test/java/org/fdroid/fdroid/data/DatabaseMigration.java b/app/src/test/java/org/fdroid/fdroid/data/DatabaseMigration.java index 808e16c4b..c9bfa704c 100644 --- a/app/src/test/java/org/fdroid/fdroid/data/DatabaseMigration.java +++ b/app/src/test/java/org/fdroid/fdroid/data/DatabaseMigration.java @@ -7,16 +7,16 @@ import android.content.Context; import android.content.ContextWrapper; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; - import androidx.test.core.app.ApplicationProvider; - import org.fdroid.fdroid.Preferences; import org.fdroid.fdroid.TestUtils; import org.fdroid.fdroid.Utils; +import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.RobolectricTestRunner; +import org.robolectric.android.controller.ContentProviderController; import org.robolectric.annotation.Config; @Config(application = Application.class) @@ -26,11 +26,18 @@ public class DatabaseMigration { protected ContentResolver contentResolver; protected ContextWrapper context; + protected ContentProviderController contentProviderController; + @Before public final void setupBase() { contentResolver = ApplicationProvider.getApplicationContext().getContentResolver(); context = TestUtils.createContextWithContentResolver(contentResolver); - TestUtils.registerContentProvider(AppProvider.getAuthority(), AppProvider.class); + contentProviderController = TestUtils.registerContentProvider(AppProvider.getAuthority(), AppProvider.class); + } + + @After + public void teardown() { + contentProviderController.shutdown(); } @Test diff --git a/app/src/test/java/org/fdroid/fdroid/data/FDroidProviderTest.java b/app/src/test/java/org/fdroid/fdroid/data/FDroidProviderTest.java index 53551d1f9..eda3d6646 100644 --- a/app/src/test/java/org/fdroid/fdroid/data/FDroidProviderTest.java +++ b/app/src/test/java/org/fdroid/fdroid/data/FDroidProviderTest.java @@ -3,27 +3,28 @@ package org.fdroid.fdroid.data; import android.content.ContentResolver; import android.content.ContentValues; import android.content.ContextWrapper; - import androidx.test.core.app.ApplicationProvider; - import org.fdroid.fdroid.TestUtils; import org.junit.After; import org.junit.Before; +import org.robolectric.android.controller.ContentProviderController; public abstract class FDroidProviderTest { // NOPMD This abstract class does not have any abstract methods protected ContentResolver contentResolver; + protected ContentProviderController contentProviderController; protected ContextWrapper context; @Before public final void setupBase() { contentResolver = ApplicationProvider.getApplicationContext().getContentResolver(); context = TestUtils.createContextWithContentResolver(contentResolver); - TestUtils.registerContentProvider(AppProvider.getAuthority(), AppProvider.class); + contentProviderController = TestUtils.registerContentProvider(AppProvider.getAuthority(), AppProvider.class); } @After public final void tearDownBase() { + contentProviderController.shutdown(); CategoryProvider.Helper.clearCategoryIdCache(); DBHelper.clearDbHelperSingleton(); } diff --git a/app/src/test/java/org/fdroid/fdroid/data/PreferredSignatureTest.java b/app/src/test/java/org/fdroid/fdroid/data/PreferredSignatureTest.java index aaf7234b4..fe5ba6573 100644 --- a/app/src/test/java/org/fdroid/fdroid/data/PreferredSignatureTest.java +++ b/app/src/test/java/org/fdroid/fdroid/data/PreferredSignatureTest.java @@ -20,7 +20,6 @@ public class PreferredSignatureTest extends FDroidProviderTest { @Before public void setup() { - TestUtils.registerContentProvider(AppProvider.getAuthority(), AppProvider.class); Preferences.setupForTests(context); // This is what the FDroidApp does when this preference is changed. Need to also do this under testing. @@ -132,6 +131,7 @@ public class PreferredSignatureTest extends FDroidProviderTest { * the same apps/apks. The only difference is in the order with which they get added to the database. They both * then delegate here and assert that everything works as expected. The reason for testing like this is to ensure * that the order of rows in the database has no bearing on the correct suggestions of signatures. + * * @see #fdroidThenDev1() * @see #fdroidThenDev2() */ diff --git a/app/src/test/java/org/fdroid/fdroid/data/SuggestedVersionTest.java b/app/src/test/java/org/fdroid/fdroid/data/SuggestedVersionTest.java index 717ec05ff..c5dfd2f7c 100644 --- a/app/src/test/java/org/fdroid/fdroid/data/SuggestedVersionTest.java +++ b/app/src/test/java/org/fdroid/fdroid/data/SuggestedVersionTest.java @@ -21,7 +21,6 @@ public class SuggestedVersionTest extends FDroidProviderTest { @Before public void setup() { - TestUtils.registerContentProvider(AppProvider.getAuthority(), AppProvider.class); Preferences.setupForTests(context); // This is what the FDroidApp does when this preference is changed. Need to also do this under testing.