From 1b1731b07c33994283f469a4ae74a4ebd1855322 Mon Sep 17 00:00:00 2001 From: Thomas Rubini <74205383+ThomasRubini@users.noreply.github.com> Date: Wed, 14 Dec 2022 13:26:51 +0100 Subject: [PATCH 1/8] Use an abstract class for tests --- src/test/java/fr/packageviewer/ArchTest.java | 78 ++------------- .../java/fr/packageviewer/DistroTest.java | 96 +++++++++++++++++++ 2 files changed, 102 insertions(+), 72 deletions(-) create mode 100644 src/test/java/fr/packageviewer/DistroTest.java diff --git a/src/test/java/fr/packageviewer/ArchTest.java b/src/test/java/fr/packageviewer/ArchTest.java index 62f5ba0..3d03774 100644 --- a/src/test/java/fr/packageviewer/ArchTest.java +++ b/src/test/java/fr/packageviewer/ArchTest.java @@ -1,85 +1,19 @@ package fr.packageviewer; import fr.packageviewer.distribution.ArchDistribution; -import fr.packageviewer.distribution.Distribution; import fr.packageviewer.pack.Package; -import fr.packageviewer.pack.SearchedPackage; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; -import java.util.concurrent.ExecutionException; - -public class ArchTest { - - @Test - public void testBasicQueryDoNotFail(){ - Distribution arch = new ArchDistribution(); - arch.getPackageTree("bash", 0); +public class ArchTest extends DistroTest { + @Override + protected ArchDistribution createInstance() { + return new ArchDistribution(); } @Test - public void testBashPackageHasNameBash() throws ExecutionException, InterruptedException { - Distribution arch = new ArchDistribution(); - Package pack = arch.getPackageTree("bash", 0).get(); - Assertions.assertEquals(pack.getName(), "bash"); - } - @Test - public void testQueryWithDepth0HasNoDeps() throws ExecutionException, InterruptedException { - Distribution arch = new ArchDistribution(); - Package pack = arch.getPackageTree("bash", 0).get(); - Assertions.assertEquals(pack.getDeps().size(), 0); - } - @Test - public void testQueryWithDepth1hasOneLevelOfDeps() throws ExecutionException, InterruptedException { - Distribution arch = new ArchDistribution(); - Package pack = arch.getPackageTree("bash", 1).get(); - Assertions.assertNotEquals(pack.getDeps().size(), 0); - for(Package dep : pack.getDeps()){ - Assertions.assertEquals(dep.getDeps().size(), 0); - } - } - - @Test - public void testBashIsInCore() throws ExecutionException, InterruptedException { - Distribution arch = new ArchDistribution(); - Package pack = arch.getPackageTree("bash", 1).get(); + public void testBashIsInCore() { + Package pack = helperGetPackageTree("bash", 0); Assertions.assertEquals(pack.getRepo(), "core"); } - - @Test - public void testBashDescriptionIsNotEmpty() throws ExecutionException, InterruptedException { - Distribution arch = new ArchDistribution(); - Package pack = arch.getPackageTree("bash", 1).get(); - Assertions.assertFalse(pack.getDescription().isEmpty()); - } - @Test - public void testBashVersionIsNotEmpty() throws ExecutionException, InterruptedException { - Distribution arch = new ArchDistribution(); - Package pack = arch.getPackageTree("bash", 1).get(); - Assertions.assertFalse(pack.getVersion().isEmpty()); - } - - @Test - public void testInvalidPackageReturnsNull() throws ExecutionException, InterruptedException { - Distribution arch = new ArchDistribution(); - Package pack = arch.getPackageTree("lndhsgudw", 1).get(); - Assertions.assertNull(pack); - } - - @Test - public void testThatBashSearchReturnsResults() throws ExecutionException, InterruptedException { - Distribution arch = new ArchDistribution(); - Assertions.assertNotEquals(arch.searchPackage("bash").get().size(), 0); - } - @Test - public void testThatBashSearchContainsBash() throws ExecutionException, InterruptedException { - Distribution arch = new ArchDistribution(); - for(SearchedPackage pack : arch.searchPackage("bash").get()){ - if(pack.getName().equals("bash")){ - Assertions.assertTrue(true); - return; - } - } - Assertions.fail("No package named 'bash' in results"); - } } diff --git a/src/test/java/fr/packageviewer/DistroTest.java b/src/test/java/fr/packageviewer/DistroTest.java new file mode 100644 index 0000000..2f63cf9 --- /dev/null +++ b/src/test/java/fr/packageviewer/DistroTest.java @@ -0,0 +1,96 @@ +package fr.packageviewer; + +import fr.packageviewer.distribution.ArchDistribution; +import fr.packageviewer.distribution.Distribution; +import fr.packageviewer.pack.Package; +import fr.packageviewer.pack.SearchedPackage; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import java.util.List; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.Future; + +public abstract class DistroTest { + + protected abstract T createInstance(); + protected List helperSearchPackage(String packageName){ + Distribution distribution = createInstance(); + Future> future = distribution.searchPackage(packageName); + try{ + return future.get(); + } catch (ExecutionException | InterruptedException e) { + throw new RuntimeException(e); + } + } + protected Package helperGetPackageTree(String packageName, int depth){ + Distribution distribution = createInstance(); + Future future = distribution.getPackageTree(packageName, depth); + try{ + return future.get(); + } catch (ExecutionException | InterruptedException e) { + throw new RuntimeException(e); + } + } + + @Test + public void testBasicQueryDoNotFail(){ + helperGetPackageTree("bash", 0); + } + + @Test + public void testBashPackageHasNameBash() throws ExecutionException, InterruptedException { + Distribution arch = new ArchDistribution(); + Package pack = arch.getPackageTree("bash", 0).get(); + Assertions.assertEquals(pack.getName(), "bash"); + } + + @Test + public void testQueryWithDepth0HasNoDeps() { + Distribution arch = new ArchDistribution(); + Package pack = helperGetPackageTree("bash", 0); + Assertions.assertEquals(pack.getDeps().size(), 0); + } + + @Test + public void testQueryWithDepth1hasOneLevelOfDeps() { + Package pack = helperGetPackageTree("bash", 1); + Assertions.assertNotEquals(pack.getDeps().size(), 0); + for(Package dep : pack.getDeps()){ + Assertions.assertEquals(dep.getDeps().size(), 0); + } + } + + @Test + public void testBashDescriptionIsNotEmpty() { + Package pack = helperGetPackageTree("bash", 1); + Assertions.assertFalse(pack.getDescription().isEmpty()); + } + + @Test + public void testBashVersionIsNotEmpty() { + Package pack = helperGetPackageTree("bash", 1); + Assertions.assertFalse(pack.getVersion().isEmpty()); + } + + @Test + public void testInvalidPackageReturnsNull() { + Package pack = helperGetPackageTree("lndhsgudw", 1); + Assertions.assertNull(pack); + } + + @Test + public void testThatBashSearchReturnsResults() { + Assertions.assertNotEquals(helperSearchPackage("bash").size(), 0); + } + @Test + public void testThatBashSearchContainsBash() { + for(SearchedPackage pack : helperSearchPackage("bash")){ + if(pack.getName().equals("bash")){ + Assertions.assertTrue(true); + return; + } + } + Assertions.fail("No package named 'bash' in results"); + } +} From 5fd9546bd212286707bc3f66ea23e3e71dcc9f46 Mon Sep 17 00:00:00 2001 From: Thomas Rubini <74205383+ThomasRubini@users.noreply.github.com> Date: Wed, 14 Dec 2022 13:26:56 +0100 Subject: [PATCH 2/8] add Fedora tests --- src/test/java/fr/packageviewer/FedoraTest.java | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 src/test/java/fr/packageviewer/FedoraTest.java diff --git a/src/test/java/fr/packageviewer/FedoraTest.java b/src/test/java/fr/packageviewer/FedoraTest.java new file mode 100644 index 0000000..2c8f93e --- /dev/null +++ b/src/test/java/fr/packageviewer/FedoraTest.java @@ -0,0 +1,10 @@ +package fr.packageviewer; + +import fr.packageviewer.distribution.FedoraDistribution; + +public class FedoraTest extends DistroTest { + @Override + protected FedoraDistribution createInstance() { + return new FedoraDistribution(); + } +} From e7092e9b39077e7b8b31220c80dce10ff1dcc0c7 Mon Sep 17 00:00:00 2001 From: Thomas Rubini <74205383+ThomasRubini@users.noreply.github.com> Date: Wed, 14 Dec 2022 13:27:30 +0100 Subject: [PATCH 3/8] use right keys in Fedora search package function --- .../fr/packageviewer/distribution/FedoraDistribution.java | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/main/java/fr/packageviewer/distribution/FedoraDistribution.java b/src/main/java/fr/packageviewer/distribution/FedoraDistribution.java index 5fe0dc4..e5894d2 100644 --- a/src/main/java/fr/packageviewer/distribution/FedoraDistribution.java +++ b/src/main/java/fr/packageviewer/distribution/FedoraDistribution.java @@ -1,6 +1,5 @@ package fr.packageviewer.distribution; -import java.io.IOException; import java.net.URI; import java.util.*; import java.net.http.*; @@ -14,8 +13,6 @@ import java.util.logging.Logger; import fr.packageviewer.pack.Package; import fr.packageviewer.pack.SearchedPackage; import fr.packageviewer.LoggerManager; -import fr.packageviewer.pack.Package; -import fr.packageviewer.pack.SearchedPackage; public class FedoraDistribution extends AsyncRequestsParser implements Distribution { @@ -97,9 +94,9 @@ public class FedoraDistribution extends AsyncRequestsParser implements Distribut JSONObject searchResultJson = (JSONObject) searchResultObj; // add package into to list searchedPackagesList.add(new SearchedPackage( - searchResultJson.getString("neofetch"), + searchResultJson.getString("name"), + null, null, - searchResultJson.getString("fullname"), searchResultJson.getString("description"))); } futureSearchedPackages.complete(searchedPackagesList); From 56bf76845ea0af31a1cea3c16bf63530fb9451a1 Mon Sep 17 00:00:00 2001 From: Thomas Rubini <74205383+ThomasRubini@users.noreply.github.com> Date: Wed, 14 Dec 2022 13:41:50 +0100 Subject: [PATCH 4/8] run tests concurrently --- src/test/resources/junit-platform.properties | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 src/test/resources/junit-platform.properties diff --git a/src/test/resources/junit-platform.properties b/src/test/resources/junit-platform.properties new file mode 100644 index 0000000..dd62250 --- /dev/null +++ b/src/test/resources/junit-platform.properties @@ -0,0 +1,2 @@ +junit.jupiter.execution.parallel.enabled=true +junit.jupiter.execution.parallel.mode.default=concurrent From f6705210161b8dfc7e894c33496d7c9a8f29c4c6 Mon Sep 17 00:00:00 2001 From: Thomas Rubini <74205383+ThomasRubini@users.noreply.github.com> Date: Wed, 14 Dec 2022 14:34:47 +0100 Subject: [PATCH 5/8] Trim version requirements for dependencies names in arch --- .../packageviewer/distribution/ArchDistribution.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/main/java/fr/packageviewer/distribution/ArchDistribution.java b/src/main/java/fr/packageviewer/distribution/ArchDistribution.java index d3a6725..f8aa25f 100644 --- a/src/main/java/fr/packageviewer/distribution/ArchDistribution.java +++ b/src/main/java/fr/packageviewer/distribution/ArchDistribution.java @@ -19,6 +19,14 @@ public class ArchDistribution extends AsyncRequestsParser implements Distributio private static final Logger logger = LoggerManager.getLogger("ArchDistribution"); + private static String trimAfterCharacters(String str, String trimAfterCharacters){ + for(char c : trimAfterCharacters.toCharArray()){ + int index = str.indexOf(c); + if(index>0)str = str.substring(index); + } + return str; + } + /** * Will return the String json of the package from the Arch Linux API * @param packageName the package name to get the json from @@ -49,7 +57,7 @@ public CompletableFuture>> getPackageFromAPI(String pa Set dependenciesNames = new HashSet<>(); for(Object dependency : resultJson.getJSONArray("depends")){ - dependenciesNames.add((String)dependency); + dependenciesNames.add(trimAfterCharacters((String)dependency, "<>=")); } futureResult.complete(new Pair<>( new Package( From 6b641ca10fe391ed0331065d34dc3c69164bdacc Mon Sep 17 00:00:00 2001 From: Thomas Rubini <74205383+ThomasRubini@users.noreply.github.com> Date: Wed, 14 Dec 2022 14:38:15 +0100 Subject: [PATCH 6/8] fix typo 'desciption' --- src/main/java/fr/packageviewer/pack/SearchedPackage.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/fr/packageviewer/pack/SearchedPackage.java b/src/main/java/fr/packageviewer/pack/SearchedPackage.java index 868801e..998d6c5 100644 --- a/src/main/java/fr/packageviewer/pack/SearchedPackage.java +++ b/src/main/java/fr/packageviewer/pack/SearchedPackage.java @@ -22,11 +22,11 @@ public class SearchedPackage { return description; } - public SearchedPackage(String name, String version, String repo, String desciption) { + public SearchedPackage(String name, String version, String repo, String description) { this.name = name; this.version = version; this.repo = repo; - this.description = desciption; + this.description = description; } @Override From a1ab530fa70ff2c8bacbbc4c354a858c94778430 Mon Sep 17 00:00:00 2001 From: Thomas Rubini <74205383+ThomasRubini@users.noreply.github.com> Date: Wed, 14 Dec 2022 14:43:38 +0100 Subject: [PATCH 7/8] add 'distribution' field to packages --- .../fr/packageviewer/distribution/ArchDistribution.java | 6 ++++-- .../fr/packageviewer/distribution/FedoraDistribution.java | 7 +++++-- src/main/java/fr/packageviewer/pack/Package.java | 8 ++++---- src/main/java/fr/packageviewer/pack/SearchedPackage.java | 8 +++++++- 4 files changed, 20 insertions(+), 9 deletions(-) diff --git a/src/main/java/fr/packageviewer/distribution/ArchDistribution.java b/src/main/java/fr/packageviewer/distribution/ArchDistribution.java index d3a6725..a65fa6f 100644 --- a/src/main/java/fr/packageviewer/distribution/ArchDistribution.java +++ b/src/main/java/fr/packageviewer/distribution/ArchDistribution.java @@ -56,7 +56,8 @@ public CompletableFuture>> getPackageFromAPI(String pa resultJson.getString("pkgname"), resultJson.getString("pkgver"), resultJson.getString("repo"), - resultJson.getString("pkgdesc") + resultJson.getString("pkgdesc"), + "arch" ), dependenciesNames )); @@ -98,7 +99,8 @@ public CompletableFuture>> getPackageFromAPI(String pa searchResultJson.getString("pkgname"), searchResultJson.getString("pkgver"), searchResultJson.getString("repo"), - searchResultJson.getString("pkgdesc") + searchResultJson.getString("pkgdesc"), + "arch" )); } futureSearchedPackages.complete(searchedPackagesList); diff --git a/src/main/java/fr/packageviewer/distribution/FedoraDistribution.java b/src/main/java/fr/packageviewer/distribution/FedoraDistribution.java index e5894d2..f854e22 100644 --- a/src/main/java/fr/packageviewer/distribution/FedoraDistribution.java +++ b/src/main/java/fr/packageviewer/distribution/FedoraDistribution.java @@ -57,7 +57,8 @@ public class FedoraDistribution extends AsyncRequestsParser implements Distribut json.getString("basename"), json.getString("version"), json.getString("repo"), - json.getString("description") + json.getString("description"), + "fedora" ), dependenciesNames )); @@ -97,7 +98,9 @@ public class FedoraDistribution extends AsyncRequestsParser implements Distribut searchResultJson.getString("name"), null, null, - searchResultJson.getString("description"))); + searchResultJson.getString("description"), + "fedora" + )); } futureSearchedPackages.complete(searchedPackagesList); }).exceptionally(error->{ diff --git a/src/main/java/fr/packageviewer/pack/Package.java b/src/main/java/fr/packageviewer/pack/Package.java index 0371559..c05a4e5 100644 --- a/src/main/java/fr/packageviewer/pack/Package.java +++ b/src/main/java/fr/packageviewer/pack/Package.java @@ -15,11 +15,11 @@ public class Package extends SearchedPackage { deps.add(pack); } - public Package(String name, String version, String repo, String description) { - this(name, version, repo, description, new ArrayList<>()); + public Package(String name, String version, String repo, String description, String distribution) { + this(name, version, repo, description, distribution, new ArrayList<>()); } - public Package(String name, String version, String repo, String description, List deps) { - super(name, version, repo, description); + public Package(String name, String version, String repo, String description, String distribution, List deps) { + super(name, version, repo, description, distribution); this.deps = deps; } diff --git a/src/main/java/fr/packageviewer/pack/SearchedPackage.java b/src/main/java/fr/packageviewer/pack/SearchedPackage.java index 998d6c5..44bfebc 100644 --- a/src/main/java/fr/packageviewer/pack/SearchedPackage.java +++ b/src/main/java/fr/packageviewer/pack/SearchedPackage.java @@ -5,6 +5,7 @@ public class SearchedPackage { private final String version; private final String repo; private final String description; + private final String distribution; public String getName() { return name; @@ -22,11 +23,16 @@ public class SearchedPackage { return description; } - public SearchedPackage(String name, String version, String repo, String description) { + public String getDistribution() { + return distribution; + } + + public SearchedPackage(String name, String version, String repo, String description, String distribution) { this.name = name; this.version = version; this.repo = repo; this.description = description; + this.distribution = distribution; } @Override From 0bf92231a9b80174ebb20fd535962b7982793469 Mon Sep 17 00:00:00 2001 From: Thomas Rubini <74205383+ThomasRubini@users.noreply.github.com> Date: Wed, 14 Dec 2022 14:55:00 +0100 Subject: [PATCH 8/8] added distribution to SearchedPackage#toString --- src/main/java/fr/packageviewer/pack/SearchedPackage.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/fr/packageviewer/pack/SearchedPackage.java b/src/main/java/fr/packageviewer/pack/SearchedPackage.java index 44bfebc..528748d 100644 --- a/src/main/java/fr/packageviewer/pack/SearchedPackage.java +++ b/src/main/java/fr/packageviewer/pack/SearchedPackage.java @@ -37,6 +37,6 @@ public class SearchedPackage { @Override public String toString() { - return "SearchedPackage{name=%s,version=%s,repo=%s,description=%s}".formatted(name, version, repo, description); + return "SearchedPackage{name=%s,version=%s,repo=%s,description=%s,distribution=%s}".formatted(name, version, repo, description, distribution); } }