1 package org.openecomp.sdc.be.servlets;
3 import com.fasterxml.jackson.databind.DeserializationFeature;
5 import org.apache.commons.lang3.tuple.ImmutablePair;
6 import org.eclipse.jetty.http.HttpStatus;
7 import org.glassfish.jersey.client.ClientConfig;
8 import org.glassfish.jersey.jackson.internal.jackson.jaxrs.json.JacksonJaxbJsonProvider;
9 import org.glassfish.jersey.jackson.internal.jackson.jaxrs.json.JacksonJsonProvider;
10 import org.glassfish.jersey.logging.LoggingFeature;
11 import org.glassfish.jersey.media.multipart.FormDataMultiPart;
12 import org.glassfish.jersey.media.multipart.MultiPart;
13 import org.glassfish.jersey.media.multipart.MultiPartFeature;
14 import org.glassfish.jersey.media.multipart.file.FileDataBodyPart;
15 import org.glassfish.jersey.server.ResourceConfig;
16 import org.junit.BeforeClass;
17 import org.junit.Test;
18 import org.mockito.Mockito;
19 import org.openecomp.sdc.be.components.impl.CommonImportManager;
20 import org.openecomp.sdc.be.components.validation.AccessValidations;
21 import org.openecomp.sdc.be.dao.janusgraph.HealingJanusGraphGenericDao;
22 import org.openecomp.sdc.be.dao.janusgraph.JanusGraphOperationStatus;
23 import org.openecomp.sdc.be.datatypes.enums.NodeTypeEnum;
24 import org.openecomp.sdc.be.impl.ComponentsUtils;
25 import org.openecomp.sdc.be.model.AnnotationTypeDefinition;
26 import org.openecomp.sdc.be.model.operations.StorageException;
27 import org.openecomp.sdc.be.model.operations.impl.AnnotationTypeOperations;
28 import org.openecomp.sdc.be.model.operations.impl.CommonTypeOperations;
29 import org.openecomp.sdc.be.model.operations.impl.OperationUtils;
30 import org.openecomp.sdc.be.model.operations.impl.PropertyOperation;
31 import org.openecomp.sdc.be.resources.data.AnnotationTypeData;
32 import org.openecomp.sdc.common.api.Constants;
33 import org.springframework.context.annotation.Bean;
34 import org.springframework.context.annotation.Import;
36 import javax.ws.rs.client.Entity;
37 import javax.ws.rs.core.MediaType;
38 import javax.ws.rs.core.Response;
40 import java.util.ArrayList;
41 import java.util.List;
43 import static java.util.Collections.emptyMap;
44 import static org.assertj.core.api.Assertions.assertThat;
45 import static org.mockito.ArgumentMatchers.any;
46 import static org.mockito.ArgumentMatchers.anyList;
47 import static org.mockito.ArgumentMatchers.anyMap;
48 import static org.mockito.ArgumentMatchers.anyString;
49 import static org.mockito.ArgumentMatchers.eq;
50 import static org.mockito.ArgumentMatchers.isA;
51 import static org.mockito.Mockito.*;
53 public class TypesUploadEndpointTest extends JerseySpringBaseTest {
55 static final String userId = "jh0003";
57 private static AccessValidations accessValidations;
58 private static HealingJanusGraphGenericDao janusGraphGenericDao;
59 private static PropertyOperation propertyOperation;
60 private static ComponentsUtils componentUtils;
61 private static OperationUtils operationUtils;
63 @org.springframework.context.annotation.Configuration
64 @Import(BaseTestConfig.class)
65 static class TypesUploadTestConfig {
68 TypesUploadEndpoint typesUploadEndpoint() {
69 return new TypesUploadEndpoint(commonImportManager(), annotationTypeOperations(), accessValidations);
73 CommonImportManager commonImportManager() {
74 return new CommonImportManager(componentUtils, propertyOperation);
78 AnnotationTypeOperations annotationTypeOperations() {
79 return new AnnotationTypeOperations(commonTypeOperations());
83 CommonTypeOperations commonTypeOperations() {
84 return new CommonTypeOperations(janusGraphGenericDao, propertyOperation, operationUtils);
89 public static void initClass() {
90 janusGraphGenericDao = mock(HealingJanusGraphGenericDao.class);
91 accessValidations = mock(AccessValidations.class);
92 propertyOperation = mock(PropertyOperation.class);
93 componentUtils = Mockito.mock(ComponentsUtils.class);
94 operationUtils = Mockito.mock(OperationUtils.class);
98 protected void configureClient(ClientConfig config) {
99 final JacksonJsonProvider jacksonJsonProvider = new JacksonJaxbJsonProvider()
100 .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
101 config.register(jacksonJsonProvider);
102 config.register(MultiPartFeature.class);
106 protected ResourceConfig configure() {
107 return super.configure(TypesUploadEndpointTest.TypesUploadTestConfig.class)
108 .register(TypesUploadEndpoint.class)
109 .property(LoggingFeature.LOGGING_FEATURE_LOGGER_LEVEL_SERVER, "WARNING");
113 public void creatingAnnotationTypeSuccessTest() {
114 doNothing().when(accessValidations).validateUserExists(eq(userId), anyString());
115 when(janusGraphGenericDao.createNode(isA(AnnotationTypeData.class), eq(AnnotationTypeData.class))).thenReturn(Either.left(new AnnotationTypeData()));
116 when(janusGraphGenericDao.getNode(anyString(), eq("org.openecomp.annotations.source.1.0.annotationtype"), eq(AnnotationTypeData.class))).thenReturn(Either.left(new AnnotationTypeData()));
117 when(janusGraphGenericDao.getByCriteria(eq(NodeTypeEnum.AnnotationType), anyMap(), eq(AnnotationTypeData.class))).thenReturn(Either.right(
118 JanusGraphOperationStatus.NOT_FOUND));
119 when(propertyOperation.addPropertiesToElementType(anyString(), eq(NodeTypeEnum.AnnotationType), anyList())).thenReturn(Either.left(emptyMap()));
120 when(propertyOperation.fillPropertiesList(anyString(), eq(NodeTypeEnum.AnnotationType), any())).thenReturn(
121 JanusGraphOperationStatus.OK);
122 when(propertyOperation.getJanusGraphGenericDao()).thenReturn(janusGraphGenericDao);
123 when(janusGraphGenericDao.commit()).thenReturn(JanusGraphOperationStatus.OK);
124 when(janusGraphGenericDao.rollback()).thenReturn(JanusGraphOperationStatus.OK);
125 FileDataBodyPart filePart = new FileDataBodyPart("annotationTypesZip", new File("src/test/resources/types/annotationTypes.zip"));
126 MultiPart multipartEntity = new FormDataMultiPart();
127 multipartEntity.bodyPart(filePart);
129 Response response = target().path("/v1/catalog/uploadType/annotationtypes")
130 .request(MediaType.APPLICATION_JSON)
131 .header(Constants.USER_ID_HEADER, userId)
132 .post(Entity.entity(multipartEntity, MediaType.MULTIPART_FORM_DATA), Response.class);
133 assertThat(response.getStatus()).isEqualTo(HttpStatus.CREATED_201);
134 assertThat(Boolean.valueOf(getTypeActionResult(response))).isTrue();
137 private String getTypeActionResult(Response response) {
138 String typeResult = "";
139 String body = response.readEntity(String.class);
140 int indexColon = body.lastIndexOf(':');
141 if (indexColon > 0) {
142 int indexCurly = body.indexOf('}', indexColon);
143 if (indexCurly > 0) {
144 typeResult = body.substring(indexColon+1, indexCurly);
151 public void creatingAnnotationTypeFailureTest() {
152 doNothing().when(accessValidations).validateUserExists(eq(userId), anyString());
153 when(janusGraphGenericDao.createNode(isA(AnnotationTypeData.class), eq(AnnotationTypeData.class))).thenReturn(Either.left(new AnnotationTypeData()));
154 when(janusGraphGenericDao.getNode(anyString(), eq("org.openecomp.annotations.source.1.0.annotationtype"), eq(AnnotationTypeData.class))).thenReturn(Either.left(new AnnotationTypeData()));
155 when(janusGraphGenericDao.getByCriteria(eq(NodeTypeEnum.AnnotationType), anyMap(), eq(AnnotationTypeData.class))).thenReturn(Either.right(
156 JanusGraphOperationStatus.NOT_FOUND));
157 when(propertyOperation.addPropertiesToElementType(anyString(), eq(NodeTypeEnum.AnnotationType), anyList())).thenThrow(new StorageException(
158 JanusGraphOperationStatus.MATCH_NOT_FOUND));
159 when(propertyOperation.fillPropertiesList(anyString(), eq(NodeTypeEnum.AnnotationType), any())).thenReturn(
160 JanusGraphOperationStatus.OK);
161 when(propertyOperation.getJanusGraphGenericDao()).thenReturn(janusGraphGenericDao);
162 when(janusGraphGenericDao.commit()).thenReturn(JanusGraphOperationStatus.OK);
163 when(janusGraphGenericDao.rollback()).thenReturn(JanusGraphOperationStatus.OK);
164 FileDataBodyPart filePart = new FileDataBodyPart("annotationTypesZip", new File("src/test/resources/types/annotationTypes.zip"));
165 MultiPart multipartEntity = new FormDataMultiPart();
166 multipartEntity.bodyPart(filePart);
168 Response response = target().path("/v1/catalog/uploadType/annotationtypes")
169 .request(MediaType.APPLICATION_JSON)
170 .header(Constants.USER_ID_HEADER, userId)
171 .post(Entity.entity(multipartEntity, MediaType.MULTIPART_FORM_DATA), Response.class);
172 assertThat(response.getStatus()).isEqualTo(HttpStatus.BAD_REQUEST_400);
173 assertThat(Boolean.valueOf(getTypeActionResult(response))).isFalse();
177 public void singleTypeSucceeded_statusIsCreated() {
178 List<ImmutablePair<AnnotationTypeDefinition, Boolean>> typeActionResults = new ArrayList<>();
179 AnnotationTypeDefinition dummyDefition = new AnnotationTypeDefinition();
180 typeActionResults.add(new ImmutablePair(dummyDefition, true));
181 assertThat(TypesUploadEndpoint.getHttpStatus(typeActionResults).value()).isEqualTo(HttpStatus.CREATED_201);
185 public void singleTypeExists_statusIsConflict() {
186 List<ImmutablePair<AnnotationTypeDefinition, Boolean>> typeActionResults = new ArrayList<>();
187 AnnotationTypeDefinition dummyDefition = new AnnotationTypeDefinition();
188 typeActionResults.add(new ImmutablePair(dummyDefition, null));
189 assertThat(TypesUploadEndpoint.getHttpStatus(typeActionResults).value()).isEqualTo(HttpStatus.CONFLICT_409);
193 public void mixedSuccessAndExists_statusIsCreated() {
194 List<ImmutablePair<AnnotationTypeDefinition, Boolean>> typeActionResults = new ArrayList<>();
195 AnnotationTypeDefinition dummyDefition = new AnnotationTypeDefinition();
196 typeActionResults.add(new ImmutablePair(dummyDefition, true));
197 typeActionResults.add(new ImmutablePair(dummyDefition, null));
198 assertThat(TypesUploadEndpoint.getHttpStatus(typeActionResults).value()).isEqualTo(HttpStatus.CREATED_201);
202 public void mixedSuccessAndFailure_statusIsBadRequest() {
203 List<ImmutablePair<AnnotationTypeDefinition, Boolean>> typeActionResults = new ArrayList<>();
204 AnnotationTypeDefinition dummyDefition = new AnnotationTypeDefinition();
205 typeActionResults.add(new ImmutablePair(dummyDefition, true));
206 typeActionResults.add(new ImmutablePair(dummyDefition, false));
207 typeActionResults.add(new ImmutablePair(dummyDefition, null));
208 assertThat(TypesUploadEndpoint.getHttpStatus(typeActionResults).value()).isEqualTo(HttpStatus.BAD_REQUEST_400);