diff options
author | 2025-02-26 17:31:51 +0000 | |
---|---|---|
committer | 2025-03-03 17:12:39 +0000 | |
commit | d2c683570632d0510749dfd97aa47caeea471643 (patch) | |
tree | 975214b483c346c35f4abf9ee55ed871508f8579 /a1-policy-management/src | |
parent | c9da0bff44e1c8d07c9b6fd3d8657c71cb1f0c9a (diff) |
Controller behaviour fixesoslo
Issue-ID: CCSDK-4090
Change-Id: I76644282bea67e33ff346fe999d65f4d3b54751b
Signed-off-by: saul.gill <saul.gill@est.tech>
Diffstat (limited to 'a1-policy-management/src')
5 files changed, 77 insertions, 14 deletions
diff --git a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v2/RicRepositoryController.java b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v2/RicRepositoryController.java index f7872a38..53abcd71 100644 --- a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v2/RicRepositoryController.java +++ b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v2/RicRepositoryController.java @@ -3,6 +3,7 @@ * ONAP : ccsdk oran * ====================================================================== * Copyright (C) 2019-2023 Nordix Foundation. All rights reserved. + * Modifications Copyright (C) 2025 OpenInfra Foundation Europe. All rights reserved. * ====================================================================== * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -33,6 +34,7 @@ import org.onap.ccsdk.oran.a1policymanagementservice.models.v2.RicInfoList; import org.onap.ccsdk.oran.a1policymanagementservice.repository.PolicyTypes; import org.onap.ccsdk.oran.a1policymanagementservice.repository.Ric; import org.onap.ccsdk.oran.a1policymanagementservice.repository.Rics; +import org.onap.ccsdk.oran.a1policymanagementservice.util.v3.Helper; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.RestController; @@ -41,6 +43,7 @@ import reactor.core.publisher.Mono; import java.util.ArrayList; import java.util.List; +import java.util.Set; @RestController("ricRepositoryControllerV2") @RequiredArgsConstructor @@ -63,12 +66,17 @@ public class RicRepositoryController implements NearRtRicRepositoryApi { private static final String GET_RIC_DETAILS = "Either a Near-RT RIC identity or a Managed Element identity can be specified.<br>" // + "The intention with Managed Element identity is the ID used in O1 for accessing the traffical element (such as the ID of CU)."; + private final Helper helper; + @Override public Mono<ResponseEntity<RicInfo>> getRic( final String managedElementId, final String ricId, final ServerWebExchange exchange) throws Exception { + + helper.validateQueryParameters(exchange, Set.of("managed_element_id", "ric_id")); + if (managedElementId != null && ricId != null) { - throw new InvalidRequestException("Give one query parameter"); + throw new InvalidRequestException("Only one parameter allowed"); } else if (managedElementId != null) { Ric ric = this.rics.lookupRicForManagedElement(managedElementId); return Mono.just(new ResponseEntity<>(toRicInfo(ric), HttpStatus.OK)); @@ -76,7 +84,7 @@ public class RicRepositoryController implements NearRtRicRepositoryApi { RicInfo info = toRicInfo(this.rics.getRic(ricId)); return Mono.just(new ResponseEntity<>(info, HttpStatus.OK)); } else { - throw new InvalidRequestException("Give one query parameter"); + throw new InvalidRequestException("Only one parameter allowed"); } } diff --git a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v3/RicRepositoryControllerV3.java b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v3/RicRepositoryControllerV3.java index 89d47d7f..ce2769e6 100644 --- a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v3/RicRepositoryControllerV3.java +++ b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v3/RicRepositoryControllerV3.java @@ -2,7 +2,7 @@ * ========================LICENSE_START================================= * ONAP : ccsdk oran * ====================================================================== - * Copyright (C) 2024 OpenInfra Foundation Europe. All rights reserved. + * Copyright (C) 2024-2025 OpenInfra Foundation Europe. All rights reserved. * ====================================================================== * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -24,17 +24,25 @@ import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import org.onap.ccsdk.oran.a1policymanagementservice.controllers.api.v3.NearRtRicRepositoryApi; import org.onap.ccsdk.oran.a1policymanagementservice.controllers.v2.Consts; +import org.onap.ccsdk.oran.a1policymanagementservice.exceptions.InvalidRequestException; import org.onap.ccsdk.oran.a1policymanagementservice.mappers.v3.RicRepositoryMapper; import org.onap.ccsdk.oran.a1policymanagementservice.controllers.v2.RicRepositoryController; import org.onap.ccsdk.oran.a1policymanagementservice.models.v3.RicInfo; import org.onap.ccsdk.oran.a1policymanagementservice.models.v3.RicInfoList; +import org.onap.ccsdk.oran.a1policymanagementservice.repository.Ric; +import org.onap.ccsdk.oran.a1policymanagementservice.repository.Rics; import org.onap.ccsdk.oran.a1policymanagementservice.service.v3.ErrorHandlingService; +import org.onap.ccsdk.oran.a1policymanagementservice.util.v3.Helper; +import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.server.ServerWebExchange; import reactor.core.publisher.Mono; +import java.util.List; +import java.util.Set; + @RestController("ricRepositoryControllerV3") @RequiredArgsConstructor @Tag( @@ -53,17 +61,50 @@ public class RicRepositoryControllerV3 implements NearRtRicRepositoryApi { private final ErrorHandlingService errorHandlingService; + private final Rics rics; + + private final Helper helper; + @Override - public Mono<ResponseEntity<RicInfo>> getRic(String managedElementId, String ricId, String accept, ServerWebExchange exchange) throws Exception { - return ricRepositoryController.getRic(managedElementId, ricId, exchange) - .map(responseEntity -> new ResponseEntity<>(ricRepositoryMapper.toRicInfoV3(responseEntity.getBody()), responseEntity.getStatusCode())) - .doOnError(errorHandlingService::handleError); + public Mono<ResponseEntity<RicInfo>> getRic(String ricId, String accept, ServerWebExchange exchange) throws Exception { + + helper.validateQueryParameters(exchange, Set.of("ricId")); + + if (ricId != null) { + RicInfo info = toRicInfo(this.rics.getRic(ricId)); + return Mono.just(new ResponseEntity<>(info, HttpStatus.OK)) + .map(responseEntity -> new ResponseEntity<>( + responseEntity.getBody(), responseEntity.getStatusCode())) + .doOnError(errorHandlingService::handleError); + } else { + throw new InvalidRequestException("Only one parameter allowed"); + } } @Override - public Mono<ResponseEntity<RicInfoList>> getRics(String policyTypeId, String accept, ServerWebExchange exchange) throws Exception { + public Mono<ResponseEntity<RicInfoList>> getRics(String policyTypeId, String accept, + ServerWebExchange exchange) throws Exception { return ricRepositoryController.getRics(policyTypeId, exchange) - .map(responseEntity -> new ResponseEntity<>(ricRepositoryMapper.toRicInfoListV3(responseEntity.getBody()), responseEntity.getStatusCode())) + .map(responseEntity -> + new ResponseEntity<>( + ricRepositoryMapper.toRicInfoListV3(responseEntity.getBody()), + responseEntity.getStatusCode())) .doOnError(errorHandlingService::handleError); } + + private RicInfo toRicInfo(Ric ric) { + return new RicInfo().ricId(ric.id()) + .managedElementIds((List<String>) ric.getManagedElementIds()) + .policyTypeIds((List<String>) ric.getSupportedPolicyTypeNames()) + .state(toRicState(ric.getState())); + } + + private RicInfo.StateEnum toRicState(Ric.RicState state) { + return switch (state) { + case AVAILABLE -> RicInfo.StateEnum.AVAILABLE; + case CONSISTENCY_CHECK -> RicInfo.StateEnum.CONSISTENCY_CHECK; + case SYNCHRONIZING -> RicInfo.StateEnum.SYNCHRONIZING; + case UNAVAILABLE -> RicInfo.StateEnum.UNAVAILABLE; + }; + } } diff --git a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/util/v3/Helper.java b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/util/v3/Helper.java index 3f301b77..8f3be34a 100644 --- a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/util/v3/Helper.java +++ b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/util/v3/Helper.java @@ -2,7 +2,7 @@ * ========================LICENSE_START================================= * ONAP : ccsdk oran * ====================================================================== - * Copyright (C) 2024 OpenInfra Foundation Europe. All rights reserved. + * Copyright (C) 2024-2025 OpenInfra Foundation Europe. All rights reserved. * ====================================================================== * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -23,6 +23,7 @@ package org.onap.ccsdk.oran.a1policymanagementservice.util.v3; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import lombok.RequiredArgsConstructor; +import org.onap.ccsdk.oran.a1policymanagementservice.exceptions.InvalidRequestException; import org.onap.ccsdk.oran.a1policymanagementservice.exceptions.ServiceException; import org.onap.ccsdk.oran.a1policymanagementservice.models.v3.PolicyInformation; import org.onap.ccsdk.oran.a1policymanagementservice.models.v3.PolicyObjectInformation; @@ -43,6 +44,7 @@ import reactor.core.publisher.Mono; import java.lang.invoke.MethodHandles; import java.time.Instant; import java.util.Collection; +import java.util.Set; import java.util.UUID; import java.util.stream.Collectors; @@ -149,4 +151,17 @@ public class Helper { .map(type -> new PolicyTypeInformation(type.getId(), ric.getConfig().getRicId())) .collect(Collectors.toList()); } + + + public void validateQueryParameters(ServerWebExchange exchange, Set<String> allowedParams) throws InvalidRequestException { + Set<String> receivedParams = exchange.getRequest().getQueryParams().keySet(); + + Set<String> extraParams = receivedParams.stream() + .filter(param -> !allowedParams.contains(param)) + .collect(Collectors.toSet()); + + if (!extraParams.isEmpty()) { + throw new InvalidRequestException("Unexpected query parameters: " + extraParams); + } + } } diff --git a/a1-policy-management/src/main/resources/application_configuration_schema.json b/a1-policy-management/src/main/resources/application_configuration_schema.json index 8476951c..3186dae6 100644 --- a/a1-policy-management/src/main/resources/application_configuration_schema.json +++ b/a1-policy-management/src/main/resources/application_configuration_schema.json @@ -72,8 +72,7 @@ }, "required": [ "name", - "baseUrl", - "managedElementIds" + "baseUrl" ], "additionalProperties": false } diff --git a/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v3/RicRepositoryControllerV3Test.java b/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v3/RicRepositoryControllerV3Test.java index 455ea0cf..ece5d8c2 100644 --- a/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v3/RicRepositoryControllerV3Test.java +++ b/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v3/RicRepositoryControllerV3Test.java @@ -2,7 +2,7 @@ * ========================LICENSE_START================================= * ONAP : ccsdk oran * ====================================================================== - * Copyright (C) 2024 OpenInfra Foundation Europe. All rights reserved. + * Copyright (C) 2024-2025 OpenInfra Foundation Europe. All rights reserved. * ====================================================================== * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -105,7 +105,7 @@ class RicRepositoryControllerV3Test { @Test void testGetRic() throws IOException { testHelperTest.addPolicyType("1", "ricAdded"); - Mono<ResponseEntity<String>> responseEntityMono = testHelperTest.restClientV3().getForEntity("/rics/ric?ricId=ricAdded"); + Mono<ResponseEntity<String>> responseEntityMono = testHelperTest.restClientV3().getForEntity("/rics/ricAdded"); testHelperTest.testSuccessResponse(responseEntityMono, HttpStatus.OK, responseBody -> responseBody .contains("{\"ricId\":\"ricAdded\",\"managedElementIds\":[],\"state\":\"AVAILABLE\",\"policyTypeIds\":[\"1\"]}")); } |