From 5b0a36454780e8f29df5c7f2c0da91efc62e89a6 Mon Sep 17 00:00:00 2001 From: mojahidi Date: Thu, 15 Mar 2018 18:45:49 +0530 Subject: Added validation for Interface Operation Added validation for interface Operation, added input parameter names validation Change-Id: Ib02ec89f7fb53bd08481631c705c9f15757bf768 Issue-ID: SDC-1060 Signed-off-by: mojahidi --- .../be/components/InterfaceOperationTestUtils.java | 57 ++++++ .../InterfaceOperationValidationTest.java | 217 +++++++++++++++++++++ 2 files changed, 274 insertions(+) create mode 100644 catalog-be/src/test/java/org/openecomp/sdc/be/components/InterfaceOperationTestUtils.java create mode 100644 catalog-be/src/test/java/org/openecomp/sdc/be/components/validation/InterfaceOperationValidationTest.java (limited to 'catalog-be/src/test') diff --git a/catalog-be/src/test/java/org/openecomp/sdc/be/components/InterfaceOperationTestUtils.java b/catalog-be/src/test/java/org/openecomp/sdc/be/components/InterfaceOperationTestUtils.java new file mode 100644 index 0000000000..30549a3809 --- /dev/null +++ b/catalog-be/src/test/java/org/openecomp/sdc/be/components/InterfaceOperationTestUtils.java @@ -0,0 +1,57 @@ +/* + * Copyright © 2016-2018 European Support Limited + * + * 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. + */ + +package org.openecomp.sdc.be.components; + +import org.openecomp.sdc.be.datatypes.elements.ListDataDefinition; +import org.openecomp.sdc.be.datatypes.elements.OperationInputDefinition; +import org.openecomp.sdc.be.datatypes.elements.WorkflowOperationDataDefinition; +import org.openecomp.sdc.be.datatypes.elements.WorkflowOperationParamDataDefinition; +import org.openecomp.sdc.be.model.ArtifactDefinition; +import org.openecomp.sdc.be.model.InterfaceDefinition; +import org.openecomp.sdc.be.model.Operation; + +import java.util.Map; + +public interface InterfaceOperationTestUtils { + + default InterfaceDefinition createInterface(String uniqueID, String description, String type, + String toscaResourceName, Map op) { + InterfaceDefinition id = new InterfaceDefinition(); + id.setType(type); + id.setDescription(description); + id.setUniqueId(uniqueID); + id.setToscaResourceName(toscaResourceName); + id.setOperationsMap(op); + return id; + } + + + default Operation createInterfaceOperation(String uniqueID, String description, ArtifactDefinition artifactDefinition, + ListDataDefinition inputs, String name) { + Operation operation = new Operation(); + + operation.setUniqueId(uniqueID); + operation.setDescription(description); + operation.setImplementation(artifactDefinition); + operation.setInputs(inputs); + operation.setName(name); + + return operation; + } + + +} diff --git a/catalog-be/src/test/java/org/openecomp/sdc/be/components/validation/InterfaceOperationValidationTest.java b/catalog-be/src/test/java/org/openecomp/sdc/be/components/validation/InterfaceOperationValidationTest.java new file mode 100644 index 0000000000..c05dbda974 --- /dev/null +++ b/catalog-be/src/test/java/org/openecomp/sdc/be/components/validation/InterfaceOperationValidationTest.java @@ -0,0 +1,217 @@ +/* + * Copyright © 2016-2018 European Support Limited + * + * 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. + */ + +package org.openecomp.sdc.be.components.validation; + +import com.google.common.collect.Sets; +import fj.data.Either; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.MockitoAnnotations; +import org.openecomp.sdc.be.components.InterfaceOperationTestUtils; +import org.openecomp.sdc.be.components.impl.ResponseFormatManager; +import org.openecomp.sdc.be.datatypes.elements.ListDataDefinition; +import org.openecomp.sdc.be.datatypes.elements.OperationInputDefinition; +import org.openecomp.sdc.be.model.ArtifactDefinition; +import org.openecomp.sdc.be.model.Component; +import org.openecomp.sdc.be.model.ComponentParametersView; +import org.openecomp.sdc.be.model.InterfaceDefinition; +import org.openecomp.sdc.be.model.Operation; +import org.openecomp.sdc.be.model.Resource; +import org.openecomp.sdc.be.model.jsontitan.operations.ToscaOperationFacade; +import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus; +import org.openecomp.sdc.exception.ResponseFormat; + +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; +import java.util.Set; + +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.when; + +public class InterfaceOperationValidationTest implements InterfaceOperationTestUtils { + + private Resource resource = (Resource) getToscaFullElement().left().value(); + + ResponseFormatManager mock; + @Mock + ToscaOperationFacade toscaOperationFacade; + + @InjectMocks + InterfaceOperationValidationUtilTest interfaceOperationValidationUtilTest = new InterfaceOperationValidationUtilTest(); + private static final String RESOURCE_ID = "resource1"; + ListDataDefinition operationInputDefinitionList = new ListDataDefinition<>(); + @Before + public void init() { + MockitoAnnotations.initMocks(this); + mock = Mockito.mock(ResponseFormatManager.class); + when(toscaOperationFacade.getToscaElement(any(), any(ComponentParametersView.class))).thenReturn(Either.left(resource)); + when(mock.getResponseFormat(any())).thenReturn(new ResponseFormat()); + when(mock.getResponseFormat(any(), any())).thenReturn(new ResponseFormat()); + when(mock.getResponseFormat(any(), any(), any())).thenReturn(new ResponseFormat()); + } + + + @Test + public void testValidInterfaceOperation() { + operationInputDefinitionList.add(createMockOperationInputDefinition("label1")); + Collection operations = createInterfaceOperationData("op2", + "interface operation2",new ArtifactDefinition(), operationInputDefinitionList,"upgrade"); + Either booleanResponseFormatEither = interfaceOperationValidationUtilTest + .validateInterfaceOperations(operations, RESOURCE_ID, false); + Assert.assertTrue(booleanResponseFormatEither.isLeft()); + } + + @Test + public void testInterfaceOperationDescriptionLength() { + operationInputDefinitionList.add(createMockOperationInputDefinition("label1")); + Collection operations = createInterfaceOperationData("op2", + "interface operation2 - The Spring Initializer provides a project generator to make you " + + "productive with the certain technology stack from the beginning. You can create a skeleton project" + + "with web, data access (relational and NoSQL datastores), cloud, or messaging support", + new ArtifactDefinition(), operationInputDefinitionList,"update"); + Either booleanResponseFormatEither = interfaceOperationValidationUtilTest + .validateInterfaceOperations(operations, RESOURCE_ID, false); + Assert.assertTrue(booleanResponseFormatEither.isRight()); + } + + + + @Test + public void testInterfaceOperationForEmptyType() { + operationInputDefinitionList.add(createMockOperationInputDefinition("label1")); + Collection operations = createInterfaceOperationData("op2", + "interface operation2",new ArtifactDefinition(), operationInputDefinitionList,""); + Either booleanResponseFormatEither = interfaceOperationValidationUtilTest + .validateInterfaceOperations(operations, RESOURCE_ID, false); + Assert.assertTrue(booleanResponseFormatEither.isRight()); + } + + @Test + public void testInterfaceOperationForEmptyInputParam() { + operationInputDefinitionList.add(createMockOperationInputDefinition("label1")); + Collection operations = createInterfaceOperationData("op2", + "interface operation2",new ArtifactDefinition(), operationInputDefinitionList,"input2"); + Either booleanResponseFormatEither = interfaceOperationValidationUtilTest + .validateInterfaceOperations(operations, RESOURCE_ID, false); + Assert.assertTrue(booleanResponseFormatEither.isRight()); + } + + @Test + public void testInterfaceOperationForNonUniqueType() { + operationInputDefinitionList.add(createMockOperationInputDefinition("label1")); + Collection operations = createInterfaceOperationData("op2", + "interface operation2",new ArtifactDefinition(), operationInputDefinitionList,"CREATE"); + Either booleanResponseFormatEither = interfaceOperationValidationUtilTest + .validateInterfaceOperations(operations, RESOURCE_ID, false); + Assert.assertTrue(booleanResponseFormatEither.isRight()); + } + + @Test + public void testInterfaceOperationTypeLength() { + operationInputDefinitionList.add(createMockOperationInputDefinition("label1")); + Collection operations = createInterfaceOperationData("op2", + "interface operation2",new ArtifactDefinition(), operationInputDefinitionList, + "interface operation2 - The Spring Initializer provides a project generator to make you " + + "productive with the certain technology stack from the beginning. You can create a skeleton project" + + "with web, data access (relational and NoSQL datastores), cloud, or messaging support"); + Either booleanResponseFormatEither = interfaceOperationValidationUtilTest + .validateInterfaceOperations(operations, RESOURCE_ID, false); + Assert.assertTrue(booleanResponseFormatEither.isRight()); + } + + + @Test + public void testInterfaceOperationUniqueInputParamNameInvalid() { + operationInputDefinitionList.add(createMockOperationInputDefinition("label1")); + operationInputDefinitionList.add(createMockOperationInputDefinition("label1")); + operationInputDefinitionList.add(createMockOperationInputDefinition("label2")); + operationInputDefinitionList.add(createMockOperationInputDefinition("label2")); + Collection operations = createInterfaceOperationData("op2", + "interface operation2",new ArtifactDefinition(), operationInputDefinitionList,"create"); + + Either booleanResponseFormatEither = interfaceOperationValidationUtilTest + .validateInterfaceOperations(operations, RESOURCE_ID, false); + Assert.assertTrue(booleanResponseFormatEither.isRight()); + } + + @Test + public void testInterfaceOperationUniqueInputParamNameValid() { + operationInputDefinitionList.add(createMockOperationInputDefinition("label1")); + operationInputDefinitionList.add(createMockOperationInputDefinition("label2")); + Collection operations = createInterfaceOperationData("op2", + "interface operation2",new ArtifactDefinition(), operationInputDefinitionList,"update"); + + + Either booleanResponseFormatEither = interfaceOperationValidationUtilTest + .validateInterfaceOperations(operations, RESOURCE_ID, false); + Assert.assertTrue(booleanResponseFormatEither.isLeft()); + } + + private Set createInterfaceOperationData( String uniqueID, String description, ArtifactDefinition artifactDefinition, + ListDataDefinition inputs, String name) { + return Sets.newHashSet(createInterfaceOperation(uniqueID, description, artifactDefinition, inputs, name)); + } + + private Either getToscaFullElement() { + + return Either.left((T) setUpResourceMock()); + } + + private Resource setUpResourceMock(){ + Resource resource = new Resource(); + resource.setInterfaces(createMockInterfaceDefinition()); + + return resource; + } + + private Map createMockInterfaceDefinition() { + Map operationMap = createMockOperationMap(); + Map interfaceDefinitionMap = new HashMap<>(); + interfaceDefinitionMap.put("int1", createInterface("int1", "Interface 1", + "lifecycle", "tosca", operationMap)); + + return interfaceDefinitionMap; + } + + private Map createMockOperationMap() { + Operation operation = new Operation(); + operation.setDefinition(false); + operation.setName("CREATE"); + Map operationMap = new HashMap<>(); + operationMap.put("op1", operation); + return operationMap; + } + + + private OperationInputDefinition createMockOperationInputDefinition(String label) { + OperationInputDefinition operationInputDefinition = new OperationInputDefinition(); + operationInputDefinition.setLabel(label); + return operationInputDefinition; + } + + private class InterfaceOperationValidationUtilTest extends InterfaceOperationValidation { + + protected ResponseFormatManager getResponseFormatManager() { + return mock; + } + } +} -- cgit 1.2.3-korg