From 1d1c1ebb749bbd25e8ad5029a09152135f162c26 Mon Sep 17 00:00:00 2001 From: Peter Serwylo Date: Thu, 4 Aug 2016 16:12:12 +1000 Subject: [PATCH] Add test for repo priorities + app metadata. Not passing yet. --- .../org/fdroid/fdroid/data/RepoProvider.java | 2 +- .../fdroid/updater/MultiRepoUpdaterTest.java | 2 +- .../updater/ProperMultiRepoUpdaterTest.java | 98 +++++++++++++++---- 3 files changed, 81 insertions(+), 21 deletions(-) diff --git a/app/src/main/java/org/fdroid/fdroid/data/RepoProvider.java b/app/src/main/java/org/fdroid/fdroid/data/RepoProvider.java index f08fc1589..da0240a99 100644 --- a/app/src/main/java/org/fdroid/fdroid/data/RepoProvider.java +++ b/app/src/main/java/org/fdroid/fdroid/data/RepoProvider.java @@ -301,7 +301,7 @@ public class RepoProvider extends FDroidProvider { public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { if (TextUtils.isEmpty(sortOrder)) { - sortOrder = "_ID ASC"; + sortOrder = Cols.PRIORITY + " ASC"; } switch (MATCHER.match(uri)) { diff --git a/app/src/test/java/org/fdroid/fdroid/updater/MultiRepoUpdaterTest.java b/app/src/test/java/org/fdroid/fdroid/updater/MultiRepoUpdaterTest.java index a44769e74..6b761c15b 100644 --- a/app/src/test/java/org/fdroid/fdroid/updater/MultiRepoUpdaterTest.java +++ b/app/src/test/java/org/fdroid/fdroid/updater/MultiRepoUpdaterTest.java @@ -165,7 +165,7 @@ public abstract class MultiRepoUpdaterTest extends FDroidProviderTest { repo.address = uri; repo.name = name; - ContentValues values = new ContentValues(2); + ContentValues values = new ContentValues(3); values.put(Schema.RepoTable.Cols.SIGNING_CERT, repo.signingCertificate); values.put(Schema.RepoTable.Cols.ADDRESS, repo.address); values.put(Schema.RepoTable.Cols.NAME, repo.name); diff --git a/app/src/test/java/org/fdroid/fdroid/updater/ProperMultiRepoUpdaterTest.java b/app/src/test/java/org/fdroid/fdroid/updater/ProperMultiRepoUpdaterTest.java index 5463a7f88..68ed05c9b 100644 --- a/app/src/test/java/org/fdroid/fdroid/updater/ProperMultiRepoUpdaterTest.java +++ b/app/src/test/java/org/fdroid/fdroid/updater/ProperMultiRepoUpdaterTest.java @@ -39,21 +39,53 @@ public class ProperMultiRepoUpdaterTest extends MultiRepoUpdaterTest { public void mainRepo() throws RepoUpdater.UpdateException { assertEmpty(); updateMain(); - assertMainRepo(RepoProvider.Helper.all(context)); + assertMainRepo(); } @Test public void archiveRepo() throws RepoUpdater.UpdateException { assertEmpty(); updateArchive(); - assertMainArchiveRepo(RepoProvider.Helper.all(context)); + assertMainArchiveRepoMetadata(); } @Test public void conflictingRepo() throws RepoUpdater.UpdateException { assertEmpty(); updateConflicting(); - assertConflictingRepo(RepoProvider.Helper.all(context)); + assertConflictingRepo(); + } + + @Test + public void conflictingMetadataTakesPriority() throws RepoUpdater.UpdateException { + updateConflicting(); + updateMain(); + updateArchive(); + + assertEquals(1, RepoProvider.Helper.findByAddress(context, REPO_CONFLICTING_URI).priority); + assertEquals(2, RepoProvider.Helper.findByAddress(context, REPO_MAIN_URI).priority); + assertEquals(3, RepoProvider.Helper.findByAddress(context, REPO_ARCHIVE_URI).priority); + + assertMainRepo(); + assertMainArchiveRepoMetadata(); + assertConflictingRepo(); + + App a2048 = AppProvider.Helper.findHighestPriorityMetadata(context.getContentResolver(), "com.uberspot.a2048"); + assert2048Metadata(a2048, "Conflicting"); + + // This is only provided by the "Conflicting" repo. + App calendar = AppProvider.Helper.findHighestPriorityMetadata(context.getContentResolver(), "org.dgtale.icsimport"); + assertCalendarMetadata(calendar, "Conflicting"); + + // This is only provided by the "Main" or "Archive" repo. Both the main and archive repo both + // pull their metadata from the same build recipe in fdroidserver. The only difference is that + // the archive repository contains .apks from further back, but their metadata is the same. + App adAway = AppProvider.Helper.findHighestPriorityMetadata(context.getContentResolver(), "org.adaway"); + assertAdAwayMetadata(adAway, "Normal"); + + // This is only provided by the "Main" repo. + App adb = AppProvider.Helper.findHighestPriorityMetadata(context.getContentResolver(), "siir.es.adbWireless"); + assertAdAwayMetadata(adb, "Normal"); } @Test @@ -133,10 +165,14 @@ public class ProperMultiRepoUpdaterTest extends MultiRepoUpdaterTest { assertEquals("Repos", 3, repos.size()); assertMainRepo(repos); - assertMainArchiveRepo(repos); + assertMainArchiveRepoMetadata(repos); assertConflictingRepo(repos); } + private void assertMainRepo() { + assertMainRepo(RepoProvider.Helper.all(context)); + } + /** * + 2048 (com.uberspot.a2048) * - Version 1.96 (19) @@ -157,17 +193,21 @@ public class ProperMultiRepoUpdaterTest extends MultiRepoUpdaterTest { assertApksExist(apks, "org.adaway", new int[]{52, 53, 54}); assertApksExist(apks, "siir.es.adbWireless", new int[]{12}); - assert2048(repo, "Normal"); - assertAdAway(repo, "Normal"); - assertAdb(repo, "Normal"); + assert2048Metadata(repo, "Normal"); + assertAdAwayMetadata(repo, "Normal"); + assertAdbMetadata(repo, "Normal"); + } + + private void assert2048Metadata(Repo repo, @RepoIdentifier String id) { + App a2048 = AppProvider.Helper.findByPackageName(context.getContentResolver(), "com.uberspot.a2048", repo.getId()); + assert2048Metadata(a2048, id); } /** * @param id An identifier that we've put in the metadata for each repo to ensure that * we can identify the metadata is coming from the correct repo. */ - private void assert2048(Repo repo, @RepoIdentifier String id) { - App a2048 = AppProvider.Helper.findByPackageName(context.getContentResolver(), "com.uberspot.a2048", repo.getId()); + private void assert2048Metadata(App a2048, @RepoIdentifier String id) { assertNotNull(a2048); assertEquals("2048", a2048.name); assertEquals(String.format("

2048 from %s repo.

", id), a2048.description); @@ -177,9 +217,13 @@ public class ProperMultiRepoUpdaterTest extends MultiRepoUpdaterTest { assertEquals(String.format("https://github.com/uberspot/2048-android/issues?%s", id), a2048.trackerURL); } - /** @see ProperMultiRepoUpdaterTest#assert2048(Repo, String) */ - private void assertAdAway(Repo repo, @RepoIdentifier String id) { + private void assertAdAwayMetadata(Repo repo, @RepoIdentifier String id) { App adaway = AppProvider.Helper.findByPackageName(context.getContentResolver(), "org.adaway", repo.getId()); + assertAdAwayMetadata(adaway, id); + } + + /** @see ProperMultiRepoUpdaterTest#assert2048Metadata(Repo, String) */ + private void assertAdAwayMetadata(App adaway, @RepoIdentifier String id) { assertNotNull(adaway); assertEquals(String.format("AdAway", id), adaway.name); assertEquals(String.format("

AdAway from %s repo.

", id), adaway.description); @@ -192,9 +236,13 @@ public class ProperMultiRepoUpdaterTest extends MultiRepoUpdaterTest { assertEquals(String.format("369138", id), adaway.flattrID); } - /** @see ProperMultiRepoUpdaterTest#assert2048(Repo, String) */ - private void assertAdb(Repo repo, @RepoIdentifier String id) { + private void assertAdbMetadata(Repo repo, @RepoIdentifier String id) { App adb = AppProvider.Helper.findByPackageName(context.getContentResolver(), "siir.es.adbWireless", repo.getId()); + assertAdbMetadata(adb, id); + } + + /** @see ProperMultiRepoUpdaterTest#assert2048Metadata(Repo, String) */ + private void assertAdbMetadata(App adb, @RepoIdentifier String id) { assertNotNull(adb); assertEquals("adbWireless", adb.name); assertEquals(String.format("

adbWireless from %s repo.

", id), adb.description); @@ -204,9 +252,13 @@ public class ProperMultiRepoUpdaterTest extends MultiRepoUpdaterTest { assertEquals(String.format("https://adbwireless.example.com/issues?%s", id), adb.trackerURL); } - /** @see ProperMultiRepoUpdaterTest#assert2048(Repo, String) */ - private void assertCalendar(Repo repo, @RepoIdentifier String id) { + private void assertCalendarMetadata(Repo repo, @RepoIdentifier String id) { App calendar = AppProvider.Helper.findByPackageName(context.getContentResolver(), "org.dgtale.icsimport", repo.getId()); + assertCalendarMetadata(calendar, id); + } + + /** @see ProperMultiRepoUpdaterTest#assert2048Metadata(Repo, String) */ + private void assertCalendarMetadata(App calendar, @RepoIdentifier String id) { assertNotNull(calendar); assertEquals("Add to calendar", calendar.name); assertEquals(String.format("

Add to calendar from %s repo.

", id), calendar.description); @@ -217,6 +269,10 @@ public class ProperMultiRepoUpdaterTest extends MultiRepoUpdaterTest { assertEquals("2225390", calendar.flattrID); } + private void assertMainArchiveRepoMetadata() { + assertMainArchiveRepoMetadata(RepoProvider.Helper.all(context)); + } + /** * + AdAway (org.adaway) * - Version 2.9.2 (51) @@ -233,14 +289,18 @@ public class ProperMultiRepoUpdaterTest extends MultiRepoUpdaterTest { * - Version 1.35 (36) * - Version 1.34 (35) */ - private void assertMainArchiveRepo(List allRepos) { + private void assertMainArchiveRepoMetadata(List allRepos) { Repo repo = findRepo(REPO_ARCHIVE, allRepos); List apks = ApkProvider.Helper.findByRepo(context, repo, Schema.ApkTable.Cols.ALL); assertEquals("Apks for main archive repo", 13, apks.size()); assertApksExist(apks, "org.adaway", new int[]{35, 36, 37, 38, 40, 42, 45, 46, 47, 48, 49, 50, 51}); - assertAdAway(repo, "Normal"); + assertAdAwayMetadata(repo, "Normal"); + } + + private void assertConflictingRepo() { + assertConflictingRepo(RepoProvider.Helper.all(context)); } /** @@ -261,8 +321,8 @@ public class ProperMultiRepoUpdaterTest extends MultiRepoUpdaterTest { assertApksExist(apks, "org.adaway", new int[]{50, 51, 52, 53}); assertApksExist(apks, "org.dgtale.icsimport", new int[]{2, 3}); - assertAdAway(repo, "Conflicting"); - assertCalendar(repo, "Conflicting"); + assertAdAwayMetadata(repo, "Conflicting"); + assertCalendarMetadata(repo, "Conflicting"); } }