summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--catalog-be/src/main/java/org/openecomp/sdc/be/externalapi/servlet/ArtifactExternalServlet.java1
-rw-r--r--catalog-be/src/test/java/org/openecomp/sdc/be/externalapi/servlet/ArtifactExternalServletTest.java1006
2 files changed, 1007 insertions, 0 deletions
diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/externalapi/servlet/ArtifactExternalServlet.java b/catalog-be/src/main/java/org/openecomp/sdc/be/externalapi/servlet/ArtifactExternalServlet.java
index a4e465eaf8..6975cd9941 100644
--- a/catalog-be/src/main/java/org/openecomp/sdc/be/externalapi/servlet/ArtifactExternalServlet.java
+++ b/catalog-be/src/main/java/org/openecomp/sdc/be/externalapi/servlet/ArtifactExternalServlet.java
@@ -1125,6 +1125,7 @@ public class ArtifactExternalServlet extends AbstractValidationsServlet {
}
} catch (ComponentException e) {
responseFormat = getComponentsUtils().getResponseFormat(e);
+ responseWrapper.setInnerElement(buildErrorResponse(responseFormat));
} finally {
getComponentsUtils().auditExternalDownloadArtifact(responseFormat,
new ResourceCommonInfo(resourceInstanceName, componentTypeValue),
diff --git a/catalog-be/src/test/java/org/openecomp/sdc/be/externalapi/servlet/ArtifactExternalServletTest.java b/catalog-be/src/test/java/org/openecomp/sdc/be/externalapi/servlet/ArtifactExternalServletTest.java
new file mode 100644
index 0000000000..00f84ad9c9
--- /dev/null
+++ b/catalog-be/src/test/java/org/openecomp/sdc/be/externalapi/servlet/ArtifactExternalServletTest.java
@@ -0,0 +1,1006 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2019 Nokia. 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.openecomp.sdc.be.externalapi.servlet;
+
+import fj.data.Either;
+import org.apache.commons.text.StrSubstitutor;
+import org.glassfish.hk2.utilities.binding.AbstractBinder;
+import org.glassfish.jersey.server.ResourceConfig;
+import org.glassfish.jersey.test.JerseyTest;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.mockito.Mockito;
+import org.apache.http.HttpStatus;
+import org.openecomp.sdc.be.components.impl.ArtifactsBusinessLogic;
+import org.openecomp.sdc.be.components.impl.ComponentInstanceBusinessLogic;
+import org.openecomp.sdc.be.components.impl.ResourceBusinessLogic;
+import org.openecomp.sdc.be.components.impl.ResourceImportManager;
+import org.openecomp.sdc.be.components.impl.exceptions.ByResponseFormatComponentException;
+import org.openecomp.sdc.be.components.impl.exceptions.ComponentException;
+import org.openecomp.sdc.be.config.ConfigurationManager;
+import org.openecomp.sdc.be.config.SpringConfig;
+import org.openecomp.sdc.be.dao.api.ActionStatus;
+import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum;
+import org.openecomp.sdc.be.impl.ComponentsUtils;
+import org.openecomp.sdc.be.impl.ServletUtils;
+import org.openecomp.sdc.be.impl.WebAppContextWrapper;
+import org.openecomp.sdc.be.model.ArtifactDefinition;
+import org.openecomp.sdc.be.model.Resource;
+import org.openecomp.sdc.be.model.User;
+import org.openecomp.sdc.be.user.Role;
+import org.openecomp.sdc.be.user.UserBusinessLogic;
+import org.openecomp.sdc.common.api.ConfigurationSource;
+import org.openecomp.sdc.common.api.Constants;
+import org.openecomp.sdc.common.impl.ExternalConfiguration;
+import org.openecomp.sdc.common.impl.FSConfigurationSource;
+import org.openecomp.sdc.exception.ResponseFormat;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.annotation.AnnotationConfigApplicationContext;
+import org.springframework.web.context.WebApplicationContext;
+
+import javax.servlet.ServletContext;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
+import javax.ws.rs.client.Entity;
+import javax.ws.rs.core.Application;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.BDDMockito.given;
+import static org.mockito.Mockito.when;
+
+public class ArtifactExternalServletTest extends JerseyTest {
+ public static final HttpServletRequest request = Mockito.mock(HttpServletRequest.class);
+ public static final HttpSession session = Mockito.mock(HttpSession.class);
+ public static final ResourceImportManager resourceImportManager = Mockito.mock(ResourceImportManager.class);
+ public static final ResourceBusinessLogic resourceBusinessLogic = Mockito.mock(ResourceBusinessLogic.class);
+ public static final Resource resource = Mockito.mock(Resource.class);
+ public static final UserBusinessLogic userBusinessLogic = Mockito.mock(UserBusinessLogic.class);
+ public static final ComponentInstanceBusinessLogic componentInstanceBusinessLogic = Mockito.mock(ComponentInstanceBusinessLogic.class);
+ public static final ArtifactsBusinessLogic artifactsBusinessLogic = Mockito.mock(ArtifactsBusinessLogic.class);
+
+ private static final ServletContext servletContext = Mockito.mock(ServletContext.class);
+ public static final WebAppContextWrapper webAppContextWrapper = Mockito.mock(WebAppContextWrapper.class);
+ private static final WebApplicationContext webApplicationContext = Mockito.mock(WebApplicationContext.class);
+ private static final ServletUtils servletUtils = Mockito.mock(ServletUtils.class);
+ private static final UserBusinessLogic userAdmin = Mockito.mock(UserBusinessLogic.class);
+ private static final ComponentsUtils componentUtils = Mockito.mock(ComponentsUtils.class);
+ private static final ResponseFormat generalErrorResponseFormat = new ResponseFormat(HttpStatus.SC_INTERNAL_SERVER_ERROR);
+ private static final ResponseFormat unauthorizedResponseFormat = Mockito.mock(ResponseFormat.class);
+ private static final ResponseFormat notFoundResponseFormat = Mockito.mock(ResponseFormat.class);
+ private static final ResponseFormat badRequestResponseFormat = Mockito.mock(ResponseFormat.class);
+ private static final String ASSET_TYPE = "assetType";
+ public static final String UUID = "uuid";
+ private static final String RESOURCE_INSTANCE_NAME = "resourceInstanceName";
+ private static final String INTERFACE_UUID = "interfaceUUID";
+ private static final String OPERATION_UUID = "operationUUID";
+ private static final String ARTIFACT_UUID = "artifactUUID";
+ private static final String EMPTY_JSON = "{}";
+
+ /* Users */
+ private static User designerUser = new User("designer", "designer", "designer", "designer@email.com", Role.DESIGNER.name(), System
+ .currentTimeMillis());
+
+ @BeforeClass
+ public static void setup() {
+
+ //Needed for User Authorization
+ when(servletContext.getAttribute(Constants.WEB_APPLICATION_CONTEXT_WRAPPER_ATTR)).thenReturn(webAppContextWrapper);
+ when(webAppContextWrapper.getWebAppContext(servletContext)).thenReturn(webApplicationContext);
+ when(webApplicationContext.getBean(ServletUtils.class)).thenReturn(servletUtils);
+ when(servletUtils.getUserAdmin()).thenReturn(userAdmin);
+ when(servletUtils.getComponentsUtils()).thenReturn(componentUtils);
+ when(componentUtils.getResponseFormat(ActionStatus.RESTRICTED_OPERATION)).thenReturn(unauthorizedResponseFormat);
+ when(unauthorizedResponseFormat.getStatus()).thenReturn(HttpStatus.SC_UNAUTHORIZED);
+
+ ResponseFormat okResponseFormat = new ResponseFormat(org.apache.http.HttpStatus.SC_OK);
+
+ when(componentUtils.getResponseFormat(ActionStatus.OK)) .thenReturn(okResponseFormat);
+ when(componentUtils.getResponseFormat(ActionStatus.INVALID_CONTENT)).thenReturn(badRequestResponseFormat);
+ when(componentUtils.getResponseFormat(ActionStatus.GENERAL_ERROR)) .thenReturn(generalErrorResponseFormat);
+ when(componentUtils.getResponseFormat(any(ComponentException.class)))
+ .thenReturn(generalErrorResponseFormat);
+
+ ByResponseFormatComponentException ce = Mockito.mock(ByResponseFormatComponentException.class);
+ when(ce.getResponseFormat()).thenReturn(unauthorizedResponseFormat);
+
+ //Needed for error configuration
+ when(notFoundResponseFormat.getStatus()).thenReturn(HttpStatus.SC_NOT_FOUND);
+ when(badRequestResponseFormat.getStatus()).thenReturn(HttpStatus.SC_BAD_REQUEST);
+ when(componentUtils.getResponseFormat(eq(ActionStatus.RESOURCE_NOT_FOUND), any())).thenReturn(notFoundResponseFormat);
+ when(componentUtils.getResponseFormat(eq(ActionStatus.COMPONENT_VERSION_NOT_FOUND), any())).thenReturn(notFoundResponseFormat);
+ when(componentUtils.getResponseFormat(eq(ActionStatus.COMPONENT_INSTANCE_NOT_FOUND), any())).thenReturn(notFoundResponseFormat);
+ when(componentUtils.getResponseFormat(eq(ActionStatus.EXT_REF_NOT_FOUND), any())).thenReturn(notFoundResponseFormat);
+ when(componentUtils.getResponseFormat(eq(ActionStatus.MISSING_X_ECOMP_INSTANCE_ID), any())).thenReturn(badRequestResponseFormat);
+
+ Either<User, ActionStatus> designerEither = Either.left(designerUser);
+
+ when(userAdmin.getUser(designerUser.getUserId(), false)).thenReturn(designerEither);
+
+ String appConfigDir = "src/test/resources/config";
+ ConfigurationSource configurationSource = new FSConfigurationSource(ExternalConfiguration.getChangeListener(), appConfigDir);
+ ConfigurationManager configurationManager = new ConfigurationManager(configurationSource);
+
+ org.openecomp.sdc.be.config.Configuration configuration = new org.openecomp.sdc.be.config.Configuration();
+ configuration.setJanusGraphInMemoryGraph(true);
+
+ configurationManager.setConfiguration(configuration);
+ ExternalConfiguration.setAppName("catalog-be");
+ }
+
+ @Test
+ public void uploadInterfaceOperationArtifactNoInstanceIdHeaderTest() {
+ Map<String,String> parametersMap = new HashMap<>();
+ parametersMap.put(ASSET_TYPE, "assetType");
+ parametersMap.put(UUID, "uuid");
+ parametersMap.put(INTERFACE_UUID, "interfaceUUID");
+ parametersMap.put(OPERATION_UUID, "operationUUID");
+ parametersMap.put(ARTIFACT_UUID, "artifactUUID");
+
+ String formatEndpoint = "/v1/catalog/{assetType}/{uuid}/interfaces/{interfaceUUID}/operations/{operationUUID}/artifacts/{artifactUUID}";
+ String path = StrSubstitutor.replace(formatEndpoint, parametersMap, "{","}");
+
+ Response response = target()
+ .path(path)
+ .request()
+ .accept(MediaType.APPLICATION_JSON)
+ .header(Constants.USER_ID_HEADER, designerUser.getUserId())
+ .post(Entity.json(EMPTY_JSON));
+
+ assertThat(response.getStatus()).isEqualTo(HttpStatus.SC_BAD_REQUEST);
+ }
+
+ @Test
+ public void uploadInterfaceOperationArtifactNoUserHeaderTest() {
+ Map<String,String> parametersMap = new HashMap<>();
+ parametersMap.put(ASSET_TYPE, "assetType");
+ parametersMap.put(UUID, "uuid");
+ parametersMap.put(INTERFACE_UUID, "interfaceUUID");
+ parametersMap.put(OPERATION_UUID, "operationUUID");
+ parametersMap.put(ARTIFACT_UUID, "artifactUUID");
+
+ String formatEndpoint = "/v1/catalog/{assetType}/{uuid}/interfaces/{interfaceUUID}/operations/{operationUUID}/artifacts/{artifactUUID}";
+ String path = StrSubstitutor.replace(formatEndpoint, parametersMap, "{","}");
+
+ Response response = target()
+ .path(path)
+ .request()
+ .accept(MediaType.APPLICATION_JSON)
+ .header(Constants.X_ECOMP_INSTANCE_ID_HEADER, "mockXEcompInstanceId")
+ .post(Entity.json(EMPTY_JSON));
+
+ assertThat(response.getStatus()).isEqualTo(HttpStatus.SC_INTERNAL_SERVER_ERROR);
+ }
+
+ @Test
+ public void uploadInterfaceOperationArtifactTest() {
+ Map<String,String> parametersMap = new HashMap<>();
+ parametersMap.put(ASSET_TYPE, "assetType");
+ parametersMap.put(UUID, "uuid");
+ parametersMap.put(INTERFACE_UUID, "interfaceUUID");
+ parametersMap.put(OPERATION_UUID, "operationUUID");
+ parametersMap.put(ARTIFACT_UUID, "artifactUUID");
+
+ String formatEndpoint = "/v1/catalog/{assetType}/{uuid}/interfaces/{interfaceUUID}/operations/{operationUUID}/artifacts/{artifactUUID}";
+ String path = StrSubstitutor.replace(formatEndpoint, parametersMap, "{","}");
+
+ ArtifactDefinition artifactDefinition = new ArtifactDefinition();
+ Either<ArtifactDefinition, ResponseFormat> uploadArtifactEither = Either.left(artifactDefinition);
+ when(artifactsBusinessLogic
+ .updateArtifactOnInterfaceOperationByResourceUUID(anyString(), any(),
+ any(), any(), any(),
+ any(), any(), any(),
+ any()))
+ .thenReturn(uploadArtifactEither);
+
+ Response response = target()
+ .path(path)
+ .request()
+ .accept(MediaType.APPLICATION_JSON)
+ .header(Constants.X_ECOMP_INSTANCE_ID_HEADER, "mockXEcompInstanceId")
+ .header(Constants.USER_ID_HEADER, designerUser.getUserId())
+ .post(Entity.json(EMPTY_JSON));
+
+ assertThat(response.getStatus()).isEqualTo(HttpStatus.SC_OK);
+ }
+
+ @Test
+ public void uploadInterfaceOperationArtifactFailedUploadTest() {
+ Map<String,String> parametersMap = new HashMap<>();
+ parametersMap.put(ASSET_TYPE, "assetType");
+ parametersMap.put(UUID, "uuid");
+ parametersMap.put(INTERFACE_UUID, "interfaceUUID");
+ parametersMap.put(OPERATION_UUID, "operationUUID");
+ parametersMap.put(ARTIFACT_UUID, "artifactUUID");
+
+ String formatEndpoint = "/v1/catalog/{assetType}/{uuid}/interfaces/{interfaceUUID}/operations/{operationUUID}/artifacts/{artifactUUID}";
+ String path = StrSubstitutor.replace(formatEndpoint, parametersMap, "{","}");
+ Either<ArtifactDefinition, ResponseFormat> uploadArtifactEither =
+ Either.right(new ResponseFormat(HttpStatus.SC_CONFLICT));
+
+ when(artifactsBusinessLogic
+ .updateArtifactOnInterfaceOperationByResourceUUID(anyString(), any(),
+ any(), any(), any(),
+ any(), any(), any(),
+ any()))
+ .thenReturn(uploadArtifactEither);
+
+ Response response = target()
+ .path(path)
+ .request()
+ .accept(MediaType.APPLICATION_JSON)
+ .header(Constants.X_ECOMP_INSTANCE_ID_HEADER, "mockXEcompInstanceId")
+ .header(Constants.USER_ID_HEADER, designerUser.getUserId())
+ .post(Entity.json(EMPTY_JSON));
+
+ assertThat(response.getStatus()).isEqualTo(HttpStatus.SC_CONFLICT);
+ }
+
+ @Test
+ public void uploadInterfaceOperationArtifactExceptionDuringProcessingTest() {
+ String uuid = "uuidToThrow_uploadArtifact";
+ Map<String,String> parametersMap = new HashMap<>();
+ parametersMap.put(ASSET_TYPE, "assetType");
+ parametersMap.put(UUID, uuid);
+ parametersMap.put(INTERFACE_UUID, "interfaceUUID");
+ parametersMap.put(OPERATION_UUID, "operationUUID");
+ parametersMap.put(ARTIFACT_UUID, "artifactUUID");
+
+ String formatEndpoint = "/v1/catalog/{assetType}/{uuid}/interfaces/{interfaceUUID}/operations/{operationUUID}/artifacts/{artifactUUID}";
+ String path = StrSubstitutor.replace(formatEndpoint, parametersMap, "{","}");
+
+ when(artifactsBusinessLogic
+ .updateArtifactOnInterfaceOperationByResourceUUID(anyString(), any(),
+ any(), any(), any(),
+ any(), any(), any(),
+ any()))
+ .thenThrow(new RuntimeException("Text exception"));
+
+ Response response = target()
+ .path(path)
+ .request()
+ .accept(MediaType.APPLICATION_JSON)
+ .header(Constants.X_ECOMP_INSTANCE_ID_HEADER, "mockXEcompInstanceId")
+ .header(Constants.USER_ID_HEADER, designerUser.getUserId())
+ .post(Entity.json(EMPTY_JSON));
+
+ assertThat(response.getStatus()).isEqualTo(HttpStatus.SC_INTERNAL_SERVER_ERROR);
+ }
+
+ @Test
+ public void uploadArtifactUnknownComponentTypeTest() {
+ Map<String,String> parametersMap = new HashMap<>();
+ parametersMap.put(ASSET_TYPE, "something_new");
+ parametersMap.put(UUID, "uuid");
+
+ String formatEndpoint = "/v1/catalog/{assetType}/{uuid}/artifacts";
+ String path = StrSubstitutor.replace(formatEndpoint, parametersMap, "{","}");
+
+ Response response = target()
+ .path(path)
+ .request()
+ .accept(MediaType.APPLICATION_JSON)
+ .header(Constants.X_ECOMP_INSTANCE_ID_HEADER, "mockXEcompInstanceId")
+ .header(Constants.USER_ID_HEADER, designerUser.getUserId())
+ .post(Entity.json(EMPTY_JSON));
+
+ assertThat(response.getStatus()).isEqualTo(HttpStatus.SC_BAD_REQUEST);
+ }
+
+ @Test
+ public void uploadArtifactErrorDuringUploadProcessingTest() {
+ Map<String,String> parametersMap = new HashMap<>();
+ parametersMap.put(ASSET_TYPE, ComponentTypeEnum.SERVICE_PARAM_NAME);
+ parametersMap.put(UUID, "uuid");
+
+ String formatEndpoint = "/v1/catalog/{assetType}/{uuid}/artifacts";
+ String path = StrSubstitutor.replace(formatEndpoint, parametersMap, "{","}");
+
+ Either<ArtifactDefinition, ResponseFormat> uploadArtifactEither =
+ Either.right(new ResponseFormat(HttpStatus.SC_CONFLICT));
+
+ when(artifactsBusinessLogic
+ .uploadArtifactToComponentByUUID(anyString(), any(), any(), any(), any(),
+ any()))
+ .thenReturn(uploadArtifactEither);
+
+ Response response = target()
+ .path(path)
+ .request()
+ .accept(MediaType.APPLICATION_JSON)
+ .header(Constants.X_ECOMP_INSTANCE_ID_HEADER, "mockXEcompInstanceId")
+ .header(Constants.USER_ID_HEADER, designerUser.getUserId())
+ .post(Entity.json(EMPTY_JSON));
+
+ assertThat(response.getStatus()).isEqualTo(HttpStatus.SC_CONFLICT);
+ }
+
+ @Test
+ public void uploadArtifactExceptionDuringUploadTest() {
+ String uuid = "uuidToThrow_uploadArtifact";
+ Map<String,String> parametersMap = new HashMap<>();
+ parametersMap.put(ASSET_TYPE, ComponentTypeEnum.SERVICE_PARAM_NAME);
+ parametersMap.put(UUID, uuid);
+
+ String formatEndpoint = "/v1/catalog/{assetType}/{uuid}/artifacts";
+ String path = StrSubstitutor.replace(formatEndpoint, parametersMap, "{","}");
+
+ given(artifactsBusinessLogic.uploadArtifactToComponentByUUID(anyString(), any(),
+ any(), eq(uuid), any(), any()))
+ .willAnswer( invocation -> { throw new IOException("Test exception"); });
+
+ Response response = target()
+ .path(path)
+ .request()
+ .accept(MediaType.APPLICATION_JSON)
+ .header(Constants.X_ECOMP_INSTANCE_ID_HEADER, "mockXEcompInstanceId")
+ .header(Constants.USER_ID_HEADER, designerUser.getUserId())
+ .post(Entity.json(EMPTY_JSON));
+
+ assertThat(response.getStatus()).isEqualTo(HttpStatus.SC_INTERNAL_SERVER_ERROR);
+ }
+
+ @Test
+ public void uploadArtifactTest() {
+ Map<String,String> parametersMap = new HashMap<>();
+ parametersMap.put(ASSET_TYPE, ComponentTypeEnum.SERVICE_PARAM_NAME);
+ parametersMap.put(UUID, "uuid");
+
+ String formatEndpoint = "/v1/catalog/{assetType}/{uuid}/artifacts";
+ String path = StrSubstitutor.replace(formatEndpoint, parametersMap, "{","}");
+
+ ArtifactDefinition artifactDefinition = new ArtifactDefinition();
+ Either<ArtifactDefinition, ResponseFormat> uploadArtifactEither = Either.left(artifactDefinition);
+ when(artifactsBusinessLogic
+ .uploadArtifactToComponentByUUID(anyString(), any(), any(), any(), any(), any()))
+ .thenReturn(uploadArtifactEither);
+
+ Response response = target()
+ .path(path)
+ .request()
+ .accept(MediaType.APPLICATION_JSON)
+ .header(Constants.X_ECOMP_INSTANCE_ID_HEADER, "mockXEcompInstanceId")
+ .header(Constants.USER_ID_HEADER, designerUser.getUserId())
+ .post(Entity.json(EMPTY_JSON));
+
+ assertThat(response.getStatus()).isEqualTo(HttpStatus.SC_OK);
+ }
+
+ @Test
+ public void uploadArtifactToInstanceErrorDuringUploadProcessingTest() {
+ Map<String,String> parametersMap = new HashMap<>();
+ parametersMap.put(ASSET_TYPE, ComponentTypeEnum.SERVICE_PARAM_NAME);
+ parametersMap.put(UUID, "uuid");
+ parametersMap.put(RESOURCE_INSTANCE_NAME, "resourceInstanceName");
+
+ String formatEndpoint = "/v1/catalog/{assetType}/{uuid}/resourceInstances/{resourceInstanceName}/artifacts";
+ String path = StrSubstitutor.replace(formatEndpoint, parametersMap, "{","}");
+
+ Either<ArtifactDefinition, ResponseFormat> uploadArtifactToRiByUUIDEither =
+ Either.right(new ResponseFormat(HttpStatus.SC_CONFLICT));
+
+ given(artifactsBusinessLogic.uploadArtifactToRiByUUID(anyString(), any(),
+ any(), any(), any(), any()))
+ .willAnswer( invocation -> uploadArtifactToRiByUUIDEither);
+
+ Response response = target()
+ .path(path)
+ .request()
+ .accept(MediaType.APPLICATION_JSON)
+ .header(Constants.X_ECOMP_INSTANCE_ID_HEADER, "mockXEcompInstanceId")
+ .header(Constants.USER_ID_HEADER, designerUser.getUserId())
+ .post(Entity.json(EMPTY_JSON));
+
+ assertThat(response.getStatus()).isEqualTo(HttpStatus.SC_CONFLICT);
+ }
+
+ @Test
+ public void uploadArtifactToInstanceExceptionDuringUploadTest() {
+ String uuid = "uuidToThrow_uploadArtifactToInstance";
+ String resourceInstanceName = "resourceInstanceNameToThrow_uploadArtifactToInstance";
+ Map<String,String> parametersMap = new HashMap<>();
+ parametersMap.put(ASSET_TYPE, ComponentTypeEnum.SERVICE_PARAM_NAME);
+ parametersMap.put(UUID, uuid);
+ parametersMap.put(RESOURCE_INSTANCE_NAME, resourceInstanceName);
+
+ String formatEndpoint = "/v1/catalog/{assetType}/{uuid}/resourceInstances/{resourceInstanceName}/artifacts";
+ String path = StrSubstitutor.replace(formatEndpoint, parametersMap, "{","}");
+
+ given(artifactsBusinessLogic.uploadArtifactToRiByUUID(anyString(), any(),
+ any(), eq(uuid), eq(resourceInstanceName), any()))
+ .willAnswer( invocation -> { throw new IOException("Test exception"); });
+
+ Response response = target()
+ .path(path)
+ .request()
+ .accept(MediaType.APPLICATION_JSON)
+ .header(Constants.X_ECOMP_INSTANCE_ID_HEADER, "mockXEcompInstanceId")
+ .header(Constants.USER_ID_HEADER, designerUser.getUserId())
+ .post(Entity.json(EMPTY_JSON));
+
+ assertThat(response.getStatus()).isEqualTo(HttpStatus.SC_INTERNAL_SERVER_ERROR);
+ }
+
+ @Test
+ public void uploadArtifactToInstanceTest() {
+ Map<String,String> parametersMap = new HashMap<>();
+ parametersMap.put(ASSET_TYPE, ComponentTypeEnum.SERVICE_PARAM_NAME);
+ parametersMap.put(UUID, "uuid");
+ parametersMap.put(RESOURCE_INSTANCE_NAME, "resourceInstanceName");
+
+ String formatEndpoint = "/v1/catalog/{assetType}/{uuid}/resourceInstances/{resourceInstanceName}/artifacts";
+ String path = StrSubstitutor.replace(formatEndpoint, parametersMap, "{","}");
+
+ ArtifactDefinition artifactDefinition = new ArtifactDefinition();
+ Either<ArtifactDefinition, ResponseFormat> uploadArtifactToRiByUUIDEither = Either.left(artifactDefinition);
+
+ given(artifactsBusinessLogic.uploadArtifactToRiByUUID(anyString(), any(),
+ any(), any(), any(), any()))
+ .willAnswer( invocation -> uploadArtifactToRiByUUIDEither);
+
+ Response response = target()
+ .path(path)
+ .request()
+ .accept(MediaType.APPLICATION_JSON)
+ .header(Constants.X_ECOMP_INSTANCE_ID_HEADER, "mockXEcompInstanceId")
+ .header(Constants.USER_ID_HEADER, designerUser.getUserId())
+ .post(Entity.json(EMPTY_JSON));
+
+ assertThat(response.getStatus()).isEqualTo(HttpStatus.SC_OK);
+ }
+
+ @Test
+ public void updateArtifactErrorDuringUpdateProcessingTest() {
+ Map<String,String> parametersMap = new HashMap<>();
+ parametersMap.put(ASSET_TYPE, ComponentTypeEnum.SERVICE_PARAM_NAME);
+ parametersMap.put(UUID, "uuid");
+ parametersMap.put(ARTIFACT_UUID, "artifactUUID");
+
+ String formatEndpoint = "/v1/catalog/{assetType}/{uuid}/artifacts/{artifactUUID}";
+ String path = StrSubstitutor.replace(formatEndpoint, parametersMap, "{","}");
+
+ Either<ArtifactDefinition, ResponseFormat> updateArtifactEither =
+ Either.right(new ResponseFormat(HttpStatus.SC_CONFLICT));
+
+ given(artifactsBusinessLogic.updateArtifactOnComponentByUUID(anyString(), any(),
+ any(), any(), any(), any(), any()))
+ .willAnswer( invocation -> updateArtifactEither);
+
+ Response response = target()
+ .path(path)
+ .request()
+ .accept(MediaType.APPLICATION_JSON)
+ .header(Constants.X_ECOMP_INSTANCE_ID_HEADER, "mockXEcompInstanceId")
+ .header(Constants.USER_ID_HEADER, designerUser.getUserId())
+ .post(Entity.json(EMPTY_JSON));
+
+ assertThat(response.getStatus()).isEqualTo(HttpStatus.SC_CONFLICT);
+ }
+
+ @Test
+ public void updateArtifactExceptionDuringUpdateTest() {
+ String uuid = "uuidToThrow_updateArtifact";
+ String artifactUUID = "artifactUUIDToThrow_updateArtifact";
+ Map<String,String> parametersMap = new HashMap<>();
+ parametersMap.put(ASSET_TYPE, ComponentTypeEnum.SERVICE_PARAM_NAME);
+ parametersMap.put(UUID, uuid);
+ parametersMap.put(ARTIFACT_UUID, artifactUUID);
+
+ String formatEndpoint = "/v1/catalog/{assetType}/{uuid}/artifacts/{artifactUUID}";
+ String path = StrSubstitutor.replace(formatEndpoint, parametersMap, "{","}");
+
+ given(artifactsBusinessLogic.updateArtifactOnComponentByUUID(anyString(), any(),
+ any(), eq(uuid), eq(artifactUUID), any(), any()))
+ .willAnswer( invocation -> { throw new IOException("Test exception"); });
+
+ Response response = target()
+ .path(path)
+ .request()
+ .accept(MediaType.APPLICATION_JSON)
+ .header(Constants.X_ECOMP_INSTANCE_ID_HEADER, "mockXEcompInstanceId")
+ .header(Constants.USER_ID_HEADER, designerUser.getUserId())
+ .post(Entity.json(EMPTY_JSON));
+
+ assertThat(response.getStatus()).isEqualTo(HttpStatus.SC_INTERNAL_SERVER_ERROR);
+ }
+
+ @Test
+ public void updateArtifactTest() {
+ Map<String,String> parametersMap = new HashMap<>();
+ parametersMap.put(ASSET_TYPE, ComponentTypeEnum.SERVICE_PARAM_NAME);
+ parametersMap.put(UUID, "uuid");
+ parametersMap.put(ARTIFACT_UUID, "artifactUUID");
+
+ String formatEndpoint = "/v1/catalog/{assetType}/{uuid}/artifacts/{artifactUUID}";
+ String path = StrSubstitutor.replace(formatEndpoint, parametersMap, "{","}");
+
+ ArtifactDefinition artifactDefinition = new ArtifactDefinition();
+ Either<ArtifactDefinition, ResponseFormat> uploadArtifactToRiByUUIDEither = Either.left(artifactDefinition);
+
+ given(artifactsBusinessLogic.updateArtifactOnComponentByUUID(anyString(), any(),
+ any(), any(), any(), any(), any()))
+ .willAnswer( invocation -> uploadArtifactToRiByUUIDEither);
+
+ Response response = target()
+ .path(path)
+ .request()
+ .accept(MediaType.APPLICATION_JSON)
+ .header(Constants.X_ECOMP_INSTANCE_ID_HEADER, "mockXEcompInstanceId")
+ .header(Constants.USER_ID_HEADER, designerUser.getUserId())
+ .post(Entity.json(EMPTY_JSON));
+
+ assertThat(response.getStatus()).isEqualTo(HttpStatus.SC_OK);
+ }
+
+ /////////////////////////
+
+ @Test
+ public void updateArtifactOnResourceInstanceErrorDuringUpdateProcessingTest() {
+ Map<String,String> parametersMap = new HashMap<>();
+ parametersMap.put(ASSET_TYPE, ComponentTypeEnum.SERVICE_PARAM_NAME);
+ parametersMap.put(UUID, "uuid");
+ parametersMap.put(RESOURCE_INSTANCE_NAME, "resourceInstanceName");
+ parametersMap.put(ARTIFACT_UUID, "artifactUUID");
+
+ String formatEndpoint = "/v1/catalog/{assetType}/{uuid}/resourceInstances/{resourceInstanceName}/artifacts/{artifactUUID}";
+ String path = StrSubstitutor.replace(formatEndpoint, parametersMap, "{","}");
+
+ Either<ArtifactDefinition, ResponseFormat> updateArtifactOnResourceInstanceEither =
+ Either.right(new ResponseFormat(HttpStatus.SC_CONFLICT));
+
+ given(artifactsBusinessLogic.updateArtifactOnRiByUUID(anyString(), any(),
+ any(), any(), any(), any(), any()))
+ .willAnswer( invocation -> updateArtifactOnResourceInstanceEither);
+
+ Response response = target()
+ .path(path)
+ .request()
+ .accept(MediaType.APPLICATION_JSON)
+ .header(Constants.X_ECOMP_INSTANCE_ID_HEADER, "mockXEcompInstanceId")
+ .header(Constants.USER_ID_HEADER, designerUser.getUserId())
+ .post(Entity.json(EMPTY_JSON));
+
+ assertThat(response.getStatus()).isEqualTo(HttpStatus.SC_CONFLICT);
+ }
+
+ @Test
+ public void updateArtifactOnResourceInstanceExceptionDuringUpdateTest() {
+ String uuid = "uuidToThrow_updateArtifactOnResourceInstance";
+ String resourceInstanceName = "resourceInstanceNameToThrow_updateArtifactOnResourceInstance";
+ String artifactUUID = "artifactUUIDToThrow_updateArtifactOnResourceInstance";
+ Map<String,String> parametersMap = new HashMap<>();
+ parametersMap.put(ASSET_TYPE, ComponentTypeEnum.SERVICE_PARAM_NAME);
+ parametersMap.put(UUID, uuid);
+ parametersMap.put(RESOURCE_INSTANCE_NAME, resourceInstanceName);
+ parametersMap.put(ARTIFACT_UUID, artifactUUID);
+
+ String formatEndpoint = "/v1/catalog/{assetType}/{uuid}/resourceInstances/{resourceInstanceName}/artifacts/{artifactUUID}";
+ String path = StrSubstitutor.replace(formatEndpoint, parametersMap, "{","}");
+
+ given(artifactsBusinessLogic.updateArtifactOnRiByUUID(anyString(), any(),
+ any(), eq(uuid), eq(resourceInstanceName), eq(artifactUUID), any()))
+ .willAnswer( invocation -> { throw new IOException("Test exception"); });
+
+ Response response = target()
+ .path(path)
+ .request()
+ .accept(MediaType.APPLICATION_JSON)
+ .header(Constants.X_ECOMP_INSTANCE_ID_HEADER, "mockXEcompInstanceId")
+ .header(Constants.USER_ID_HEADER, designerUser.getUserId())
+ .post(Entity.json(EMPTY_JSON));
+
+ assertThat(response.getStatus()).isEqualTo(HttpStatus.SC_INTERNAL_SERVER_ERROR);
+ }
+
+ @Test
+ public void updateArtifactOnResourceInstanceTest() {
+ Map<String,String> parametersMap = new HashMap<>();
+ parametersMap.put(ASSET_TYPE, ComponentTypeEnum.SERVICE_PARAM_NAME);
+ parametersMap.put(UUID, "uuid");
+ parametersMap.put(RESOURCE_INSTANCE_NAME, "resourceInstanceName");
+ parametersMap.put(ARTIFACT_UUID, "artifactUUID");
+
+ String formatEndpoint = "/v1/catalog/{assetType}/{uuid}/resourceInstances/{resourceInstanceName}/artifacts/{artifactUUID}";
+ String path = StrSubstitutor.replace(formatEndpoint, parametersMap, "{","}");
+
+ ArtifactDefinition artifactDefinition = new ArtifactDefinition();
+ Either<ArtifactDefinition, ResponseFormat> updateArtifactOnResourceInstanceEither = Either.left(artifactDefinition);
+
+ given(artifactsBusinessLogic.updateArtifactOnRiByUUID(anyString(), any(),
+ any(), any(), any(), any(), any()))
+ .willAnswer( invocation -> updateArtifactOnResourceInstanceEither);
+
+ Response response = target()
+ .path(path)
+ .request()
+ .accept(MediaType.APPLICATION_JSON)
+ .header(Constants.X_ECOMP_INSTANCE_ID_HEADER, "mockXEcompInstanceId")
+ .header(Constants.USER_ID_HEADER, designerUser.getUserId())
+ .post(Entity.json(EMPTY_JSON));
+
+ assertThat(response.getStatus()).isEqualTo(HttpStatus.SC_OK);
+ }
+
+ @Test
+ public void deleteArtifactErrorDuringDeleteProcessingTest() {
+ Map<String,String> parametersMap = new HashMap<>();
+ parametersMap.put(ASSET_TYPE, ComponentTypeEnum.SERVICE_PARAM_NAME);
+ parametersMap.put(UUID, "uuid");
+ parametersMap.put(ARTIFACT_UUID, "artifactUUID");
+
+ String formatEndpoint = "/v1/catalog/{assetType}/{uuid}/artifacts/{artifactUUID}";
+ String path = StrSubstitutor.replace(formatEndpoint, parametersMap, "{","}");
+
+ Either<ArtifactDefinition, ResponseFormat> deleteArtifactOnComponentByUUIDEither =
+ Either.right(new ResponseFormat(HttpStatus.SC_CONFLICT));
+
+ given(artifactsBusinessLogic.deleteArtifactOnComponentByUUID(any(), any(), any(), any(),
+ any(), any()))
+ .willAnswer( invocation -> deleteArtifactOnComponentByUUIDEither);
+
+ Response response = target()
+ .path(path)
+ .request()
+ .accept(MediaType.APPLICATION_JSON)
+ .header(Constants.X_ECOMP_INSTANCE_ID_HEADER, "mockXEcompInstanceId")
+ .header(Constants.USER_ID_HEADER, designerUser.getUserId())
+ .delete();
+
+ assertThat(response.getStatus()).isEqualTo(HttpStatus.SC_CONFLICT);
+ }
+
+ @Test
+ public void deleteArtifactExceptionDuringDeleteTest() {
+ String uuid = "uuidToThrow_deleteArtifact";
+ String artifactUUID = "artifactUUIDToThrow_deleteArtifact";
+ Map<String,String> parametersMap = new HashMap<>();
+ parametersMap.put(ASSET_TYPE, ComponentTypeEnum.SERVICE_PARAM_NAME);
+ parametersMap.put(UUID, uuid);
+ parametersMap.put(ARTIFACT_UUID, artifactUUID);
+
+ String formatEndpoint = "/v1/catalog/{assetType}/{uuid}/artifacts/{artifactUUID}";
+ String path = StrSubstitutor.replace(formatEndpoint, parametersMap, "{","}");
+
+ given(artifactsBusinessLogic.deleteArtifactOnComponentByUUID(any(), any(), eq(uuid),
+ eq(artifactUUID), any(), any()))
+ .willAnswer( invocation -> { throw new IOException("Test exception"); });
+
+ Response response = target()
+ .path(path)
+ .request()
+ .accept(MediaType.APPLICATION_JSON)
+ .header(Constants.X_ECOMP_INSTANCE_ID_HEADER, "mockXEcompInstanceId")
+ .header(Constants.USER_ID_HEADER, designerUser.getUserId())
+ .delete();
+
+ assertThat(response.getStatus()).isEqualTo(HttpStatus.SC_INTERNAL_SERVER_ERROR);
+ }
+
+ @Test
+ public void deleteArtifactTest() {
+ Map<String,String> parametersMap = new HashMap<>();
+ parametersMap.put(ASSET_TYPE, ComponentTypeEnum.SERVICE_PARAM_NAME);
+ parametersMap.put(UUID, "uuid");
+ parametersMap.put(ARTIFACT_UUID, "artifactUUID");
+
+ String formatEndpoint = "/v1/catalog/{assetType}/{uuid}/artifacts/{artifactUUID}";
+ String path = StrSubstitutor.replace(formatEndpoint, parametersMap, "{","}");
+
+ ArtifactDefinition artifactDefinition = new ArtifactDefinition();
+ Either<ArtifactDefinition, ResponseFormat> deleteArtifactOnComponentByUUIDEither = Either.left(artifactDefinition);
+
+ given(artifactsBusinessLogic.deleteArtifactOnComponentByUUID(any(), any(), any(), any(),
+ any(), any()))
+ .willAnswer( invocation -> deleteArtifactOnComponentByUUIDEither);
+
+ Response response = target()
+ .path(path)
+ .request()
+ .accept(MediaType.APPLICATION_JSON)
+ .header(Constants.X_ECOMP_INSTANCE_ID_HEADER, "mockXEcompInstanceId")
+ .header(Constants.USER_ID_HEADER, designerUser.getUserId())
+ .delete();
+
+ assertThat(response.getStatus()).isEqualTo(HttpStatus.SC_OK);
+ }
+
+ @Test
+ public void deleteArtifactOnResourceErrorDuringDeleteProcessingTest() {
+ Map<String,String> parametersMap = new HashMap<>();
+ parametersMap.put(ASSET_TYPE, ComponentTypeEnum.SERVICE_PARAM_NAME);
+ parametersMap.put(UUID, "uuid");
+ parametersMap.put(RESOURCE_INSTANCE_NAME, "resourceInstanceName");
+ parametersMap.put(ARTIFACT_UUID, "artifactUUID");
+
+ String formatEndpoint = "/v1/catalog/{assetType}/{uuid}/resourceInstances/{resourceInstanceName}/artifacts/{artifactUUID}";
+ String path = StrSubstitutor.replace(formatEndpoint, parametersMap, "{","}");
+
+ Either<ArtifactDefinition, ResponseFormat> deleteArtifactOnRiByUUIDEither =
+ Either.right(new ResponseFormat(HttpStatus.SC_CONFLICT));
+
+ given(artifactsBusinessLogic.deleteArtifactOnRiByUUID(any(), any(), any(), any(),
+ any(), any()))
+ .willAnswer( invocation -> deleteArtifactOnRiByUUIDEither);
+
+ Response response = target()
+ .path(path)
+ .request()
+ .accept(MediaType.APPLICATION_JSON)
+ .header(Constants.X_ECOMP_INSTANCE_ID_HEADER, "mockXEcompInstanceId")
+ .header(Constants.USER_ID_HEADER, designerUser.getUserId())
+ .delete();
+
+ assertThat(response.getStatus()).isEqualTo(HttpStatus.SC_CONFLICT);
+ }
+
+ @Test
+ public void deleteArtifactOnResourceExceptionDuringDeleteTest() {
+ String uuid = "uuidToThrow_deleteArtifactOnResource";
+ String resourceInstanceName = "resourceInstanceNameToThrow_deleteArtifactOnResource";
+ String artifactUUID = "artifactUUIDToThrow_deleteArtifactOnResource";
+ Map<String,String> parametersMap = new HashMap<>();
+ parametersMap.put(ASSET_TYPE, ComponentTypeEnum.SERVICE_PARAM_NAME);
+ parametersMap.put(UUID, uuid);
+ parametersMap.put(RESOURCE_INSTANCE_NAME, resourceInstanceName);
+ parametersMap.put(ARTIFACT_UUID, artifactUUID);
+
+ String formatEndpoint = "/v1/catalog/{assetType}/{uuid}/resourceInstances/{resourceInstanceName}/artifacts/{artifactUUID}";
+ String path = StrSubstitutor.replace(formatEndpoint, parametersMap, "{","}");
+
+ given(artifactsBusinessLogic.deleteArtifactOnRiByUUID(any(), any(), eq(uuid),
+ eq(resourceInstanceName), eq(artifactUUID), any()))
+ .willAnswer( invocation -> { throw new IOException("Test exception"); });
+
+ Response response = target()
+ .path(path)
+ .request()
+ .accept(MediaType.APPLICATION_JSON)
+ .header(Constants.X_ECOMP_INSTANCE_ID_HEADER, "mockXEcompInstanceId")
+ .header(Constants.USER_ID_HEADER, designerUser.getUserId())
+ .delete();
+
+ assertThat(response.getStatus()).isEqualTo(HttpStatus.SC_INTERNAL_SERVER_ERROR);
+ }
+
+ @Test
+ public void deleteArtifactOnResourceTest() {
+ Map<String,String> parametersMap = new HashMap<>();
+ parametersMap.put(ASSET_TYPE, ComponentTypeEnum.SERVICE_PARAM_NAME);
+ parametersMap.put(UUID, "uuid");
+ parametersMap.put(RESOURCE_INSTANCE_NAME, "resourceInstanceName");
+ parametersMap.put(ARTIFACT_UUID, "artifactUUID");
+
+ String formatEndpoint = "/v1/catalog/{assetType}/{uuid}/resourceInstances/{resourceInstanceName}/artifacts/{artifactUUID}";
+ String path = StrSubstitutor.replace(formatEndpoint, parametersMap, "{","}");
+
+ ArtifactDefinition artifactDefinition = new ArtifactDefinition();
+ Either<ArtifactDefinition, ResponseFormat> deleteArtifactOnRiByUUIDEither = Either.left(artifactDefinition);
+
+ given(artifactsBusinessLogic.deleteArtifactOnRiByUUID(any(), any(), any(), any(),
+ any(), any()))
+ .willAnswer( invocation -> deleteArtifactOnRiByUUIDEither);
+
+ Response response = target()
+ .path(path)
+ .request()
+ .accept(MediaType.APPLICATION_JSON)
+ .header(Constants.X_ECOMP_INSTANCE_ID_HEADER, "mockXEcompInstanceId")
+ .header(Constants.USER_ID_HEADER, designerUser.getUserId())
+ .delete();
+
+ assertThat(response.getStatus()).isEqualTo(HttpStatus.SC_OK);
+ }
+
+ @Test
+ public void downloadComponentArtifactErrorDuringDownloadProcessingTest() {
+ Map<String,String> parametersMap = new HashMap<>();
+ parametersMap.put(ASSET_TYPE, ComponentTypeEnum.SERVICE_PARAM_NAME);
+ parametersMap.put(UUID, "uuid");
+ parametersMap.put(ARTIFACT_UUID, "artifactUUID");
+
+ String formatEndpoint = "/v1/catalog/{assetType}/{uuid}/artifacts/{artifactUUID}";
+ String path = StrSubstitutor.replace(formatEndpoint, parametersMap, "{","}");
+
+ Either<byte[], ResponseFormat> downloadComponentArtifactByUUIDsEither =
+ Either.right(new ResponseFormat(HttpStatus.SC_SERVICE_UNAVAILABLE));
+
+ given(artifactsBusinessLogic.downloadComponentArtifactByUUIDs(any(), any(), any(), any()))
+ .willAnswer( invocation -> downloadComponentArtifactByUUIDsEither);
+
+ Response response = target()
+ .path(path)
+ .request()
+ .accept(MediaType.APPLICATION_OCTET_STREAM)
+ .header(Constants.X_ECOMP_INSTANCE_ID_HEADER, "mockXEcompInstanceId")
+ .header(Constants.USER_ID_HEADER, designerUser.getUserId())
+ .get();
+
+ assertThat(response.getStatus()).isEqualTo(HttpStatus.SC_SERVICE_UNAVAILABLE);
+ }
+
+ @Test
+ public void downloadComponentArtifactExceptionDuringUploadTest() {
+ String uuid = "uuidToThrow_downloadComponentArtifact";
+ String artifactUUID = "artifactUUIDToThrow_downloadComponentArtifact";
+ Map<String,String> parametersMap = new HashMap<>();
+ parametersMap.put(ASSET_TYPE, ComponentTypeEnum.SERVICE_PARAM_NAME);
+ parametersMap.put(UUID, uuid);
+ parametersMap.put(ARTIFACT_UUID, artifactUUID);
+
+ String formatEndpoint = "/v1/catalog/{assetType}/{uuid}/artifacts/{artifactUUID}";
+ String path = StrSubstitutor.replace(formatEndpoint, parametersMap, "{","}");
+
+ given(artifactsBusinessLogic.downloadComponentArtifactByUUIDs(any(), eq(uuid),
+ eq(artifactUUID), any()))
+ .willAnswer( invocation -> { throw new IOException("Test exception"); });
+
+ Response response = target()
+ .path(path)
+ .request()
+ .accept(MediaType.APPLICATION_OCTET_STREAM)
+ .header(Constants.X_ECOMP_INSTANCE_ID_HEADER, "mockXEcompInstanceId")
+ .header(Constants.USER_ID_HEADER, designerUser.getUserId())
+ .get();
+
+ assertThat(response.getStatus()).isEqualTo(HttpStatus.SC_INTERNAL_SERVER_ERROR);
+ }
+
+ @Test
+ public void downloadComponentArtifactTest() {
+ Map<String,String> parametersMap = new HashMap<>();
+ parametersMap.put(ASSET_TYPE, ComponentTypeEnum.SERVICE_PARAM_NAME);
+ parametersMap.put(UUID, "uuid");
+ parametersMap.put(ARTIFACT_UUID, "artifactUUID");
+
+ String formatEndpoint = "/v1/catalog/{assetType}/{uuid}/artifacts/{artifactUUID}";
+ String path = StrSubstitutor.replace(formatEndpoint, parametersMap, "{","}");
+
+ byte[] responsePayload = {0xA, 0xB, 0xC, 0xD};
+ Either<byte[], ResponseFormat> downloadComponentArtifactByUUIDsEither = Either.left(responsePayload);
+
+ given(artifactsBusinessLogic.downloadComponentArtifactByUUIDs(any(), any(), any(), any()))
+ .willAnswer( invocation -> downloadComponentArtifactByUUIDsEither);
+
+ Response response = target()
+ .path(path)
+ .request()
+ .accept(MediaType.APPLICATION_OCTET_STREAM)
+ .header(Constants.X_ECOMP_INSTANCE_ID_HEADER, "mockXEcompInstanceId")
+ .header(Constants.USER_ID_HEADER, designerUser.getUserId())
+ .get();
+
+ assertThat(response.getStatus()).isEqualTo(HttpStatus.SC_OK);
+ }
+
+ @Test
+ public void downloadResourceInstanceArtifactErrorDuringDownloadProcessingTest() {
+ Map<String,String> parametersMap = new HashMap<>();
+ parametersMap.put(ASSET_TYPE, ComponentTypeEnum.SERVICE_PARAM_NAME);
+ parametersMap.put(UUID, "uuid");
+ parametersMap.put(RESOURCE_INSTANCE_NAME, "resourceInstanceName");
+ parametersMap.put(ARTIFACT_UUID, "artifactUUID");
+
+ String formatEndpoint = "/v1/catalog/{assetType}/{uuid}/resourceInstances/{resourceInstanceName}/artifacts/{artifactUUID}";
+ String path = StrSubstitutor.replace(formatEndpoint, parametersMap, "{","}");
+
+ Either<byte[], ResponseFormat> downloadResourceInstanceArtifactByUUIDsEither =
+ Either.right(new ResponseFormat(HttpStatus.SC_SERVICE_UNAVAILABLE));
+
+ given(artifactsBusinessLogic.downloadResourceInstanceArtifactByUUIDs(any(), any(), any(),
+ any()))
+ .willAnswer( invocation -> downloadResourceInstanceArtifactByUUIDsEither);
+
+ Response response = target()
+ .path(path)
+ .request()
+ .accept(MediaType.APPLICATION_OCTET_STREAM)
+ .header(Constants.X_ECOMP_INSTANCE_ID_HEADER, "mockXEcompInstanceId")
+ .header(Constants.USER_ID_HEADER, designerUser.getUserId())
+ .get();
+
+ assertThat(response.getStatus()).isEqualTo(HttpStatus.SC_SERVICE_UNAVAILABLE);
+ }
+
+ @Test
+ public void downloadResourceInstanceArtifactExceptionDuringUploadTest() {
+ String uuid = "uuidToThrow_downloadResourceInstanceArtifact";
+ String resourceInstanceName = "resourceInstanceNameToThrow_downloadResourceInstanceArtifact";
+ String artifactUUID = "artifactUUIDToThrow_downloadResourceInstanceArtifact";
+ Map<String,String> parametersMap = new HashMap<>();
+ parametersMap.put(ASSET_TYPE, ComponentTypeEnum.SERVICE_PARAM_NAME);
+ parametersMap.put(UUID, uuid);
+ parametersMap.put(RESOURCE_INSTANCE_NAME, resourceInstanceName);
+ parametersMap.put(ARTIFACT_UUID, artifactUUID);
+
+ String formatEndpoint = "/v1/catalog/{assetType}/{uuid}/resourceInstances/{resourceInstanceName}/artifacts/{artifactUUID}";
+ String path = StrSubstitutor.replace(formatEndpoint, parametersMap, "{","}");
+
+ when(artifactsBusinessLogic.downloadResourceInstanceArtifactByUUIDs(any(), eq(uuid),
+ eq(resourceInstanceName), eq(artifactUUID)))
+ .thenThrow(new ByResponseFormatComponentException(generalErrorResponseFormat));
+
+ Response response = target()
+ .path(path)
+ .request()
+ .accept(MediaType.APPLICATION_OCTET_STREAM)
+ .header(Constants.X_ECOMP_INSTANCE_ID_HEADER, "mockXEcompInstanceId")
+ .header(Constants.USER_ID_HEADER, designerUser.getUserId())
+ .get();
+
+ assertThat(response.getStatus()).isEqualTo(HttpStatus.SC_INTERNAL_SERVER_ERROR);
+ }
+
+ @Test
+ public void downloadResourceInstanceArtifactTest() {
+ Map<String,String> parametersMap = new HashMap<>();
+ parametersMap.put(ASSET_TYPE, ComponentTypeEnum.SERVICE_PARAM_NAME);
+ parametersMap.put(UUID, "uuid");
+ parametersMap.put(RESOURCE_INSTANCE_NAME, "resourceInstanceName");
+ parametersMap.put(ARTIFACT_UUID, "artifactUUID");
+
+ String formatEndpoint = "/v1/catalog/{assetType}/{uuid}/resourceInstances/{resourceInstanceName}/artifacts/{artifactUUID}";
+ String path = StrSubstitutor.replace(formatEndpoint, parametersMap, "{","}");
+
+ byte[] responsePayload = {0xA, 0xB, 0xC, 0xD};
+ Either<byte[], ResponseFormat> downloadResourceInstanceArtifactByUUIDsEither = Either.left(responsePayload);
+
+ given(artifactsBusinessLogic.downloadResourceInstanceArtifactByUUIDs(any(), any(), any(),
+ any()))
+ .willAnswer( invocation -> downloadResourceInstanceArtifactByUUIDsEither);
+
+ Response response = target()
+ .path(path)
+ .request()
+ .accept(MediaType.APPLICATION_OCTET_STREAM)
+ .header(Constants.X_ECOMP_INSTANCE_ID_HEADER, "mockXEcompInstanceId")
+ .header(Constants.USER_ID_HEADER, designerUser.getUserId())
+ .get();
+
+ assertThat(response.getStatus()).isEqualTo(HttpStatus.SC_OK);
+ }
+
+ @Override
+ protected Application configure() {
+ ApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class);
+ return new ResourceConfig(ArtifactExternalServlet.class)
+ .register(new AbstractBinder() {
+
+ @Override
+ protected void configure() {
+ bind(request).to(HttpServletRequest.class);
+ bind(userBusinessLogic).to(UserBusinessLogic.class);
+ bind(componentInstanceBusinessLogic).to(ComponentInstanceBusinessLogic.class);
+ bind(componentUtils).to(ComponentsUtils.class);
+ bind(servletUtils).to(ServletUtils.class);
+ bind(resourceImportManager).to(ResourceImportManager.class);
+ bind(artifactsBusinessLogic).to(ArtifactsBusinessLogic.class);
+ }
+ })
+ .property("contextConfig", context);
+ }
+} \ No newline at end of file