You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2017/04/14 10:52:56 UTC
[2/6] camel git commit: Rename catalog to runtimecatalog to avoid
clash with same package name in camel-catalog.
http://git-wip-us.apache.org/repos/asf/camel/blob/c66be7a8/camel-core/src/test/java/org/apache/camel/runtimecatalog/AbstractCamelCatalogTest.java
----------------------------------------------------------------------
diff --git a/camel-core/src/test/java/org/apache/camel/runtimecatalog/AbstractCamelCatalogTest.java b/camel-core/src/test/java/org/apache/camel/runtimecatalog/AbstractCamelCatalogTest.java
new file mode 100644
index 0000000..309fb8e
--- /dev/null
+++ b/camel-core/src/test/java/org/apache/camel/runtimecatalog/AbstractCamelCatalogTest.java
@@ -0,0 +1,104 @@
+/**
+ * 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.runtimecatalog;
+
+import java.net.URISyntaxException;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.junit.Before;
+import org.junit.Test;
+
+import static org.easymock.EasyMock.expect;
+import static org.easymock.EasyMock.mock;
+import static org.easymock.EasyMock.replay;
+import static org.junit.Assert.assertEquals;
+
+public class AbstractCamelCatalogTest {
+
+ AbstractCamelCatalog catalog = new AbstractCamelCatalog() {
+ };
+
+ JSonSchemaResolver resolver;
+
+ @Before
+ public void setupMockCatalog() {
+ resolver = mock(JSonSchemaResolver.class);
+
+ catalog.setJSonSchemaResolver(resolver);
+ }
+
+ @Test
+ public void shouldConstructEndpointUris() throws URISyntaxException {
+ expect(resolver.getComponentJSonSchema("comp")).andReturn("{\n"//
+ + " \"component\": {\n"//
+ + " \"syntax\": \"comp:param1:param2\"\n"//
+ + " }\n"//
+ + "}");
+
+ replay(resolver);
+
+ final Map<String, String> properties = new HashMap<>();
+ properties.put("param1", "value1");
+ properties.put("param2", "value2");
+ properties.put("param3", "value3");
+
+ final String endpointUri = catalog.doAsEndpointUri("comp", properties, "&", false);
+
+ assertEquals("comp:value1:value2?param3=value3", endpointUri);
+ }
+
+ @Test
+ public void shouldConstructEndpointUrisWithPropertyPlaceholders() throws URISyntaxException {
+ expect(resolver.getComponentJSonSchema("comp")).andReturn("{\n"//
+ + " \"component\": {\n"//
+ + " \"syntax\": \"comp:param1:param2\"\n"//
+ + " }\n"//
+ + "}");
+
+ replay(resolver);
+
+ final Map<String, String> properties = new HashMap<>();
+ properties.put("param1", "{{prop1}}");
+ properties.put("param2", "{{prop2}}");
+ properties.put("param3", "{{prop3}}");
+
+ final String endpointUri = catalog.doAsEndpointUri("comp", properties, "&", false);
+
+ assertEquals("comp:{{prop1}}:{{prop2}}?param3={{prop3}}", endpointUri);
+ }
+
+ @Test
+ public void shouldConstructEndpointUrisWhenValuesContainTokens() throws URISyntaxException {
+ expect(resolver.getComponentJSonSchema("comp")).andReturn("{\n"//
+ + " \"component\": {\n"//
+ + " \"syntax\": \"comp:param1:param2\"\n"//
+ + " }\n"//
+ + "}");
+
+ replay(resolver);
+
+ final Map<String, String> properties = new HashMap<>();
+ properties.put("param1", "{value1}");
+ properties.put("param2", "/value2/");
+ properties.put("param3", "/value3/{param}");
+
+ final String endpointUri = catalog.doAsEndpointUri("comp", properties, "&", false);
+
+ assertEquals("comp:{value1}:/value2/?param3=/value3/{param}", endpointUri);
+ }
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/c66be7a8/camel-core/src/test/java/org/apache/camel/runtimecatalog/RuntimeCamelCatalogTest.java
----------------------------------------------------------------------
diff --git a/camel-core/src/test/java/org/apache/camel/runtimecatalog/RuntimeCamelCatalogTest.java b/camel-core/src/test/java/org/apache/camel/runtimecatalog/RuntimeCamelCatalogTest.java
new file mode 100644
index 0000000..dfdd5c5
--- /dev/null
+++ b/camel-core/src/test/java/org/apache/camel/runtimecatalog/RuntimeCamelCatalogTest.java
@@ -0,0 +1,393 @@
+/**
+ * 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.runtimecatalog;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.camel.impl.DefaultCamelContext;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+public class RuntimeCamelCatalogTest {
+
+ static RuntimeCamelCatalog catalog;
+
+ private static final Logger LOG = LoggerFactory.getLogger(RuntimeCamelCatalogTest.class);
+
+ @BeforeClass
+ public static void createCamelCatalog() {
+ catalog = new DefaultRuntimeCamelCatalog(new DefaultCamelContext());
+ }
+
+ @Test
+ public void testFromCamelContext() throws Exception {
+ String schema = new DefaultCamelContext().getRuntimeCamelCatalog().modelJSonSchema("choice");
+ assertNotNull(schema);
+ }
+
+ @Test
+ public void testJsonSchema() throws Exception {
+ String schema = catalog.modelJSonSchema("aggregate");
+ assertNotNull(schema);
+
+ // lets make it possible to find bean/method using both names
+ schema = catalog.modelJSonSchema("method");
+ assertNotNull(schema);
+ schema = catalog.modelJSonSchema("bean");
+ assertNotNull(schema);
+ }
+
+ @Test
+ public void testAsEndpointUriMapFile() throws Exception {
+ Map<String, String> map = new HashMap<String, String>();
+ map.put("directoryName", "src/data/inbox");
+ map.put("noop", "true");
+ map.put("delay", "5000");
+
+ String uri = catalog.asEndpointUri("file", map, true);
+ assertEquals("file:src/data/inbox?delay=5000&noop=true", uri);
+
+ String uri2 = catalog.asEndpointUriXml("file", map, true);
+ assertEquals("file:src/data/inbox?delay=5000&noop=true", uri2);
+ }
+
+ @Test
+ public void testAsEndpointUriTimer() throws Exception {
+ Map<String, String> map = new HashMap<String, String>();
+ map.put("timerName", "foo");
+ map.put("period", "5000");
+
+ String uri = catalog.asEndpointUri("timer", map, true);
+ assertEquals("timer:foo?period=5000", uri);
+ }
+
+ @Test
+ public void testAsEndpointUriPropertiesPlaceholders() throws Exception {
+ Map<String, String> map = new HashMap<String, String>();
+ map.put("timerName", "foo");
+ map.put("period", "{{howoften}}");
+ map.put("repeatCount", "5");
+
+ String uri = catalog.asEndpointUri("timer", map, true);
+ assertEquals("timer:foo?period=%7B%7Bhowoften%7D%7D&repeatCount=5", uri);
+
+ uri = catalog.asEndpointUri("timer", map, false);
+ assertEquals("timer:foo?period={{howoften}}&repeatCount=5", uri);
+ }
+
+ @Test
+ public void testAsEndpointUriBeanLookup() throws Exception {
+ Map<String, String> map = new HashMap<String, String>();
+ map.put("resourceUri", "foo.xslt");
+ map.put("converter", "#myConverter");
+
+ String uri = catalog.asEndpointUri("xslt", map, true);
+ assertEquals("xslt:foo.xslt?converter=%23myConverter", uri);
+
+ uri = catalog.asEndpointUri("xslt", map, false);
+ assertEquals("xslt:foo.xslt?converter=#myConverter", uri);
+ }
+
+ @Test
+ public void testEndpointPropertiesPlaceholders() throws Exception {
+ Map<String, String> map = catalog.endpointProperties("timer:foo?period={{howoften}}&repeatCount=5");
+ assertNotNull(map);
+ assertEquals(3, map.size());
+
+ assertEquals("foo", map.get("timerName"));
+ assertEquals("{{howoften}}", map.get("period"));
+ assertEquals("5", map.get("repeatCount"));
+ }
+
+ @Test
+ public void testAsEndpointUriLog() throws Exception {
+ Map<String, String> map = new HashMap<String, String>();
+ map.put("loggerName", "foo");
+ map.put("loggerLevel", "WARN");
+ map.put("multiline", "true");
+ map.put("showAll", "true");
+ map.put("showBody", "false");
+ map.put("showBodyType", "false");
+ map.put("showExchangePattern", "false");
+ map.put("style", "Tab");
+
+ assertEquals("log:foo?loggerLevel=WARN&multiline=true&showAll=true&style=Tab", catalog.asEndpointUri("log", map, false));
+ }
+
+ @Test
+ public void testAsEndpointUriLogShort() throws Exception {
+ Map<String, String> map = new HashMap<String, String>();
+ map.put("loggerName", "foo");
+ map.put("loggerLevel", "DEBUG");
+
+ assertEquals("log:foo?loggerLevel=DEBUG", catalog.asEndpointUri("log", map, false));
+ }
+
+ @Test
+ public void testAsEndpointUriWithplaceholder() throws Exception {
+ Map<String, String> map = new HashMap<String, String>();
+ map.put("name", "foo");
+ map.put("blockWhenFull", "{{block}}");
+ assertEquals("seda:foo?blockWhenFull={{block}}", catalog.asEndpointUri("seda", map, false));
+ }
+
+ @Test
+ public void testEndpointPropertiesSedaRequired() throws Exception {
+ Map<String, String> map = catalog.endpointProperties("seda:foo");
+ assertNotNull(map);
+ assertEquals(1, map.size());
+
+ assertEquals("foo", map.get("name"));
+
+ map = catalog.endpointProperties("seda:foo?blockWhenFull=true");
+ assertNotNull(map);
+ assertEquals(2, map.size());
+
+ assertEquals("foo", map.get("name"));
+ assertEquals("true", map.get("blockWhenFull"));
+ }
+
+ @Test
+ public void validateProperties() throws Exception {
+ // valid
+ EndpointValidationResult result = catalog.validateEndpointProperties("log:mylog");
+ assertTrue(result.isSuccess());
+
+ // unknown
+ result = catalog.validateEndpointProperties("log:mylog?level=WARN&foo=bar");
+ assertFalse(result.isSuccess());
+ assertTrue(result.getUnknown().contains("foo"));
+ assertEquals(1, result.getNumberOfErrors());
+
+ // enum
+ result = catalog.validateEndpointProperties("seda:foo?waitForTaskToComplete=blah");
+ assertFalse(result.isSuccess());
+ assertEquals("blah", result.getInvalidEnum().get("waitForTaskToComplete"));
+ assertEquals(1, result.getNumberOfErrors());
+
+ // reference okay
+ result = catalog.validateEndpointProperties("seda:foo?queue=#queue");
+ assertTrue(result.isSuccess());
+ assertEquals(0, result.getNumberOfErrors());
+
+ // unknown component
+ result = catalog.validateEndpointProperties("foo:bar?me=you");
+ assertFalse(result.isSuccess());
+ assertTrue(result.getUnknownComponent().equals("foo"));
+ assertEquals(1, result.getNumberOfErrors());
+
+ // invalid boolean but default value
+ result = catalog.validateEndpointProperties("log:output?showAll=ggg");
+ assertFalse(result.isSuccess());
+ assertEquals("ggg", result.getInvalidBoolean().get("showAll"));
+ assertEquals(1, result.getNumberOfErrors());
+
+ // dataset
+ result = catalog.validateEndpointProperties("dataset:foo?minRate=50");
+ assertTrue(result.isSuccess());
+
+ // time pattern
+ result = catalog.validateEndpointProperties("timer://foo?fixedRate=true&delay=0&period=2s");
+ assertTrue(result.isSuccess());
+
+ // reference lookup
+ result = catalog.validateEndpointProperties("timer://foo?fixedRate=#fixed&delay=#myDelay");
+ assertTrue(result.isSuccess());
+
+ // optional consumer. prefix
+ result = catalog.validateEndpointProperties("file:inbox?consumer.delay=5000&consumer.greedy=true");
+ assertTrue(result.isSuccess());
+
+ // optional without consumer. prefix
+ result = catalog.validateEndpointProperties("file:inbox?delay=5000&greedy=true");
+ assertTrue(result.isSuccess());
+
+ // mixed optional without consumer. prefix
+ result = catalog.validateEndpointProperties("file:inbox?delay=5000&consumer.greedy=true");
+ assertTrue(result.isSuccess());
+
+ // prefix
+ result = catalog.validateEndpointProperties("file:inbox?delay=5000&scheduler.foo=123&scheduler.bar=456");
+ assertTrue(result.isSuccess());
+
+ // stub
+ result = catalog.validateEndpointProperties("stub:foo?me=123&you=456");
+ assertTrue(result.isSuccess());
+
+ // lenient on
+ result = catalog.validateEndpointProperties("dataformat:string:marshal?foo=bar");
+ assertTrue(result.isSuccess());
+
+ // lenient off
+ result = catalog.validateEndpointProperties("dataformat:string:marshal?foo=bar", true);
+ assertFalse(result.isSuccess());
+ assertTrue(result.getUnknown().contains("foo"));
+
+ // data format
+ result = catalog.validateEndpointProperties("dataformat:string:marshal?charset=utf-8", true);
+ assertTrue(result.isSuccess());
+
+ // incapable to parse
+ result = catalog.validateEndpointProperties("{{getFtpUrl}}?recursive=true");
+ assertFalse(result.isSuccess());
+ assertTrue(result.getIncapable() != null);
+ }
+
+ @Test
+ public void validatePropertiesSummary() throws Exception {
+ EndpointValidationResult result = catalog.validateEndpointProperties("yammer:MESSAGES?blah=yada&accessToken=aaa&consumerKey=&useJson=no&initialDelay=five&pollStrategy=myStrategy");
+ assertFalse(result.isSuccess());
+ String reason = result.summaryErrorMessage(true);
+ LOG.info(reason);
+
+ result = catalog.validateEndpointProperties("jms:unknown:myqueue");
+ assertFalse(result.isSuccess());
+ reason = result.summaryErrorMessage(false);
+ LOG.info(reason);
+ }
+
+ @Test
+ public void validateTimePattern() throws Exception {
+ assertTrue(catalog.validateTimePattern("0"));
+ assertTrue(catalog.validateTimePattern("500"));
+ assertTrue(catalog.validateTimePattern("10000"));
+ assertTrue(catalog.validateTimePattern("5s"));
+ assertTrue(catalog.validateTimePattern("5sec"));
+ assertTrue(catalog.validateTimePattern("5secs"));
+ assertTrue(catalog.validateTimePattern("3m"));
+ assertTrue(catalog.validateTimePattern("3min"));
+ assertTrue(catalog.validateTimePattern("3minutes"));
+ assertTrue(catalog.validateTimePattern("5m15s"));
+ assertTrue(catalog.validateTimePattern("1h"));
+ assertTrue(catalog.validateTimePattern("1hour"));
+ assertTrue(catalog.validateTimePattern("2hours"));
+
+ assertFalse(catalog.validateTimePattern("bla"));
+ assertFalse(catalog.validateTimePattern("2year"));
+ assertFalse(catalog.validateTimePattern("60darn"));
+ }
+
+ @Test
+ public void testEndpointComponentName() throws Exception {
+ String name = catalog.endpointComponentName("jms:queue:foo");
+ assertEquals("jms", name);
+ }
+
+ @Test
+ public void testSimpleExpression() throws Exception {
+ SimpleValidationResult result = catalog.validateSimpleExpression(null, "${body}");
+ assertTrue(result.isSuccess());
+ assertEquals("${body}", result.getSimple());
+
+ result = catalog.validateSimpleExpression(null, "${body");
+ assertFalse(result.isSuccess());
+ assertEquals("${body", result.getSimple());
+ LOG.info(result.getError());
+ assertTrue(result.getError().startsWith("expected symbol functionEnd but was eol at location 5"));
+ assertEquals("expected symbol functionEnd but was eol", result.getShortError());
+ assertEquals(5, result.getIndex());
+ }
+
+ @Test
+ public void testSimplePredicate() throws Exception {
+ SimpleValidationResult result = catalog.validateSimplePredicate(null, "${body} == 'abc'");
+ assertTrue(result.isSuccess());
+ assertEquals("${body} == 'abc'", result.getSimple());
+
+ result = catalog.validateSimplePredicate(null, "${body} > ${header.size");
+ assertFalse(result.isSuccess());
+ assertEquals("${body} > ${header.size", result.getSimple());
+ LOG.info(result.getError());
+ assertTrue(result.getError().startsWith("expected symbol functionEnd but was eol at location 22"));
+ assertEquals("expected symbol functionEnd but was eol", result.getShortError());
+ assertEquals(22, result.getIndex());
+ }
+
+ @Test
+ public void testSimplePredicatePlaceholder() throws Exception {
+ SimpleValidationResult result = catalog.validateSimplePredicate(null, "${body} contains '{{danger}}'");
+ assertTrue(result.isSuccess());
+ assertEquals("${body} contains '{{danger}}'", result.getSimple());
+
+ result = catalog.validateSimplePredicate(null, "${bdy} contains '{{danger}}'");
+ assertFalse(result.isSuccess());
+ assertEquals("${bdy} contains '{{danger}}'", result.getSimple());
+ LOG.info(result.getError());
+ assertTrue(result.getError().startsWith("Unknown function: bdy at location 0"));
+ assertTrue(result.getError().contains("'{{danger}}'"));
+ assertEquals("Unknown function: bdy", result.getShortError());
+ assertEquals(0, result.getIndex());
+ }
+
+ @Test
+ public void testValidateLanguage() throws Exception {
+ LanguageValidationResult result = catalog.validateLanguageExpression(null, "simple", "${body}");
+ assertTrue(result.isSuccess());
+ assertEquals("${body}", result.getText());
+
+ result = catalog.validateLanguageExpression(null, "header", "foo");
+ assertTrue(result.isSuccess());
+ assertEquals("foo", result.getText());
+
+ result = catalog.validateLanguagePredicate(null, "simple", "${body} > 10");
+ assertTrue(result.isSuccess());
+ assertEquals("${body} > 10", result.getText());
+
+ result = catalog.validateLanguagePredicate(null, "header", "bar");
+ assertTrue(result.isSuccess());
+ assertEquals("bar", result.getText());
+
+ result = catalog.validateLanguagePredicate(null, "foobar", "bar");
+ assertFalse(result.isSuccess());
+ assertEquals("Unknown language foobar", result.getError());
+ }
+
+ @Test
+ public void testValidateEndpointConsumerOnly() throws Exception {
+ String uri = "file:inbox?bufferSize=4096&readLock=changed&delete=true";
+ EndpointValidationResult result = catalog.validateEndpointProperties(uri, false, true, false);
+ assertTrue(result.isSuccess());
+
+ uri = "file:inbox?bufferSize=4096&readLock=changed&delete=true&fileExist=Append";
+ result = catalog.validateEndpointProperties(uri, false, true, false);
+ assertFalse(result.isSuccess());
+
+ assertEquals("fileExist", result.getNotConsumerOnly().iterator().next());
+ }
+
+ @Test
+ public void testValidateEndpointProducerOnly() throws Exception {
+ String uri = "file:outbox?bufferSize=4096&fileExist=Append";
+ EndpointValidationResult result = catalog.validateEndpointProperties(uri, false, false, true);
+ assertTrue(result.isSuccess());
+
+ uri = "file:outbox?bufferSize=4096&fileExist=Append&delete=true";
+ result = catalog.validateEndpointProperties(uri, false, false, true);
+ assertFalse(result.isSuccess());
+
+ assertEquals("delete", result.getNotProducerOnly().iterator().next());
+ }
+
+}