diff --git a/cli/src/main/java/com/devonfw/tools/ide/tool/helm/HelmUrlUpdater.java b/cli/src/main/java/com/devonfw/tools/ide/tool/helm/HelmUrlUpdater.java index 7bdcbf6fa..8f4311f4e 100644 --- a/cli/src/main/java/com/devonfw/tools/ide/tool/helm/HelmUrlUpdater.java +++ b/cli/src/main/java/com/devonfw/tools/ide/tool/helm/HelmUrlUpdater.java @@ -47,6 +47,11 @@ public String mapUrlVersionToCpeVersion(String version) { return version.substring(getVersionPrefixToRemove().length()); } + public String mapCpeVersionToUrlVersion(String version) { + + return getVersionPrefixToRemove() + version; + } + @Override protected void addVersion(UrlVersion urlVersion) { diff --git a/cli/src/main/java/com/devonfw/tools/ide/url/updater/AbstractUrlUpdater.java b/cli/src/main/java/com/devonfw/tools/ide/url/updater/AbstractUrlUpdater.java index 5803708fa..0e6cec0d1 100644 --- a/cli/src/main/java/com/devonfw/tools/ide/url/updater/AbstractUrlUpdater.java +++ b/cli/src/main/java/com/devonfw/tools/ide/url/updater/AbstractUrlUpdater.java @@ -105,6 +105,7 @@ public String getCpeVendor() { return null; } + /*** * @return the product name of the tool as specified in the CPE (Common Platform Enumeration) */ @@ -121,15 +122,23 @@ public String getCpeEdition() { return null; } - /*** + /** * @return maps the version as specified by the directory name in the url repository to the version as specified in - * the CPE (Common Platform Enumeration). + * the CPE (Common Platform Enumeration). */ public String mapUrlVersionToCpeVersion(String version) { return version; } + /** + * @return maps the cpe version to the version as specified in the CPE (Common Platform Enumeration). + */ + public String mapCpeVersionToUrlVersion(String version) { + + return version; + } + /** * Retrieves the response body from a given URL. * @@ -294,9 +303,9 @@ private boolean isValidDownload(String url, String tool, String version, HttpRes if (isSuccess(response)) { String contentType = response.headers().firstValue("content-type").orElse("undefined"); boolean isValidContentType = isValidContentType(contentType); - if (!isValidContentType){ + if (!isValidContentType) { logger.error("For tool {} and version {} the download has an invalid content type {} for URL {}", tool, version, - contentType, url); + contentType, url); return false; } return true; @@ -306,7 +315,8 @@ private boolean isValidDownload(String url, String tool, String version, HttpRes } /** - * Checks if the content type was not of type text (this method is required because {@link com.devonfw.tools.ide.tool.pip.PipUrlUpdater} returns text and needs to be overridden) + * Checks if the content type was not of type text (this method is required because + * {@link com.devonfw.tools.ide.tool.pip.PipUrlUpdater} returns text and needs to be overridden) *

* See: #1343 for reference. * @@ -351,7 +361,7 @@ private boolean checkDownloadUrl(String url, UrlVersion urlVersion, OperatingSys if (success) { if (checksum == null || checksum.isEmpty()) { String contentType = response.headers().firstValue("content-type").orElse("undefined"); - checksum = doGenerateChecksum(doGetResponseAsStream( url), url, version, contentType); + checksum = doGenerateChecksum(doGetResponseAsStream(url), url, version, contentType); } success = isChecksumStillValid(url, urlVersion, os, architecture, checksum, tool, version); @@ -472,8 +482,8 @@ private void doUpdateStatusJson(boolean success, int statusCode, UrlVersion urlV modified = true; } - logger.info("For tool {} and version {} the download verification succeeded with status code {} for URL {}.", tool, - version, code, url); + logger.info("For tool {} and version {} the download verification succeeded with status code {} for URL {}.", + tool, version, code, url); } else { if (status != null) { if (errorStatus == null) { diff --git a/cli/src/main/java/com/devonfw/tools/ide/version/VersionIdentifier.java b/cli/src/main/java/com/devonfw/tools/ide/version/VersionIdentifier.java index 797ee49e2..f7f9d3631 100644 --- a/cli/src/main/java/com/devonfw/tools/ide/version/VersionIdentifier.java +++ b/cli/src/main/java/com/devonfw/tools/ide/version/VersionIdentifier.java @@ -1,5 +1,8 @@ package com.devonfw.tools.ide.version; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; + import java.util.Objects; /** @@ -191,6 +194,7 @@ public boolean equals(Object obj) { } @Override + @JsonSerialize public String toString() { StringBuilder sb = new StringBuilder(); @@ -206,6 +210,7 @@ public String toString() { * @param version the {@link #toString() string representation} of the {@link VersionIdentifier} to parse. * @return the parsed {@link VersionIdentifier}. */ + @JsonCreator public static VersionIdentifier of(String version) { if (version.equals("latest")) { diff --git a/cli/src/main/java/com/devonfw/tools/ide/version/VersionRange.java b/cli/src/main/java/com/devonfw/tools/ide/version/VersionRange.java index 8f19dd228..8cd63029d 100644 --- a/cli/src/main/java/com/devonfw/tools/ide/version/VersionRange.java +++ b/cli/src/main/java/com/devonfw/tools/ide/version/VersionRange.java @@ -18,13 +18,47 @@ public final class VersionRange implements Comparable { private final boolean rightIsExclusive; + private static final String VERSION_SEPARATOR = ">"; + + private static final String START_EXCLUDING_PREFIX = "("; + + private static final String START_INCLUDING_PREFIX = "["; + + private static final String END_EXCLUDING_SUFFIX = ")"; + + private static final String END_INCLUDING_SUFFIX = "]"; + + public static String getVersionSeparator() { + + return VERSION_SEPARATOR; + } + + public static String getStartExcludingPrefix() { + + return START_EXCLUDING_PREFIX; + } + + public static String getStartIncludingPrefix() { + + return START_INCLUDING_PREFIX; + } + + public static String getEndExcludingSuffix() { + + return END_EXCLUDING_SUFFIX; + } + + public static String getEndIncludingSuffix() { + + return END_INCLUDING_SUFFIX; + } + /** * The constructor. * * @param min the {@link #getMin() minimum}. - * @param max the {@link #getMax() maximum} (including). + * @param max the {@link #getMax() maximum}. */ - public VersionRange(VersionIdentifier min, VersionIdentifier max) { super(); @@ -71,7 +105,6 @@ public VersionRange(VersionIdentifier min, VersionIdentifier max, boolean leftIs /** * @return the minimum {@link VersionIdentifier} or {@code null} for no lower bound. */ - // @JsonBackReference public VersionIdentifier getMin() { return this.min; @@ -80,7 +113,6 @@ public VersionIdentifier getMin() { /** * @return the maximum {@link VersionIdentifier} or {@code null} for no upper bound. */ - // @JsonBackReference public VersionIdentifier getMax() { return this.max; @@ -193,15 +225,15 @@ public boolean equals(Object obj) { public String toString() { StringBuilder sb = new StringBuilder(); - sb.append(this.leftIsExclusive ? '(' : '['); + sb.append(this.leftIsExclusive ? START_EXCLUDING_PREFIX : START_INCLUDING_PREFIX); if (this.min != null) { sb.append(this.min); } - sb.append('>'); + sb.append(VERSION_SEPARATOR); if (this.max != null) { sb.append(this.max); } - sb.append(this.rightIsExclusive ? ')' : ']'); + sb.append(this.rightIsExclusive ? END_EXCLUDING_SUFFIX : END_INCLUDING_SUFFIX); return sb.toString(); } @@ -215,22 +247,22 @@ public static VersionRange of(String value) { boolean leftIsExclusive = false; boolean rightIsExclusive = false; - if (value.startsWith("(")) { + if (value.startsWith(START_EXCLUDING_PREFIX)) { leftIsExclusive = true; - value = value.substring(1); + value = value.substring(START_EXCLUDING_PREFIX.length()); } - if (value.startsWith("[")) { - value = value.substring(1); + if (value.startsWith(START_INCLUDING_PREFIX)) { + value = value.substring(START_INCLUDING_PREFIX.length()); } - if (value.endsWith(")")) { + if (value.endsWith(END_EXCLUDING_SUFFIX)) { rightIsExclusive = true; - value = value.substring(0, value.length() - 1); + value = value.substring(0, value.length() - END_EXCLUDING_SUFFIX.length()); } - if (value.endsWith("]")) { - value = value.substring(0, value.length() - 1); + if (value.endsWith(END_INCLUDING_SUFFIX)) { + value = value.substring(0, value.length() - END_EXCLUDING_SUFFIX.length()); } - int index = value.indexOf('>'); + int index = value.indexOf(VERSION_SEPARATOR); if (index == -1) { return null; // log warning? } diff --git a/security/pom.xml b/security/pom.xml index 4838fe849..369d05e9a 100644 --- a/security/pom.xml +++ b/security/pom.xml @@ -31,5 +31,17 @@ compile + + + + org.apache.maven.plugins + maven-compiler-plugin + + 9 + 9 + + + + \ No newline at end of file diff --git a/security/src/main/java/com/devonfw/tools/security/BuildSecurityJsonFile.java b/security/src/main/java/com/devonfw/tools/security/BuildSecurityJsonFile.java index 6ed39c476..640571c4e 100644 --- a/security/src/main/java/com/devonfw/tools/security/BuildSecurityJsonFile.java +++ b/security/src/main/java/com/devonfw/tools/security/BuildSecurityJsonFile.java @@ -3,10 +3,10 @@ import java.math.BigDecimal; import java.nio.file.Path; import java.nio.file.Paths; -import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Locale; +import java.util.Optional; import java.util.Set; import java.util.stream.Collectors; @@ -50,7 +50,6 @@ import com.devonfw.tools.ide.url.model.file.UrlSecurityJsonFile; import com.devonfw.tools.ide.url.updater.AbstractUrlUpdater; import com.devonfw.tools.ide.url.updater.UpdateManager; -import com.devonfw.tools.ide.version.VersionIdentifier; import com.devonfw.tools.ide.version.VersionRange; // TODO Doesn't yet work with versions defined like this ///latest @@ -126,14 +125,9 @@ private static void run() { securityFile.clearSecurityWarnings(); } - List sortedVersions = context.getUrls().getSortedVersions(tool, edition); - List sortedCpeVersions = sortedVersions.stream().map(VersionIdentifier::toString) - .map(urlUpdater::mapUrlVersionToCpeVersion).map(VersionIdentifier::of) - .collect(Collectors.toCollection(ArrayList::new)); - Set vulnerabilities = dependency.getVulnerabilities(true); for (Vulnerability vulnerability : vulnerabilities) { - addVulnerabilityToSecurityFile(vulnerability, securityFile, sortedVersions, sortedCpeVersions); + addVulnerabilityToSecurityFile(vulnerability, securityFile, urlUpdater); } securityFile.save(); } @@ -165,7 +159,7 @@ private static Dependency[] getDependenciesWithVulnerabilities(UpdateManager upd } private static void addVulnerabilityToSecurityFile(Vulnerability vulnerability, UrlSecurityJsonFile securityFile, - List sortedVersions, List sortedCpeVersions) { + AbstractUrlUpdater urlUpdater) { if (vulnerability.getCvssV2() == null && vulnerability.getCvssV3() == null) { // if this ever happens, add a case that handles this @@ -196,7 +190,7 @@ private static void addVulnerabilityToSecurityFile(Vulnerability vulnerability, if (toLowSeverity) { return; } - VersionRange versionRange = getVersionRangeFromVulnerability(sortedVersions, sortedCpeVersions, vulnerability); + VersionRange versionRange = getVersionRangeFromVulnerability(vulnerability, urlUpdater); if (versionRange == null) { logger.info( "Vulnerability {} seems to be irrelevant because its affected versions have no overlap with the versions " @@ -223,125 +217,61 @@ private static void addVulnerabilityToSecurityFile(Vulnerability vulnerability, /*** * From the vulnerability determine the {@link VersionRange versionRange} to which the vulnerability applies. * - * @param sortedVersions sorted versions of the tool available through IDEasy. - * @param sortedCpeVersions sorted versions of the tool. Must match the format of the CPE versions. See - * {@link AbstractUrlUpdater#mapUrlVersionToCpeVersion(String)}. * @param vulnerability the vulnerability determined by OWASP dependency check. + * @param urlUpdater the {@link AbstractUrlUpdater} of the tool to which the vulnerability applies. TODOO * @return the {@link VersionRange versionRange} to which the vulnerability applies. */ - static VersionRange getVersionRangeFromVulnerability(List sortedVersions, - List sortedCpeVersions, Vulnerability vulnerability) { + static VersionRange getVersionRangeFromVulnerability(Vulnerability vulnerability, AbstractUrlUpdater urlUpdater) { VulnerableSoftware matchedVulnerableSoftware = vulnerability.getMatchedVulnerableSoftware(); - String vEndExcluding = matchedVulnerableSoftware.getVersionEndExcluding(); - String vEndIncluding = matchedVulnerableSoftware.getVersionEndIncluding(); + String vStartExcluding = matchedVulnerableSoftware.getVersionStartExcluding(); String vStartIncluding = matchedVulnerableSoftware.getVersionStartIncluding(); + String vEndExcluding = matchedVulnerableSoftware.getVersionEndExcluding(); + String vEndIncluding = matchedVulnerableSoftware.getVersionEndIncluding(); + String singleVersion = matchedVulnerableSoftware.getVersion(); - if (vEndExcluding == null && vEndIncluding == null && vStartExcluding == null && vStartIncluding == null) { - String singleAffectedVersion = vulnerability.getMatchedVulnerableSoftware().getVersion(); - return VersionRange.of(singleAffectedVersion + ">" + singleAffectedVersion); - } - - return getVersionRangeFromInterval(sortedVersions, sortedCpeVersions, vStartExcluding, vStartIncluding, - vEndIncluding, vEndExcluding); - } - - static VersionRange getVersionRangeFromInterval(List sortedVersions, String vStartExcluding, - String vStartIncluding, String vEndIncluding, String vEndExcluding) { - - return getVersionRangeFromInterval(sortedVersions, sortedVersions, vStartExcluding, vStartIncluding, vEndIncluding, - vEndExcluding); - } + vEndExcluding = Optional.ofNullable(vEndExcluding).map(urlUpdater::mapCpeVersionToUrlVersion).orElse(null); + vEndIncluding = Optional.ofNullable(vEndIncluding).map(urlUpdater::mapCpeVersionToUrlVersion).orElse(null); + vStartExcluding = Optional.ofNullable(vStartExcluding).map(urlUpdater::mapCpeVersionToUrlVersion).orElse(null); + vStartIncluding = Optional.ofNullable(vStartIncluding).map(urlUpdater::mapCpeVersionToUrlVersion).orElse(null); + singleVersion = Optional.ofNullable(singleVersion).map(urlUpdater::mapCpeVersionToUrlVersion).orElse(null); - /*** - * From the interval determine the {@link VersionRange versionRange} to which the vulnerability applies. Since the - * versions as specified in the vulnerability might not be in the {@code sortedVersions} list, the - * {@link VersionRange} is determined by finding the versions in the {@code sortedVersions} list that, when selected, - * cover all affected versions correctly. - */ - static VersionRange getVersionRangeFromInterval(List sortedVersions, - List sortedCpeVersions, String vStartExcluding, String vStartIncluding, String vEndIncluding, - String vEndExcluding) { - - VersionIdentifier min = null; - if (vStartExcluding != null) { - min = findMinFromStartExcluding(sortedVersions, sortedCpeVersions, vStartExcluding); - if (min == null) { - return null; - } - } else if (vStartIncluding != null) { - min = findMinFromStartIncluding(sortedVersions, sortedCpeVersions, vStartIncluding); - if (min == null) { - return null; - } - } - - VersionIdentifier max = null; - if (vEndIncluding != null) { - max = findMaxFromEndIncluding(sortedVersions, sortedCpeVersions, vEndIncluding); - if (max == null) { - return null; - } - } else if (vEndExcluding != null) { - max = findMaxFromEndExcluding(sortedVersions, sortedCpeVersions, vEndExcluding); - if (max == null) { - return null; - } + VersionRange affectedRange = null; + try { + affectedRange = getVersionRangeFromInterval(vStartIncluding, vStartExcluding, vEndExcluding, vEndIncluding, + singleVersion); + } catch (IllegalStateException e) { + throw new IllegalStateException( + "Getting the VersionRange for the vulnerability " + vulnerability.getName() + " failed.", e); } - return new VersionRange(min, max); - } - private static VersionIdentifier findMinFromStartExcluding(List sortedVs, - List sortedCpeVs, String vStartExcluding) { + return affectedRange; - VersionIdentifier startExcl = VersionIdentifier.of(vStartExcluding); - for (int i = sortedCpeVs.size() - 1; i >= 0; i--) { - VersionIdentifier version = sortedCpeVs.get(i); - if (version.isGreater(startExcl) && !version.compareVersion(startExcl).isUnsafe()) { - return sortedVs.get(i); - } - } - return null; } - private static VersionIdentifier findMinFromStartIncluding(List sortedVs, - List sortedCpeVs, String vStartIncluding) { + public static VersionRange getVersionRangeFromInterval(String si, String se, String ee, String ei, String s) + throws IllegalStateException { - VersionIdentifier startIncl = VersionIdentifier.of(vStartIncluding); - for (int i = sortedCpeVs.size() - 1; i >= 0; i--) { - VersionIdentifier version = sortedCpeVs.get(i); - if (version.compareTo(startIncl) >= 0) { - return sortedVs.get(i); + if (ee == null && ei == null && se == null && si == null) { + if (s == null) { + throw new IllegalStateException( + "Vulnerability has no interval of affected versions or single affected version."); } + return VersionRange.of(s + ">" + s); } - return null; - } + se = Optional.ofNullable(se).orElse(""); + si = Optional.ofNullable(si).orElse(""); + ee = Optional.ofNullable(ee).orElse(""); + ei = Optional.ofNullable(ei).orElse(""); - private static VersionIdentifier findMaxFromEndIncluding(List sortedVs, - List sortedCpeVs, String vEndIncluding) { + String leftBoundary = se.isEmpty() ? VersionRange.getStartIncludingPrefix() + si + : VersionRange.getStartExcludingPrefix() + se; - VersionIdentifier endIncl = VersionIdentifier.of(vEndIncluding); - for (int i = 0; i < sortedCpeVs.size(); i++) { - VersionIdentifier version = sortedCpeVs.get(i); - if (version.compareTo(endIncl) <= 0) { - return sortedVs.get(i); - } - } - return null; - } + String rightBoundary = ee.isEmpty() ? ei + VersionRange.getEndIncludingSuffix() + : ee + VersionRange.getEndExcludingSuffix(); - private static VersionIdentifier findMaxFromEndExcluding(List sortedVs, - List sortedCpeVs, String vEndExcluding) { - - VersionIdentifier endExl = VersionIdentifier.of(vEndExcluding); - for (int i = 0; i < sortedCpeVs.size(); i++) { - VersionIdentifier version = sortedCpeVs.get(i); - if (version.isLess(endExl)) { - return sortedVs.get(i); - } - } - return null; + return VersionRange.of(leftBoundary + VersionRange.getVersionSeparator() + rightBoundary); } private static void printAllOwaspAnalyzers(Engine engine) { diff --git a/security/src/test/java/com/devonfw/tools/security/BuildSecurityJsonFileTest.java b/security/src/test/java/com/devonfw/tools/security/BuildSecurityJsonFileTest.java index d8f926483..a36350fa8 100644 --- a/security/src/test/java/com/devonfw/tools/security/BuildSecurityJsonFileTest.java +++ b/security/src/test/java/com/devonfw/tools/security/BuildSecurityJsonFileTest.java @@ -1,107 +1,28 @@ package com.devonfw.tools.security; -import com.devonfw.tools.ide.version.VersionIdentifier; import com.devonfw.tools.ide.version.VersionRange; import org.assertj.core.api.Assertions; import org.junit.jupiter.api.Test; -import java.util.ArrayList; -import java.util.List; - import static com.devonfw.tools.security.BuildSecurityJsonFile.getVersionRangeFromInterval; +/** + * Test of {@link BuildSecurityJsonFile}. + */ public class BuildSecurityJsonFileTest extends Assertions { - /*** - * Test of {@link BuildSecurityJsonFile#getVersionRangeFromInterval(List, String, String, String, String)} and passing - * vStartExcluding and null for the other parameters . + /** + * Test of {@link BuildSecurityJsonFile#getVersionRangeFromInterval(String, String, String, String, String)}. */ @Test - public void testGetVersionRangeFromIntervalStartExcluding() { - - // arrange - List v = getSortedVersions(); + public void testGetVersionRangeFromInterval() { // act & assert - assertThat(getVersionRangeFromInterval(v, null, null, null, null)).isEqualTo(VersionRange.of(">")); - assertThat(getVersionRangeFromInterval(v, "1", null, null, null)).isEqualTo(VersionRange.of("1.2.3>")); - assertThat(getVersionRangeFromInterval(v, "1.2.3", null, null, null)).isEqualTo(VersionRange.of("1.2.4>")); - assertThat(getVersionRangeFromInterval(v, "1.4", null, null, null)).isEqualTo(VersionRange.of("2.0>")); - assertThat(getVersionRangeFromInterval(v, "1.5", null, null, null)).isEqualTo(VersionRange.of("2.0>")); - assertThat(getVersionRangeFromInterval(v, "2.1", null, null, null)).isNull(); - assertThat(getVersionRangeFromInterval(v, "2.2", null, null, null)).isNull(); - - } - /*** - * Test of {@link BuildSecurityJsonFile#getVersionRangeFromInterval(List, String, String, String, String)} and passing - * vStartIncluding and null for the other parameters . - */ - @Test - public void testGetVersionRangeFromIntervalStartIncluding() { - - // arrange - List v = getSortedVersions(); - - // act & assert - assertThat(getVersionRangeFromInterval(v, null, "1", null, null)).isEqualTo(VersionRange.of("1.2.3>")); - assertThat(getVersionRangeFromInterval(v, null, "1.2.3", null, null)).isEqualTo(VersionRange.of("1.2.3>")); - assertThat(getVersionRangeFromInterval(v, null, "1.4", null, null)).isEqualTo(VersionRange.of("1.4>")); - assertThat(getVersionRangeFromInterval(v, null, "1.5", null, null)).isEqualTo(VersionRange.of("2.0>")); - assertThat(getVersionRangeFromInterval(v, null, "2.1", null, null)).isEqualTo(VersionRange.of("2.1>")); - assertThat(getVersionRangeFromInterval(v, null, "2.2", null, null)).isNull(); - - } - - /*** - * Test of {@link BuildSecurityJsonFile#getVersionRangeFromInterval(List, String, String, String, String)} and passing - * vEndIncluding and null for the other parameters . - */ - @Test - public void testGetVersionRangeFromIntervalEndIncluding() { - - // arrange - List v = getSortedVersions(); - - // act & assert - assertThat(getVersionRangeFromInterval(v, null, null, "1", null)).isNull(); - assertThat(getVersionRangeFromInterval(v, null, null, "1.2.3", null)).isEqualTo(VersionRange.of(">1.2.3")); - assertThat(getVersionRangeFromInterval(v, null, null, "1.4", null)).isEqualTo(VersionRange.of(">1.4")); - assertThat(getVersionRangeFromInterval(v, null, null, "1.5", null)).isEqualTo(VersionRange.of(">1.4")); - assertThat(getVersionRangeFromInterval(v, null, null, "2.1", null)).isEqualTo(VersionRange.of(">2.1")); - assertThat(getVersionRangeFromInterval(v, null, null, "2.2", null)).isEqualTo(VersionRange.of(">2.1")); - - } - - /*** - * Test of {@link BuildSecurityJsonFile#getVersionRangeFromInterval(List, String, String, String, String)} and passing - * vEndExcluding and null for the other parameters . - */ - @Test - public void testGetVersionRangeFromIntervalEndExcluding() { - - // arrange - List v = getSortedVersions(); - - // act & assert - assertThat(getVersionRangeFromInterval(v, null, null, null, " 1")).isNull(); - assertThat(getVersionRangeFromInterval(v, null, null, null, "1.2.3")).isNull(); - assertThat(getVersionRangeFromInterval(v, null, null, null, "1.4")).isEqualTo(VersionRange.of(">1.3")); - assertThat(getVersionRangeFromInterval(v, null, null, null, "1.5")).isEqualTo(VersionRange.of(">1.4")); - assertThat(getVersionRangeFromInterval(v, null, null, null, "2.1")).isEqualTo(VersionRange.of(">2.0")); - assertThat(getVersionRangeFromInterval(v, null, null, null, "2.2")).isEqualTo(VersionRange.of(">2.1")); - - } - - private static List getSortedVersions() { - - List sortedVersions = new ArrayList<>(); - sortedVersions.add(VersionIdentifier.of("2.1")); - sortedVersions.add(VersionIdentifier.of("2.0")); - sortedVersions.add(VersionIdentifier.of("1.4")); - sortedVersions.add(VersionIdentifier.of("1.3")); - sortedVersions.add(VersionIdentifier.of("1.2.5")); - sortedVersions.add(VersionIdentifier.of("1.2.4")); - sortedVersions.add(VersionIdentifier.of("1.2.3")); - return sortedVersions; + assertThat(getVersionRangeFromInterval("1", null, null, null, null)).isEqualTo(VersionRange.of("1>")); + assertThat(getVersionRangeFromInterval(null, "1", null, null, null)).isEqualTo(VersionRange.of("(1>")); + assertThat(getVersionRangeFromInterval(null, null, "1", null, null)).isEqualTo(VersionRange.of(">1)")); + assertThat(getVersionRangeFromInterval(null, null, null, "1", null)).isEqualTo(VersionRange.of(">1")); + assertThat(getVersionRangeFromInterval(null, null, null, null, "1")).isEqualTo(VersionRange.of("1>1")); + assertThat(getVersionRangeFromInterval(null, "1", null, "2", "1")).isEqualTo(VersionRange.of("(1>2]")); } -} +} \ No newline at end of file