use of io.syndesis.common.model.integration.Integration in project syndesis by syndesisio.
the class IntegrationsITCase method shouldDetermineValidityForInvalidIntegrations.
@Test
public void shouldDetermineValidityForInvalidIntegrations() {
dataManager.create(new Integration.Builder().name("Existing integration").build());
final Integration integration = new Integration.Builder().name("Existing integration").build();
final ResponseEntity<List<Violation>> got = post("/api/v1/integrations/validation", integration, RESPONSE_TYPE, tokenRule.validToken(), HttpStatus.BAD_REQUEST);
assertThat(got.getBody()).hasSize(1);
}
use of io.syndesis.common.model.integration.Integration in project syndesis by syndesisio.
the class IntegrationsITCase method patchIntegrationDescription.
@Test
public void patchIntegrationDescription() {
Integration integration = new Integration.Builder().id("3001").name("test").description("My first description").build();
post("/api/v1/integrations", integration, Integration.class);
ResponseEntity<IntegrationOverview> result = get("/api/v1/integrations/3001", IntegrationOverview.class);
assertThat(result.getBody().getDescription()).as("description").isEqualTo(Optional.of("My first description"));
// Do the PATCH API call:
Map<String, Object> patchDoc = Collections.singletonMap("description", "The second description");
patch("/api/v1/integrations/3001", patchDoc);
result = get("/api/v1/integrations/3001", IntegrationOverview.class);
assertThat(result.getBody().getDescription()).as("description").isEqualTo(Optional.of("The second description"));
}
use of io.syndesis.common.model.integration.Integration in project syndesis by syndesisio.
the class JsonHandlingITCase method valuesGivenInJsonShouldBeTrimmedToNull.
@Test
public void valuesGivenInJsonShouldBeTrimmedToNull() {
final SortedSet<String> tags = new TreeSet<>();
tags.add("");
tags.add(" tag");
tags.add("\tTaggy McTagface\t");
final Integration integration = new Integration.Builder().id(id).name(" some-name\t").description("").tags(tags).build();
post("/api/v1/integrations", integration, Integration.class);
final ResponseEntity<Integration> result = get("/api/v1/integrations/" + id, Integration.class);
final Integration created = result.getBody();
assertThat(created.getName()).isEqualTo("some-name");
assertThat(created.getDescription()).isNotPresent();
assertThat(created.getTags()).containsExactly("Taggy McTagface", "tag");
}
use of io.syndesis.common.model.integration.Integration in project syndesis by syndesisio.
the class T3stSupportITCase method createAndGetIntegration.
@Test
public void createAndGetIntegration() {
// Reset to fresh startup state..
get("/api/v1/test-support/reset-db", Void.class, tokenRule.validToken(), HttpStatus.NO_CONTENT);
// We should have some initial data in the snapshot since we start up with deployment.json
@SuppressWarnings({ "unchecked", "rawtypes" }) Class<ModelData<?>[]> type = (Class) ModelData[].class;
ResponseEntity<ModelData<?>[]> r1 = get("/api/v1/test-support/snapshot-db", type);
assertThat(r1.getBody().length).isGreaterThan(1);
// restoring to no data should.. leave us with no data.
ModelData<?>[] noData = new ModelData<?>[] {};
post("/api/v1/test-support/restore-db", noData, (Class<?>) null, tokenRule.validToken(), HttpStatus.NO_CONTENT);
// Lets add an integration...
Integration integration = new Integration.Builder().id("3001").name("test").build();
post("/api/v1/integrations", integration, Integration.class);
// Snapshot should only contain the integration entity..
ResponseEntity<ModelData<?>[]> r2 = get("/api/v1/test-support/snapshot-db", type);
assertThat(r2.getBody()).isNotEmpty();
long r2Integrations = Arrays.stream(r2.getBody()).filter(b -> b.getKind() == Kind.Integration).count();
assertThat(r2Integrations).isEqualTo(1);
// Reset to fresh startup state..
get("/api/v1/test-support/reset-db", Void.class, tokenRule.validToken(), HttpStatus.NO_CONTENT);
// Verify that the new state has the same number of entities as the original
ResponseEntity<ModelData<?>[]> r3 = get("/api/v1/test-support/snapshot-db", type);
assertThat(r3.getBody().length).isEqualTo(r1.getBody().length);
// restoring 1 item of data
post("/api/v1/test-support/restore-db", r2.getBody(), (Class<?>) null, tokenRule.validToken(), HttpStatus.NO_CONTENT);
// Snapshot should only contain the integration entity..
ResponseEntity<ModelData<?>[]> r4 = get("/api/v1/test-support/snapshot-db", type);
assertThat(r4.getBody()).isNotEmpty();
long r4Integrations = Arrays.stream(r4.getBody()).filter(b -> b.getKind() == Kind.Integration).count();
assertThat(r4Integrations).isEqualTo(1);
}
use of io.syndesis.common.model.integration.Integration in project syndesis by syndesisio.
the class ProjectGenerator method generateApplicationProperties.
@SuppressWarnings("PMD")
@Override
public Properties generateApplicationProperties(final Integration integrationDefinition) {
final Integration integration = sanitize(integrationDefinition, resourceManager);
final Properties properties = new Properties();
final List<? extends Step> steps = integration.getSteps();
for (int i = 0; i < steps.size(); i++) {
final Step step = steps.get(i);
// Check if a step is of supported type.
if (StepKind.endpoint != step.getStepKind()) {
continue;
}
// Check if a step has the required options
if (step.getAction().filter(ConnectorAction.class::isInstance).isPresent() && step.getConnection().isPresent()) {
final String index = Integer.toString(i + 1);
final Connection connection = step.getConnection().get();
final ConnectorAction action = ConnectorAction.class.cast(step.getAction().get());
final ConnectorDescriptor descriptor = action.getDescriptor();
final Connector connector = resourceManager.loadConnector(connection).orElseThrow(() -> new IllegalArgumentException("No connector with id: " + connection.getConnectorId()));
if (connector.getComponentScheme().isPresent() || descriptor.getComponentScheme().isPresent()) {
// Grab the component scheme from the component descriptor or
// from the connector
final String componentScheme = Optionals.first(descriptor.getComponentScheme(), connector.getComponentScheme()).get();
final Map<String, ConfigurationProperty> configurationProperties = CollectionsUtils.aggregate(connector.getProperties(), action.getProperties());
// Workaround for https://github.com/syndesisio/syndesis/issues/1713
for (Map.Entry<String, ConfigurationProperty> entry : configurationProperties.entrySet()) {
if (entry.getValue() != null && entry.getValue().getDefaultValue() != null && !entry.getValue().getDefaultValue().isEmpty()) {
if (connector.isSecret(entry.getKey()) || action.isSecret(entry.getKey())) {
addDecryptedKeyProperty(properties, index, componentScheme, entry.getKey(), entry.getValue().getDefaultValue());
}
}
}
for (Map.Entry<String, String> entry : connection.getConfiguredProperties().entrySet()) {
if (connector.isSecret(entry) || action.isSecret(entry)) {
addDecryptedKeyProperty(properties, index, componentScheme, entry.getKey(), entry.getValue());
}
}
for (Map.Entry<String, String> entry : step.getConfiguredProperties().entrySet()) {
if (connector.isSecret(entry) || action.isSecret(entry)) {
addDecryptedKeyProperty(properties, index, componentScheme, entry.getKey(), entry.getValue());
}
}
} else {
// The component scheme is defined as camel connector prefix
// for 'old' style connectors.
final String componentScheme = descriptor.getCamelConnectorPrefix();
// endpoint secrets
Stream.of(connector, connection, step).filter(WithConfiguredProperties.class::isInstance).map(WithConfiguredProperties.class::cast).map(WithConfiguredProperties::getConfiguredProperties).flatMap(map -> map.entrySet().stream()).filter(Predicates.or(connector::isEndpointProperty, action::isEndpointProperty)).filter(Predicates.or(connector::isSecret, action::isSecret)).forEach(e -> {
addDecryptedKeyProperty(properties, index, componentScheme, e.getKey(), e.getValue());
});
// Component properties triggers connectors aliasing so we
// can have multiple instances of the same connectors
Stream.of(connector, connection, step).filter(WithConfiguredProperties.class::isInstance).map(WithConfiguredProperties.class::cast).map(WithConfiguredProperties::getConfiguredProperties).flatMap(map -> map.entrySet().stream()).filter(Predicates.or(connector::isComponentProperty, action::isComponentProperty)).forEach(e -> {
String propKeyPrefix = String.format("%s.configurations.%s", componentScheme, componentScheme);
addDecryptedKeyProperty(properties, index, propKeyPrefix, e.getKey(), e.getValue());
});
}
}
}
return properties;
}
Aggregations