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.git

commit d03f64f88631bedca07d16809dd9e6ac4d0ae115
Author: Andrea Cosentino <anco...@gmail.com>
AuthorDate: Fri Aug 24 10:36:23 2018 +0200

    Improved the Slack Verifier Extension after the Slack Consumer has been 
implemented
---
 .../slack/SlackComponentVerifierExtension.java     | 110 +++++++++++++++------
 .../slack/SlackComponentVerifierExtensionTest.java |  58 ++++++++++-
 .../camel/component/slack/SlackConsumerTest.java   |   2 +-
 3 files changed, 137 insertions(+), 33 deletions(-)

diff --git 
a/components/camel-slack/src/main/java/org/apache/camel/component/slack/SlackComponentVerifierExtension.java
 
b/components/camel-slack/src/main/java/org/apache/camel/component/slack/SlackComponentVerifierExtension.java
index a4f3e88..0541f08 100644
--- 
a/components/camel-slack/src/main/java/org/apache/camel/component/slack/SlackComponentVerifierExtension.java
+++ 
b/components/camel-slack/src/main/java/org/apache/camel/component/slack/SlackComponentVerifierExtension.java
@@ -16,7 +16,14 @@
  */
 package org.apache.camel.component.slack;
 
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.UnsupportedEncodingException;
+import java.nio.charset.StandardCharsets;
+import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 import 
org.apache.camel.component.extension.verifier.DefaultComponentVerifierExtension;
@@ -24,12 +31,16 @@ import 
org.apache.camel.component.extension.verifier.ResultBuilder;
 import org.apache.camel.component.extension.verifier.ResultErrorBuilder;
 import org.apache.camel.component.extension.verifier.ResultErrorHelper;
 import org.apache.camel.component.slack.helper.SlackMessage;
+import org.apache.camel.util.ObjectHelper;
 import org.apache.http.HttpResponse;
 import org.apache.http.client.HttpClient;
+import org.apache.http.client.entity.UrlEncodedFormEntity;
 import org.apache.http.client.methods.HttpPost;
 import org.apache.http.entity.StringEntity;
 import org.apache.http.impl.client.HttpClientBuilder;
+import org.apache.http.message.BasicNameValuePair;
 import org.json.simple.JSONObject;
+import org.json.simple.parser.JSONParser;
 
 public class SlackComponentVerifierExtension extends 
DefaultComponentVerifierExtension {
 
@@ -46,9 +57,14 @@ public class SlackComponentVerifierExtension extends 
DefaultComponentVerifierExt
     // *********************************
     @Override
     protected Result verifyParameters(Map<String, Object> parameters) {
-        ResultBuilder builder = 
ResultBuilder.withStatusAndScope(Result.Status.OK, Scope.PARAMETERS)
-                .error(ResultErrorHelper.requiresOption("webhookUrl", 
parameters));
+        ResultBuilder builder = 
ResultBuilder.withStatusAndScope(Result.Status.OK, Scope.PARAMETERS);
 
+        if (ObjectHelper.isEmpty(parameters.get("token")) && 
ObjectHelper.isEmpty(parameters.get("webhookUrl"))) {
+            
builder.error(ResultErrorBuilder.withCodeAndDescription(VerificationError.StandardCode.GENERIC,
 "You must specify a webhookUrl (for producer) or a token (for 
consumer)").parameterKey("webhookUrl").parameterKey("token").build());
+        }
+        if (ObjectHelper.isNotEmpty(parameters.get("token")) && 
ObjectHelper.isNotEmpty(parameters.get("webhookUrl"))) {
+            
builder.error(ResultErrorBuilder.withCodeAndDescription(VerificationError.StandardCode.GENERIC,
 "You must specify a webhookUrl (for producer) or a token (for consumer). You 
can't specify both.").parameterKey("webhookUrl").parameterKey("token").build());
+        }
         return builder.build();
     }
 
@@ -57,45 +73,79 @@ public class SlackComponentVerifierExtension extends 
DefaultComponentVerifierExt
     // *********************************
     @Override
     protected Result verifyConnectivity(Map<String, Object> parameters) {
-        return ResultBuilder.withStatusAndScope(Result.Status.OK, 
Scope.CONNECTIVITY)
-                .error(parameters, this::verifyCredentials).build();
+        return ResultBuilder.withStatusAndScope(Result.Status.OK, 
Scope.CONNECTIVITY).error(parameters, this::verifyCredentials).build();
     }
 
     private void verifyCredentials(ResultBuilder builder, Map<String, Object> 
parameters) {
 
-        String webhookUrl = (String) parameters.get("webhookUrl");
+        String webhookUrl = (String)parameters.get("webhookUrl");
 
-        try {
-            HttpClient client = 
HttpClientBuilder.create().useSystemProperties().build();
-            HttpPost httpPost = new HttpPost(webhookUrl);
+        if (ObjectHelper.isNotEmpty(webhookUrl)) {
 
-            // Build Helper object
-            SlackMessage slackMessage;
-            slackMessage = new SlackMessage();
-            slackMessage.setText("Test connection");
+            try {
+                HttpClient client = 
HttpClientBuilder.create().useSystemProperties().build();
+                HttpPost httpPost = new HttpPost(webhookUrl);
 
-            // Set the post body
-            String json = asJson(slackMessage);
-            StringEntity body = new StringEntity(json);
+                // Build Helper object
+                SlackMessage slackMessage;
+                slackMessage = new SlackMessage();
+                slackMessage.setText("Test connection");
 
-            // Do the post
-            httpPost.setEntity(body);
+                // Set the post body
+                String json = asJson(slackMessage);
+                StringEntity body = new StringEntity(json);
 
-            HttpResponse response = client.execute(httpPost);
+                // Do the post
+                httpPost.setEntity(body);
+                
+                HttpResponse response = client.execute(httpPost);
 
-            // 2xx is OK, anything else we regard as failure
-            if (response.getStatusLine().getStatusCode() < 200 || 
response.getStatusLine().getStatusCode() > 299) {
-                builder.error(ResultErrorBuilder
-                        
.withCodeAndDescription(VerificationError.StandardCode.AUTHENTICATION,
-                                "Invalid webhookUrl")
-                        .parameterKey("webhookUrl").build());
+                // 2xx is OK, anything else we regard as failure
+                if (response.getStatusLine().getStatusCode() < 200 || 
response.getStatusLine().getStatusCode() > 299) {
+                    builder
+                        
.error(ResultErrorBuilder.withCodeAndDescription(VerificationError.StandardCode.AUTHENTICATION,
 "Invalid webhookUrl").parameterKey("webhookUrl").build());
+                }
+            } catch (Exception e) {
+                
builder.error(ResultErrorBuilder.withCodeAndDescription(VerificationError.StandardCode.AUTHENTICATION,
 "Invalid webhookUrl").parameterKey("webhookUrl").build());
             }
-        } catch (Exception e) {
-            builder.error(ResultErrorBuilder
-                    
.withCodeAndDescription(VerificationError.StandardCode.AUTHENTICATION,
-                            "Invalid webhookUrl")
-                    .parameterKey("webhookUrl").build());
+        } else if (ObjectHelper.isNotEmpty((String)parameters.get("token"))) {
+            String token = (String)parameters.get("token");
+
+            try {
+                HttpClient client = 
HttpClientBuilder.create().useSystemProperties().build();
+                HttpPost httpPost = new 
HttpPost("https://slack.com/api/channels.list";);
+
+                List<BasicNameValuePair> params = new 
ArrayList<BasicNameValuePair>();
+                params.add(new BasicNameValuePair("token", token));
+                httpPost.setEntity(new UrlEncodedFormEntity(params));
+
+                HttpResponse response = client.execute(httpPost);
+
+                String jsonString = 
readResponse(response.getEntity().getContent());
+                if (response.getStatusLine().getStatusCode() < 200 || 
response.getStatusLine().getStatusCode() > 299) {
+                    
builder.error(ResultErrorBuilder.withCodeAndDescription(VerificationError.StandardCode.AUTHENTICATION,
 "Invalid token").parameterKey("token").build());
+                }
+                JSONParser parser = new JSONParser();
+                JSONObject obj = (JSONObject)parser.parse(jsonString);
+                if (obj.get("ok") != null && obj.get("ok").equals(false)) {
+                    
builder.error(ResultErrorBuilder.withCodeAndDescription(VerificationError.StandardCode.AUTHENTICATION,
 "Invalid token").parameterKey("token").build());
+                }
+            } catch (Exception e) {
+                
builder.error(ResultErrorBuilder.withCodeAndDescription(VerificationError.StandardCode.AUTHENTICATION,
 "Invalid token").parameterKey("token").build());
+            }
+
+        }
+    }
+
+    private String readResponse(InputStream s) throws IOException, 
UnsupportedEncodingException {
+        ByteArrayOutputStream result = new ByteArrayOutputStream();
+        byte[] buffer = new byte[1024];
+        int length;
+        while ((length = s.read(buffer)) != -1) {
+            result.write(buffer, 0, length);
         }
+        String jsonString = result.toString(StandardCharsets.UTF_8.name());
+        return jsonString;
     }
 
     protected String asJson(SlackMessage message) {
@@ -111,4 +161,4 @@ public class SlackComponentVerifierExtension extends 
DefaultComponentVerifierExt
         return JSONObject.toJSONString(jsonObject);
     }
 
-}
\ No newline at end of file
+}
diff --git 
a/components/camel-slack/src/test/java/org/apache/camel/component/slack/SlackComponentVerifierExtensionTest.java
 
b/components/camel-slack/src/test/java/org/apache/camel/component/slack/SlackComponentVerifierExtensionTest.java
index 74418c5..2b546b3 100644
--- 
a/components/camel-slack/src/test/java/org/apache/camel/component/slack/SlackComponentVerifierExtensionTest.java
+++ 
b/components/camel-slack/src/test/java/org/apache/camel/component/slack/SlackComponentVerifierExtensionTest.java
@@ -36,7 +36,7 @@ public class SlackComponentVerifierExtensionTest extends 
CamelTestSupport {
     }
 
     @Test
-    public void testParameters() throws Exception {
+    public void testParametersWebhook() throws Exception {
         Component component = context().getComponent("slack");
 
         ComponentVerifierExtension verifier = 
component.getExtension(ComponentVerifierExtension.class).orElseThrow(IllegalStateException::new);
@@ -48,9 +48,51 @@ public class SlackComponentVerifierExtensionTest extends 
CamelTestSupport {
 
         Assert.assertEquals(ComponentVerifierExtension.Result.Status.OK, 
result.getStatus());
     }
+    
+    @Test
+    public void testParametersToken() throws Exception {
+        Component component = context().getComponent("slack");
+
+        ComponentVerifierExtension verifier = 
component.getExtension(ComponentVerifierExtension.class).orElseThrow(IllegalStateException::new);
+
+        Map<String, Object> parameters = new HashMap<>();
+        parameters.put("token", "l");
+
+        ComponentVerifierExtension.Result result = 
verifier.verify(ComponentVerifierExtension.Scope.PARAMETERS, parameters);
+
+        Assert.assertEquals(ComponentVerifierExtension.Result.Status.OK, 
result.getStatus());
+    }
+    
+    @Test
+    public void testParametersEmpty() throws Exception {
+        Component component = context().getComponent("slack");
+
+        ComponentVerifierExtension verifier = 
component.getExtension(ComponentVerifierExtension.class).orElseThrow(IllegalStateException::new);
+
+        Map<String, Object> parameters = new HashMap<>();
+
+        ComponentVerifierExtension.Result result = 
verifier.verify(ComponentVerifierExtension.Scope.PARAMETERS, parameters);
+
+        Assert.assertEquals(ComponentVerifierExtension.Result.Status.ERROR, 
result.getStatus());
+    }
+    
+    @Test
+    public void testParametersWebhookUrlTokenBoth() throws Exception {
+        Component component = context().getComponent("slack");
+
+        ComponentVerifierExtension verifier = 
component.getExtension(ComponentVerifierExtension.class).orElseThrow(IllegalStateException::new);
+
+        Map<String, Object> parameters = new HashMap<>();
+        parameters.put("token", "l");
+        parameters.put("webhookUrl", "l");
+
+        ComponentVerifierExtension.Result result = 
verifier.verify(ComponentVerifierExtension.Scope.PARAMETERS, parameters);
+
+        Assert.assertEquals(ComponentVerifierExtension.Result.Status.ERROR, 
result.getStatus());
+    }
 
     @Test
-    public void testConnectivity() throws Exception {
+    public void testConnectivityWebhook() throws Exception {
         Component component = context().getComponent("slack");
         ComponentVerifierExtension verifier = 
component.getExtension(ComponentVerifierExtension.class).orElseThrow(IllegalStateException::new);
 
@@ -62,4 +104,16 @@ public class SlackComponentVerifierExtensionTest extends 
CamelTestSupport {
         Assert.assertEquals(ComponentVerifierExtension.Result.Status.ERROR, 
result.getStatus());
     }
 
+    @Test
+    public void testConnectivityToken() throws Exception {
+        Component component = context().getComponent("slack");
+        ComponentVerifierExtension verifier = 
component.getExtension(ComponentVerifierExtension.class).orElseThrow(IllegalStateException::new);
+
+        Map<String, Object> parameters = new HashMap<>();
+        parameters.put("token", "l");
+
+        ComponentVerifierExtension.Result result = 
verifier.verify(ComponentVerifierExtension.Scope.CONNECTIVITY, parameters);
+
+        Assert.assertEquals(ComponentVerifierExtension.Result.Status.ERROR, 
result.getStatus());
+    }
 }
diff --git 
a/components/camel-slack/src/test/java/org/apache/camel/component/slack/SlackConsumerTest.java
 
b/components/camel-slack/src/test/java/org/apache/camel/component/slack/SlackConsumerTest.java
index 21f393d..2a439cd 100644
--- 
a/components/camel-slack/src/test/java/org/apache/camel/component/slack/SlackConsumerTest.java
+++ 
b/components/camel-slack/src/test/java/org/apache/camel/component/slack/SlackConsumerTest.java
@@ -28,7 +28,7 @@ public class SlackConsumerTest extends CamelTestSupport {
     @Test
     public void testConsumePrefixedMessages() throws Exception {
         MockEndpoint mock = getMockEndpoint("mock:result");
-        mock.expectedMessageCount(1);
+        mock.expectedMessageCount(9);
         
         assertMockEndpointsSatisfied();
     }

Reply via email to