Skip to content

Commit

Permalink
reducing the noise
Browse files Browse the repository at this point in the history
  • Loading branch information
Eric Kerwin committed May 29, 2020
1 parent 71449bc commit 6d08341
Show file tree
Hide file tree
Showing 2 changed files with 77 additions and 3 deletions.
@@ -0,0 +1,74 @@
package com.synopsys.integration.detect.tool.detector.inspectors.nuget;

import com.synopsys.integration.detectable.detectable.exception.DetectableException;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.math.NumberUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;

public class DotNetRuntimeAvailabilityVerifier2 {
private static final String[] VERSION_PREFIXES = new String[] {
"Microsoft.AspNetCore.All"
,"Microsoft.AspNetCore.App"
,"Microsoft.NETCore.All"
,"Microsoft.NETCore.App"
};

private final Logger logger = LoggerFactory.getLogger(this.getClass());

private DotNetRuntimeFinder dotNetRuntimeFinder;

public DotNetRuntimeAvailabilityVerifier2(DotNetRuntimeFinder dotNetRuntimeFinder) {
this.dotNetRuntimeFinder = dotNetRuntimeFinder;
}

public boolean isRuntimeAvailable(String semanticVersion) throws DetectableException {
String[] versionTokenStrings = StringUtils.split(semanticVersion, '.');
List<Integer> numericVersionTokens = Arrays.stream(versionTokenStrings)
.filter(NumberUtils::isDigits)
.map(NumberUtils::toInt)
.collect(Collectors.toList());

if (numericVersionTokens.isEmpty()) {
logger.warn("Invalid semantic version parameter for dotnet runtime query");
return false;
}

Integer[] intArray = new Integer[numericVersionTokens.size()];
return isRuntimeAvailable(numericVersionTokens.toArray(intArray));
}

public boolean isRuntimeAvailable(Integer... versionTokens) throws DetectableException {
List<String> runtimes = dotNetRuntimeFinder.listAvailableRuntimes();
return isRuntimeAvailable(runtimes, versionTokens);
}

public boolean isRuntimeAvailable(List<String> runtimes, Integer... versionTokens) {
String versionSearchString = StringUtils.join(versionTokens, ".");
for (String runtime : runtimes) {
String versionString = extractVersionTokenFromRuntimeString(runtime);
if (versionString.startsWith(versionSearchString)) {
return true;
}
}
return false;
}

private String extractVersionTokenFromRuntimeString(String runtime) {
String modifiedRuntimeString = runtime;
for (String prefix : VERSION_PREFIXES) {
modifiedRuntimeString = modifiedRuntimeString.replace(prefix, "");
}

int bracketIndex = modifiedRuntimeString.indexOf("[");
modifiedRuntimeString = modifiedRuntimeString.substring(0, bracketIndex).trim();

return modifiedRuntimeString;
}

}
Expand Up @@ -28,7 +28,7 @@ public void isRuntimeAvailableTest() throws DetectableException {
DotNetRuntimeFinder runtimeFinder = Mockito.mock(DotNetRuntimeFinder.class);
Mockito.when(runtimeFinder.listAvailableRuntimes()).thenReturn(VALID_RUNTIME_STRINGS);

DotNetRuntimeAvailabilityVerifier runtimeResolver = new DotNetRuntimeAvailabilityVerifier(runtimeFinder);
DotNetRuntimeAvailabilityVerifier2 runtimeResolver = new DotNetRuntimeAvailabilityVerifier2(runtimeFinder);
assertAvailability(Assertions::assertTrue, runtimeResolver, 2, 1);
assertAvailability(Assertions::assertTrue, runtimeResolver, 3, 1);
assertTrue(runtimeResolver.isRuntimeAvailable(2, 1, 18), "Expected 2.1.18 runtime to be available when passed as an array of Integers");
Expand All @@ -43,12 +43,12 @@ public void isRuntimeAvailableSemanticVersionStringTest() throws DetectableExcep
DotNetRuntimeFinder runtimeFinder = Mockito.mock(DotNetRuntimeFinder.class);
Mockito.when(runtimeFinder.listAvailableRuntimes()).thenReturn(VALID_RUNTIME_STRINGS);

DotNetRuntimeAvailabilityVerifier runtimeResolver = new DotNetRuntimeAvailabilityVerifier(runtimeFinder);
DotNetRuntimeAvailabilityVerifier2 runtimeResolver = new DotNetRuntimeAvailabilityVerifier2(runtimeFinder);
assertTrue(runtimeResolver.isRuntimeAvailable("2.1.18"), "Expected 2.1.18 runtime to be available when passed as a semanticVersion string");
assertFalse(runtimeResolver.isRuntimeAvailable("4.0"), "Expected 4.0 runtime not to be available when passed as a semanticVersion string");
}

private void assertAvailability(BiConsumer<Boolean, String> assertion, DotNetRuntimeAvailabilityVerifier nugetRuntimeResolver, Integer majorVersion, Integer minorVersion) throws DetectableException {
private void assertAvailability(BiConsumer<Boolean, String> assertion, DotNetRuntimeAvailabilityVerifier2 nugetRuntimeResolver, Integer majorVersion, Integer minorVersion) throws DetectableException {
boolean isVersionAvailable = nugetRuntimeResolver.isRuntimeAvailable(majorVersion, minorVersion);
assertion.accept(isVersionAvailable, String.format("Different runtime availability expected for %d.%d runtime", majorVersion, minorVersion));
}
Expand Down

0 comments on commit 6d08341

Please sign in to comment.