Search in sources :

Example 1 with ContinuousDeliveryImportResults

use of io.syndesis.common.model.integration.ContinuousDeliveryImportResults in project syndesis by syndesisio.

the class PublicApiHandler method importResources.

/**
 * Import integrations into a target environment.
 */
@POST
@Path("integrations")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.MULTIPART_FORM_DATA)
public ContinuousDeliveryImportResults importResources(@Context SecurityContext sec, @NotNull @MultipartForm @Parameter(required = true) ImportFormDataInput formInput) {
    if (formInput == null) {
        throw new ClientErrorException("Multipart request is empty", Response.Status.BAD_REQUEST);
    }
    final String environment = formInput.getEnvironment();
    EnvironmentHandler.validateEnvironment("environment", environment);
    final boolean deploy = Boolean.TRUE.equals(formInput.getDeploy());
    final Environment env = environmentHandler.getEnvironment(environment);
    try (InputStream importFile = formInput.getData();
        InputStream properties = formInput.getProperties()) {
        // above
        if (importFile == null) {
            throw new ClientErrorException("Missing file 'data' in multipart request", Response.Status.BAD_REQUEST);
        }
        // importedAt date to be updated in all imported integrations
        @SuppressWarnings("JdkObsolete") final Date lastImportedAt = new Date();
        final Map<String, List<WithResourceId>> resources = handler.importIntegration(sec, importFile);
        final List<WithResourceId> results = new ArrayList<>();
        resources.values().forEach(results::addAll);
        // get imported integrations
        final List<Integration> integrations = getResourcesOfType(results, Integration.class);
        // update importedAt field for imported integrations
        environmentHandler.updateCDEnvironments(integrations, env.getId().get(), lastImportedAt, b -> b.lastImportedAt(lastImportedAt));
        // optional connection properties configuration file
        if (properties != null) {
            // update connection fields using properties
            Map<String, Map<String, String>> params = getParams(properties);
            final List<Connection> connections = getResourcesOfType(results, Connection.class);
            connections.forEach(c -> {
                final Map<String, String> values = params.get(c.getName());
                if (values != null) {
                    updateConnection(c, values, formInput.getRefreshIntegrations(), lastImportedAt, results);
                }
            });
        }
        if (deploy) {
            // deploy integrations
            integrations.forEach(i -> publishIntegration(sec, i));
        }
        return new ContinuousDeliveryImportResults.Builder().lastImportedAt(lastImportedAt).results(results).build();
    } catch (IOException e) {
        throw new ClientErrorException(String.format("Error processing multipart request: %s", e.getMessage()), Response.Status.BAD_REQUEST, e);
    }
}
Also used : Integration(io.syndesis.common.model.integration.Integration) InputStream(java.io.InputStream) ArrayList(java.util.ArrayList) Connection(io.syndesis.common.model.connection.Connection) IOException(java.io.IOException) Date(java.util.Date) WithResourceId(io.syndesis.common.model.WithResourceId) ContinuousDeliveryImportResults(io.syndesis.common.model.integration.ContinuousDeliveryImportResults) ClientErrorException(javax.ws.rs.ClientErrorException) ContinuousDeliveryEnvironment(io.syndesis.common.model.integration.ContinuousDeliveryEnvironment) Environment(io.syndesis.common.model.environment.Environment) List(java.util.List) ArrayList(java.util.ArrayList) Map(java.util.Map) HashMap(java.util.HashMap) Path(javax.ws.rs.Path) POST(javax.ws.rs.POST) Produces(javax.ws.rs.Produces) Consumes(javax.ws.rs.Consumes)

Example 2 with ContinuousDeliveryImportResults

use of io.syndesis.common.model.integration.ContinuousDeliveryImportResults in project syndesis by syndesisio.

the class PublicApiHandlerTest method importResources.

@Test
public void importResources() {
    final DataManager dataManager = mock(DataManager.class);
    final SecurityContext securityContext = newMockSecurityContext();
    final InputStream givenDataStream = new ByteArrayInputStream(new byte[0]);
    // too convoluted to use the implementation directly
    final IntegrationSupportHandler supportHandler = mock(IntegrationSupportHandler.class);
    final Connection testConnection = new Connection.Builder().id("connection-id").connectorId("connector-id").name("test-connection").build();
    final Integration integration = new Integration.Builder().id("integration-id").addConnection(testConnection).build();
    Map<String, List<WithResourceId>> resultMap = new HashMap<>();
    resultMap.put("integration-id", Collections.singletonList(integration));
    resultMap.put("connection-id", Collections.singletonList(testConnection));
    when(supportHandler.importIntegration(securityContext, givenDataStream)).thenReturn(resultMap);
    final Environment env = newEnvironment("env");
    when(dataManager.fetchByPropertyValue(Environment.class, "name", "env")).thenReturn(Optional.of(env));
    when(dataManager.fetch(Connector.class, "connector-id")).thenReturn(new Connector.Builder().putProperty("prop", new ConfigurationProperty.Builder().build()).build());
    when(dataManager.fetchAll(eq(Integration.class), any())).then((Answer<ListResult<Integration>>) invocation -> {
        final Object[] arguments = invocation.getArguments();
        ListResult<Integration> result = new ListResult.Builder<Integration>().addItem(integration).build();
        for (int i = 1; i < arguments.length; i++) {
            @SuppressWarnings("unchecked") Function<ListResult<Integration>, ListResult<Integration>> operator = (Function<ListResult<Integration>, ListResult<Integration>>) arguments[i];
            result = operator.apply(result);
        }
        return result;
    });
    final EnvironmentHandler environmentHandler = new EnvironmentHandler(dataManager);
    final IntegrationDeploymentHandler deploymentHandler = mock(IntegrationDeploymentHandler.class);
    final EncryptionComponent encryptionComponent = mock(EncryptionComponent.class);
    when(encryptionComponent.encryptPropertyValues(any(), any())).thenReturn(Collections.singletonMap("prop", "value"));
    IntegrationHandler integrationHandler = mock(IntegrationHandler.class);
    when(integrationHandler.getOverview(any())).thenReturn(new IntegrationOverview.Builder().createFrom(integration).connections(Collections.singletonList(testConnection.builder().putConfiguredProperty("prop", "value").build())).build());
    // null's are not used
    final PublicApiHandler handler = new PublicApiHandler(dataManager, encryptionComponent, deploymentHandler, null, null, environmentHandler, supportHandler, integrationHandler);
    final PublicApiHandler.ImportFormDataInput formInput = new PublicApiHandler.ImportFormDataInput();
    formInput.setData(givenDataStream);
    formInput.setProperties(new ByteArrayInputStream("test-connection.prop=value".getBytes(StandardCharsets.UTF_8)));
    formInput.setRefreshIntegrations(Boolean.TRUE);
    formInput.setEnvironment("env");
    formInput.setDeploy(Boolean.TRUE);
    final ContinuousDeliveryImportResults importResults = handler.importResources(securityContext, formInput);
    verify(deploymentHandler).update(securityContext, "integration-id");
    assertThat(importResults.getLastImportedAt()).isNotNull();
    assertThat(importResults.getResults().size()).isEqualTo(2);
    // verify the integration connection was refreshed
    final Integration importedIntegration = (Integration) importResults.getResults().get(0);
    assertThat(importedIntegration.getConnections().get(0).getConfiguredProperties().get("prop")).isEqualTo("value");
}
Also used : Arrays(java.util.Arrays) ArgumentMatchers(org.mockito.ArgumentMatchers) Date(java.util.Date) ArgumentMatchers.eq(org.mockito.ArgumentMatchers.eq) Assertions.assertThat(org.assertj.core.api.Assertions.assertThat) SecurityContext(javax.ws.rs.core.SecurityContext) ConfigurationProperty(io.syndesis.common.model.connection.ConfigurationProperty) WithResourceId(io.syndesis.common.model.WithResourceId) ClientErrorException(javax.ws.rs.ClientErrorException) ContinuousDeliveryEnvironment(io.syndesis.common.model.integration.ContinuousDeliveryEnvironment) Environment(io.syndesis.common.model.environment.Environment) EncryptionComponent(io.syndesis.server.dao.manager.EncryptionComponent) ByteArrayInputStream(java.io.ByteArrayInputStream) Connection(io.syndesis.common.model.connection.Connection) Map(java.util.Map) IntegrationDeploymentHandler(io.syndesis.server.endpoint.v1.handler.integration.IntegrationDeploymentHandler) IntegrationOverview(io.syndesis.common.model.integration.IntegrationOverview) Integration(io.syndesis.common.model.integration.Integration) Connector(io.syndesis.common.model.connection.Connector) StreamingOutput(javax.ws.rs.core.StreamingOutput) ListResult(io.syndesis.common.model.ListResult) StandardCharsets(java.nio.charset.StandardCharsets) List(java.util.List) Principal(java.security.Principal) Stream(java.util.stream.Stream) Response(javax.ws.rs.core.Response) IntegrationSupportHandler(io.syndesis.server.endpoint.v1.handler.integration.support.IntegrationSupportHandler) Optional(java.util.Optional) RandomStringUtils(org.apache.commons.lang3.RandomStringUtils) IntegrationDeploymentState(io.syndesis.common.model.integration.IntegrationDeploymentState) Mockito.mock(org.mockito.Mockito.mock) ArgumentMatchers.any(org.mockito.ArgumentMatchers.any) ContinuousDeliveryImportResults(io.syndesis.common.model.integration.ContinuousDeliveryImportResults) HashMap(java.util.HashMap) Function(java.util.function.Function) Answer(org.mockito.stubbing.Answer) ArgumentCaptor(org.mockito.ArgumentCaptor) Assertions.assertThatExceptionOfType(org.assertj.core.api.Assertions.assertThatExceptionOfType) DataManager(io.syndesis.server.dao.manager.DataManager) Status(javax.ws.rs.core.Response.Status) IntegrationDeployment(io.syndesis.common.model.integration.IntegrationDeployment) IOException(java.io.IOException) Test(org.junit.Test) Mockito.times(org.mockito.Mockito.times) Mockito.when(org.mockito.Mockito.when) Assertions.entry(org.assertj.core.api.Assertions.entry) Mockito.verify(org.mockito.Mockito.verify) WithName(io.syndesis.common.model.WithName) TargetStateRequest(io.syndesis.server.endpoint.v1.handler.integration.IntegrationDeploymentHandler.TargetStateRequest) MonitoringProvider(io.syndesis.server.endpoint.monitoring.MonitoringProvider) IntegrationDeploymentStateDetails(io.syndesis.common.model.monitoring.IntegrationDeploymentStateDetails) Condition(org.assertj.core.api.Condition) IntegrationHandler(io.syndesis.server.endpoint.v1.handler.integration.IntegrationHandler) EnvironmentHandler(io.syndesis.server.endpoint.v1.handler.environment.EnvironmentHandler) Collections(java.util.Collections) InputStream(java.io.InputStream) Connector(io.syndesis.common.model.connection.Connector) HashMap(java.util.HashMap) Function(java.util.function.Function) EnvironmentHandler(io.syndesis.server.endpoint.v1.handler.environment.EnvironmentHandler) ContinuousDeliveryImportResults(io.syndesis.common.model.integration.ContinuousDeliveryImportResults) List(java.util.List) IntegrationSupportHandler(io.syndesis.server.endpoint.v1.handler.integration.support.IntegrationSupportHandler) IntegrationDeploymentHandler(io.syndesis.server.endpoint.v1.handler.integration.IntegrationDeploymentHandler) IntegrationHandler(io.syndesis.server.endpoint.v1.handler.integration.IntegrationHandler) Integration(io.syndesis.common.model.integration.Integration) ByteArrayInputStream(java.io.ByteArrayInputStream) InputStream(java.io.InputStream) Connection(io.syndesis.common.model.connection.Connection) EncryptionComponent(io.syndesis.server.dao.manager.EncryptionComponent) DataManager(io.syndesis.server.dao.manager.DataManager) ListResult(io.syndesis.common.model.ListResult) ByteArrayInputStream(java.io.ByteArrayInputStream) SecurityContext(javax.ws.rs.core.SecurityContext) ContinuousDeliveryEnvironment(io.syndesis.common.model.integration.ContinuousDeliveryEnvironment) Environment(io.syndesis.common.model.environment.Environment) Test(org.junit.Test)

Aggregations

WithResourceId (io.syndesis.common.model.WithResourceId)2 Connection (io.syndesis.common.model.connection.Connection)2 Environment (io.syndesis.common.model.environment.Environment)2 ContinuousDeliveryEnvironment (io.syndesis.common.model.integration.ContinuousDeliveryEnvironment)2 ContinuousDeliveryImportResults (io.syndesis.common.model.integration.ContinuousDeliveryImportResults)2 Integration (io.syndesis.common.model.integration.Integration)2 IOException (java.io.IOException)2 InputStream (java.io.InputStream)2 Date (java.util.Date)2 HashMap (java.util.HashMap)2 List (java.util.List)2 Map (java.util.Map)2 ClientErrorException (javax.ws.rs.ClientErrorException)2 ListResult (io.syndesis.common.model.ListResult)1 WithName (io.syndesis.common.model.WithName)1 ConfigurationProperty (io.syndesis.common.model.connection.ConfigurationProperty)1 Connector (io.syndesis.common.model.connection.Connector)1 IntegrationDeployment (io.syndesis.common.model.integration.IntegrationDeployment)1 IntegrationDeploymentState (io.syndesis.common.model.integration.IntegrationDeploymentState)1 IntegrationOverview (io.syndesis.common.model.integration.IntegrationOverview)1