CAMEL-11055: Ping Check API - Allow to use lower case scopes
Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/33854d29 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/33854d29 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/33854d29 Branch: refs/heads/master Commit: 33854d2997f416a058aaf78b0d6356fb4312c347 Parents: 7aec00f Author: lburgazzoli <lburgazz...@gmail.com> Authored: Thu Mar 23 13:50:10 2017 +0100 Committer: lburgazzoli <lburgazz...@gmail.com> Committed: Thu Mar 23 13:52:45 2017 +0100 ---------------------------------------------------------------------- .../org/apache/camel/ComponentVerifier.java | 16 ++- .../management/mbean/ManagedComponent.java | 8 +- .../camel/management/ManagedComponentTest.java | 118 +++++++++++++++++++ .../camel/management/ManagementTestSupport.java | 15 +++ .../camel/component/http/HttpComponent.java | 2 +- .../camel/component/http4/HttpComponent.java | 2 +- .../salesforce/SalesforceComponent.java | 2 +- .../servicenow/ServiceNowComponent.java | 2 +- .../component/twitter/TwitterComponent.java | 2 +- 9 files changed, 156 insertions(+), 11 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/33854d29/camel-core/src/main/java/org/apache/camel/ComponentVerifier.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/ComponentVerifier.java b/camel-core/src/main/java/org/apache/camel/ComponentVerifier.java index ce8cae8..969b25b 100644 --- a/camel-core/src/main/java/org/apache/camel/ComponentVerifier.java +++ b/camel-core/src/main/java/org/apache/camel/ComponentVerifier.java @@ -21,6 +21,8 @@ import java.util.List; import java.util.Map; import java.util.Set; +import org.apache.camel.util.ObjectHelper; + /** * Defines the interface used to validate component/endpoint parameters. */ @@ -51,7 +53,19 @@ public interface ComponentVerifier { enum Scope { NONE, PARAMETERS, - CONNECTIVITY + CONNECTIVITY; + + private static final Scope[] VALUES = values(); + + public static Scope fromString(String scope) { + for (int i=0; i < VALUES.length; i++) { + if (ObjectHelper.equal(scope, VALUES[i].name(), true)) { + return VALUES[i]; + } + } + + throw new IllegalArgumentException("Unknown scope <" + scope + ">"); + } } /** http://git-wip-us.apache.org/repos/asf/camel/blob/33854d29/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedComponent.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedComponent.java b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedComponent.java index 90081ae..78af22a 100644 --- a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedComponent.java +++ b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedComponent.java @@ -37,6 +37,7 @@ import org.apache.camel.api.management.mbean.ManagedComponentMBean; import org.apache.camel.impl.verifier.ResultBuilder; import org.apache.camel.impl.verifier.ResultErrorBuilder; import org.apache.camel.spi.ManagementStrategy; +import org.apache.camel.util.CastUtils; import org.apache.camel.util.JsonSchemaHelper; import org.apache.camel.util.ObjectHelper; @@ -146,13 +147,10 @@ public class ManagedComponent implements ManagedInstance, ManagedComponentMBean @Override public ComponentVerifier.Result verify(String scope, Map<String, String> options) { try { - ComponentVerifier.Scope scopeEnum = ComponentVerifier.Scope.valueOf(scope); + ComponentVerifier.Scope scopeEnum = ComponentVerifier.Scope.fromString(scope); if (component instanceof VerifiableComponent) { - @SuppressWarnings("unchecked") - final Map<String, Object> properties = (Map)options; - - return ((VerifiableComponent) component).getVerifier().verify(scopeEnum, properties); + return ((VerifiableComponent) component).getVerifier().verify(scopeEnum, CastUtils.cast(options)); } else { return ResultBuilder.unsupported().build(); } http://git-wip-us.apache.org/repos/asf/camel/blob/33854d29/camel-core/src/test/java/org/apache/camel/management/ManagedComponentTest.java ---------------------------------------------------------------------- diff --git a/camel-core/src/test/java/org/apache/camel/management/ManagedComponentTest.java b/camel-core/src/test/java/org/apache/camel/management/ManagedComponentTest.java new file mode 100644 index 0000000..00ade1f --- /dev/null +++ b/camel-core/src/test/java/org/apache/camel/management/ManagedComponentTest.java @@ -0,0 +1,118 @@ +/** + * 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.management; + +import java.util.Collections; +import java.util.Map; +import javax.management.MBeanServer; +import javax.management.ObjectName; + +import org.apache.camel.CamelContext; +import org.apache.camel.ComponentVerifier; +import org.apache.camel.Endpoint; +import org.apache.camel.VerifiableComponent; +import org.apache.camel.component.direct.DirectComponent; +import org.apache.camel.impl.DefaultComponent; +import org.apache.camel.impl.verifier.DefaultComponentVerifier; +import org.apache.camel.impl.verifier.ResultBuilder; + +public class ManagedComponentTest extends ManagementTestSupport { + private static final String[] VERIFY_SIGNATURE = new String[]{ "java.lang.String", "java.util.Map" }; + + @Override + protected CamelContext createCamelContext() throws Exception { + CamelContext context = super.createCamelContext(); + context.addComponent("my-verifiable-component", new MyVerifiableComponent()); + context.addComponent("direct", new DirectComponent()); + + return context; + } + + public void testVerifySupported() throws Exception { + // JMX tests don't work well on AIX CI servers (hangs them) + if (isPlatform("aix")) { + return; + } + + MBeanServer mbeanServer = getMBeanServer(); + + ObjectName on; + + on = ObjectName.getInstance("org.apache.camel:context=camel-1,type=components,name=\"my-verifiable-component\""); + assertTrue(mbeanServer.isRegistered(on)); + assertTrue(invoke(mbeanServer, on, "isVerifySupported")); + + on = ObjectName.getInstance("org.apache.camel:context=camel-1,type=components,name=\"direct\""); + assertTrue(mbeanServer.isRegistered(on)); + assertFalse(invoke(mbeanServer, on, "isVerifySupported")); + } + + public void testVerify() throws Exception { + // JMX tests don't work well on AIX CI servers (hangs them) + if (isPlatform("aix")) { + return; + } + + MBeanServer mbeanServer = getMBeanServer(); + + ObjectName on = ObjectName.getInstance("org.apache.camel:context=camel-1,type=components,name=\"my-verifiable-component\""); + assertTrue(mbeanServer.isRegistered(on)); + assertTrue(invoke(mbeanServer, on, "isVerifySupported")); + + ComponentVerifier.Result res; + + // check lowercase + res = invoke(mbeanServer, on, "verify", new Object[]{ "connectivity", Collections.emptyMap() }, VERIFY_SIGNATURE); + assertEquals(ComponentVerifier.Result.Status.OK, res.getStatus()); + assertEquals(ComponentVerifier.Scope.CONNECTIVITY, res.getScope()); + + // check mixed case + res = invoke(mbeanServer, on, "verify", new Object[]{ "ConnEctivIty", Collections.emptyMap() }, VERIFY_SIGNATURE); + assertEquals(ComponentVerifier.Result.Status.OK, res.getStatus()); + assertEquals(ComponentVerifier.Scope.CONNECTIVITY, res.getScope()); + + // check uppercase + res = invoke(mbeanServer, on, "verify", new Object[]{ "PARAMETERS", Collections.emptyMap() }, VERIFY_SIGNATURE); + assertEquals(ComponentVerifier.Result.Status.OK, res.getStatus()); + assertEquals(ComponentVerifier.Scope.PARAMETERS, res.getScope()); + } + + // *********************************** + // + // *********************************** + + private static class MyVerifiableComponent extends DefaultComponent implements VerifiableComponent { + @Override + public ComponentVerifier getVerifier() { + return new DefaultComponentVerifier("my-verifiable-component", getCamelContext()) { + @Override + protected Result verifyConnectivity(Map<String, Object> parameters) { + return ResultBuilder.withStatusAndScope(Result.Status.OK, Scope.CONNECTIVITY).build(); + } + @Override + protected Result verifyParameters(Map<String, Object> parameters) { + return ResultBuilder.withStatusAndScope(Result.Status.OK, Scope.PARAMETERS).build(); + } + }; + } + + @Override + protected Endpoint createEndpoint(String uri, String remaining, Map<String, Object> parameters) throws Exception { + throw new UnsupportedOperationException(); + } + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/camel/blob/33854d29/camel-core/src/test/java/org/apache/camel/management/ManagementTestSupport.java ---------------------------------------------------------------------- diff --git a/camel-core/src/test/java/org/apache/camel/management/ManagementTestSupport.java b/camel-core/src/test/java/org/apache/camel/management/ManagementTestSupport.java index cb10885..1d484ec 100644 --- a/camel-core/src/test/java/org/apache/camel/management/ManagementTestSupport.java +++ b/camel-core/src/test/java/org/apache/camel/management/ManagementTestSupport.java @@ -16,7 +16,11 @@ */ package org.apache.camel.management; +import javax.management.InstanceNotFoundException; +import javax.management.MBeanException; import javax.management.MBeanServer; +import javax.management.ObjectName; +import javax.management.ReflectionException; import org.apache.camel.ContextTestSupport; @@ -36,4 +40,15 @@ public abstract class ManagementTestSupport extends ContextTestSupport { return context.getManagementStrategy().getManagementAgent().getMBeanServer(); } + @SuppressWarnings("unchecked") + protected <T> T invoke(MBeanServer server, ObjectName name, String operationName) + throws InstanceNotFoundException, MBeanException, ReflectionException { + return (T)server.invoke(name, operationName, null, null); + } + + @SuppressWarnings("unchecked") + protected <T> T invoke(MBeanServer server, ObjectName name, String operationName,Object params[], String signature[]) + throws InstanceNotFoundException, MBeanException, ReflectionException { + return (T)server.invoke(name, operationName, params, signature); + } } http://git-wip-us.apache.org/repos/asf/camel/blob/33854d29/components/camel-http/src/main/java/org/apache/camel/component/http/HttpComponent.java ---------------------------------------------------------------------- diff --git a/components/camel-http/src/main/java/org/apache/camel/component/http/HttpComponent.java b/components/camel-http/src/main/java/org/apache/camel/component/http/HttpComponent.java index 0475465..e64bca8 100644 --- a/components/camel-http/src/main/java/org/apache/camel/component/http/HttpComponent.java +++ b/components/camel-http/src/main/java/org/apache/camel/component/http/HttpComponent.java @@ -52,7 +52,7 @@ import org.apache.commons.httpclient.params.HttpConnectionManagerParams; * The <a href="http://camel.apache.org/http.html">HTTP Component</a> * */ -@Metadata(label = "verifiers", enums = "PARAMETERS,CONNECTIVITY") +@Metadata(label = "verifiers", enums = "parameters,connectivity") public class HttpComponent extends HttpCommonComponent implements RestProducerFactory, VerifiableComponent { @Metadata(label = "advanced") http://git-wip-us.apache.org/repos/asf/camel/blob/33854d29/components/camel-http4/src/main/java/org/apache/camel/component/http4/HttpComponent.java ---------------------------------------------------------------------- diff --git a/components/camel-http4/src/main/java/org/apache/camel/component/http4/HttpComponent.java b/components/camel-http4/src/main/java/org/apache/camel/component/http4/HttpComponent.java index 0a9ced9..a3eea81 100644 --- a/components/camel-http4/src/main/java/org/apache/camel/component/http4/HttpComponent.java +++ b/components/camel-http4/src/main/java/org/apache/camel/component/http4/HttpComponent.java @@ -69,7 +69,7 @@ import org.slf4j.LoggerFactory; * * @version */ -@Metadata(label = "verifiers", enums = "PARAMETERS,CONNECTIVITY") +@Metadata(label = "verifiers", enums = "parameters,connectivity") public class HttpComponent extends HttpCommonComponent implements RestProducerFactory, VerifiableComponent { private static final Logger LOG = LoggerFactory.getLogger(HttpComponent.class); http://git-wip-us.apache.org/repos/asf/camel/blob/33854d29/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/SalesforceComponent.java ---------------------------------------------------------------------- diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/SalesforceComponent.java b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/SalesforceComponent.java index eb5d0ee..694a55b 100644 --- a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/SalesforceComponent.java +++ b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/SalesforceComponent.java @@ -64,7 +64,7 @@ import static org.apache.camel.component.salesforce.SalesforceLoginConfig.DEFAUL /** * Represents the component that manages {@link SalesforceEndpoint}. */ -@Metadata(label = "verifiers", enums = "PARAMETERS,CONNECTIVITY") +@Metadata(label = "verifiers", enums = "parameters,connectivity") public class SalesforceComponent extends UriEndpointComponent implements EndpointCompleter, VerifiableComponent { static final int CONNECTION_TIMEOUT = 60000; http://git-wip-us.apache.org/repos/asf/camel/blob/33854d29/components/camel-servicenow/src/main/java/org/apache/camel/component/servicenow/ServiceNowComponent.java ---------------------------------------------------------------------- diff --git a/components/camel-servicenow/src/main/java/org/apache/camel/component/servicenow/ServiceNowComponent.java b/components/camel-servicenow/src/main/java/org/apache/camel/component/servicenow/ServiceNowComponent.java index 63c5996..885b9ce 100644 --- a/components/camel-servicenow/src/main/java/org/apache/camel/component/servicenow/ServiceNowComponent.java +++ b/components/camel-servicenow/src/main/java/org/apache/camel/component/servicenow/ServiceNowComponent.java @@ -30,7 +30,7 @@ import org.apache.camel.util.IntrospectionSupport; /** * Represents the component that manages {@link ServiceNowEndpoint}. */ -@Metadata(label = "verifiers", enums = "PARAMETERS,CONNECTIVITY") +@Metadata(label = "verifiers", enums = "parameters,connectivity") public class ServiceNowComponent extends UriEndpointComponent implements VerifiableComponent { @Metadata(label = "advanced") http://git-wip-us.apache.org/repos/asf/camel/blob/33854d29/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/TwitterComponent.java ---------------------------------------------------------------------- diff --git a/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/TwitterComponent.java b/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/TwitterComponent.java index 665a9f8..291d407 100644 --- a/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/TwitterComponent.java +++ b/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/TwitterComponent.java @@ -27,7 +27,7 @@ import org.apache.camel.spi.Metadata; /** * Twitter component */ -@Metadata(label = "verifiers", enums = "PARAMETERS,CONNECTIVITY") +@Metadata(label = "verifiers", enums = "parameters,connectivity") public class TwitterComponent extends UriEndpointComponent implements VerifiableComponent { @Metadata(label = "security", secret = true)