Import service with milestones
[sdc.git] / catalog-be / src / test / java / org / openecomp / sdc / be / components / impl / ResourceBusinessLogicTest.java
index d85ad38..88cd464 100644 (file)
@@ -47,12 +47,16 @@ import java.util.EnumMap;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
+import java.util.HashSet;
 import java.util.Map.Entry;
 import java.util.Optional;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 import javax.servlet.ServletContext;
 import org.apache.commons.lang3.tuple.ImmutablePair;
+import org.hamcrest.MatcherAssert;
+import org.junit.Assert;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.mockito.InjectMocks;
@@ -64,6 +68,7 @@ import org.openecomp.sdc.be.components.ArtifactsResolver;
 import org.openecomp.sdc.be.components.csar.CsarArtifactsAndGroupsBusinessLogic;
 import org.openecomp.sdc.be.components.csar.CsarBusinessLogic;
 import org.openecomp.sdc.be.components.csar.CsarInfo;
+import org.openecomp.sdc.be.components.csar.OnboardedCsarInfo;
 import org.openecomp.sdc.be.components.csar.YamlTemplateParsingHandler;
 import org.openecomp.sdc.be.components.impl.ArtifactsBusinessLogic.ArtifactOperationEnum;
 import org.openecomp.sdc.be.components.impl.exceptions.ByActionStatusComponentException;
@@ -170,6 +175,8 @@ class ResourceBusinessLogicTest {
     private static final String GENERIC_VF_NAME = "org.openecomp.resource.abstract.nodes.VF";
     private static final String GENERIC_CR_NAME = "org.openecomp.resource.abstract.nodes.CR";
     private static final String GENERIC_PNF_NAME = "org.openecomp.resource.abstract.nodes.PNF";
+    private static final boolean MULTITENANCY_ENABLED = true;
+    private static final String TEST_TENANT = "test_tenant";
 
     private final ServletContext servletContext = Mockito.mock(ServletContext.class);
     private IElementOperation mockElementDao;
@@ -321,7 +328,7 @@ class ResourceBusinessLogicTest {
         bl = new ResourceBusinessLogic(mockElementDao, groupOperation, groupInstanceOperation, groupTypeOperation, groupBusinessLogic,
             interfaceOperation, interfaceLifecycleTypeOperation, artifactManager, componentInstanceBusinessLogic,
             resourceImportManager, inputsBusinessLogic, outputsBusinessLogic, compositionBusinessLogic, resourceDataMergeBusinessLogic,
-            csarArtifactsAndGroupsBusinessLogic, mergeInstanceUtils, uiComponentDataConverter, csarBusinessLogic,
+            csarArtifactsAndGroupsBusinessLogic, uiComponentDataConverter, csarBusinessLogic,
             artifactToscaOperation, propertyBusinessLogic, componentContactIdValidator, componentNameValidator,
             componentTagsValidator, componentValidator, componentIconValidator, componentProjectCodeValidator,
             componentDescriptionValidator, policyBusinessLogic, modelBusinessLogic, dataTypeBusinessLogic, policyTypeBusinessLogic, modelOperation);
@@ -387,7 +394,7 @@ class ResourceBusinessLogicTest {
                 nodeTypesArtifactsToHandle,
                 nodeTypesNewCreatedArtifacts,
                 nodeTypesInfo,
-                new CsarInfo(user, "abcd1234", new HashMap<>(), RESOURCE_NAME, "template name",
+                new OnboardedCsarInfo(user, "abcd1234", new HashMap<>(), RESOURCE_NAME, "template name",
                     ImportUtilsTest.loadFileNameToJsonString("normative-types-new-webServer.yml"), true), "");
         });
     }
@@ -1483,7 +1490,7 @@ class ResourceBusinessLogicTest {
         String resourceYml = new String(csar.get("Definitions/my_vnf.yaml"));
 
         YamlTemplateParsingHandler yamlTemplateParser = new YamlTemplateParsingHandler(mockJanusGraphDao, null,
-            Mockito.mock(AnnotationBusinessLogic.class), null);
+            Mockito.mock(AnnotationBusinessLogic.class), null, null, null, null);
         final ParsedToscaYamlInfo parsedToscaYamlInfo = yamlTemplateParser.parseResourceInfoFromYAML("Definitions/my_vnf.yml", resourceYml,
             Collections.EMPTY_MAP, Collections.EMPTY_MAP, "myVnf", resourceResponse, "");
 
@@ -1876,7 +1883,7 @@ class ResourceBusinessLogicTest {
         Resource resourceToUpdate = createResourceObject(false);
         String nodeName = Constants.USER_DEFINED_RESOURCE_NAMESPACE_PREFIX + "." + "abc";
         String jsonContent = ImportUtilsTest.loadFileNameToJsonString("normative-types-new-webServer.yml");
-        CsarInfo csarInfo = new CsarInfo(user, "abcd1234", new HashMap<>(), RESOURCE_NAME, "template name", jsonContent,
+        CsarInfo csarInfo = new OnboardedCsarInfo(user, "abcd1234", new HashMap<>(), RESOURCE_NAME, "template name", jsonContent,
             true);
         String nestedResourceName = bl.buildNestedToscaResourceName(resourceToUpdate.getResourceType()
                 .name(), csarInfo.getVfResourceName(), nodeName)
@@ -1914,7 +1921,7 @@ class ResourceBusinessLogicTest {
         setCanWorkOnResource(resourceResponse);
         String nodeName = Constants.USER_DEFINED_RESOURCE_NAMESPACE_PREFIX + "." + "abc";
         String jsonContent = ImportUtilsTest.loadFileNameToJsonString("normative-types-new-webServer.yml");
-        CsarInfo csarInfo = new CsarInfo(user, "abcd1234", new HashMap<>(), RESOURCE_NAME, "template name", jsonContent,
+        CsarInfo csarInfo = new OnboardedCsarInfo(user, "abcd1234", new HashMap<>(), RESOURCE_NAME, "template name", jsonContent,
             true);
         String nestedResourceName = bl.buildNestedToscaResourceName(resourceToUpdate.getResourceType()
                 .name(), csarInfo.getVfResourceName(), nodeName)
@@ -2555,4 +2562,55 @@ class ResourceBusinessLogicTest {
         assertEquals(ActionStatus.COMPONENT_IN_USE_BY_ANOTHER_COMPONENT, actualOperationException.getActionStatus());
         assertEquals("resource_name", actualOperationException.getParams()[0]);
     }
+
+
+    @Test
+    void testCreateResource_withMultitenancyWithTenant_Success() {
+        Assert.assertTrue(MULTITENANCY_ENABLED);
+        validateUserRoles(Role.ADMIN, Role.DESIGNER);
+        Resource resource = createResourceObject(false);
+        resource.setTenant(TEST_TENANT);
+        Resource createdResource = null;
+        try {
+            when(toscaOperationFacade
+                    .validateComponentNameAndModelExists(resource.getName(), null, ResourceTypeEnum.VFC, ComponentTypeEnum.RESOURCE))
+                    .thenReturn(Either.left(false));
+            createdResource = bl.createResource(resource, AuditingActionEnum.CREATE_RESOURCE, user, null, null);
+            assertThat(createResourceObject(true)).isEqualTo(createdResource);
+            MatcherAssert.assertThat("Unauthorized Tenant", getTestRoles().contains(resource.getTenant()));
+        } catch (ComponentException e) {
+            assertThat(Integer.valueOf(200)).isEqualTo(e.getResponseFormat()
+                    .getStatus());
+        }
+    }
+
+    @Test
+    void testCreateResource_withMultitenancyWithInvalidTenant_Failure() {
+        Assert.assertTrue(MULTITENANCY_ENABLED);
+        validateUserRoles(Role.ADMIN, Role.DESIGNER);
+        Resource resource = createResourceObject(false);
+        resource.setTenant("invalid_tenant");
+        Resource createdResource = null;
+        try {
+            MatcherAssert.assertThat("Unauthorized Tenant", !getTestRoles().contains(resource.getTenant()));
+            when(toscaOperationFacade
+                    .validateComponentNameAndModelExists(resource.getName(), null, ResourceTypeEnum.VFC, ComponentTypeEnum.RESOURCE))
+                    .thenReturn(Either.left(false));
+            createdResource = bl.createResource(resource, AuditingActionEnum.CREATE_RESOURCE, user, null, null);
+
+            assertThat(createResourceObject(true)).isEqualTo(createdResource);
+            MatcherAssert.assertThat("Unauthorized Tenant", !getTestRoles().contains(resource.getTenant()));
+        } catch (ComponentException e) {
+            assertThat(new Integer(200)).isEqualTo(e.getResponseFormat()
+                    .getStatus());
+        }
+    }
+
+    private Set<String> getTestRoles(){
+        Set<String> roles = new HashSet<>();
+        roles.add("test_admin");
+        roles.add("test_tenant");
+        return roles;
+    }
+
 }