You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ja...@apache.org on 2018/02/16 10:05:43 UTC
[camel] branch master updated: CAMEL-12272: PgEventEndpoint should
handle wrapped connections
This is an automated email from the ASF dual-hosted git repository.
jamesnetherton pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/master by this push:
new 2973e6c CAMEL-12272: PgEventEndpoint should handle wrapped connections
2973e6c is described below
commit 2973e6c5190ad92687c6bd53101b0027bad70848
Author: James Netherton <ja...@gmail.com>
AuthorDate: Fri Feb 16 09:42:38 2018 +0000
CAMEL-12272: PgEventEndpoint should handle wrapped connections
---
.../camel/component/pgevent/PgEventEndpoint.java | 2 +-
.../camel/component/pgevent/PgEventHelper.java | 44 ++++++++++++++
.../apache/camel/pgevent/PgEventConsumerTest.java | 5 +-
.../apache/camel/pgevent/PgEventHelperTest.java | 69 ++++++++++++++++++++++
.../apache/camel/pgevent/PgEventProducerTest.java | 12 ++--
5 files changed, 122 insertions(+), 10 deletions(-)
diff --git a/components/camel-pgevent/src/main/java/org/apache/camel/component/pgevent/PgEventEndpoint.java b/components/camel-pgevent/src/main/java/org/apache/camel/component/pgevent/PgEventEndpoint.java
index 18c28a2..ae4d903 100644
--- a/components/camel-pgevent/src/main/java/org/apache/camel/component/pgevent/PgEventEndpoint.java
+++ b/components/camel-pgevent/src/main/java/org/apache/camel/component/pgevent/PgEventEndpoint.java
@@ -84,7 +84,7 @@ public class PgEventEndpoint extends DefaultEndpoint {
public final PGConnection initJdbc() throws Exception {
PGConnection conn;
if (this.getDatasource() != null) {
- conn = (PGConnection) this.getDatasource().getConnection();
+ conn = PgEventHelper.toPGConnection(this.getDatasource().getConnection());
} else {
// ensure we can load the class
ClassResolver classResolver = getCamelContext().getClassResolver();
diff --git a/components/camel-pgevent/src/main/java/org/apache/camel/component/pgevent/PgEventHelper.java b/components/camel-pgevent/src/main/java/org/apache/camel/component/pgevent/PgEventHelper.java
new file mode 100644
index 0000000..01a0b62
--- /dev/null
+++ b/components/camel-pgevent/src/main/java/org/apache/camel/component/pgevent/PgEventHelper.java
@@ -0,0 +1,44 @@
+/**
+ * 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.pgevent;
+
+import java.sql.Connection;
+import java.sql.SQLException;
+
+import com.impossibl.postgres.api.jdbc.PGConnection;
+
+public final class PgEventHelper {
+
+ private PgEventHelper() {
+ }
+
+ public static PGConnection toPGConnection(Connection connection) throws SQLException {
+ if (connection == null) {
+ throw new IllegalArgumentException("Connection must not be null");
+ }
+
+ PGConnection conn;
+ if (connection instanceof PGConnection) {
+ conn = (PGConnection) connection;
+ } else if (connection.isWrapperFor(PGConnection.class)) {
+ conn = connection.unwrap(PGConnection.class);
+ } else {
+ throw new IllegalStateException("Cannot obtain PGConnection");
+ }
+ return conn;
+ }
+}
diff --git a/components/camel-pgevent/src/test/java/org/apache/camel/pgevent/PgEventConsumerTest.java b/components/camel-pgevent/src/test/java/org/apache/camel/pgevent/PgEventConsumerTest.java
index f8e8912..c0f92d4 100644
--- a/components/camel-pgevent/src/test/java/org/apache/camel/pgevent/PgEventConsumerTest.java
+++ b/components/camel-pgevent/src/test/java/org/apache/camel/pgevent/PgEventConsumerTest.java
@@ -47,7 +47,7 @@ public class PgEventConsumerTest {
Processor processor = mock(Processor.class);
when(endpoint.getDatasource()).thenReturn(dataSource);
- when(endpoint.initJdbc()).thenReturn(connection);
+ when(dataSource.getConnection()).thenReturn(connection);
when(connection.prepareStatement("LISTEN camel")).thenReturn(statement);
when(endpoint.getChannel()).thenReturn("camel");
@@ -67,7 +67,7 @@ public class PgEventConsumerTest {
Processor processor = mock(Processor.class);
when(endpoint.getDatasource()).thenReturn(dataSource);
- when(endpoint.initJdbc()).thenReturn(connection);
+ when(dataSource.getConnection()).thenReturn(connection);
when(connection.prepareStatement("LISTEN camel")).thenReturn(statement);
when(endpoint.getChannel()).thenReturn("camel");
when(connection.prepareStatement("UNLISTEN camel")).thenReturn(statement);
@@ -98,5 +98,4 @@ public class PgEventConsumerTest {
verify(message).setBody("some event");
verify(processor).process(exchange);
}
-
}
diff --git a/components/camel-pgevent/src/test/java/org/apache/camel/pgevent/PgEventHelperTest.java b/components/camel-pgevent/src/test/java/org/apache/camel/pgevent/PgEventHelperTest.java
new file mode 100644
index 0000000..dc2b6dd
--- /dev/null
+++ b/components/camel-pgevent/src/test/java/org/apache/camel/pgevent/PgEventHelperTest.java
@@ -0,0 +1,69 @@
+/**
+ * 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.pgevent;
+
+import java.sql.Connection;
+
+import com.impossibl.postgres.api.jdbc.PGConnection;
+
+import org.apache.camel.component.pgevent.PgEventHelper;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+import org.junit.runner.RunWith;
+import org.mockito.junit.MockitoJUnitRunner;
+import static org.junit.Assert.assertSame;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+@RunWith(MockitoJUnitRunner.class)
+public class PgEventHelperTest {
+
+ @Rule
+ public ExpectedException expectedException = ExpectedException.none();
+
+ @Test
+ public void testToPGConnectionWithNullConnection() throws Exception {
+ expectedException.expect(IllegalArgumentException.class);
+ PgEventHelper.toPGConnection(null);
+ }
+
+ @Test
+ public void testToPGConnectionWithNonWrappedConnection() throws Exception {
+ Connection originalConnection = mock(PGConnection.class);
+ PGConnection actualConnection = PgEventHelper.toPGConnection(originalConnection);
+ assertSame(originalConnection, actualConnection);
+ }
+
+ @Test
+ public void testToPGConnectionWithWrappedConnection() throws Exception {
+ Connection wrapperConnection = mock(Connection.class);
+ PGConnection unwrappedConnection = mock(PGConnection.class);
+ when(wrapperConnection.isWrapperFor(PGConnection.class)).thenReturn(true);
+ when(wrapperConnection.unwrap(PGConnection.class)).thenReturn(unwrappedConnection);
+ PGConnection actualConnection = PgEventHelper.toPGConnection(wrapperConnection);
+ assertSame(unwrappedConnection, actualConnection);
+ }
+
+ @Test
+ public void testToPGConnectionWithInvalidWrappedConnection() throws Exception {
+ expectedException.expect(IllegalStateException.class);
+ Connection wrapperConnection = mock(Connection.class);
+ when(wrapperConnection.isWrapperFor(PGConnection.class)).thenReturn(false);
+ PgEventHelper.toPGConnection(wrapperConnection);
+ }
+}
diff --git a/components/camel-pgevent/src/test/java/org/apache/camel/pgevent/PgEventProducerTest.java b/components/camel-pgevent/src/test/java/org/apache/camel/pgevent/PgEventProducerTest.java
index a2904bb..6e5df9b 100644
--- a/components/camel-pgevent/src/test/java/org/apache/camel/pgevent/PgEventProducerTest.java
+++ b/components/camel-pgevent/src/test/java/org/apache/camel/pgevent/PgEventProducerTest.java
@@ -51,7 +51,7 @@ public class PgEventProducerTest {
@Test
public void testPgEventProducerStart() throws Exception {
when(endpoint.getDatasource()).thenReturn(dataSource);
- when(endpoint.initJdbc()).thenReturn(connection);
+ when(dataSource.getConnection()).thenReturn(connection);
PgEventProducer producer = new PgEventProducer(endpoint);
producer.start();
@@ -62,7 +62,7 @@ public class PgEventProducerTest {
@Test
public void testPgEventProducerStop() throws Exception {
when(endpoint.getDatasource()).thenReturn(dataSource);
- when(endpoint.initJdbc()).thenReturn(connection);
+ when(dataSource.getConnection()).thenReturn(connection);
PgEventProducer producer = new PgEventProducer(endpoint);
producer.start();
@@ -75,7 +75,7 @@ public class PgEventProducerTest {
@Test(expected = InvalidStateException.class)
public void testPgEventProducerProcessDbThrowsInvalidStateException() throws Exception {
when(endpoint.getDatasource()).thenReturn(dataSource);
- when(endpoint.initJdbc()).thenReturn(connection);
+ when(dataSource.getConnection()).thenReturn(connection);
when(connection.isClosed()).thenThrow(new SQLException("DB problem occurred"));
PgEventProducer producer = new PgEventProducer(endpoint);
@@ -88,7 +88,7 @@ public class PgEventProducerTest {
PGConnection connectionNew = mock(PGConnection.class);
when(endpoint.getDatasource()).thenReturn(dataSource);
- when(endpoint.initJdbc()).thenReturn(connection, connectionNew);
+ when(dataSource.getConnection()).thenReturn(connection, connectionNew);
when(connection.isClosed()).thenReturn(true);
when(exchange.getIn()).thenReturn(message);
when(message.getBody(String.class)).thenReturn("pgevent");
@@ -108,7 +108,7 @@ public class PgEventProducerTest {
when(endpoint.getDatasource()).thenReturn(dataSource);
when(connection.isClosed()).thenReturn(false);
- when(endpoint.initJdbc()).thenReturn(connection);
+ when(dataSource.getConnection()).thenReturn(connection);
when(exchange.getIn()).thenReturn(message);
when(message.getBody(String.class)).thenReturn("pgevent");
when(endpoint.getChannel()).thenReturn("camel");
@@ -126,7 +126,7 @@ public class PgEventProducerTest {
public void testPgEventProducerProcessServerMinimumVersionNotMatched() throws Exception {
when(endpoint.getDatasource()).thenReturn(dataSource);
when(connection.isClosed()).thenReturn(false);
- when(endpoint.initJdbc()).thenReturn(connection);
+ when(dataSource.getConnection()).thenReturn(connection);
when(exchange.getIn()).thenReturn(message);
when(message.getBody(String.class)).thenReturn("pgevent");
when(endpoint.getChannel()).thenReturn("camel");
--
To stop receiving notification emails like this one, please contact
jamesnetherton@apache.org.