Skip to content

Commit

Permalink
Merge branch 'v3.x.x' into reboot/coverity-fix-v3
Browse files Browse the repository at this point in the history
  • Loading branch information
Shobhajayanna authored Sep 18, 2024
2 parents b34775c + c020b1a commit 77ad870
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 77ad870

Please sign in to comment.