From 70c17bb345b6ed957290eec776c026d3a25f48a1 Mon Sep 17 00:00:00 2001 From: franciscovila Date: Thu, 15 Sep 2022 14:20:35 +0100 Subject: Fix types not refreshing after model change Loads the capability, requirement and node types based on the current VFC model. Removes the frontend cache that was being hold by the ReqAndCapabilitiesService. Issue-ID: SDC-4175 Signed-off-by: franciscovila Change-Id: I6ab9d1781c6d65e0d78ff69baf468fb9d24f9afd --- .../sdc/be/servlets/TypesFetchServletTest.java | 279 ++++++++++++++++++--- 1 file changed, 239 insertions(+), 40 deletions(-) (limited to 'catalog-be/src/test/java/org/openecomp') diff --git a/catalog-be/src/test/java/org/openecomp/sdc/be/servlets/TypesFetchServletTest.java b/catalog-be/src/test/java/org/openecomp/sdc/be/servlets/TypesFetchServletTest.java index ef4ec18ec9..1808560b4e 100644 --- a/catalog-be/src/test/java/org/openecomp/sdc/be/servlets/TypesFetchServletTest.java +++ b/catalog-be/src/test/java/org/openecomp/sdc/be/servlets/TypesFetchServletTest.java @@ -20,12 +20,29 @@ package org.openecomp.sdc.be.servlets; -import static org.mockito.Mockito.mock; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.Mockito.when; +import fj.data.Either; +import java.nio.file.Path; +import java.util.List; +import java.util.Map; import javax.servlet.ServletContext; import javax.servlet.http.HttpServletRequest; -import javax.ws.rs.core.Response; -import org.junit.Test; +import javax.servlet.http.HttpSession; +import javax.ws.rs.core.MediaType; +import org.eclipse.jetty.http.HttpStatus; +import org.glassfish.hk2.utilities.binding.AbstractBinder; +import org.glassfish.jersey.server.ResourceConfig; +import org.glassfish.jersey.test.JerseyTest; +import org.glassfish.jersey.test.TestProperties; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; import org.openecomp.sdc.be.components.impl.ArtifactsBusinessLogic; import org.openecomp.sdc.be.components.impl.CapabilitiesBusinessLogic; import org.openecomp.sdc.be.components.impl.ComponentInstanceBusinessLogic; @@ -34,50 +51,232 @@ import org.openecomp.sdc.be.components.impl.PropertyBusinessLogic; import org.openecomp.sdc.be.components.impl.RelationshipTypeBusinessLogic; import org.openecomp.sdc.be.components.impl.ResourceBusinessLogic; import org.openecomp.sdc.be.components.impl.ResourceImportManager; +import org.openecomp.sdc.be.components.impl.ResponseFormatManager; +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.datamodel.api.HighestFilterEnum; +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.Component; +import org.openecomp.sdc.be.model.Resource; +import org.openecomp.sdc.be.model.User; +import org.openecomp.sdc.be.servlets.builder.ServletResponseBuilder; +import org.openecomp.sdc.be.servlets.exception.OperationExceptionMapper; +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; -public class TypesFetchServletTest { +class TypesFetchServletTest extends JerseyTest { + private static final String USER_ID = "cs0008"; + private static final User USER = new User(USER_ID); - private TypesFetchServlet createTestSubject() { - UserBusinessLogic userBusinessLogic = mock(UserBusinessLogic.class); - ComponentInstanceBusinessLogic componentInstanceBL = mock(ComponentInstanceBusinessLogic.class); - ComponentsUtils componentsUtils = mock(ComponentsUtils.class); - ServletUtils servletUtils = mock(ServletUtils.class); - ResourceImportManager resourceImportManager = mock(ResourceImportManager.class); - PropertyBusinessLogic propertyBusinessLogic = mock(PropertyBusinessLogic.class); - RelationshipTypeBusinessLogic relationshipTypeBusinessLogic = mock(RelationshipTypeBusinessLogic.class); - CapabilitiesBusinessLogic capabilitiesBusinessLogic = mock(CapabilitiesBusinessLogic.class); - InterfaceOperationBusinessLogic interfaceOperationBusinessLogic = mock(InterfaceOperationBusinessLogic.class); - ResourceBusinessLogic resourceBusinessLogic = mock(ResourceBusinessLogic.class); - ArtifactsBusinessLogic artifactsBusinessLogic = mock(ArtifactsBusinessLogic.class); + @Mock + private HttpServletRequest request; + @Mock + private HttpSession session; + @Mock + private ServletContext servletContext; + @Mock + private WebAppContextWrapper webAppContextWrapper; + @Mock + private WebApplicationContext webApplicationContext; + @Mock + private ResponseFormat responseFormat; + @Mock + private UserBusinessLogic userBusinessLogic; + @Mock + private ComponentInstanceBusinessLogic componentInstanceBusinessLogic; + @Mock + private ComponentsUtils componentsUtils; + @Mock + private ServletUtils servletUtils; + @Mock + private ResourceImportManager resourceImportManager; + @Mock + private PropertyBusinessLogic propertyBusinessLogic; + @Mock + private RelationshipTypeBusinessLogic relationshipTypeBusinessLogic; + @Mock + private CapabilitiesBusinessLogic capabilitiesBusinessLogic; + @Mock + private InterfaceOperationBusinessLogic interfaceOperationBusinessLogic; + @Mock + private ResourceBusinessLogic resourceBusinessLogic; + @Mock + private ArtifactsBusinessLogic artifactsBusinessLogic; + @Mock + private ResponseFormatManager responseFormatManager; - return new TypesFetchServlet(userBusinessLogic, componentInstanceBL, componentsUtils, servletUtils, - resourceImportManager, propertyBusinessLogic, relationshipTypeBusinessLogic, capabilitiesBusinessLogic, - interfaceOperationBusinessLogic, resourceBusinessLogic, artifactsBusinessLogic); - } + private final Path rootPath = Path.of("/v1/catalog"); + private final Path nodeTypesPath = rootPath.resolve("nodeTypes"); + private User user; - - @Test - public void testGetAllDataTypesServlet() throws Exception { - TypesFetchServlet testSubject; - HttpServletRequest request = null; - String userId = ""; - Response result; + @BeforeEach + void resetMock() throws Exception { + super.setUp(); + initMocks(); + initConfig(); + initTestData(); + } - // default test - testSubject = createTestSubject(); - } + @AfterEach + void after() throws Exception { + super.tearDown(); + } - - @Test - public void testGetPropertyBL() throws Exception { - TypesFetchServlet testSubject; - ServletContext context = null; - PropertyBusinessLogic result; + @Test + void testGetAllNodeTypesServlet() { + final String modelName = "ETSI-SOL001-331"; + Resource res1 = new Resource(); + res1.setName("node type 1"); + res1.setToscaResourceName("toscaResName1"); + Either, ResponseFormat> actionResponse = + Either.left(List.of()); + Either, ResponseFormat> actionResponseNonAbstract = + Either.left(List.of(res1)); + when(responseFormat.getStatus()) + .thenReturn(HttpStatus.OK_200); + when(componentsUtils.getResponseFormat(ActionStatus.OK)) + .thenReturn(responseFormat); + when(servletUtils.getUserAdmin()) + .thenReturn(userBusinessLogic); + when(userBusinessLogic.getUser(anyString())) + .thenReturn(user); + when(resourceBusinessLogic.getLatestVersionNotAbstractComponentsMetadata( + true, + HighestFilterEnum.HIGHEST_ONLY, + ComponentTypeEnum.RESOURCE, + null, + user.getUserId(), + modelName, + false) + ) + .thenReturn(actionResponse); - // default test - testSubject = createTestSubject(); - } -} + when(resourceBusinessLogic.getLatestVersionNotAbstractComponentsMetadata( + false, + HighestFilterEnum.HIGHEST_ONLY, + ComponentTypeEnum.RESOURCE, + null, + user.getUserId(), + modelName, + false) + ) + .thenReturn(actionResponseNonAbstract); + + final var response = target() + .path(nodeTypesPath.toString()) + .queryParam("model", modelName) + .request(MediaType.APPLICATION_JSON) + .header(Constants.USER_ID_HEADER, USER_ID) + .get(); + assertEquals(response.getStatus(), HttpStatus.OK_200); + final Map> actualResponseContent = response.readEntity(Map.class); + assertTrue(actualResponseContent.containsKey("toscaResName1")); + final Map component = actualResponseContent.get("toscaResName1"); + final Map> componentMetadata = (Map>) component.get("componentMetadataDefinition"); + final Map componentMetadataDefinition = componentMetadata.get("componentMetadataDataDefinition"); + assertEquals(res1.getName(), componentMetadataDefinition.get("name")); + assertEquals(res1.getComponentType().name(), componentMetadataDefinition.get("componentType")); + assertEquals(res1.getToscaResourceName(), componentMetadataDefinition.get("toscaResourceName")); + assertEquals(res1.getResourceType().getValue(), componentMetadataDefinition.get("resourceType")); + } + + @Override + protected ResourceConfig configure() { + MockitoAnnotations.openMocks(this); + forceSet(TestProperties.CONTAINER_PORT, "0"); + final ApplicationContext context = + new AnnotationConfigApplicationContext(SpringConfig.class); + return new ResourceConfig(TypesFetchServlet.class) + .register(new AbstractBinder() { + @Override + protected void configure() { + bind(request).to(HttpServletRequest.class); + bind(userBusinessLogic).to(UserBusinessLogic.class); + bind(componentInstanceBusinessLogic).to(ComponentInstanceBusinessLogic.class); + bind(componentsUtils).to(ComponentsUtils.class); + bind(servletUtils).to(ServletUtils.class); + bind(resourceImportManager).to(ResourceImportManager.class); + bind(resourceBusinessLogic).to(ResourceBusinessLogic.class); + bind(propertyBusinessLogic).to(PropertyBusinessLogic.class); + bind(relationshipTypeBusinessLogic).to(RelationshipTypeBusinessLogic.class); + bind(capabilitiesBusinessLogic).to(CapabilitiesBusinessLogic.class); + bind(interfaceOperationBusinessLogic).to(InterfaceOperationBusinessLogic.class); + bind(artifactsBusinessLogic).to(ArtifactsBusinessLogic.class); + } + }) + .register(new OperationExceptionMapper( + new ServletResponseBuilder(), + responseFormatManager + )) + .property("contextConfig", context); + } + + void initMocks() { + when(request.getSession()) + .thenReturn(session); + when(session.getServletContext()) + .thenReturn(servletContext); + when(servletContext.getAttribute(Constants.WEB_APPLICATION_CONTEXT_WRAPPER_ATTR)) + .thenReturn(webAppContextWrapper); + when(webAppContextWrapper.getWebAppContext(servletContext)) + .thenReturn(webApplicationContext); + when(webApplicationContext.getBean(ComponentInstanceBusinessLogic.class)) + .thenReturn(componentInstanceBusinessLogic); + when(webApplicationContext.getBean(UserBusinessLogic.class)) + .thenReturn(userBusinessLogic); + when(userBusinessLogic.getUser(USER_ID, false)) + .thenReturn(USER); + when(request.getHeader(Constants.USER_ID_HEADER)) + .thenReturn(USER_ID); + when(webApplicationContext.getBean(ServletUtils.class)) + .thenReturn(servletUtils); + when(servletUtils.getComponentsUtils()) + .thenReturn(componentsUtils); + when(webApplicationContext.getBean(ResourceImportManager.class)) + .thenReturn(resourceImportManager); + when(webApplicationContext.getBean(PropertyBusinessLogic.class)) + .thenReturn(propertyBusinessLogic); + when(webApplicationContext.getBean(RelationshipTypeBusinessLogic.class)) + .thenReturn(relationshipTypeBusinessLogic); + when(webApplicationContext.getBean(CapabilitiesBusinessLogic.class)) + .thenReturn(capabilitiesBusinessLogic); + when(webApplicationContext.getBean(InterfaceOperationBusinessLogic.class)) + .thenReturn(interfaceOperationBusinessLogic); + when(webApplicationContext.getBean(ResourceBusinessLogic.class)) + .thenReturn(resourceBusinessLogic); + when(webApplicationContext.getBean(ArtifactsBusinessLogic.class)) + .thenReturn(artifactsBusinessLogic); + } + + void initConfig() { + final String appConfigDir = "src/test/resources/config/catalog-be"; + final ConfigurationSource configurationSource = + new FSConfigurationSource(ExternalConfiguration.getChangeListener(), appConfigDir); + final ConfigurationManager configurationManager = + new ConfigurationManager(configurationSource); + final org.openecomp.sdc.be.config.Configuration configuration = + new org.openecomp.sdc.be.config.Configuration(); + configuration.setJanusGraphInMemoryGraph(true); + configurationManager.setConfiguration(configuration); + ExternalConfiguration.setAppName("catalog-be"); + } + + private void initTestData() { + user = new User(); + user.setUserId(USER_ID); + user.setRole(Role.ADMIN.name()); + when(userBusinessLogic.getUser(USER_ID)).thenReturn(user); + } +} \ No newline at end of file -- cgit 1.2.3-korg