1 package org.openecomp.sdc.be.servlets;
3 import static org.assertj.core.api.Assertions.assertThat;
4 import static org.junit.Assert.assertEquals;
5 import static org.mockito.ArgumentMatchers.any;
6 import static org.mockito.ArgumentMatchers.anyMap;
7 import static org.mockito.ArgumentMatchers.eq;
8 import static org.mockito.Mockito.when;
9 import static org.openecomp.sdc.common.api.Constants.GET_POLICY;
11 import com.fasterxml.jackson.databind.DeserializationFeature;
12 import fj.data.Either;
13 import java.util.Arrays;
14 import java.util.Collections;
15 import java.util.HashMap;
16 import java.util.List;
17 import java.util.Objects;
18 import javax.ws.rs.client.ClientBuilder;
19 import javax.ws.rs.client.Entity;
20 import javax.ws.rs.client.Invocation;
21 import javax.ws.rs.core.GenericType;
22 import javax.ws.rs.core.MediaType;
23 import javax.ws.rs.core.Response;
24 import org.glassfish.grizzly.http.util.HttpStatus;
25 import org.glassfish.jersey.client.ClientConfig;
26 import org.glassfish.jersey.jackson.internal.jackson.jaxrs.json.JacksonJaxbJsonProvider;
27 import org.glassfish.jersey.jackson.internal.jackson.jaxrs.json.JacksonJsonProvider;
28 import org.glassfish.jersey.server.ResourceConfig;
29 import org.json.simple.JSONObject;
30 import org.junit.Before;
31 import org.junit.BeforeClass;
32 import org.junit.Test;
33 import org.junit.runner.RunWith;
34 import org.mockito.ArgumentCaptor;
35 import org.mockito.Captor;
36 import org.mockito.Mockito;
37 import org.mockito.Spy;
38 import org.mockito.junit.MockitoJUnitRunner;
39 import org.openecomp.sdc.be.components.impl.BaseBusinessLogic;
40 import org.openecomp.sdc.be.components.impl.PolicyBusinessLogic;
41 import org.openecomp.sdc.be.components.property.PropertyDeclarationOrchestrator;
42 import org.openecomp.sdc.be.components.utils.PropertyDataDefinitionBuilder;
43 import org.openecomp.sdc.be.dao.api.ActionStatus;
44 import org.openecomp.sdc.be.datatypes.elements.GetPolicyValueDataDefinition;
45 import org.openecomp.sdc.be.datatypes.elements.PropertyDataDefinition;
46 import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum;
47 import org.openecomp.sdc.be.impl.ComponentsUtils;
48 import org.openecomp.sdc.be.impl.ServletUtils;
49 import org.openecomp.sdc.be.model.ComponentInstInputsMap;
50 import org.openecomp.sdc.be.model.ComponentInstancePropInput;
51 import org.openecomp.sdc.be.model.PolicyDefinition;
52 import org.openecomp.sdc.be.model.PolicyTargetDTO;
53 import org.openecomp.sdc.be.model.PropertyDefinition;
54 import org.openecomp.sdc.be.model.Service;
55 import org.openecomp.sdc.be.model.jsonjanusgraph.operations.ToscaOperationFacade;
56 import org.openecomp.sdc.be.model.operations.impl.UniqueIdBuilder;
57 import org.openecomp.sdc.be.resources.data.auditing.AuditingActionEnum;
58 import org.openecomp.sdc.common.api.Constants;
59 import org.openecomp.sdc.exception.ResponseFormat;
61 @RunWith(MockitoJUnitRunner.class)
62 public class PolicyServletTest extends JerseySpringBaseTest{
64 private final static String USER_ID = "jh0003";
65 private static final String COMPONENT_ID = "componentId";
66 private static PolicyBusinessLogic businessLogic;
67 private static ComponentsUtils componentsUtils;
68 private static ServletUtils servletUtils;
69 private static PropertyDeclarationOrchestrator propertyDeclarationOrchestrator;
70 private static ToscaOperationFacade toscaOperationFacade;
71 private static ResponseFormat responseFormat;
73 private static ArgumentCaptor<PolicyDefinition> policyCaptor;
75 private static BaseBusinessLogic baseBusinessLogic;
77 private static String validComponentType = "resources";
78 private static String unsupportedComponentType = "unsupported";
79 private static String componentId = "componentId";
80 private static String policyTypeName = "policyTypeName";
82 private static final String PROPS_URL = "/v1/catalog/{componentType}/{serviceId}/policies/{policyId}/properties";
83 private static final String DECLARE_URL = "v1/catalog/{componentType}/{serviceId}/create/policies";
84 private static final String DELETE_URL = "v1/catalog/{containerComponentType}/{componentId}/policies/{policyId}";
85 private static final String SERVICE_ID = "serviceId";
86 private static final String POLICY_ID = "policyId";
87 private static final String PROP_1 = "prop1";
89 private static final String UPDATE_TARGETS_URL = "/v1/catalog/{componentType}/{componentId}/policies/{policyId}/targets";
92 public static void initClass() {
94 when(servletUtils.getComponentsUtils()).thenReturn(componentsUtils);
98 public void beforeMethod() {
99 final JacksonJsonProvider jacksonJsonProvider = new JacksonJaxbJsonProvider().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
100 setClient(ClientBuilder.newClient(new ClientConfig(jacksonJsonProvider)));
104 public void testGetPolicySuccess(){
105 String path = "/v1/catalog/" + validComponentType + "/" + componentId + "/policies/" + POLICY_ID;
106 Either<PolicyDefinition, ResponseFormat> successResponse = Either.left(new PolicyDefinition());
107 when(businessLogic.getPolicy(eq(ComponentTypeEnum.RESOURCE), eq(componentId), eq(POLICY_ID), eq(USER_ID))).thenReturn(successResponse);
108 when(responseFormat.getStatus()).thenReturn(HttpStatus.OK_200.getStatusCode());
109 Response response = target()
111 .request(MediaType.APPLICATION_JSON)
112 .header("USER_ID", USER_ID)
113 .get(Response.class);
115 assertEquals(response.getStatus(), HttpStatus.OK_200.getStatusCode());
119 public void testGetPolicyFailure(){
120 String path = "/v1/catalog/" + unsupportedComponentType + "/" + componentId + "/policies/" + POLICY_ID;
121 when(responseFormat.getStatus()).thenReturn(HttpStatus.BAD_REQUEST_400.getStatusCode());
122 when(componentsUtils.getResponseFormat(eq(ActionStatus.UNSUPPORTED_ERROR), eq(unsupportedComponentType))).thenReturn(responseFormat);
123 Response response = target()
125 .request(MediaType.APPLICATION_JSON)
126 .header("USER_ID", USER_ID)
127 .get(Response.class);
129 assertEquals(response.getStatus(), HttpStatus.BAD_REQUEST_400.getStatusCode());
133 public void testPostPolicySuccess(){
134 String path = "/v1/catalog/" + validComponentType + "/" + componentId + "/policies/" + policyTypeName;
135 PolicyDefinition policy = new PolicyDefinition();
136 Either<PolicyDefinition, ResponseFormat> successResponse = Either.left(policy);
137 when(businessLogic.createPolicy(eq(ComponentTypeEnum.RESOURCE), eq(componentId), eq(policyTypeName), eq(USER_ID), eq(true))).thenReturn(successResponse);
138 when(responseFormat.getStatus()).thenReturn(HttpStatus.CREATED_201.getStatusCode());
139 when(componentsUtils.getResponseFormat(ActionStatus.CREATED)).thenReturn(responseFormat);
140 Response response = target()
142 .request(MediaType.APPLICATION_JSON)
143 .header("USER_ID", USER_ID)
144 .post(Entity.entity(policy, MediaType.APPLICATION_JSON),Response.class);
146 assertEquals(response.getStatus(), HttpStatus.CREATED_201.getStatusCode());
150 public void testPostPolicyFailure(){
151 String path = "/v1/catalog/" + unsupportedComponentType + "/" + componentId + "/policies/" + policyTypeName;
152 PolicyDefinition policy = new PolicyDefinition();
153 when(responseFormat.getStatus()).thenReturn(HttpStatus.BAD_REQUEST_400.getStatusCode());
154 when(componentsUtils.getResponseFormat(eq(ActionStatus.UNSUPPORTED_ERROR), eq(unsupportedComponentType))).thenReturn(responseFormat);
155 Response response = target()
157 .request(MediaType.APPLICATION_JSON)
158 .header("USER_ID", USER_ID)
159 .post(Entity.entity(policy, MediaType.APPLICATION_JSON),Response.class);
161 assertEquals(response.getStatus(), HttpStatus.BAD_REQUEST_400.getStatusCode());
165 public void testPutPolicySuccess(){
166 String path = "/v1/catalog/" + validComponentType + "/" + componentId + "/policies/" + POLICY_ID;
167 PolicyDefinition policy = new PolicyDefinition();
168 policy.setUniqueId(POLICY_ID);
169 Either<PolicyDefinition, ResponseFormat> successResponse = Either.left(policy);
170 when(businessLogic.updatePolicy(eq(ComponentTypeEnum.RESOURCE), eq(componentId), any(PolicyDefinition.class), eq(USER_ID), eq(true))).thenReturn(successResponse);
171 when(responseFormat.getStatus()).thenReturn(HttpStatus.OK_200.getStatusCode());
172 Response response = target()
174 .request(MediaType.APPLICATION_JSON)
175 .header("USER_ID", USER_ID)
176 .put(Entity.entity(policy, MediaType.APPLICATION_JSON),Response.class);
178 assertEquals(response.getStatus(), HttpStatus.OK_200.getStatusCode());
182 public void testPutPolicyFailure(){
183 String path = "/v1/catalog/" + unsupportedComponentType + "/" + componentId + "/policies/" + POLICY_ID;
184 PolicyDefinition policy = new PolicyDefinition();
185 when(responseFormat.getStatus()).thenReturn(HttpStatus.BAD_REQUEST_400.getStatusCode());
186 when(componentsUtils.getResponseFormat(eq(ActionStatus.UNSUPPORTED_ERROR), eq(unsupportedComponentType))).thenReturn(responseFormat);
187 Response response = target()
189 .request(MediaType.APPLICATION_JSON)
190 .header("USER_ID", USER_ID)
191 .put(Entity.entity(policy, MediaType.APPLICATION_JSON),Response.class);
193 assertEquals(response.getStatus(), HttpStatus.BAD_REQUEST_400.getStatusCode());
197 public void testDeletePolicySuccess(){
198 String path = "/v1/catalog/" + validComponentType + "/" + componentId + "/policies/" + POLICY_ID;
199 Either<PolicyDefinition, ResponseFormat> successResponse = Either.left(new PolicyDefinition());
200 when(businessLogic.deletePolicy(eq(ComponentTypeEnum.RESOURCE), eq(componentId), eq(POLICY_ID), eq(USER_ID), eq(true))).thenReturn(successResponse);
201 when(responseFormat.getStatus()).thenReturn(HttpStatus.OK_200.getStatusCode());
202 Response response = target()
204 .request(MediaType.APPLICATION_JSON)
205 .header("USER_ID", USER_ID)
206 .delete(Response.class);
208 assertEquals(response.getStatus(), HttpStatus.OK_200.getStatusCode());
212 public void testDeletePolicyFailure(){
213 String path = "/v1/catalog/" + unsupportedComponentType + "/" + componentId + "/policies/" + POLICY_ID;
214 when(responseFormat.getStatus()).thenReturn(HttpStatus.BAD_REQUEST_400.getStatusCode());
215 when(componentsUtils.getResponseFormat(eq(ActionStatus.UNSUPPORTED_ERROR), eq(unsupportedComponentType))).thenReturn(responseFormat);
216 Response response = target()
218 .request(MediaType.APPLICATION_JSON)
219 .header("USER_ID", USER_ID)
220 .delete(Response.class);
222 assertEquals(response.getStatus(), HttpStatus.BAD_REQUEST_400.getStatusCode());
226 public void getPolicyProperties_operationForbidden() {
227 when(businessLogic.getPolicyProperties(ComponentTypeEnum.SERVICE, SERVICE_ID, POLICY_ID, USER_ID)).thenReturn(Either.right(new ResponseFormat(Response.Status.FORBIDDEN.getStatusCode())));
228 Response response = buildGetPropertiesRequest().get();
229 assertThat(response.getStatus()).isEqualTo(Response.Status.FORBIDDEN.getStatusCode());
233 public void getPolicyProperties_unHandledError_returnGeneralError() {
234 when(businessLogic.getPolicyProperties(ComponentTypeEnum.SERVICE, SERVICE_ID, POLICY_ID, USER_ID)).thenThrow(new RuntimeException());
235 Response response = buildGetPropertiesRequest().get();
236 assertThat(response.getStatus()).isEqualTo(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode());
240 public void getPolicyProperties_wrongComponentType() {
241 Response response = buildGetPropertiesRequest("unknownType").get();
242 assertThat(response.getStatus()).isEqualTo(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode());
243 //verifyZeroInteractions(businessLogic);
247 public void getPolicyProperties() {
248 List<PropertyDataDefinition> properties = getPropertiesList();
249 when(businessLogic.getPolicyProperties(ComponentTypeEnum.SERVICE, SERVICE_ID, POLICY_ID, USER_ID)).thenReturn(Either.left(properties));
250 List<PropertyDataDefinition> policyProps = buildGetPropertiesRequest().get(new GenericType<List<PropertyDataDefinition>>() {});
251 assertThat(policyProps)
252 .usingElementComparatorOnFields("uniqueId")
253 .containsExactlyInAnyOrder(properties.get(0), properties.get(1));
257 public void updatePolicyPropertiesSuccess() {
258 List<PropertyDataDefinition> properties = getPropertiesList();
259 when(businessLogic.updatePolicyProperties(eq(ComponentTypeEnum.SERVICE), eq(SERVICE_ID), eq(POLICY_ID), any(PropertyDataDefinition[].class), eq(USER_ID), eq(true))).thenReturn(Either.left(properties));
260 List<PropertyDataDefinition> policyProps = buildUpdatePropertiesRequest(ComponentTypeEnum.SERVICE_PARAM_NAME, properties).invoke(new GenericType<List<PropertyDataDefinition>>() {});
261 assertThat(policyProps)
262 .usingElementComparatorOnFields("uniqueId")
263 .containsExactlyInAnyOrder(properties.get(0), properties.get(1));
267 public void updatePolicyTargetsSuccess() {
268 List<PolicyTargetDTO> targets = getTargetDTOList();
269 when(businessLogic.updatePolicyTargets(eq(ComponentTypeEnum.RESOURCE), eq(COMPONENT_ID), eq(POLICY_ID), anyMap(), eq(USER_ID))).thenReturn(Either.left(new PolicyDefinition()));
270 Response policyTargets = buildUpdateTargetsRequest(ComponentTypeEnum.RESOURCE_PARAM_NAME, targets).invoke();
271 assertThat(policyTargets.getStatus()).isEqualTo(200);
275 public void updatePolicyPropertiesFailure() {
276 List<PropertyDataDefinition> properties = getPropertiesList();
277 ResponseFormat notFoundResponse = new ResponseFormat(HttpStatus.NOT_FOUND_404.getStatusCode());
278 when(businessLogic.updatePolicyProperties(eq(ComponentTypeEnum.SERVICE), eq(SERVICE_ID), eq(POLICY_ID), any(PropertyDataDefinition[].class), eq(USER_ID), eq(true))).thenReturn(Either.right(notFoundResponse));
279 Response policyProps = buildUpdatePropertiesRequest(ComponentTypeEnum.SERVICE_PARAM_NAME, properties).invoke();
280 assertEquals(HttpStatus.NOT_FOUND_404.getStatusCode(), policyProps.getStatus());
284 public void testDeclarePropertyToPolicySuccess() {
285 Service service = new Service();
286 service.setUniqueId(SERVICE_ID);
287 service.addProperty(new PropertyDataDefinitionBuilder().setUniqueId(PROP_1).build());
289 PolicyDefinition policyDefinition = new PolicyDefinition();
290 policyDefinition.setUniqueId(UniqueIdBuilder.buildPolicyUniqueId(SERVICE_ID, PROP_1));
292 setMocksForPropertyDeclaration(policyDefinition);
294 when(componentsUtils.getResponseFormat(eq(ActionStatus.OK))).thenReturn(new ResponseFormat(HttpStatus.OK_200.getStatusCode()));
296 Response declareResponse = buildDeclarePropertiesRequest(PROP_1).invoke();
297 assertEquals(HttpStatus.OK_200.getStatusCode(), declareResponse.getStatus());
301 public void testUndeclarePolicySuccess() {
302 Service service = new Service();
303 service.setUniqueId(SERVICE_ID);
304 PropertyDefinition origProperty = new PropertyDataDefinitionBuilder().setUniqueId(PROP_1).build();
306 service.addProperty(origProperty);
308 PolicyDefinition policyDefinition = new PolicyDefinition();
309 policyDefinition.setUniqueId(UniqueIdBuilder.buildPolicyUniqueId(SERVICE_ID, PROP_1));
310 service.addPolicy(policyDefinition);
312 addGetPolicyValueToProperty(origProperty, policyDefinition);
314 when(businessLogic.deletePolicy(eq(ComponentTypeEnum.SERVICE), eq(SERVICE_ID), eq(policyDefinition.getUniqueId()), eq(USER_ID), eq(true))).thenReturn(Either.left(policyDefinition));
316 Response deleteResponse = buildDeletePolicyRequest(policyDefinition).invoke();
317 assertEquals(HttpStatus.OK_200.getStatusCode(), deleteResponse.getStatus());
320 private void addGetPolicyValueToProperty(PropertyDefinition propertyDefinition,
321 PolicyDefinition policyDefinition) {
322 JSONObject jobject = new JSONObject();
323 String origValue = Objects.isNull(propertyDefinition.getValue()) ? propertyDefinition.getDefaultValue() : propertyDefinition.getValue();
324 jobject.put(GET_POLICY, null);
325 propertyDefinition.setValue(jobject.toJSONString());
327 GetPolicyValueDataDefinition getPolicyValueDataDefinition = new GetPolicyValueDataDefinition();
328 getPolicyValueDataDefinition.setPolicyId(policyDefinition.getUniqueId());
329 getPolicyValueDataDefinition.setPropertyName(propertyDefinition.getName());
331 getPolicyValueDataDefinition.setOrigPropertyValue(origValue);
333 propertyDefinition.setGetPolicyValues(Collections.singletonList(getPolicyValueDataDefinition));
336 private void setMocksForPropertyDeclaration(PolicyDefinition policyDefinition) {
337 when(request.getSession()).thenReturn(session);
338 when(session.getServletContext()).thenReturn(context);
339 when(context.getAttribute(eq(Constants.WEB_APPLICATION_CONTEXT_WRAPPER_ATTR))).thenReturn(contextWrapper);
340 when(contextWrapper.getWebAppContext(any())).thenReturn(applicationContext);
341 when(applicationContext.getBean(eq(PolicyBusinessLogic.class))).thenReturn(businessLogic);
342 when(businessLogic.declareProperties(eq(USER_ID), eq(SERVICE_ID), any(), any())).thenReturn(
343 Either.left(Collections.singletonList(policyDefinition)));
345 .convertJsonToObjectUsingObjectMapper(any(), any(), eq(ComponentInstInputsMap.class), eq(
346 AuditingActionEnum.CREATE_RESOURCE), eq(ComponentTypeEnum.SERVICE)))
347 .thenReturn(Either.left(getDeclarationBodyForProperty(PROP_1)));
350 private List<PropertyDataDefinition> getPropertiesList() {
351 PropertyDefinition prop1 = new PropertyDataDefinitionBuilder()
352 .setUniqueId("prop1")
355 PropertyDefinition prop2 = new PropertyDataDefinitionBuilder()
356 .setUniqueId("prop2")
358 return Arrays.asList(prop1, prop2);
361 private List<PolicyTargetDTO> getTargetDTOList() {
362 PolicyTargetDTO target1 = new PolicyTargetDTO();
363 target1.setUniqueIds(Collections.singletonList("uniqueId"));
364 target1.setType("GROUPS");
366 PolicyTargetDTO target2 = new PolicyTargetDTO();
367 target2.setUniqueIds(Collections.singletonList("uniqueId"));
368 target2.setType("component_Instances");
370 return Arrays.asList(target1, target2);
373 private Invocation.Builder buildGetPropertiesRequest(String componentType) {
374 return target(PROPS_URL)
375 .resolveTemplate("componentType", componentType)
376 .resolveTemplate("serviceId", SERVICE_ID)
377 .resolveTemplate("policyId", POLICY_ID)
378 .request(MediaType.APPLICATION_JSON)
379 .header(Constants.USER_ID_HEADER, USER_ID);
383 private Invocation buildUpdatePropertiesRequest(String componentType, List<PropertyDataDefinition> properties) {
384 return target(PROPS_URL)
385 .resolveTemplate("componentType", componentType)
386 .resolveTemplate("serviceId", SERVICE_ID)
387 .resolveTemplate("policyId", POLICY_ID)
388 .request(MediaType.APPLICATION_JSON)
389 .header(Constants.USER_ID_HEADER, USER_ID)
390 .buildPut(Entity.entity(properties, MediaType.APPLICATION_JSON));
393 private Invocation buildUpdateTargetsRequest(String componentType, List<PolicyTargetDTO> targets) {
394 return target(UPDATE_TARGETS_URL)
395 .resolveTemplate("componentType", componentType)
396 .resolveTemplate("componentId", COMPONENT_ID)
397 .resolveTemplate("policyId", POLICY_ID)
398 .request(MediaType.APPLICATION_JSON)
399 .header(Constants.USER_ID_HEADER, USER_ID)
400 .buildPost(Entity.entity(targets, MediaType.APPLICATION_JSON));
403 private Invocation.Builder buildGetPropertiesRequest() {
404 return target(PROPS_URL)
405 .resolveTemplate("componentType", "services")
406 .resolveTemplate("serviceId", SERVICE_ID)
407 .resolveTemplate("policyId", POLICY_ID)
408 .request(MediaType.APPLICATION_JSON)
409 .header(Constants.USER_ID_HEADER, USER_ID);
412 private Invocation buildDeletePolicyRequest(PolicyDefinition policyDefinition) {
413 return target(DELETE_URL)
414 .resolveTemplate("containerComponentType", "services")
415 .resolveTemplate("componentId", SERVICE_ID)
416 .resolveTemplate("policyId", policyDefinition.getUniqueId())
417 .request(MediaType.APPLICATION_JSON)
418 .header(Constants.USER_ID_HEADER, USER_ID)
422 private Invocation buildDeclarePropertiesRequest(String propertyId) {
423 return target(DECLARE_URL)
424 .resolveTemplate("componentType", "services")
425 .resolveTemplate("serviceId", SERVICE_ID)
426 .request(MediaType.APPLICATION_JSON)
427 .header(Constants.USER_ID_HEADER, USER_ID)
428 .buildPost(Entity.entity(getDeclarationBodyForProperty(propertyId), MediaType.APPLICATION_JSON));
431 private ComponentInstInputsMap getDeclarationBodyForProperty(String propertyId) {
432 ComponentInstInputsMap componentInstInputsMap = new ComponentInstInputsMap();
433 ComponentInstancePropInput propInput = new ComponentInstancePropInput();
434 PropertyDefinition propertyDefinition = new PropertyDefinition();
436 propertyDefinition.setType("string");
437 propertyDefinition.setUniqueId(SERVICE_ID + "." + propertyId);
438 propInput.setInput(propertyDefinition);
439 propInput.setPropertiesName(propertyId);
441 componentInstInputsMap.setComponentInstancePropertiesToPolicies(new HashMap<>());
442 componentInstInputsMap.getComponentInstancePropertiesToPolicies().put("componentInstancePropertiesToPolicies", Collections.singletonList(propInput));
444 return componentInstInputsMap;
448 protected ResourceConfig configure() {
449 return super.configure()
450 .register(new PolicyServlet(businessLogic, servletUtils, null, componentsUtils));
453 private static void createMocks() {
454 propertyDeclarationOrchestrator = Mockito.mock(PropertyDeclarationOrchestrator.class);
455 toscaOperationFacade = Mockito.mock(ToscaOperationFacade.class);
456 businessLogic = Mockito.mock(PolicyBusinessLogic.class);
457 businessLogic.setPropertyDeclarationOrchestrator(propertyDeclarationOrchestrator);
458 businessLogic.setToscaOperationFacade(toscaOperationFacade);
460 baseBusinessLogic = Mockito.spy(BaseBusinessLogic.class);
461 baseBusinessLogic.setToscaOperationFacade(toscaOperationFacade);
463 componentsUtils = Mockito.mock(ComponentsUtils.class);
464 servletUtils = Mockito.mock(ServletUtils.class);
465 responseFormat = Mockito.mock(ResponseFormat.class);