Skip to content

Commit

Permalink
chore: fix sonar issues (#3771)
Browse files Browse the repository at this point in the history
* exclude httpclient 3

Signed-off-by: Pavel Jareš <[email protected]>

* fix

Signed-off-by: Andrea Tabone <[email protected]>

* upgrade spring-boot-actuator

Signed-off-by: Andrea Tabone <[email protected]>

* update express

Signed-off-by: Andrea Tabone <[email protected]>

* update dependencies

Signed-off-by: Andrea Tabone <[email protected]>

* fix bean issue

Signed-off-by: Andrea Tabone <[email protected]>

* fix apache compress dependency (detected by ./gradlew buildEnvironment)

Signed-off-by: Pavel Jareš <[email protected]>

* remove obsolete test

Signed-off-by: Andrea Tabone <[email protected]>

* update snapshots

Signed-off-by: Andrea Tabone <[email protected]>

* https://sonarcloud.io/project/issues?severities=BLOCKER%2CCRITICAL%2CMAJOR%2CMINOR&sinceLeakPeriod=true&issueStatuses=OPEN%2CCONFIRMED&types=BUG&branch=v3.x.x&id=zowe_api-layer&open=AZHGil4o3VXWrGgTbCrq&tab=code

Signed-off-by: Richard Salac <[email protected]>

* https://sonarcloud.io/project/issues?impactSeverities=HIGH&issueStatuses=OPEN%2CCONFIRMED&branch=v3.x.x&id=zowe_api-layer&open=AZHsBjomCy50THmnpXJw

Signed-off-by: Richard Salac <[email protected]>

* https://sonarcloud.io/project/issues?impactSeverities=HIGH&issueStatuses=OPEN%2CCONFIRMED&branch=v3.x.x&id=zowe_api-layer&open=AZG8RLICaDaTTh7MLIuh

Signed-off-by: Richard Salac <[email protected]>

* https://sonarcloud.io/project/issues?impactSeverities=HIGH&issueStatuses=OPEN%2CCONFIRMED&branch=v3.x.x&id=zowe_api-layer&open=AZG8RK6DaDaTTh7MLItY

Signed-off-by: Richard Salac <[email protected]>

* https://sonarcloud.io/project/issues?impactSeverities=HIGH&issueStatuses=OPEN%2CCONFIRMED&branch=v3.x.x&id=zowe_api-layer&open=AZG8RK-saDaTTh7MLIty&tab=code

Signed-off-by: Richard Salac <[email protected]>

* https://sonarcloud.io/project/issues?impactSeverities=HIGH&issueStatuses=OPEN%2CCONFIRMED&branch=v3.x.x&id=zowe_api-layer&open=AZG8RKuHaDaTTh7MLIr_

Signed-off-by: Richard Salac <[email protected]>

* https://sonarcloud.io/project/issues?impactSeverities=HIGH&issueStatuses=OPEN%2CCONFIRMED&branch=v3.x.x&id=zowe_api-layer&open=AZG8RKLxaDaTTh7MLIos

Signed-off-by: Richard Salac <[email protected]>

* .collect(Collectors.toList()) -> .toList()

multiple issues, e.g.
https://sonarcloud.io/project/issues?impactSeverities=MEDIUM&issueStatuses=OPEN%2CCONFIRMED&branch=v3.x.x&id=zowe_api-layer&open=AZG8RK1saDaTTh7MLItF

Signed-off-by: Richard Salac <[email protected]>

* https://sonarcloud.io/project/issues?impactSeverities=MEDIUM&issueStatuses=OPEN%2CCONFIRMED&branch=v3.x.x&id=zowe_api-layer&open=AZG8RKaAaDaTTh7MLIqK

Signed-off-by: Richard Salac <[email protected]>

* https://sonarcloud.io/project/issues?impactSeverities=MEDIUM&issueStatuses=OPEN%2CCONFIRMED&branch=v3.x.x&id=zowe_api-layer&open=AZG8RKmTaDaTTh7MLIrS

Signed-off-by: Richard Salac <[email protected]>

* https://sonarcloud.io/project/issues?impactSeverities=MEDIUM&issueStatuses=OPEN%2CCONFIRMED&branch=v3.x.x&id=zowe_api-layer&open=AZG8RKcQaDaTTh7MLIqT

Signed-off-by: Richard Salac <[email protected]>

* https://sonarcloud.io/project/issues?impactSeverities=MEDIUM&issueStatuses=OPEN%2CCONFIRMED&branch=v3.x.x&id=zowe_api-layer&open=AZHGil4o3VXWrGgTbCro

Signed-off-by: Richard Salac <[email protected]>

* https://sonarcloud.io/project/issues?impactSeverities=HIGH&issueStatuses=OPEN%2CCONFIRMED&branch=v3.x.x&id=zowe_api-layer&open=AZHsBjomCy50THmnpXJw

Signed-off-by: Richard Salac <[email protected]>

* kick the pipeline

Signed-off-by: Richard Salac <[email protected]>

* https://sonarcloud.io/project/issues?impactSeverities=MEDIUM&issueStatuses=OPEN%2CCONFIRMED&branch=v3.x.x&id=zowe_api-layer&open=AZG8RKaAaDaTTh7MLIqQ

Signed-off-by: Richard Salac <[email protected]>

* fix

Signed-off-by: Richard Salac <[email protected]>

* https://sonarcloud.io/project/issues?impactSeverities=MEDIUM&issueStatuses=OPEN%2CCONFIRMED&branch=v3.x.x&id=zowe_api-layer&open=AZG8RK4naDaTTh7MLItK

Signed-off-by: Richard Salac <[email protected]>

* https://sonarcloud.io/project/issues?impactSeverities=HIGH&issueStatuses=OPEN%2CCONFIRMED&branch=v3.x.x&id=zowe_api-layer&open=AZHsBjomCy50THmnpXJw

Signed-off-by: Richard Salac <[email protected]>

* https://sonarcloud.io/project/issues?impactSeverities=HIGH&issueStatuses=OPEN%2CCONFIRMED&branch=v3.x.x&id=zowe_api-layer&open=AZG8RKuHaDaTTh7MLIr_

Signed-off-by: Richard Salac <[email protected]>

* https://sonarcloud.io/project/issues?impactSeverities=HIGH&sinceLeakPeriod=true&issueStatuses=OPEN%2CCONFIRMED&pullRequest=3771&id=zowe_api-layer&open=AZIAY6mjj_lHPdft3jU9

Signed-off-by: Richard Salac <[email protected]>

* https://sonarcloud.io/project/issues?issueStatuses=OPEN%2CCONFIRMED&pullRequest=3771&id=zowe_api-layer&open=AZIAY6nOj_lHPdft3jU-

Signed-off-by: Richard Salac <[email protected]>

* https://sonarcloud.io/project/issues?issueStatuses=OPEN%2CCONFIRMED&pullRequest=3771&id=zowe_api-layer&open=AZIAY6mJj_lHPdft3jU7

Signed-off-by: Richard Salac <[email protected]>

* https://sonarcloud.io/project/issues?issueStatuses=OPEN%2CCONFIRMED&pullRequest=3771&id=zowe_api-layer&open=AZIAY6jlj_lHPdft3jU6&tab=code

Signed-off-by: Richard Salac <[email protected]>

* remove unused variable

Signed-off-by: Andrea Tabone <[email protected]>

---------

Signed-off-by: Pavel Jareš <[email protected]>
Signed-off-by: Andrea Tabone <[email protected]>
Signed-off-by: Richard Salac <[email protected]>
Signed-off-by: Pavel Jareš <[email protected]>
Co-authored-by: Pavel Jareš <[email protected]>
Co-authored-by: Andrea Tabone <[email protected]>
Co-authored-by: Pavel Jareš <[email protected]>
Co-authored-by: Andrea Tabone <[email protected]>
  • Loading branch information
5 people authored Sep 18, 2024
1 parent d7dc7ed commit c020b1a
Show file tree
Hide file tree
Showing 42 changed files with 316 additions and 340 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,6 @@
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.StreamSupport;

/**
Expand Down Expand Up @@ -179,6 +178,6 @@ private <T> List<T> toList(final Iterable<T> iterable) {
return Collections.emptyList();
}
return StreamSupport.stream(iterable.spliterator(), false)
.collect(Collectors.toList());
.toList();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,15 +10,6 @@

package org.zowe.apiml.apicatalog.instance;

import org.zowe.apiml.apicatalog.model.APIContainer;
import org.zowe.apiml.apicatalog.services.cached.CachedProductFamilyService;
import org.zowe.apiml.apicatalog.services.cached.CachedServicesService;
import org.zowe.apiml.message.log.ApimlLogger;
import org.zowe.apiml.product.constants.CoreService;
import org.zowe.apiml.product.gateway.GatewayNotAvailableException;
import org.zowe.apiml.product.instance.InstanceInitializationException;
import org.zowe.apiml.product.logging.annotations.InjectApimlLogger;
import org.zowe.apiml.product.registry.CannotRegisterServiceException;
import com.netflix.appinfo.InstanceInfo;
import com.netflix.discovery.shared.Application;
import com.netflix.discovery.shared.Applications;
Expand All @@ -29,6 +20,15 @@
import org.springframework.retry.annotation.Recover;
import org.springframework.retry.annotation.Retryable;
import org.springframework.stereotype.Service;
import org.zowe.apiml.apicatalog.model.APIContainer;
import org.zowe.apiml.apicatalog.services.cached.CachedProductFamilyService;
import org.zowe.apiml.apicatalog.services.cached.CachedServicesService;
import org.zowe.apiml.message.log.ApimlLogger;
import org.zowe.apiml.product.constants.CoreService;
import org.zowe.apiml.product.gateway.GatewayNotAvailableException;
import org.zowe.apiml.product.instance.InstanceInitializationException;
import org.zowe.apiml.product.logging.annotations.InjectApimlLogger;
import org.zowe.apiml.product.registry.CannotRegisterServiceException;

import java.util.Collection;
import java.util.List;
Expand Down Expand Up @@ -60,8 +60,8 @@ public class InstanceInitializeService {
* @throws CannotRegisterServiceException if the fetch fails or the catalog is not registered with the discovery
*/
@Retryable(
value = {RetryException.class},
exclude = CannotRegisterServiceException.class,
retryFor = {RetryException.class},
noRetryFor = CannotRegisterServiceException.class,
maxAttempts = 5,
backoff = @Backoff(delayExpression = "#{${apiml.service-registry.serviceFetchDelayInMillis}}"))
public void retrieveAndRegisterAllInstancesWithCatalog() throws CannotRegisterServiceException {
Expand Down Expand Up @@ -102,7 +102,7 @@ private void updateCacheWithAllInstances() {
List<Application> listApplication = discoveryApplications.getRegisteredApplications()
.stream()
.filter(application -> !application.getInstances().isEmpty())
.collect(Collectors.toList());
.toList();

// Return an empty string if no services are found after filtering
if (listApplication.isEmpty()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,33 +11,26 @@
package org.zowe.apiml.apicatalog.instance;


import com.netflix.appinfo.InstanceInfo;
import com.netflix.discovery.shared.Application;
import com.netflix.discovery.shared.Applications;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import org.zowe.apiml.apicatalog.model.APIContainer;
import org.zowe.apiml.apicatalog.services.cached.CachedProductFamilyService;
import org.zowe.apiml.apicatalog.services.cached.CachedServicesService;
import org.zowe.apiml.apicatalog.util.ContainerServiceMockUtil;
import org.zowe.apiml.apicatalog.util.ContainerServiceState;
import org.zowe.apiml.product.constants.CoreService;
import org.zowe.apiml.product.gateway.GatewayClient;
import com.netflix.appinfo.InstanceInfo;
import com.netflix.discovery.shared.Application;
import com.netflix.discovery.shared.Applications;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.stream.Collectors;

import static org.mockito.Mockito.*;
import static org.zowe.apiml.constants.EurekaMetadataDefinition.CATALOG_ID;
import static org.mockito.Mockito.any;
import static org.mockito.Mockito.anyString;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

class InstanceRefreshServiceTest {

Expand Down Expand Up @@ -79,7 +72,7 @@ void prepareState() {
discoveredState.setServices(new ArrayList<>());
discoveredState.setContainers(new ArrayList<>());
discoveredState.setInstances(new ArrayList<>());
discoveredState.setApplications(new ArrayList<>());
discoveredState.setApplications(new ArrayList<>());
}

@Nested
Expand All @@ -97,7 +90,7 @@ void prepareApplication() {
discoveredState.getInstances().add(newInstanceOfService);
Application service5 = new Application("service5", Collections.singletonList(newInstanceOfService));
discoveredState.getApplications().add(service5);

teachMocks();
}

Expand All @@ -110,7 +103,7 @@ void addServiceToCache() {

verify(cachedProductFamilyService, times(1))
.saveContainerFromInstance("api-five", newInstanceOfService);
}
}
}

@Nested
Expand All @@ -123,21 +116,21 @@ void prepareService() {
service3 = cachedState.getApplications()
.stream()
.filter(application -> application.getName().equalsIgnoreCase("service3"))
.collect(Collectors.toList()).get(0);
.toList().get(0);

changedInstanceOfService = service3.getInstances().get(0);
changedInstanceOfService.getMetadata().put(CATALOG_ID, "api-three");
service3.getInstances().add(0, changedInstanceOfService);
discoveredState.getApplications().add(service3);
discoveredState.getApplications().add(service3);

teachMocks();

}

@Test
void serviceIsRemovedFromCache() {
changedInstanceOfService.setActionType(InstanceInfo.ActionType.DELETED);

underTest.refreshCacheFromDiscovery();

verify(cachedProductFamilyService, times(1))
Expand All @@ -149,7 +142,7 @@ void serviceIsRemovedFromCache() {
@Test
void serviceIsModifiedInCache() {
changedInstanceOfService.setActionType(InstanceInfo.ActionType.MODIFIED);

APIContainer apiContainer3 = cachedState.getContainers()
.stream()
.filter(apiContainer -> apiContainer.getId().equals("api-three"))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -98,12 +98,14 @@ void providedNoInstanceInfoIsReturned_thenInstanceInitializationExceptionIsThrow

@Test
void testGetInstanceInfo_whenResponseHasEmptyBody() {
HttpClientMockHelper.mockResponse(response, "");
InstanceInfo instanceInfo = instanceRetrievalService.getInstanceInfo(CoreService.API_CATALOG.getServiceId());
assertNull(instanceInfo);
}

@Test
void testGetInstanceInfo_whenResponseCodeIsSuccessWithUnParsedJsonText() {
HttpClientMockHelper.mockResponse(response, "UNPARSABLE_JSON");
InstanceInfo instanceInfo = instanceRetrievalService.getInstanceInfo(CoreService.API_CATALOG.getServiceId());
assertNull(instanceInfo);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,13 @@

package org.zowe.apiml.apicatalog.util;

import com.netflix.appinfo.InstanceInfo;
import com.netflix.discovery.shared.Application;
import org.zowe.apiml.apicatalog.model.APIContainer;
import org.zowe.apiml.apicatalog.model.APIService;
import org.zowe.apiml.apicatalog.services.cached.CachedServicesService;
import com.netflix.appinfo.InstanceInfo;
import com.netflix.discovery.shared.Application;

import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;

import static org.mockito.Mockito.when;
Expand Down Expand Up @@ -81,10 +80,8 @@ private int generateInstancesAndServices(ContainerServiceState containerServiceS
int limit) {
List<InstanceInfo> generatedInstances = Stream.iterate(index, i -> i + 1)
.limit(limit)
.map(mIndex -> {
return getInstance(mIndex, serviceId);
}).collect(Collectors.toList());

.map(mIndex -> getInstance(mIndex, serviceId))
.toList();

addApiService(serviceId, containerServiceState.getServices(), services);
addInstancesToApplications(
Expand Down
59 changes: 31 additions & 28 deletions api-catalog-ui/frontend/src/components/Error/ErrorFormatter.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -31,59 +31,62 @@ function extractAjaxError(error) {
return null;
}

function formaHtmlError(message, color) {
function formatHtmlError(message, color) {
return (
<Typography key={uuidv4()} variant="h5" style={{ color, fontWeight: 'semiBold' }}>
{htmr(message)}
</Typography>
);
}

const formatError = (error) => {
let message = 'Could not determine error';
function handleValidError(error) {
let message = error.error;
let color = colorDanger;
const extractedAjaxError = extractAjaxError(error.error);
if (extractedAjaxError) {
const { msg, clr } = extractedAjaxError;
return formatHtmlError(msg, clr);
}
if (error.key !== null && error.key !== undefined) {
message = `${error.key} : ${error.text}`;
switch (error.messageType.levelStr) {
case 'ERROR':
color = colorDanger;
break;
case 'WARNING':
color = colorWarning;
break;
default:
color = colorDanger;
}
}
return formatHtmlError(message, color);
}

const formatError = (error) => {
const message = 'Could not determine error';

if (error === null || error === undefined) {
return formaHtmlError(message, color);
return formatHtmlError(message, colorDanger);
}

if (error.id !== undefined && error.timestamp !== undefined) {
message = error.error;
color = colorDanger;
const extractedAjaxError = extractAjaxError(error.error);
if (extractedAjaxError) {
const { msg, clr } = extractedAjaxError;
return formaHtmlError(msg, clr);
}
if (error.key !== null && error.key !== undefined) {
message = `${error.key} : ${error.text}`;
switch (error.messageType.levelStr) {
case 'ERROR':
color = colorDanger;
break;
case 'WARNING':
color = colorWarning;
break;
default:
color = colorDanger;
}
}
return formaHtmlError(message, color);
return handleValidError(error);
}

if (error.name === 'AjaxError') {
const extractedAjaxError = extractAjaxError(error);
if (extractedAjaxError) {
const { msg, clr } = extractedAjaxError;
return formaHtmlError(msg, clr);
return formatHtmlError(msg, clr);
}
}

if (error.message !== undefined) {
return formaHtmlError(error.message, colorDanger);
return formatHtmlError(error.message, colorDanger);
}

return formaHtmlError(message, color);
return formatHtmlError(message, colorDanger);
};

export default formatError;
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,10 @@

package org.zowe.apiml.extension;

import static com.fasterxml.jackson.databind.DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
import lombok.extern.slf4j.Slf4j;
import org.zowe.apiml.extension.ExtensionDefinition.ApimlServices;

import java.io.File;
import java.nio.charset.Charset;
Expand All @@ -21,14 +24,8 @@
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import java.util.stream.Collectors;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;

import org.zowe.apiml.extension.ExtensionDefinition.ApimlServices;

import lombok.extern.slf4j.Slf4j;
import static com.fasterxml.jackson.databind.DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES;

@Slf4j
public class ExtensionConfigReader {
Expand All @@ -46,7 +43,7 @@ public String[] getBasePackages() {
.filter(Objects::nonNull)
.map(ApimlServices::getBasePackage)
.filter(Objects::nonNull)
.collect(Collectors.toList())
.toList()
.toArray(new String[0]);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,12 @@

package org.zowe.apiml.security.common.filter;

import jakarta.servlet.FilterChain;
import jakarta.servlet.ServletException;
import jakarta.servlet.ServletRequest;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletRequestWrapper;
import jakarta.servlet.http.HttpServletResponse;
import lombok.Getter;
import lombok.NonNull;
import lombok.RequiredArgsConstructor;
Expand All @@ -20,20 +26,13 @@
import org.zowe.apiml.product.logging.annotations.InjectApimlLogger;
import org.zowe.apiml.security.common.verify.CertificateValidator;

import jakarta.servlet.FilterChain;
import jakarta.servlet.ServletException;
import jakarta.servlet.ServletRequest;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletRequestWrapper;
import jakarta.servlet.http.HttpServletResponse;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.security.cert.Certificate;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;
import java.util.*;
import java.util.function.Predicate;
import java.util.stream.Collectors;

/**
* This filter processes certificates on request. It decides, which certificates are considered for client authentication
Expand Down Expand Up @@ -147,7 +146,7 @@ protected void doFilterInternal(@NonNull HttpServletRequest request, @NonNull Ht
private X509Certificate[] selectCerts(X509Certificate[] certs, Predicate<X509Certificate> test) {
return Arrays.stream(certs)
.filter(test)
.collect(Collectors.toList()).toArray(new X509Certificate[0]);
.toList().toArray(new X509Certificate[0]);
}

public String base64EncodePublicKey(X509Certificate cert) {
Expand Down
Loading

0 comments on commit c020b1a

Please sign in to comment.