private Optional<Step> getConnectorSplitAsStep(Step step) { if (step.getAction().filter(ConnectorAction.class::isInstance).isPresent()) { final ConnectorAction action = step.getAction().filter(ConnectorAction.class::isInstance).map(ConnectorAction.class::cast).get(); final ConnectorDescriptor descriptor = action.getDescriptor(); if (descriptor.getSplit().isPresent()) { final Split split = descriptor.getSplit().get(); final Step.Builder splitBuilder = new Step.Builder().stepKind(StepKind.split); split.getLanguage().ifPresent(s -> splitBuilder.putConfiguredProperty("language", s)); split.getExpression().ifPresent(s -> splitBuilder.putConfiguredProperty("expression", s)); return Optional.of(splitBuilder.build()); } } return Optional.empty(); }
private Optional<ProcessorDefinition<?>> configureConnectorSplit(Step step, ProcessorDefinition<?> route, String flowIndex, String stepIndex) { if (step.getAction().filter(ConnectorAction.class::isInstance).isPresent()) { final ConnectorAction action = step.getAction().filter(ConnectorAction.class::isInstance).map(ConnectorAction.class::cast).get(); final ConnectorDescriptor descriptor = action.getDescriptor(); if (descriptor.getSplit().isPresent()) { final Split split = descriptor.getSplit().get(); final Step.Builder splitBuilder = new Step.Builder().stepKind(StepKind.split); split.getLanguage().ifPresent(s -> splitBuilder.putConfiguredProperty("language", s)); split.getExpression().ifPresent(s -> splitBuilder.putConfiguredProperty("expression", s)); return new SplitStepHandler().handle( splitBuilder.build(), route, this, flowIndex, stepIndex); } } return Optional.empty(); }
@Test public void testSanitizeConnectors() { TestResourceManager resourceManager = new TestResourceManager(); resourceManager.put(TestConstants.TIMER_CONNECTOR.getId().get(), TestConstants.TIMER_CONNECTOR); Integration source = resourceManager.newIntegration( new Step.Builder() .stepKind(StepKind.endpoint) .connection(new Connection.Builder() .id("timer-connection") .connectorId(TestConstants.TIMER_CONNECTOR.getId().get()) .build()) .putConfiguredProperty("period", "5000") .action(TestConstants.PERIODIC_TIMER_ACTION) .build() ); final Optional<Connection> unsanitizedConnection = source.getFlows().get(0).getSteps().get(0).getConnection(); assertThat(unsanitizedConnection.isPresent()).isTrue(); assertThat(unsanitizedConnection.get().getConnector().isPresent()).isFalse(); Integration sanitized = ProjectGeneratorHelper.sanitize(source, resourceManager); final Optional<Connection> sanitizedConnection = sanitized.getFlows().get(0).getSteps().get(0).getConnection(); assertThat(sanitizedConnection.isPresent()).isTrue(); assertThat(sanitizedConnection.get().getConnector().isPresent()).isTrue(); assertThat(sanitizedConnection.get().getConnector().get()).isEqualTo(TestConstants.TIMER_CONNECTOR); }
new Step.Builder() .stepKind(StepKind.headers) .putConfiguredProperty("action", "set") .putConfiguredProperty("MyHeader1", "1") .putConfiguredProperty("MyHeader2", "2") .build(), new Step.Builder() .stepKind(StepKind.headers) .putConfiguredProperty("action", "remove") .putConfiguredProperty("MyHeader1", "") .build(), new Step.Builder()
new Step.Builder() .stepKind(StepKind.expressionFilter) .putConfiguredProperty("filter", "${body} contains 'number'") .build(), new Step.Builder()
.build()) .build()) .putConfiguredProperty("template", template) .addDependency(Dependency.maven("org.apache.camel:camel-mustache:2.21.0.fuse-720007")) .build(),
new Step.Builder() .stepKind(StepKind.headers) .putConfiguredProperty("action", "set") .putConfiguredProperty("MyHeader1", "1") .putConfiguredProperty("MyHeader2", "2") .build(), new Step.Builder()
new Step.Builder() .stepKind(StepKind.split) .putConfiguredProperty("language", "tokenize") .putConfiguredProperty("expression", "|") .build(), new Step.Builder()
new Step.Builder() .stepKind(StepKind.expressionFilter) .putConfiguredProperty("filter", "${body.name} == 'James'") .build(), new Step.Builder()
@Test public void testSanitizeScheduler() { TestResourceManager resourceManager = new TestResourceManager(); Integration source = resourceManager.newIntegration( new Step.Builder() .stepKind(StepKind.endpoint) .connection(new Connection.Builder() .id("timer-connection") .connector(TestConstants.HTTP_CONNECTOR) .build()) .putConfiguredProperty("schedulerType", "timer") .putConfiguredProperty("schedulerExpression", "1s") .action(TestConstants.HTTP_GET_ACTION) .build() ); assertThat(source.getFlows().get(0).getScheduler().isPresent()).isFalse(); Integration sanitized = ProjectGeneratorHelper.sanitize(source, resourceManager); final Flow sanitizedFlow = sanitized.getFlows().get(0); assertThat(sanitizedFlow.getScheduler().isPresent()).isTrue(); assertThat(sanitizedFlow.getScheduler().get()).hasFieldOrPropertyWithValue("type", Scheduler.Type.timer); assertThat(sanitizedFlow.getScheduler().get()).hasFieldOrPropertyWithValue("expression", "1s"); assertThat(sanitizedFlow.getSteps().get(0).getStepKind()).isEqualTo(StepKind.endpoint); assertThat(sanitizedFlow.getSteps().get(0).getConfiguredProperties()).doesNotContainKey("scheduler-type"); assertThat(sanitizedFlow.getSteps().get(0).getConfiguredProperties()).doesNotContainKey("scheduler-expression"); }
@Test public void testSanitizeDefaultScheduler() { TestResourceManager resourceManager = new TestResourceManager(); Integration source = resourceManager.newIntegration( new Step.Builder() .stepKind(StepKind.endpoint) .connection(new Connection.Builder() .id("timer-connection") .connector(TestConstants.HTTP_CONNECTOR) .build()) .putConfiguredProperty("schedulerExpression", "1s") .action(TestConstants.HTTP_GET_ACTION) .build() ); assertThat(source.getFlows().get(0).getScheduler().isPresent()).isFalse(); Integration sanitized = ProjectGeneratorHelper.sanitize(source, resourceManager); final Flow sanitizedFlow = sanitized.getFlows().get(0); assertThat(sanitizedFlow.getScheduler().isPresent()).isTrue(); assertThat(sanitizedFlow.getScheduler().get()).hasFieldOrPropertyWithValue("type", Scheduler.Type.timer); assertThat(sanitizedFlow.getScheduler().get()).hasFieldOrPropertyWithValue("expression", "1s"); assertThat(sanitizedFlow.getSteps().get(0).getStepKind()).isEqualTo(StepKind.endpoint); assertThat(sanitizedFlow.getSteps().get(0).getConfiguredProperties()).doesNotContainKey("scheduler-type"); assertThat(sanitizedFlow.getSteps().get(0).getConfiguredProperties()).doesNotContainKey("scheduler-expression"); }
@Override protected List<Step> createSteps() { return Arrays.asList( newSimpleEndpointStep( "direct", builder -> builder.putConfiguredProperty("name", "start")), newSqlEndpointStep( "sql-start-connector", builder -> builder.putConfiguredProperty("query", "SELECT * FROM NAME ORDER BY id")), newSimpleEndpointStep( "log", builder -> builder.putConfiguredProperty("loggerName", "test")), newSimpleEndpointStep( "mock", builder -> builder.putConfiguredProperty("name", "result")) ); }
@Test public void shouldGenerateMessages() { final Step step = new Step.Builder().putConfiguredProperty("customText", "Log me baby one more time").build(); assertThat(LogStepHandler.createMessage(step)).isEqualTo("Log me baby one more time"); final Step withContext = new Step.Builder().createFrom(step) .putConfiguredProperty("contextLoggingEnabled", "true").build(); assertThat(LogStepHandler.createMessage(withContext)) .isEqualTo("Message Context: [${in.headers}] Log me baby one more time"); final Step withBody = new Step.Builder().createFrom(step).putConfiguredProperty("bodyLoggingEnabled", "true") .build(); assertThat(LogStepHandler.createMessage(withBody)).isEqualTo("Body: [${body}] Log me baby one more time"); final Step withContextAndBody = new Step.Builder().createFrom(step) .putConfiguredProperty("contextLoggingEnabled", "true").putConfiguredProperty("bodyLoggingEnabled", "true") .build(); assertThat(LogStepHandler.createMessage(withContextAndBody)) .isEqualTo("Message Context: [${in.headers}] Body: [${body}] Log me baby one more time"); }
@Override protected List<Step> createSteps() { return Arrays.asList( newSimpleEndpointStep( "direct", builder -> builder.putConfiguredProperty("name", "start")), newSqlEndpointStep( "sql-stored-connector", builder -> builder.putConfiguredProperty("template", "DEMO_ADD(INTEGER ${body[a]}, INTEGER ${body[b]}, OUT INTEGER c)")), newSimpleEndpointStep( "mock", builder -> builder.putConfiguredProperty("name", "result")) ); }
@Override protected List<Step> createSteps() { return Arrays.asList( newSimpleEndpointStep( "direct", builder -> builder.putConfiguredProperty("name", "start")), newSqlEndpointStep( "sql-connector", builder -> builder.putConfiguredProperty("query", STATEMENT)), newSimpleEndpointStep( "log", builder -> builder.putConfiguredProperty("loggerName", "test")) ); }
@Override protected List<Step> createSteps() { return Arrays.asList( newSimpleEndpointStep( "direct", builder -> builder.putConfiguredProperty("name", "start")), newSqlEndpointStep( "sql-stored-start-connector", builder -> builder.putConfiguredProperty("template", "DEMO_OUT( OUT INTEGER c)")), newSimpleEndpointStep( "mock", builder -> builder.putConfiguredProperty("name", "result")) ); }
@Test public void testRuleFilterExpression() { String expression = new RuleFilterStepHandler().getFilterExpression( new Step.Builder() .stepKind(StepKind.ruleFilter) .putConfiguredProperty("predicate", FilterPredicate.AND.toString()) .putConfiguredProperty("rules","[ { \"path\": \"person.name\", \"op\": \"==\", \"value\": \"Ioannis\"}, " + " { \"path\": \"person.favoriteDrinks\", \"op\": \"contains\", \"value\": \"Gin\" } ]") .build() ); // Reading notes: Unit tests are like personal diaries. Feel honoured when you have the chance to be part of them ;-) assertThat("${body.person.name} == 'Ioannis' && ${body.person.favoriteDrinks} contains 'Gin'").isEqualTo(expression); }
@Override protected List<Step> createSteps() { return Arrays.asList( newSimpleEndpointStep( "direct", builder -> builder.putConfiguredProperty("name", "start")), newSqlEndpointStep( "sql-connector", builder -> builder.putConfiguredProperty("query", "INSERT INTO ADDRESS VALUES (:#street, :#number)")), newSimpleEndpointStep( "log", builder -> builder.putConfiguredProperty("loggerName", "test")) ); }
@Test public void shouldAddLogProcessorWithCustomMessage() { final Step step = new Step.Builder().putConfiguredProperty("customText", "Log me baby one more time").build(); assertThat(handler.handle(step, route, NOT_USED, "1", "2")).contains(route); verify(route).log(LoggingLevel.INFO, "Log me baby one more time"); }
@Test public void shouldAddLogProcessorWithCustomMessageAndStepId() { final Step step = new Step.Builder().id("step-id") .putConfiguredProperty("customText", "Log me baby one more time").build(); assertThat(handler.handle(step, route, NOT_USED, "1", "2")).contains(route); verify(route).log(LoggingLevel.INFO, (String) null, "step-id", "Log me baby one more time"); }