From 09543cac5d1052d87adafaf55bd94475fd86ca68 Mon Sep 17 00:00:00 2001 From: Gabriel Date: Fri, 31 Aug 2018 11:20:43 +0200 Subject: Add appc lcm request formatter Formatter is used to dash case recipe in URL and camel case it in body. Issue-ID: POLICY-1083 Change-Id: I908ae93665f3d069b3a032ae378b7775ebe1110a Signed-off-by: Gabriel --- .../actor/appclcm/AppcLcmActorServiceProvider.java | 12 +-- .../actor/appclcm/AppcLcmRecipeFormatter.java | 47 +++++++++++ .../actor/appclcm/AppcLcmRecipeFormatterTest.java | 98 ++++++++++++++++++++++ 3 files changed, 152 insertions(+), 5 deletions(-) create mode 100644 controlloop/common/actors/actor.appclcm/src/main/java/org/onap/policy/controlloop/actor/appclcm/AppcLcmRecipeFormatter.java create mode 100644 controlloop/common/actors/actor.appclcm/src/test/java/org/onap/policy/controlloop/actor/appclcm/AppcLcmRecipeFormatterTest.java (limited to 'controlloop/common/actors/actor.appclcm/src') diff --git a/controlloop/common/actors/actor.appclcm/src/main/java/org/onap/policy/controlloop/actor/appclcm/AppcLcmActorServiceProvider.java b/controlloop/common/actors/actor.appclcm/src/main/java/org/onap/policy/controlloop/actor/appclcm/AppcLcmActorServiceProvider.java index 1d4af389f..b4151a9f9 100644 --- a/controlloop/common/actors/actor.appclcm/src/main/java/org/onap/policy/controlloop/actor/appclcm/AppcLcmActorServiceProvider.java +++ b/controlloop/common/actors/actor.appclcm/src/main/java/org/onap/policy/controlloop/actor/appclcm/AppcLcmActorServiceProvider.java @@ -3,13 +3,14 @@ * AppcLcmActorServiceProvider * ================================================================================ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved. + * Modifications copyright (c) 2018 Nokia * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -196,10 +197,12 @@ public class AppcLcmActorServiceProvider implements Actor { * The actual LCM request is placed in a wrapper used to send through dmaap. The current * version is 2.0 as of R1. */ + AppcLcmRecipeFormatter lcmRecipeFormatter = new AppcLcmRecipeFormatter(policy.getRecipe()); + LcmRequestWrapper dmaapRequest = new LcmRequestWrapper(); dmaapRequest.setVersion("2.0"); dmaapRequest.setCorrelationId(onset.getRequestId() + "-" + operation.getSubRequestId()); - dmaapRequest.setRpcName(policy.getRecipe().toLowerCase()); + dmaapRequest.setRpcName(lcmRecipeFormatter.getUrlRecipe()); dmaapRequest.setType("request"); /* This is the actual request that is placed in the dmaap wrapper. */ @@ -226,8 +229,7 @@ public class AppcLcmActorServiceProvider implements Actor { * An action is required for all APPC requests, this will be the recipe specified in the * policy. */ - appcRequest.setAction( - policy.getRecipe().substring(0, 1).toUpperCase() + policy.getRecipe().substring(1).toLowerCase()); + appcRequest.setAction(lcmRecipeFormatter.getBodyRecipe()); /* * For R1, the payloads will not be required for the Restart, Rebuild, or Migrate recipes. diff --git a/controlloop/common/actors/actor.appclcm/src/main/java/org/onap/policy/controlloop/actor/appclcm/AppcLcmRecipeFormatter.java b/controlloop/common/actors/actor.appclcm/src/main/java/org/onap/policy/controlloop/actor/appclcm/AppcLcmRecipeFormatter.java new file mode 100644 index 000000000..c9feb0d2a --- /dev/null +++ b/controlloop/common/actors/actor.appclcm/src/main/java/org/onap/policy/controlloop/actor/appclcm/AppcLcmRecipeFormatter.java @@ -0,0 +1,47 @@ +/* + * ============LICENSE_START======================================================= + * + * ================================================================================ + * Copyright (C) 2018 Nokia Intellectual Property. 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.controlloop.actor.appclcm; + +import com.google.common.collect.Lists; +import org.apache.commons.lang.StringUtils; + +import java.util.stream.Collectors; + +class AppcLcmRecipeFormatter { + + private final String dashCasedRecipe; + + AppcLcmRecipeFormatter(String dashCasedRecipe) { + this.dashCasedRecipe = dashCasedRecipe; + } + + String getUrlRecipe() { + return dashCasedRecipe.toLowerCase(); + } + + String getBodyRecipe() { + return Lists.newArrayList(dashCasedRecipe.split("-")) + .stream() + .map(String::toLowerCase) + .map(StringUtils::capitalize) + .collect(Collectors.joining("")); + } +} diff --git a/controlloop/common/actors/actor.appclcm/src/test/java/org/onap/policy/controlloop/actor/appclcm/AppcLcmRecipeFormatterTest.java b/controlloop/common/actors/actor.appclcm/src/test/java/org/onap/policy/controlloop/actor/appclcm/AppcLcmRecipeFormatterTest.java new file mode 100644 index 000000000..e63b04acd --- /dev/null +++ b/controlloop/common/actors/actor.appclcm/src/test/java/org/onap/policy/controlloop/actor/appclcm/AppcLcmRecipeFormatterTest.java @@ -0,0 +1,98 @@ +/* + * ============LICENSE_START======================================================= + * + * ================================================================================ + * Copyright (C) 2018 Nokia Intellectual Property. 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.controlloop.actor.appclcm; + +import static org.junit.Assert.assertEquals; + +import org.junit.Test; + + + +public class AppcLcmRecipeFormatterTest { + + @Test + public void shouldCorrectlyFormatRestartRequestWhenRestartGiven() { + //given + AppcLcmRecipeFormatter recipeFormatter = new AppcLcmRecipeFormatter("Restart"); + String expectedUrlRecipe = "restart"; + String expectedBodyRecipe = "Restart"; + + //when + String actualUrlRecipe = recipeFormatter.getUrlRecipe(); + String actualBodyRecipe = recipeFormatter.getBodyRecipe(); + + //then + assertEquals(expectedUrlRecipe, actualUrlRecipe); + assertEquals(expectedBodyRecipe, actualBodyRecipe); + } + + @Test + public void shouldReturnCapitalizedBodySingleWordRecipe() { + //given + AppcLcmRecipeFormatter recipeFormatter = new AppcLcmRecipeFormatter("moDify"); + String expectedRecipe = "Modify"; + + //when + String actualRecipe = recipeFormatter.getBodyRecipe(); + + //then + assertEquals(expectedRecipe, actualRecipe); + } + + @Test + public void shouldReturnCapitalizeAndJoinedBodyMultiWordRecipe() { + //given + AppcLcmRecipeFormatter recipeFormatter = new AppcLcmRecipeFormatter("coNfig-moDify"); + String expectedRecipe = "ConfigModify"; + + //when + String actualRecipe = recipeFormatter.getBodyRecipe(); + + //then + assertEquals(expectedRecipe, actualRecipe); + } + + @Test + public void shouldReturnLowercasedUrlSingleWordRecipe() { + //given + AppcLcmRecipeFormatter recipeFormatter = new AppcLcmRecipeFormatter("ModIfy"); + String expectedRecipe = "modify"; + + //when + String actualRecipe = recipeFormatter.getUrlRecipe(); + + //then + assertEquals(expectedRecipe, actualRecipe); + } + + @Test + public void shouldReturnLowercasedDashJoinedUrlMultiWordRecipe() { + //given + AppcLcmRecipeFormatter recipeFormatter = new AppcLcmRecipeFormatter("Config-MoDify"); + String expectedRecipe = "config-modify"; + + //when + String actualRecipe = recipeFormatter.getUrlRecipe(); + + //then + assertEquals(expectedRecipe, actualRecipe); + } +} \ No newline at end of file -- cgit 1.2.3-korg