This is an automated email from the ASF dual-hosted git repository.
acosentino pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel-kafka-connector.git
The following commit(s) were added to refs/heads/master by this push:
new 2b46335 Adds a manual test for the Camel Slack sink connector
new 6e7ba13 Merge pull request #174 from orpiske/slack
2b46335 is described below
commit 2b46335a9d28bbf09ca37507d409b0db9322b616
Author: Otavio Rodolfo Piske <[email protected]>
AuthorDate: Wed Apr 29 17:37:30 2020 +0200
Adds a manual test for the Camel Slack sink connector
---
examples/CamelSlackSinkConnector.properties | 26 ++++++
tests/pom.xml | 4 +
.../camel/kafkaconnector/PluginPathHelper.java | 3 +-
.../sink/slack/CamelSinkSlackITCase.java | 102 +++++++++++++++++++++
.../sink/slack/CamelSlackPropertyFactory.java | 54 +++++++++++
5 files changed, 188 insertions(+), 1 deletion(-)
diff --git a/examples/CamelSlackSinkConnector.properties
b/examples/CamelSlackSinkConnector.properties
new file mode 100644
index 0000000..bfe6bcd
--- /dev/null
+++ b/examples/CamelSlackSinkConnector.properties
@@ -0,0 +1,26 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+name=CamelSlackSinkConnector
+tasks.max=1
+
+connector.class=org.apache.camel.kafkaconnector.slack.CamelSlackSinkConnector
+value.converter=org.apache.kafka.connect.storage.StringConverter
+key.converter=org.apache.kafka.connect.storage.StringConverter
+
+camel.sink.endpoint.webhookUrl=https://hooks.slack.com/path/to/id
+camel.sink.path.channel=#opensourcetest
+
+topics=my-topic
\ No newline at end of file
diff --git a/tests/pom.xml b/tests/pom.xml
index 8426be7..4768edf 100644
--- a/tests/pom.xml
+++ b/tests/pom.xml
@@ -104,6 +104,10 @@
<groupId>org.apache.camel</groupId>
<artifactId>camel-timer</artifactId>
</dependency>
+ <dependency>
+ <groupId>org.apache.camel</groupId>
+ <artifactId>camel-slack</artifactId>
+ </dependency>
<!-- test scope dependencies -->
<dependency>
diff --git
a/tests/src/test/java/org/apache/camel/kafkaconnector/PluginPathHelper.java
b/tests/src/test/java/org/apache/camel/kafkaconnector/PluginPathHelper.java
index 35fa3a3..3b74283 100644
--- a/tests/src/test/java/org/apache/camel/kafkaconnector/PluginPathHelper.java
+++ b/tests/src/test/java/org/apache/camel/kafkaconnector/PluginPathHelper.java
@@ -36,7 +36,8 @@ public final class PluginPathHelper {
"connectors/camel-aws-sns-kafka-connector",
"connectors/camel-aws-sqs-kafka-connector",
"connectors/camel-aws-s3-kafka-connector",
"connectors/camel-aws-kinesis-kafka-connector",
"connectors/camel-elasticsearch-rest-kafka-connector",
"connectors/camel-http-kafka-connector",
- "connectors/camel-timer-kafka-connector",
"connectors/camel-file-kafka-connector"
+ "connectors/camel-timer-kafka-connector",
"connectors/camel-file-kafka-connector",
+ "connectors/camel-slack-kafka-connector"
};
private static class PluginWalker extends DirectoryWalker<String> {
diff --git
a/tests/src/test/java/org/apache/camel/kafkaconnector/sink/slack/CamelSinkSlackITCase.java
b/tests/src/test/java/org/apache/camel/kafkaconnector/sink/slack/CamelSinkSlackITCase.java
new file mode 100644
index 0000000..7193e4c
--- /dev/null
+++
b/tests/src/test/java/org/apache/camel/kafkaconnector/sink/slack/CamelSinkSlackITCase.java
@@ -0,0 +1,102 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.camel.kafkaconnector.sink.slack;
+
+import java.util.concurrent.ExecutionException;
+
+import org.apache.camel.kafkaconnector.AbstractKafkaTest;
+import org.apache.camel.kafkaconnector.ConnectorPropertyFactory;
+import org.apache.camel.kafkaconnector.TestCommon;
+import org.apache.camel.kafkaconnector.clients.kafka.KafkaClient;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
+import org.junit.jupiter.api.condition.EnabledIfSystemProperty;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.testcontainers.junit.jupiter.Testcontainers;
+
+import static org.junit.jupiter.api.Assertions.fail;
+
+/**
+ * Integration tests for the JMS sink
+ */
+@Testcontainers
+/* This test is disabled by default because requires manual verification on
Slack end.
+
+You need to set 3 system properties to run this test:
+ -Dit.test.slack.enable=true to enable the test
+ -Dit.test.slack.channel=#channel to inform the channel to send the message to
+ -Dit.test.slack.webhookUrl=https://host.slack.com/id/of/the/hook to pass the
incoming hook URL to the test
+ */
+@EnabledIfSystemProperty(named = "it.test.slack.enable", matches = "true")
+public class CamelSinkSlackITCase extends AbstractKafkaTest {
+ private static final Logger LOG =
LoggerFactory.getLogger(CamelSinkSlackITCase.class);
+ private String slackChannel = System.getProperty("it.test.slack.channel");
+ private String webhookUrl = System.getProperty("it.test.slack.webhookUrl");
+
+
+ private void runTest(ConnectorPropertyFactory connectorPropertyFactory,
String message) throws ExecutionException, InterruptedException {
+ connectorPropertyFactory.log();
+ getKafkaConnectService().initializeConnector(connectorPropertyFactory);
+
+ KafkaClient<String, String> kafkaClient = new
KafkaClient<>(getKafkaService().getBootstrapServers());
+
+ kafkaClient.produce(TestCommon.getDefaultTestTopic(this.getClass()),
message);
+
+
+ LOG.debug("Created the consumer ... About to receive messages");
+ }
+
+ @Test
+ @Timeout(90)
+ public void testBasicSendReceive() {
+ try {
+ ConnectorPropertyFactory connectorPropertyFactory =
CamelSlackPropertyFactory
+ .basic()
+
.withTopics(TestCommon.getDefaultTestTopic(this.getClass()))
+ .withChannel(slackChannel)
+ .withWebhookUrl(webhookUrl);
+
+ runTest(connectorPropertyFactory, "Sink test message sent to Slack
from testBasicSendReceive");
+
+ } catch (Exception e) {
+ LOG.error("Slack test failed: {}", e.getMessage(), e);
+ fail(e.getMessage());
+ }
+ }
+
+ @Test
+ @Timeout(90)
+ public void testBasicSendReceiveWithUrl() {
+ try {
+ ConnectorPropertyFactory connectorPropertyFactory =
CamelSlackPropertyFactory
+ .basic()
+
.withTopics(TestCommon.getDefaultTestTopic(this.getClass()))
+ .withUrl(slackChannel)
+ .append("webhookUrl", webhookUrl)
+ .buildUrl();
+
+ runTest(connectorPropertyFactory, "Sink test message sent to Slack
from testBasicSendReceiveWithUrl");
+
+ } catch (Exception e) {
+ LOG.error("Slack test failed: {}", e.getMessage(), e);
+ fail(e.getMessage());
+ }
+ }
+
+}
diff --git
a/tests/src/test/java/org/apache/camel/kafkaconnector/sink/slack/CamelSlackPropertyFactory.java
b/tests/src/test/java/org/apache/camel/kafkaconnector/sink/slack/CamelSlackPropertyFactory.java
new file mode 100644
index 0000000..513461f
--- /dev/null
+++
b/tests/src/test/java/org/apache/camel/kafkaconnector/sink/slack/CamelSlackPropertyFactory.java
@@ -0,0 +1,54 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.camel.kafkaconnector.sink.slack;
+
+import org.apache.camel.kafkaconnector.EndpointUrlBuilder;
+import org.apache.camel.kafkaconnector.SinkConnectorPropertyFactory;
+
+
+/**
+ * Creates the set of properties used by a Camel Slack Sink Connector
+ */
+final class CamelSlackPropertyFactory extends
SinkConnectorPropertyFactory<CamelSlackPropertyFactory> {
+ private CamelSlackPropertyFactory() {
+
+ }
+
+ public CamelSlackPropertyFactory withChannel(String channel) {
+ return setProperty("camel.sink.path.channel", channel);
+ }
+
+ public CamelSlackPropertyFactory withWebhookUrl(String webhookUrl) {
+ return setProperty("camel.sink.endpoint.webhookUrl", webhookUrl);
+ }
+
+ public EndpointUrlBuilder<CamelSlackPropertyFactory> withUrl(String
channel) {
+ String queueUrl = String.format("slack:%s", channel);
+
+ return new EndpointUrlBuilder<>(this::withSinkUrl, queueUrl);
+ }
+
+ public static CamelSlackPropertyFactory basic() {
+ return new CamelSlackPropertyFactory()
+ .withName("CamelSlackSinkConnector")
+ .withTasksMax(1)
+
.withConnectorClass("org.apache.camel.kafkaconnector.slack.CamelSlackSinkConnector")
+
.withKeyConverterClass("org.apache.kafka.connect.storage.StringConverter")
+
.withValueConverterClass("org.apache.kafka.connect.storage.StringConverter");
+ }
+}