Return-Path: X-Original-To: apmail-camel-commits-archive@www.apache.org Delivered-To: apmail-camel-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 7F95BBA09 for ; Mon, 2 Jan 2012 16:00:43 +0000 (UTC) Received: (qmail 83550 invoked by uid 500); 2 Jan 2012 16:00:43 -0000 Delivered-To: apmail-camel-commits-archive@camel.apache.org Received: (qmail 83514 invoked by uid 500); 2 Jan 2012 16:00:43 -0000 Mailing-List: contact commits-help@camel.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@camel.apache.org Delivered-To: mailing list commits@camel.apache.org Received: (qmail 83502 invoked by uid 99); 2 Jan 2012 16:00:43 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 02 Jan 2012 16:00:43 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 02 Jan 2012 16:00:28 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id 757F12388A6C for ; Mon, 2 Jan 2012 16:00:05 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1226449 [4/5] - in /camel/trunk: ./ apache-camel/ apache-camel/src/main/descriptors/ components/ components/camel-mina2/ components/camel-mina2/src/ components/camel-mina2/src/main/ components/camel-mina2/src/main/java/ components/camel-mi... Date: Mon, 02 Jan 2012 16:00:01 -0000 To: commits@camel.apache.org From: davsclaus@apache.org X-Mailer: svnmailer-1.0.8-patched Message-Id: <20120102160005.757F12388A6C@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Added: camel/trunk/components/camel-mina2/src/test/java/org/apache/camel/component/mina2/Mina2TcpTextlineProtocolTest.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-mina2/src/test/java/org/apache/camel/component/mina2/Mina2TcpTextlineProtocolTest.java?rev=1226449&view=auto ============================================================================== --- camel/trunk/components/camel-mina2/src/test/java/org/apache/camel/component/mina2/Mina2TcpTextlineProtocolTest.java (added) +++ camel/trunk/components/camel-mina2/src/test/java/org/apache/camel/component/mina2/Mina2TcpTextlineProtocolTest.java Mon Jan 2 15:59:58 2012 @@ -0,0 +1,47 @@ +/** + * 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.component.mina2; + +import org.apache.camel.builder.RouteBuilder; +import org.apache.camel.component.mock.MockEndpoint; +import org.junit.Test; + +/** + * @version + */ +public class Mina2TcpTextlineProtocolTest extends BaseMina2Test { + + @Test + public void testMinaRoute() throws Exception { + MockEndpoint endpoint = getMockEndpoint("mock:result"); + Object body = "Hello there!"; + endpoint.expectedBodiesReceived(body); + + template.sendBodyAndHeader("mina2:tcp://localhost:{{port}}?textline=true&sync=false", body, "cheese", 123); + + assertMockEndpointsSatisfied(); + } + + protected RouteBuilder createRouteBuilder() { + return new RouteBuilder() { + + public void configure() { + from("mina2:tcp://localhost:{{port}}?textline=true&sync=false").to("log:before?showAll=true").to("mock:result").to("log:after?showAll=true"); + } + }; + } +} Propchange: camel/trunk/components/camel-mina2/src/test/java/org/apache/camel/component/mina2/Mina2TcpTextlineProtocolTest.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: camel/trunk/components/camel-mina2/src/test/java/org/apache/camel/component/mina2/Mina2TcpTextlineProtocolTest.java ------------------------------------------------------------------------------ svn:keywords = Rev Date Added: camel/trunk/components/camel-mina2/src/test/java/org/apache/camel/component/mina2/Mina2TcpWithInOutTest.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-mina2/src/test/java/org/apache/camel/component/mina2/Mina2TcpWithInOutTest.java?rev=1226449&view=auto ============================================================================== --- camel/trunk/components/camel-mina2/src/test/java/org/apache/camel/component/mina2/Mina2TcpWithInOutTest.java (added) +++ camel/trunk/components/camel-mina2/src/test/java/org/apache/camel/component/mina2/Mina2TcpWithInOutTest.java Mon Jan 2 15:59:58 2012 @@ -0,0 +1,135 @@ +/** + * 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.component.mina2; + +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; + +import org.apache.camel.Endpoint; +import org.apache.camel.Exchange; +import org.apache.camel.ExchangePattern; +import org.apache.camel.Message; +import org.apache.camel.Processor; +import org.apache.camel.Producer; +import org.apache.camel.builder.RouteBuilder; +import org.junit.Test; + +/** + * @version + */ +public class Mina2TcpWithInOutTest extends BaseMina2Test { + + private String uri; + private Exchange receivedExchange; + private CountDownLatch latch; + + @Test + public void testMinaRouteWithInOut() throws Exception { + latch = new CountDownLatch(1); + uri = "mina2:tcp://localhost:{{port}}?textline=true"; + + Mina2ReverserServer server = new Mina2ReverserServer(getPort()); + server.start(); + + context.addRoutes(new RouteBuilder() { + + @Override + public void configure() throws Exception { + from("direct:x").to(uri).process(new Processor() { + + public void process(Exchange e) { + receivedExchange = e; + latch.countDown(); + } + }); + } + }); + context.start(); + + // now lets fire in a message + Endpoint endpoint = context.getEndpoint("direct:x"); + Exchange exchange = endpoint.createExchange(ExchangePattern.InOut); + Message message = exchange.getIn(); + message.setBody("Hello!"); + message.setHeader("cheese", 123); + + Producer producer = endpoint.createProducer(); + producer.start(); + producer.process(exchange); + + // now lets sleep for a while + boolean received = latch.await(5, TimeUnit.SECONDS); + assertTrue("Did not receive the message!", received); + assertNotNull(receivedExchange.getIn()); + assertEquals("!olleH", receivedExchange.getIn().getBody()); + + producer.stop(); + context.stop(); + server.stop(); + } + + @Test + public void testMinaRouteWithInOutLazy() throws Exception { + latch = new CountDownLatch(1); + uri = "mina2:tcp://localhost:{{port}}?textline=true&lazySessionCreation=true"; + + // The server is activated after Camel to check if the lazyness is working + Mina2ReverserServer server = new Mina2ReverserServer(getPort()); + server.start(); + + context.addRoutes(new RouteBuilder() { + + @Override + public void configure() throws Exception { + from("direct:x").to(uri).process(new Processor() { + + public void process(Exchange e) { + receivedExchange = e; + latch.countDown(); + } + }); + } + }); + context.start(); + + // now lets fire in a message + Endpoint endpoint = context.getEndpoint("direct:x"); + Exchange exchange = endpoint.createExchange(ExchangePattern.InOut); + Message message = exchange.getIn(); + message.setBody("Hello!"); + message.setHeader("cheese", 123); + + Producer producer = endpoint.createProducer(); + producer.start(); + producer.process(exchange); + + // now lets sleep for a while + boolean received = latch.await(5, TimeUnit.SECONDS); + assertTrue("Did not receive the message!", received); + assertNotNull(receivedExchange.getIn()); + assertEquals("!olleH", receivedExchange.getIn().getBody()); + + producer.stop(); + context.stop(); + server.stop(); + } + + @Override + public boolean isUseRouteBuilder() { + return false; + } +} Propchange: camel/trunk/components/camel-mina2/src/test/java/org/apache/camel/component/mina2/Mina2TcpWithInOutTest.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: camel/trunk/components/camel-mina2/src/test/java/org/apache/camel/component/mina2/Mina2TcpWithInOutTest.java ------------------------------------------------------------------------------ svn:keywords = Rev Date Added: camel/trunk/components/camel-mina2/src/test/java/org/apache/camel/component/mina2/Mina2TcpWithInOutUsingPlainSocketTest.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-mina2/src/test/java/org/apache/camel/component/mina2/Mina2TcpWithInOutUsingPlainSocketTest.java?rev=1226449&view=auto ============================================================================== --- camel/trunk/components/camel-mina2/src/test/java/org/apache/camel/component/mina2/Mina2TcpWithInOutUsingPlainSocketTest.java (added) +++ camel/trunk/components/camel-mina2/src/test/java/org/apache/camel/component/mina2/Mina2TcpWithInOutUsingPlainSocketTest.java Mon Jan 2 15:59:58 2012 @@ -0,0 +1,146 @@ +/** + * 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.component.mina2; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.net.InetSocketAddress; +import java.net.Socket; + +import org.apache.camel.Exchange; +import org.apache.camel.Processor; +import org.apache.camel.builder.RouteBuilder; +import org.junit.Test; + +/** + * To test camel-mina component using a TCP client that communicates using TCP socket communication. + * + * @version + */ +public class Mina2TcpWithInOutUsingPlainSocketTest extends BaseMina2Test { + + @Test + public void testSendAndReceiveOnce() throws Exception { + String response = sendAndReceive("World"); + + assertNotNull("Nothing received from Mina", response); + assertEquals("Hello World", response); + } + + @Test + public void testSendAndReceiveTwice() throws Exception { + String london = sendAndReceive("London"); + String paris = sendAndReceive("Paris"); + + assertNotNull("Nothing received from Mina", london); + assertNotNull("Nothing received from Mina", paris); + assertEquals("Hello London", london); + assertEquals("Hello Paris", paris); + } + + @Test + public void testReceiveNoResponseSinceOutBodyIsNull() throws Exception { + String out = sendAndReceive("force-null-out-body"); + assertNull("no data should be recieved", out); + } + + @Test + public void testReceiveNoResponseSinceOutBodyIsNullTwice() throws Exception { + String out = sendAndReceive("force-null-out-body"); + assertNull("no data should be recieved", out); + + out = sendAndReceive("force-null-out-body"); + assertNull("no data should be recieved", out); + } + + @Test + public void testExchangeFailedOutShouldBeNull() throws Exception { + String out = sendAndReceive("force-exception"); + assertTrue("out should not be the same as in when the exchange has failed", !"force-exception".equals(out)); + assertEquals("should get the exception here", out, "java.lang.IllegalArgumentException: Forced exception"); + } + + private String sendAndReceive(String input) throws IOException { + byte buf[] = new byte[128]; + + Socket soc = new Socket(); + soc.connect(new InetSocketAddress("localhost", getPort())); + + // Send message using plain Socket to test if this works + OutputStream os = null; + InputStream is = null; + try { + os = soc.getOutputStream(); + // must append newline at the end to flag end of textline to Camel-Mina + os.write((input + "\n").getBytes()); + + is = soc.getInputStream(); + int len = is.read(buf); + if (len == -1) { + // no data received + return null; + } + } finally { + if (is != null) { + is.close(); + } + if (os != null) { + os.close(); + } + soc.close(); + } + + // convert the buffer to chars + StringBuilder sb = new StringBuilder(); + for (byte b : buf) { + char ch = (char) b; + if (ch == '\n' || ch == 0) { + // newline denotes end of text (added in the end in the processor below) + break; + } else { + sb.append(ch); + } + } + + return sb.toString(); + } + + protected RouteBuilder createRouteBuilder() { + return new RouteBuilder() { + + public void configure() { + from("mina2:tcp://localhost:{{port}}?textline=true&sync=true").process(new Processor() { + + public void process(Exchange e) { + String in = e.getIn().getBody(String.class); + if ("force-null-out-body".equals(in)) { + // forcing a null out body + e.getOut().setBody(null); + } else if ("force-exception".equals(in)) { + // clear out before throwing exception + e.getOut().setBody(null); + throw new IllegalArgumentException("Forced exception"); + } else { + e.getOut().setBody("Hello " + in); + } + } + }); + } + }; + } +} Propchange: camel/trunk/components/camel-mina2/src/test/java/org/apache/camel/component/mina2/Mina2TcpWithInOutUsingPlainSocketTest.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: camel/trunk/components/camel-mina2/src/test/java/org/apache/camel/component/mina2/Mina2TcpWithInOutUsingPlainSocketTest.java ------------------------------------------------------------------------------ svn:keywords = Rev Date Added: camel/trunk/components/camel-mina2/src/test/java/org/apache/camel/component/mina2/Mina2TcpWithIoOutProcessorExceptionTest.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-mina2/src/test/java/org/apache/camel/component/mina2/Mina2TcpWithIoOutProcessorExceptionTest.java?rev=1226449&view=auto ============================================================================== --- camel/trunk/components/camel-mina2/src/test/java/org/apache/camel/component/mina2/Mina2TcpWithIoOutProcessorExceptionTest.java (added) +++ camel/trunk/components/camel-mina2/src/test/java/org/apache/camel/component/mina2/Mina2TcpWithIoOutProcessorExceptionTest.java Mon Jan 2 15:59:58 2012 @@ -0,0 +1,56 @@ +/** + * 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.component.mina2; + +import org.apache.camel.Exchange; +import org.apache.camel.Processor; +import org.apache.camel.builder.RouteBuilder; +import org.junit.Test; + +/** + * To unit test CAMEL-364. + */ +public class Mina2TcpWithIoOutProcessorExceptionTest extends BaseMina2Test { + + @Test + public void testExceptionThrownInProcessor() { + String body = "Hello World"; + Object result = template.requestBody("mina2:tcp://localhost:{{port}}?textline=true&sync=true", body); + // The exception should be passed to the client + assertNotNull("the result should not be null", result); + assertEquals("result is IllegalArgumentException", result, "java.lang.IllegalArgumentException: Forced exception"); + } + + protected RouteBuilder createRouteBuilder() { + return new RouteBuilder() { + + public void configure() { + // use no delay for fast unit testing + errorHandler(defaultErrorHandler().maximumRedeliveries(2)); + + from("mina2:tcp://localhost:{{port}}?textline=true&sync=true").process(new Processor() { + + public void process(Exchange e) { + assertEquals("Hello World", e.getIn().getBody(String.class)); + // simulate a problem processing the input to see if we can handle it properly + throw new IllegalArgumentException("Forced exception"); + } + }); + } + }; + } +} Propchange: camel/trunk/components/camel-mina2/src/test/java/org/apache/camel/component/mina2/Mina2TcpWithIoOutProcessorExceptionTest.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: camel/trunk/components/camel-mina2/src/test/java/org/apache/camel/component/mina2/Mina2TcpWithIoOutProcessorExceptionTest.java ------------------------------------------------------------------------------ svn:keywords = Rev Date Added: camel/trunk/components/camel-mina2/src/test/java/org/apache/camel/component/mina2/Mina2TransferExchangeOptionTest.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-mina2/src/test/java/org/apache/camel/component/mina2/Mina2TransferExchangeOptionTest.java?rev=1226449&view=auto ============================================================================== --- camel/trunk/components/camel-mina2/src/test/java/org/apache/camel/component/mina2/Mina2TransferExchangeOptionTest.java (added) +++ camel/trunk/components/camel-mina2/src/test/java/org/apache/camel/component/mina2/Mina2TransferExchangeOptionTest.java Mon Jan 2 15:59:58 2012 @@ -0,0 +1,139 @@ +/** + * 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.component.mina2; + +import java.nio.charset.Charset; + +import junit.framework.Assert; +import org.apache.camel.Endpoint; +import org.apache.camel.Exchange; +import org.apache.camel.ExchangePattern; +import org.apache.camel.Message; +import org.apache.camel.Processor; +import org.apache.camel.Producer; +import org.apache.camel.builder.RouteBuilder; +import org.junit.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * Unit test for the transferExchange=true option. + * + * @version + */ +public class Mina2TransferExchangeOptionTest extends BaseMina2Test { + + private static final transient Logger LOG = LoggerFactory.getLogger(Mina2TransferExchangeOptionTest.class); + + @Test + public void testMinaTransferExchangeOptionWithoutException() throws Exception { + Exchange exchange = sendExchange(false); + assertExchange(exchange, false); + } + + @Test + public void testMinaTransferExchangeOptionWithException() throws Exception { + Exchange exchange = sendExchange(true); + assertExchange(exchange, true); + } + + private Exchange sendExchange(boolean setException) throws Exception { + Endpoint endpoint = context.getEndpoint("mina2:tcp://localhost:{{port}}?sync=true&encoding=UTF-8&transferExchange=true"); + Producer producer = endpoint.createProducer(); + Exchange exchange = producer.createExchange(); + //Exchange exchange = endpoint.createExchange(); + + Message message = exchange.getIn(); + message.setBody("Hello!"); + message.setHeader("cheese", "feta"); + exchange.setProperty("ham", "old"); + exchange.setProperty("setException", setException); + + producer.start(); + producer.process(exchange); + + return exchange; + } + + private void assertExchange(Exchange exchange, boolean hasFault) { + if (!hasFault) { + Message out = exchange.getOut(); + assertNotNull(out); + assertFalse(out.isFault()); + assertEquals("Goodbye!", out.getBody()); + assertEquals("cheddar", out.getHeader("cheese")); + } else { + Message fault = exchange.getOut(); + assertNotNull(fault); + assertTrue(fault.isFault()); + assertNotNull(fault.getBody()); + assertTrue("Should get the InterrupteException exception", fault.getBody() instanceof InterruptedException); + assertEquals("nihao", fault.getHeader("hello")); + } + + + // in should stay the same + Message in = exchange.getIn(); + assertNotNull(in); + assertEquals("Hello!", in.getBody()); + assertEquals("feta", in.getHeader("cheese")); + // however the shared properties have changed + assertEquals("fresh", exchange.getProperty("salami")); + assertNull(exchange.getProperty("Charset")); + } + + protected RouteBuilder createRouteBuilder() { + return new RouteBuilder() { + + public void configure() { + from("mina2:tcp://localhost:{{port}}?sync=true&encoding=UTF-8&transferExchange=true").process(new Processor() { + + public void process(Exchange e) throws InterruptedException { + LOG.debug("Enter Processor..."); + Assert.assertNotNull(e.getIn().getBody()); + LOG.debug("Enter Processor...1"); + Assert.assertNotNull(e.getIn().getHeaders()); + LOG.debug("Enter Processor...2"); + Assert.assertNotNull(e.getProperties()); + LOG.debug("Enter Processor...3"); + Assert.assertEquals("Hello!", e.getIn().getBody()); + LOG.debug("Enter Processor...4"); + Assert.assertEquals("feta", e.getIn().getHeader("cheese")); + LOG.debug("Enter Processor...5"); + Assert.assertEquals("old", e.getProperty("ham")); + LOG.debug("Enter Processor...6"); + Assert.assertEquals(ExchangePattern.InOut, e.getPattern()); + LOG.debug("Enter Processor...7"); + Boolean setException = (Boolean) e.getProperty("setException"); + + if (setException) { + e.getOut().setFault(true); + e.getOut().setBody(new InterruptedException()); + e.getOut().setHeader("hello", "nihao"); + } else { + e.getOut().setBody("Goodbye!"); + e.getOut().setHeader("cheese", "cheddar"); + } + e.setProperty("salami", "fresh"); + e.setProperty("Charset", Charset.defaultCharset()); + LOG.debug("Exit Processor..."); + } + }); + } + }; + } +} Propchange: camel/trunk/components/camel-mina2/src/test/java/org/apache/camel/component/mina2/Mina2TransferExchangeOptionTest.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: camel/trunk/components/camel-mina2/src/test/java/org/apache/camel/component/mina2/Mina2TransferExchangeOptionTest.java ------------------------------------------------------------------------------ svn:keywords = Rev Date Added: camel/trunk/components/camel-mina2/src/test/java/org/apache/camel/component/mina2/Mina2UdpNoCamelTest.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-mina2/src/test/java/org/apache/camel/component/mina2/Mina2UdpNoCamelTest.java?rev=1226449&view=auto ============================================================================== --- camel/trunk/components/camel-mina2/src/test/java/org/apache/camel/component/mina2/Mina2UdpNoCamelTest.java (added) +++ camel/trunk/components/camel-mina2/src/test/java/org/apache/camel/component/mina2/Mina2UdpNoCamelTest.java Mon Jan 2 15:59:58 2012 @@ -0,0 +1,191 @@ +/** + * 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.component.mina2; + +import java.io.IOException; +import java.net.DatagramPacket; +import java.net.DatagramSocket; +import java.net.InetAddress; +import java.net.InetSocketAddress; +import java.net.SocketException; +import java.net.UnknownHostException; +import java.nio.charset.Charset; +import java.util.logging.Level; + +import org.apache.mina.core.service.IoHandlerAdapter; +import org.apache.mina.core.session.IoSession; +import org.apache.mina.filter.codec.ProtocolCodecFilter; +import org.apache.mina.filter.codec.textline.LineDelimiter; +import org.apache.mina.filter.logging.LoggingFilter; +import org.apache.mina.transport.socket.DatagramSessionConfig; +import org.apache.mina.transport.socket.nio.NioDatagramAcceptor; +import org.apache.mina.transport.socket.nio.NioDatagramConnector; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import static org.junit.Assert.*; + +/** + * + * @author chadbeaulac + */ +public class Mina2UdpNoCamelTest { + + private static Logger logger = LoggerFactory.getLogger(Mina2UdpNoCamelTest.class); + Charset charset = Charset.defaultCharset(); + LineDelimiter delimiter = LineDelimiter.DEFAULT; + Mina2TextLineCodecFactory codecFactory = new Mina2TextLineCodecFactory(charset, delimiter); + UDPServer server; + + // Create the UDPServer before the test is run + @Before + public void setupUDPAcceptor() throws IOException { + server = new UDPServer("127.0.0.1", 1234); + server.listen(); + } + + @After + public void closeUDPAcceptor() throws IOException { + server.close(); + } + + @Test + public void testMinaUDPWithNoCamel() throws InterruptedException { + UDPClient client = new UDPClient(); + client.connect("127.0.0.1", 1234); + for (int i = 0; i < 222; i++) { + client.sendNoMina("Hello Mina " + i + "\n"); + } + Thread.sleep(2000); + assertEquals(222, server.numMessagesReceived); + } + + /* + * Mina UDP Server + */ + private final class UDPServer extends IoHandlerAdapter { + + private final String host; + private final int port; + private final NioDatagramAcceptor acceptor; + private int numMessagesReceived; + + private UDPServer(String host, int port) { + this.host = host; + this.port = port; + acceptor = new NioDatagramAcceptor(); + DatagramSessionConfig sessionConfig = acceptor.getSessionConfig(); + sessionConfig.setReuseAddress(true); + acceptor.getFilterChain().addLast("codec", new ProtocolCodecFilter(codecFactory)); + acceptor.getFilterChain().addLast("logger", new LoggingFilter()); + acceptor.setHandler(this); + + } + + public void listen() throws IOException { + acceptor.bind(new InetSocketAddress(host, port)); + + } + + public void close() { + acceptor.unbind(); + } + + @Override + public void messageReceived(IoSession session, Object message) throws Exception { + logger.debug("UDPServer Received body: {}", message); + numMessagesReceived++; + } + + @Override + public void exceptionCaught(IoSession session, Throwable cause) throws Exception { + logger.error("Ooops! Something went wrong :|", cause); + } + } + + private final class UDPClient extends IoHandlerAdapter { + + /** + * Three optional arguments can be provided (defaults in brackets): + * path, host (localhost) and port (1234). + * + * @param args The command line args. + */ + private final NioDatagramConnector connector; + private IoSession session; + private DatagramSocket socket; + private InetAddress address; + private int localPort = 1234; + private String localHost = "127.0.0.1"; + + private UDPClient() { + connector = new NioDatagramConnector(); + connector.getFilterChain().addLast("codec", new ProtocolCodecFilter(codecFactory)); + //connector.getFilterChain().addLast("logger", new LoggingFilter()); + connector.setHandler(this); + + } + + public void connect(String host, int port) { + localPort = port; + localHost = host; + session = connector.connect(new InetSocketAddress(localHost, localPort)).awaitUninterruptibly(). + getSession(); + try { + socket = new DatagramSocket(); + address = InetAddress.getByName(localHost); + + } catch (UnknownHostException ex) { + java.util.logging.Logger.getLogger(Mina2UdpNoCamelTest.class.getName()).log( + Level.SEVERE, null, ex); + } catch (SocketException ex) { + java.util.logging.Logger.getLogger(Mina2UdpNoCamelTest.class.getName()).log( + Level.SEVERE, null, ex); + } + + } + + public void send(String msg) { + session.write(msg); + } + + public void sendNoMina(String msg) { + try { + DatagramPacket packet = new DatagramPacket(msg.getBytes(), msg.getBytes().length, + address, localPort); + socket.send(packet); + } catch (IOException ex) { + java.util.logging.Logger.getLogger(Mina2UdpNoCamelTest.class.getName()).log( + Level.SEVERE, null, ex); + } + } + + @Override + public void messageReceived(IoSession session, Object message) throws Exception { + logger.debug("Client Received body: {}", message); + } + + @Override + public void exceptionCaught(IoSession session, Throwable cause) throws Exception { + logger.error("Ooops! Something went wrong :|", cause); + } + } +} Propchange: camel/trunk/components/camel-mina2/src/test/java/org/apache/camel/component/mina2/Mina2UdpNoCamelTest.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: camel/trunk/components/camel-mina2/src/test/java/org/apache/camel/component/mina2/Mina2UdpNoCamelTest.java ------------------------------------------------------------------------------ svn:keywords = Rev Date Added: camel/trunk/components/camel-mina2/src/test/java/org/apache/camel/component/mina2/Mina2UdpTest.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-mina2/src/test/java/org/apache/camel/component/mina2/Mina2UdpTest.java?rev=1226449&view=auto ============================================================================== --- camel/trunk/components/camel-mina2/src/test/java/org/apache/camel/component/mina2/Mina2UdpTest.java (added) +++ camel/trunk/components/camel-mina2/src/test/java/org/apache/camel/component/mina2/Mina2UdpTest.java Mon Jan 2 15:59:58 2012 @@ -0,0 +1,81 @@ +/** + * 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.component.mina2; + +import java.net.DatagramPacket; +import java.net.DatagramSocket; +import java.net.InetAddress; + +import org.apache.camel.builder.RouteBuilder; +import org.apache.camel.component.mock.MockEndpoint; +import org.junit.Test; + +/** + * @version + */ +public class Mina2UdpTest extends BaseMina2Test { + + protected int messageCount = 3; + + public Mina2UdpTest() { + } + + @Test + public void testMinaRoute() throws Exception { + MockEndpoint endpoint = getMockEndpoint("mock:result"); + endpoint.expectedBodiesReceived("Hello Message: 0", "Hello Message: 1", "Hello Message: 2"); + + sendUdpMessages(); + + assertMockEndpointsSatisfied(); + } + + protected void sendUdpMessages() throws Exception { + DatagramSocket socket = new DatagramSocket(); + try { + InetAddress address = InetAddress.getByName("127.0.0.1"); + for (int i = 0; i < messageCount; i++) { + String text = "Hello Message: " + Integer.toString(i); + byte[] data = text.getBytes(); + + //DatagramPacket packet = new DatagramPacket(data, data.length, address, getPort()); + DatagramPacket packet = new DatagramPacket(data, data.length, address, 10111); + socket.send(packet); + } + Thread.sleep(2000); + } finally { + socket.close(); + } + } + + protected RouteBuilder createRouteBuilder() { + return new RouteBuilder() { + + public void configure() { + int port2 = getNextPort(); + + //from("mina2:udp://127.0.0.1:" + getPort() + "?sync=false").to("mina2:udp://127.0.0.1:" + port2 + "?sync=false"); + //from("mina2:udp://127.0.0.1:" + port2 + "?sync=false").to("mock:result"); + + //from("mina2:udp://127.0.0.1:10111?sync=false").to("mina2:udp://127.0.0.1:10112?sync=false"); + //from("mina2:udp://127.0.0.1:10112?sync=false").to("mock:result"); + from("mina2:udp://127.0.0.1:10111?sync=false&minaLogger=true").to("mock:result"); + //from("mina2:udp://127.0.0.1:10111").to("mock:result"); + } + }; + } +} Propchange: camel/trunk/components/camel-mina2/src/test/java/org/apache/camel/component/mina2/Mina2UdpTest.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: camel/trunk/components/camel-mina2/src/test/java/org/apache/camel/component/mina2/Mina2UdpTest.java ------------------------------------------------------------------------------ svn:keywords = Rev Date Added: camel/trunk/components/camel-mina2/src/test/java/org/apache/camel/component/mina2/Mina2UdpUsingTemplateTest.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-mina2/src/test/java/org/apache/camel/component/mina2/Mina2UdpUsingTemplateTest.java?rev=1226449&view=auto ============================================================================== --- camel/trunk/components/camel-mina2/src/test/java/org/apache/camel/component/mina2/Mina2UdpUsingTemplateTest.java (added) +++ camel/trunk/components/camel-mina2/src/test/java/org/apache/camel/component/mina2/Mina2UdpUsingTemplateTest.java Mon Jan 2 15:59:58 2012 @@ -0,0 +1,80 @@ +/** + * 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.component.mina2; + +import java.util.List; + +import org.apache.camel.Exchange; +import org.apache.camel.builder.RouteBuilder; +import org.apache.camel.component.mock.MockEndpoint; +import org.junit.Test; + +/** + * @version + */ +public class Mina2UdpUsingTemplateTest extends BaseMina2Test { + + private int messageCount = 3; + + @Test + public void testMinaRoute() throws Exception { + MockEndpoint endpoint = getMockEndpoint("mock:result"); + endpoint.expectedMessageCount(3); + endpoint.expectedBodiesReceived("Hello Message: 0", "Hello Message: 1", "Hello Message: 2"); + + sendUdpMessages(); + // sleeping for while to let the mock endpoint get all the message + Thread.sleep(2000); + + assertMockEndpointsSatisfied(); + } + + protected void sendUdpMessages() throws Exception { + for (int i = 0; i < messageCount; i++) { + template.sendBody("mina2:udp://127.0.0.1:{{port}}?sync=false", "Hello Message: " + i); + } + } + + @Test + public void testSendingByteMessages() throws Exception { + MockEndpoint endpoint = getMockEndpoint("mock:result"); + endpoint.expectedMessageCount(1); + + byte[] in = "Hello from bytes".getBytes(); + template.sendBody("mina2:udp://127.0.0.1:{{port}}?sync=false", in); + + // sleeping for while to let the mock endpoint get all the message + Thread.sleep(2000); + + assertMockEndpointsSatisfied(); + List list = endpoint.getReceivedExchanges(); + byte[] out = list.get(0).getIn().getBody(byte[].class); + + for (int i = 0; i < in.length; i++) { + assertEquals("Thew bytes should be the same", in[i], out[i]); + } + } + + protected RouteBuilder createRouteBuilder() { + return new RouteBuilder() { + + public void configure() { + from("mina2:udp://127.0.0.1:{{port}}?sync=false&minaLogger=true").to("mock:result"); + } + }; + } +} Propchange: camel/trunk/components/camel-mina2/src/test/java/org/apache/camel/component/mina2/Mina2UdpUsingTemplateTest.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: camel/trunk/components/camel-mina2/src/test/java/org/apache/camel/component/mina2/Mina2UdpUsingTemplateTest.java ------------------------------------------------------------------------------ svn:keywords = Rev Date Added: camel/trunk/components/camel-mina2/src/test/java/org/apache/camel/component/mina2/Mina2UdpWithInOutUsingPlainSocketTest.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-mina2/src/test/java/org/apache/camel/component/mina2/Mina2UdpWithInOutUsingPlainSocketTest.java?rev=1226449&view=auto ============================================================================== --- camel/trunk/components/camel-mina2/src/test/java/org/apache/camel/component/mina2/Mina2UdpWithInOutUsingPlainSocketTest.java (added) +++ camel/trunk/components/camel-mina2/src/test/java/org/apache/camel/component/mina2/Mina2UdpWithInOutUsingPlainSocketTest.java Mon Jan 2 15:59:58 2012 @@ -0,0 +1,80 @@ +/** + * 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.component.mina2; + +import java.net.DatagramPacket; +import java.net.DatagramSocket; +import java.net.InetAddress; + +import org.apache.camel.Exchange; +import org.apache.camel.Processor; +import org.apache.camel.builder.RouteBuilder; +import org.junit.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * To test InOut exchange for the UDP protocol. + */ +public class Mina2UdpWithInOutUsingPlainSocketTest extends BaseMina2Test { + + private static final transient Logger LOG = LoggerFactory.getLogger(Mina2UdpWithInOutUsingPlainSocketTest.class); + + @Test + public void testSendAndReceiveOnce() throws Exception { + String out = sendAndReceiveUdpMessages("World"); + assertNotNull("should receive data", out); + assertEquals("Hello World", out); + } + + private String sendAndReceiveUdpMessages(String input) throws Exception { + DatagramSocket socket = new DatagramSocket(); + InetAddress address = InetAddress.getByName("127.0.0.1"); + + byte[] data = input.getBytes(); + + DatagramPacket packet = new DatagramPacket(data, data.length, address, getPort()); + LOG.debug("+++ Sending data +++"); + socket.send(packet); + + Thread.sleep(1000); + + byte[] buf = new byte[128]; + DatagramPacket receive = new DatagramPacket(buf, buf.length, address, getPort()); + LOG.debug("+++ Receiveing data +++"); + socket.receive(receive); + + socket.close(); + + return new String(receive.getData(), 0, receive.getLength()); + } + + protected RouteBuilder createRouteBuilder() { + return new RouteBuilder() { + + public void configure() { + from("mina2:udp://127.0.0.1:{{port}}?sync=true").process(new Processor() { + + public void process(Exchange exchange) throws Exception { + String s = exchange.getIn().getBody(String.class); + exchange.getOut().setBody("Hello " + s); + } + }); + } + }; + } +} Propchange: camel/trunk/components/camel-mina2/src/test/java/org/apache/camel/component/mina2/Mina2UdpWithInOutUsingPlainSocketTest.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: camel/trunk/components/camel-mina2/src/test/java/org/apache/camel/component/mina2/Mina2UdpWithInOutUsingPlainSocketTest.java ------------------------------------------------------------------------------ svn:keywords = Rev Date Added: camel/trunk/components/camel-mina2/src/test/java/org/apache/camel/component/mina2/Mina2VMCustomCodecTest.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-mina2/src/test/java/org/apache/camel/component/mina2/Mina2VMCustomCodecTest.java?rev=1226449&view=auto ============================================================================== --- camel/trunk/components/camel-mina2/src/test/java/org/apache/camel/component/mina2/Mina2VMCustomCodecTest.java (added) +++ camel/trunk/components/camel-mina2/src/test/java/org/apache/camel/component/mina2/Mina2VMCustomCodecTest.java Mon Jan 2 15:59:58 2012 @@ -0,0 +1,136 @@ +/** + * 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.component.mina2; + +import org.apache.camel.ResolveEndpointFailedException; +import org.apache.camel.builder.RouteBuilder; +import org.apache.camel.component.mock.MockEndpoint; +import org.apache.camel.impl.JndiRegistry; +import org.apache.mina.core.buffer.IoBuffer; +import org.apache.mina.core.session.IoSession; +import org.apache.mina.filter.codec.CumulativeProtocolDecoder; +import org.apache.mina.filter.codec.ProtocolCodecFactory; +import org.apache.mina.filter.codec.ProtocolDecoder; +import org.apache.mina.filter.codec.ProtocolDecoderOutput; +import org.apache.mina.filter.codec.ProtocolEncoder; +import org.apache.mina.filter.codec.ProtocolEncoderOutput; +import org.junit.Test; + +/** + * Unit test with custom codec using the VM protocol. + */ +public class Mina2VMCustomCodecTest extends BaseMina2Test { + + @Test + public void testMyCodec() throws Exception { + MockEndpoint mock = getMockEndpoint("mock:result"); + mock.expectedMessageCount(1); + mock.expectedBodiesReceived("Bye World"); + + Object out = template.requestBody("mina2:vm://localhost:{{port}}?sync=true&codec=#myCodec", "Hello World"); + assertEquals("Bye World", out); + + mock.assertIsSatisfied(); + } + + @Test + public void testTCPEncodeUTF8InputIsString() throws Exception { + final String myUri = "mina2:vm://localhost:" + getNextPort() + "?encoding=UTF-8&sync=false"; + context.addRoutes(new RouteBuilder() { + + public void configure() { + from(myUri).to("mock:result"); + } + }); + + MockEndpoint endpoint = getMockEndpoint("mock:result"); + + // include a UTF-8 char in the text \u0E08 is a Thai elephant + String body = "Hello Thai Elephant \u0E08"; + + endpoint.expectedMessageCount(1); + endpoint.expectedBodiesReceived(body); + + template.sendBody(myUri, body); + assertMockEndpointsSatisfied(); + } + + @Test + public void testBadConfiguration() throws Exception { + try { + template.sendBody("mina2:vm://localhost:{{port}}?sync=true&codec=#XXX", "Hello World"); + fail("Should have thrown a ResolveEndpointFailedException"); + } catch (ResolveEndpointFailedException e) { + // ok + } + } + + protected JndiRegistry createRegistry() throws Exception { + JndiRegistry jndi = super.createRegistry(); + jndi.bind("myCodec", new MyCodec()); + return jndi; + } + + protected RouteBuilder createRouteBuilder() throws Exception { + return new RouteBuilder() { + + public void configure() throws Exception { + from("mina2:vm://localhost:{{port}}?sync=true&codec=#myCodec").transform(constant("Bye World")).to("mock:result"); + } + }; + } + + private static class MyCodec implements ProtocolCodecFactory { + + @Override + public ProtocolEncoder getEncoder(IoSession is) throws Exception { + return new ProtocolEncoder() { + + public void encode(IoSession ioSession, Object message, ProtocolEncoderOutput out) + throws Exception { + IoBuffer bb = IoBuffer.allocate(32).setAutoExpand(true); + String s = (String) message; + bb.put(s.getBytes("US-ASCII")); + bb.flip(); + out.write(bb); + } + + public void dispose(IoSession ioSession) throws Exception { + // do nothing + } + }; + + } + + @Override + public ProtocolDecoder getDecoder(IoSession is) throws Exception { + return new CumulativeProtocolDecoder() { + + protected boolean doDecode(IoSession session, IoBuffer in, ProtocolDecoderOutput out) throws Exception { + if (in.remaining() > 0) { + byte[] buf = new byte[in.remaining()]; + in.get(buf); + out.write(new String(buf, "US-ASCII")); + return true; + } else { + return false; + } + } + }; + } + } +} \ No newline at end of file Propchange: camel/trunk/components/camel-mina2/src/test/java/org/apache/camel/component/mina2/Mina2VMCustomCodecTest.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: camel/trunk/components/camel-mina2/src/test/java/org/apache/camel/component/mina2/Mina2VMCustomCodecTest.java ------------------------------------------------------------------------------ svn:keywords = Rev Date Added: camel/trunk/components/camel-mina2/src/test/java/org/apache/camel/component/mina2/Mina2VMFileTcpTest.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-mina2/src/test/java/org/apache/camel/component/mina2/Mina2VMFileTcpTest.java?rev=1226449&view=auto ============================================================================== --- camel/trunk/components/camel-mina2/src/test/java/org/apache/camel/component/mina2/Mina2VMFileTcpTest.java (added) +++ camel/trunk/components/camel-mina2/src/test/java/org/apache/camel/component/mina2/Mina2VMFileTcpTest.java Mon Jan 2 15:59:58 2012 @@ -0,0 +1,49 @@ +/** + * 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.component.mina2; + +import org.apache.camel.builder.RouteBuilder; +import org.apache.camel.component.mock.MockEndpoint; +import org.junit.Test; + +/** + * @version + */ +public class Mina2VMFileTcpTest extends BaseMina2Test { + + @Test + public void testMinaRoute() throws Exception { + MockEndpoint endpoint = getMockEndpoint("mock:results"); + endpoint.expectedMessageCount(1); + endpoint.message(0).body().startsWith("Hello World"); + + assertMockEndpointsSatisfied(); + } + + protected RouteBuilder createRouteBuilder() { + return new RouteBuilder() { + + public void configure() { + // lets setup a server + from("mina2:vm://localhost:{{port}}?sync=false&textline=true").to("mock:results"); + + from("file:src/test/data?noop=true&fileName=message1.txt"). + to("mina2:vm://localhost:{{port}}?sync=false&textline=true"); + } + }; + } +} \ No newline at end of file Propchange: camel/trunk/components/camel-mina2/src/test/java/org/apache/camel/component/mina2/Mina2VMFileTcpTest.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: camel/trunk/components/camel-mina2/src/test/java/org/apache/camel/component/mina2/Mina2VMFileTcpTest.java ------------------------------------------------------------------------------ svn:keywords = Rev Date Added: camel/trunk/components/camel-mina2/src/test/java/org/apache/camel/component/mina2/Mina2VMTextlineProtocolTest.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-mina2/src/test/java/org/apache/camel/component/mina2/Mina2VMTextlineProtocolTest.java?rev=1226449&view=auto ============================================================================== --- camel/trunk/components/camel-mina2/src/test/java/org/apache/camel/component/mina2/Mina2VMTextlineProtocolTest.java (added) +++ camel/trunk/components/camel-mina2/src/test/java/org/apache/camel/component/mina2/Mina2VMTextlineProtocolTest.java Mon Jan 2 15:59:58 2012 @@ -0,0 +1,47 @@ +/** + * 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.component.mina2; + +import org.apache.camel.builder.RouteBuilder; +import org.apache.camel.component.mock.MockEndpoint; +import org.junit.Test; + +/** + * @version + */ +public class Mina2VMTextlineProtocolTest extends BaseMina2Test { + + @Test + public void testMinaRoute() throws Exception { + MockEndpoint endpoint = getMockEndpoint("mock:result"); + Object body = "Hello there!"; + endpoint.expectedBodiesReceived(body); + + template.sendBodyAndHeader("mina2:vm://localhost:{{port}}?textline=true&sync=false", body, "cheese", 123); + + assertMockEndpointsSatisfied(); + } + + protected RouteBuilder createRouteBuilder() { + return new RouteBuilder() { + + public void configure() { + from("mina2:vm://localhost:{{port}}?textline=true&sync=false").to("log:before?showAll=true").to("mock:result").to("log:after?showAll=true"); + } + }; + } +} \ No newline at end of file Propchange: camel/trunk/components/camel-mina2/src/test/java/org/apache/camel/component/mina2/Mina2VMTextlineProtocolTest.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: camel/trunk/components/camel-mina2/src/test/java/org/apache/camel/component/mina2/Mina2VMTextlineProtocolTest.java ------------------------------------------------------------------------------ svn:keywords = Rev Date Added: camel/trunk/components/camel-mina2/src/test/java/org/apache/camel/component/mina2/Mina2VMTransferExchangeOptionTest.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-mina2/src/test/java/org/apache/camel/component/mina2/Mina2VMTransferExchangeOptionTest.java?rev=1226449&view=auto ============================================================================== --- camel/trunk/components/camel-mina2/src/test/java/org/apache/camel/component/mina2/Mina2VMTransferExchangeOptionTest.java (added) +++ camel/trunk/components/camel-mina2/src/test/java/org/apache/camel/component/mina2/Mina2VMTransferExchangeOptionTest.java Mon Jan 2 15:59:58 2012 @@ -0,0 +1,125 @@ +/** + * 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.component.mina2; + +import java.nio.charset.Charset; + +import junit.framework.Assert; +import org.apache.camel.Endpoint; +import org.apache.camel.Exchange; +import org.apache.camel.ExchangePattern; +import org.apache.camel.Message; +import org.apache.camel.Processor; +import org.apache.camel.Producer; +import org.apache.camel.builder.RouteBuilder; +import org.junit.Test; + +/** + * Unit test for the transferExchange=true option. + * + * @version + */ +public class Mina2VMTransferExchangeOptionTest extends BaseMina2Test { + + @Test + public void testMinaTransferExchangeOptionWithoutException() throws Exception { + Exchange exchange = sendExchange(false); + assertExchange(exchange, false); + } + + @Test + public void testMinaTransferExchangeOptionWithException() throws Exception { + Exchange exchange = sendExchange(true); + assertExchange(exchange, true); + } + + private Exchange sendExchange(boolean setException) throws Exception { + Endpoint endpoint = context.getEndpoint("mina2:vm://localhost:{{port}}?sync=true&encoding=UTF-8&transferExchange=true"); + Exchange exchange = endpoint.createExchange(); + + Message message = exchange.getIn(); + message.setBody("Hello!"); + message.setHeader("cheese", "feta"); + exchange.setProperty("ham", "old"); + exchange.setProperty("setException", setException); + + Producer producer = endpoint.createProducer(); + producer.start(); + producer.process(exchange); + + return exchange; + } + + private void assertExchange(Exchange exchange, boolean hasFault) { + if (!hasFault) { + Message out = exchange.getOut(); + assertNotNull(out); + assertFalse(out.isFault()); + assertEquals("Goodbye!", out.getBody()); + assertEquals("cheddar", out.getHeader("cheese")); + } else { + Message fault = exchange.getOut(); + assertNotNull(fault); + assertTrue(fault.isFault()); + assertNotNull(fault.getBody()); + assertTrue("Should get the InterrupteException exception", fault.getBody() instanceof InterruptedException); + assertEquals("nihao", fault.getHeader("hello")); + } + + + // in should stay the same + Message in = exchange.getIn(); + assertNotNull(in); + assertEquals("Hello!", in.getBody()); + assertEquals("feta", in.getHeader("cheese")); + // however the shared properties have changed + assertEquals("fresh", exchange.getProperty("salami")); + assertNull(exchange.getProperty("Charset")); + } + + protected RouteBuilder createRouteBuilder() { + return new RouteBuilder() { + + public void configure() { + from("mina2:vm://localhost:{{port}}?sync=true&encoding=UTF-8&transferExchange=true").process(new Processor() { + + public void process(Exchange e) throws InterruptedException { + Assert.assertNotNull(e.getIn().getBody()); + Assert.assertNotNull(e.getIn().getHeaders()); + Assert.assertNotNull(e.getProperties()); + Assert.assertEquals("Hello!", e.getIn().getBody()); + Assert.assertEquals("feta", e.getIn().getHeader("cheese")); + Assert.assertEquals("old", e.getProperty("ham")); + Assert.assertEquals(ExchangePattern.InOut, e.getPattern()); + Boolean setException = (Boolean) e.getProperty("setException"); + + if (setException) { + e.getOut().setFault(true); + e.getOut().setBody(new InterruptedException()); + e.getOut().setHeader("hello", "nihao"); + } else { + e.getOut().setBody("Goodbye!"); + e.getOut().setHeader("cheese", "cheddar"); + } + e.setProperty("salami", "fresh"); + e.setProperty("Charset", Charset.defaultCharset()); + } + }); + } + }; + } +} \ No newline at end of file Propchange: camel/trunk/components/camel-mina2/src/test/java/org/apache/camel/component/mina2/Mina2VMTransferExchangeOptionTest.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: camel/trunk/components/camel-mina2/src/test/java/org/apache/camel/component/mina2/Mina2VMTransferExchangeOptionTest.java ------------------------------------------------------------------------------ svn:keywords = Rev Date Added: camel/trunk/components/camel-mina2/src/test/java/org/apache/camel/component/mina2/Mina2VmTest.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-mina2/src/test/java/org/apache/camel/component/mina2/Mina2VmTest.java?rev=1226449&view=auto ============================================================================== --- camel/trunk/components/camel-mina2/src/test/java/org/apache/camel/component/mina2/Mina2VmTest.java (added) +++ camel/trunk/components/camel-mina2/src/test/java/org/apache/camel/component/mina2/Mina2VmTest.java Mon Jan 2 15:59:58 2012 @@ -0,0 +1,47 @@ +/** + * 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.component.mina2; + +import org.apache.camel.builder.RouteBuilder; +import org.apache.camel.component.mock.MockEndpoint; +import org.junit.Test; + +/** + * @version + */ +public class Mina2VmTest extends BaseMina2Test { + + @Test + public void testMinaRoute() throws Exception { + MockEndpoint endpoint = getMockEndpoint("mock:result"); + Object body = "Hello there!"; + endpoint.expectedBodiesReceived(body); + + template.sendBodyAndHeader("mina2:vm://localhost:{{port}}?sync=false&minaLogger=true", body, "cheese", 123); + + assertMockEndpointsSatisfied(); + } + + protected RouteBuilder createRouteBuilder() { + return new RouteBuilder() { + + public void configure() { + from("mina2:vm://localhost:{{port}}?sync=false&minaLogger=true").to("log:before?showAll=true").to("mock:result").to("log:after?showAll=true"); + } + }; + } +} Propchange: camel/trunk/components/camel-mina2/src/test/java/org/apache/camel/component/mina2/Mina2VmTest.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: camel/trunk/components/camel-mina2/src/test/java/org/apache/camel/component/mina2/Mina2VmTest.java ------------------------------------------------------------------------------ svn:keywords = Rev Date Added: camel/trunk/components/camel-mina2/src/test/resources/jndi-example.properties URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-mina2/src/test/resources/jndi-example.properties?rev=1226449&view=auto ============================================================================== --- camel/trunk/components/camel-mina2/src/test/resources/jndi-example.properties (added) +++ camel/trunk/components/camel-mina2/src/test/resources/jndi-example.properties Mon Jan 2 15:59:58 2012 @@ -0,0 +1,22 @@ +## --------------------------------------------------------------------------- +## 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. +## --------------------------------------------------------------------------- + +# START SNIPPET: jndi + +java.naming.factory.initial = org.apache.camel.util.jndi.CamelInitialContextFactory + +# END SNIPPET: jndi Propchange: camel/trunk/components/camel-mina2/src/test/resources/jndi-example.properties ------------------------------------------------------------------------------ svn:eol-style = native Propchange: camel/trunk/components/camel-mina2/src/test/resources/jndi-example.properties ------------------------------------------------------------------------------ svn:keywords = Rev Date Propchange: camel/trunk/components/camel-mina2/src/test/resources/jndi-example.properties ------------------------------------------------------------------------------ svn:mime-type = text/plain Added: camel/trunk/components/camel-mina2/src/test/resources/log4j.properties URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-mina2/src/test/resources/log4j.properties?rev=1226449&view=auto ============================================================================== --- camel/trunk/components/camel-mina2/src/test/resources/log4j.properties (added) +++ camel/trunk/components/camel-mina2/src/test/resources/log4j.properties Mon Jan 2 15:59:58 2012 @@ -0,0 +1,36 @@ +## --------------------------------------------------------------------------- +## 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. +## --------------------------------------------------------------------------- + +# +# The logging properties used during tests.. +# +log4j.rootLogger=INFO, file + +# uncomment the following line to turn on Camel debugging +#log4j.logger.org.apache.camel=DEBUG +#log4j.logger.org.apache.camel.component.mina2=DEBUG + +# CONSOLE appender not used by default +log4j.appender.out=org.apache.log4j.ConsoleAppender +log4j.appender.out.layout=org.apache.log4j.PatternLayout +log4j.appender.out.layout.ConversionPattern=%d [%-15.15t] %-5p %-30.30c{1} - %m%n + +# File appender +log4j.appender.file=org.apache.log4j.FileAppender +log4j.appender.file.layout=org.apache.log4j.PatternLayout +log4j.appender.file.layout.ConversionPattern=%d [%-15.15t] %-5p %-30.30c{1} - %m%n +log4j.appender.file.file=target/camel-ftp-test.log \ No newline at end of file Propchange: camel/trunk/components/camel-mina2/src/test/resources/log4j.properties ------------------------------------------------------------------------------ svn:eol-style = native Propchange: camel/trunk/components/camel-mina2/src/test/resources/log4j.properties ------------------------------------------------------------------------------ svn:keywords = Rev Date Propchange: camel/trunk/components/camel-mina2/src/test/resources/log4j.properties ------------------------------------------------------------------------------ svn:mime-type = text/plain Added: camel/trunk/components/camel-mina2/src/test/resources/org/apache/camel/component/mina2/SpringMinaEndpointTest-context.xml URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-mina2/src/test/resources/org/apache/camel/component/mina2/SpringMinaEndpointTest-context.xml?rev=1226449&view=auto ============================================================================== --- camel/trunk/components/camel-mina2/src/test/resources/org/apache/camel/component/mina2/SpringMinaEndpointTest-context.xml (added) +++ camel/trunk/components/camel-mina2/src/test/resources/org/apache/camel/component/mina2/SpringMinaEndpointTest-context.xml Mon Jan 2 15:59:58 2012 @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Propchange: camel/trunk/components/camel-mina2/src/test/resources/org/apache/camel/component/mina2/SpringMinaEndpointTest-context.xml ------------------------------------------------------------------------------ svn:eol-style = native Propchange: camel/trunk/components/camel-mina2/src/test/resources/org/apache/camel/component/mina2/SpringMinaEndpointTest-context.xml ------------------------------------------------------------------------------ svn:keywords = Rev Date Propchange: camel/trunk/components/camel-mina2/src/test/resources/org/apache/camel/component/mina2/SpringMinaEndpointTest-context.xml ------------------------------------------------------------------------------ svn:mime-type = text/xml Added: camel/trunk/components/camel-mina2/src/test/resources/org/apache/camel/component/mina2/SpringMinaEndpointUDPTest-context.xml URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-mina2/src/test/resources/org/apache/camel/component/mina2/SpringMinaEndpointUDPTest-context.xml?rev=1226449&view=auto ============================================================================== --- camel/trunk/components/camel-mina2/src/test/resources/org/apache/camel/component/mina2/SpringMinaEndpointUDPTest-context.xml (added) +++ camel/trunk/components/camel-mina2/src/test/resources/org/apache/camel/component/mina2/SpringMinaEndpointUDPTest-context.xml Mon Jan 2 15:59:58 2012 @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Propchange: camel/trunk/components/camel-mina2/src/test/resources/org/apache/camel/component/mina2/SpringMinaEndpointUDPTest-context.xml ------------------------------------------------------------------------------ svn:eol-style = native Propchange: camel/trunk/components/camel-mina2/src/test/resources/org/apache/camel/component/mina2/SpringMinaEndpointUDPTest-context.xml ------------------------------------------------------------------------------ svn:keywords = Rev Date Propchange: camel/trunk/components/camel-mina2/src/test/resources/org/apache/camel/component/mina2/SpringMinaEndpointUDPTest-context.xml ------------------------------------------------------------------------------ svn:mime-type = text/xml Added: camel/trunk/components/camel-mina2/src/test/resources/org/apache/camel/component/mina2/SpringMultipleUDPTest-context.xml URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-mina2/src/test/resources/org/apache/camel/component/mina2/SpringMultipleUDPTest-context.xml?rev=1226449&view=auto ============================================================================== --- camel/trunk/components/camel-mina2/src/test/resources/org/apache/camel/component/mina2/SpringMultipleUDPTest-context.xml (added) +++ camel/trunk/components/camel-mina2/src/test/resources/org/apache/camel/component/mina2/SpringMultipleUDPTest-context.xml Mon Jan 2 15:59:58 2012 @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Propchange: camel/trunk/components/camel-mina2/src/test/resources/org/apache/camel/component/mina2/SpringMultipleUDPTest-context.xml ------------------------------------------------------------------------------ svn:eol-style = native Propchange: camel/trunk/components/camel-mina2/src/test/resources/org/apache/camel/component/mina2/SpringMultipleUDPTest-context.xml ------------------------------------------------------------------------------ svn:keywords = Rev Date Propchange: camel/trunk/components/camel-mina2/src/test/resources/org/apache/camel/component/mina2/SpringMultipleUDPTest-context.xml ------------------------------------------------------------------------------ svn:mime-type = text/xml Modified: camel/trunk/components/pom.xml URL: http://svn.apache.org/viewvc/camel/trunk/components/pom.xml?rev=1226449&r1=1226448&r2=1226449&view=diff ============================================================================== --- camel/trunk/components/pom.xml (original) +++ camel/trunk/components/pom.xml Mon Jan 2 15:59:58 2012 @@ -102,6 +102,7 @@ camel-lucene camel-mail camel-mina + camel-mina2 camel-msv camel-mvel camel-mybatis Modified: camel/trunk/parent/pom.xml URL: http://svn.apache.org/viewvc/camel/trunk/parent/pom.xml?rev=1226449&r1=1226448&r2=1226449&view=diff ============================================================================== --- camel/trunk/parent/pom.xml (original) +++ camel/trunk/parent/pom.xml Mon Jan 2 15:59:58 2012 @@ -118,6 +118,7 @@ 1.2.16 3.0.3 1.1.7 + 2.0.4 1.8.5 2.0.18 3.0.6 @@ -180,7 +181,7 @@ org.apache.qpid.*;version="[0.12,0.13)", org.apache.abdera.*;version="[0.4,2)", org.apache.commons.httpclient.*;version="[3.1,4.0)", - org.apache.mina.*;version="[1.1.7,2.0)", + org.apache.mina.*;version="[1.1.7,3.0)", org.apache.velocity.*;version="[1.6.2,2)", org.apache.xmlbeans.*;version="[2.4,3)", org.eclipse.jetty.*;version="[7.0,8)", @@ -546,6 +547,11 @@ org.apache.camel + camel-mina2 + ${project.version} + + + org.apache.camel camel-msv ${project.version} Modified: camel/trunk/platforms/karaf/features/src/main/resources/features.xml URL: http://svn.apache.org/viewvc/camel/trunk/platforms/karaf/features/src/main/resources/features.xml?rev=1226449&r1=1226448&r2=1226449&view=diff ============================================================================== --- camel/trunk/platforms/karaf/features/src/main/resources/features.xml (original) +++ camel/trunk/platforms/karaf/features/src/main/resources/features.xml Mon Jan 2 15:59:58 2012 @@ -108,7 +108,12 @@ mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.mina/${mina-bundle-version} mvn:org.apache.camel/camel-mina/${project.version} - + + camel-core + mvn:org.apache.mina/mina-core/${mina2-version} + mvn:org.apache.camel/camel-mina2/${pom.version} + + jetty camel-core camel-http