You are viewing a plain text version of this content. The canonical link for it is here.
Posted to solr-commits@lucene.apache.org by no...@apache.org on 2009/06/25 07:30:15 UTC

svn commit: r788265 - in /lucene/solr/trunk/contrib/dataimporthandler/src: main/java/org/apache/solr/handler/dataimport/ test/java/org/apache/solr/handler/dataimport/

Author: noble
Date: Thu Jun 25 05:30:15 2009
New Revision: 788265

URL: http://svn.apache.org/viewvc?rev=788265&view=rev
Log:
SOLR-1244 JdbcDataSource uses wrong overload of getConnection on JNDI DataSource

Added:
    lucene/solr/trunk/contrib/dataimporthandler/src/test/java/org/apache/solr/handler/dataimport/MockInitialContextFactory.java
Modified:
    lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/JdbcDataSource.java
    lucene/solr/trunk/contrib/dataimporthandler/src/test/java/org/apache/solr/handler/dataimport/TestJdbcDataSource.java

Modified: lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/JdbcDataSource.java
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/JdbcDataSource.java?rev=788265&r1=788264&r2=788265&view=diff
==============================================================================
--- lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/JdbcDataSource.java (original)
+++ lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/JdbcDataSource.java Thu Jun 25 05:30:15 2009
@@ -142,7 +142,7 @@
               javax.sql.DataSource dataSource = (javax.sql.DataSource) jndival;
               String user = (String) initProps.get("user");
               String pass = (String) initProps.get("password");
-              if(user != null){
+              if(user == null || user.trim().equals("")){
                 c = dataSource.getConnection();
               } else {
                 c = dataSource.getConnection(user, pass);

Added: lucene/solr/trunk/contrib/dataimporthandler/src/test/java/org/apache/solr/handler/dataimport/MockInitialContextFactory.java
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/contrib/dataimporthandler/src/test/java/org/apache/solr/handler/dataimport/MockInitialContextFactory.java?rev=788265&view=auto
==============================================================================
--- lucene/solr/trunk/contrib/dataimporthandler/src/test/java/org/apache/solr/handler/dataimport/MockInitialContextFactory.java (added)
+++ lucene/solr/trunk/contrib/dataimporthandler/src/test/java/org/apache/solr/handler/dataimport/MockInitialContextFactory.java Thu Jun 25 05:30:15 2009
@@ -0,0 +1,63 @@
+/**
+ * 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.solr.handler.dataimport;
+
+import java.util.HashMap;
+import java.util.Hashtable;
+import java.util.Map;
+
+import javax.naming.NamingException;
+import javax.naming.spi.InitialContextFactory;
+
+import org.easymock.EasyMock;
+import org.easymock.IAnswer;
+import org.easymock.IMocksControl;
+
+public class MockInitialContextFactory implements InitialContextFactory {
+  private static final Map<String, Object> objects = new HashMap<String, Object>();
+  private final IMocksControl mockControl;
+  private final javax.naming.Context context;
+
+  public MockInitialContextFactory() {
+    mockControl = EasyMock.createStrictControl();
+    context = mockControl.createMock(javax.naming.Context.class);
+
+    try {
+      EasyMock.expect(context.lookup((String) EasyMock.anyObject())).andAnswer(
+          new IAnswer<Object>() {
+            @Override
+            public Object answer() throws Throwable {
+              return objects.get(EasyMock.getCurrentArguments()[0]);
+            }
+          }).anyTimes();
+
+    } catch (NamingException e) {
+      throw new RuntimeException(e);
+    }
+
+    mockControl.replay();
+  }
+
+  @SuppressWarnings("unchecked")
+  public javax.naming.Context getInitialContext(Hashtable env) {
+    return context;
+  }
+
+  public static void bind(String name, Object obj) {
+    objects.put(name, obj);
+  }
+}

Modified: lucene/solr/trunk/contrib/dataimporthandler/src/test/java/org/apache/solr/handler/dataimport/TestJdbcDataSource.java
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/contrib/dataimporthandler/src/test/java/org/apache/solr/handler/dataimport/TestJdbcDataSource.java?rev=788265&r1=788264&r2=788265&view=diff
==============================================================================
--- lucene/solr/trunk/contrib/dataimporthandler/src/test/java/org/apache/solr/handler/dataimport/TestJdbcDataSource.java (original)
+++ lucene/solr/trunk/contrib/dataimporthandler/src/test/java/org/apache/solr/handler/dataimport/TestJdbcDataSource.java Thu Jun 25 05:30:15 2009
@@ -16,12 +16,17 @@
  */
 package org.apache.solr.handler.dataimport;
 
-import org.junit.Assert;
-import org.junit.Ignore;
-import org.junit.Test;
-
+import java.sql.Connection;
+import java.sql.Driver;
+import java.sql.DriverManager;
 import java.util.*;
 
+import javax.sql.DataSource;
+
+import org.easymock.EasyMock;
+import org.easymock.IMocksControl;
+import org.junit.*;
+
 /**
  * <p>
  * Test for JdbcDataSource
@@ -35,6 +40,104 @@
  * @since solr 1.3
  */
 public class TestJdbcDataSource {
+  Driver driver;
+  DataSource dataSource;
+  Connection connection;
+  IMocksControl mockControl;
+  JdbcDataSource jdbcDataSource = new JdbcDataSource();
+  List<Map<String, String>> fields = new ArrayList<Map<String, String>>();
+
+  Context context = AbstractDataImportHandlerTest.getContext(null, null,
+          jdbcDataSource, Context.FULL_DUMP, fields, null);
+
+  Properties props = new Properties();
+
+  String sysProp = System.getProperty("java.naming.factory.initial");
+
+  @Before
+  public void SetUp() throws ClassNotFoundException {
+    System.setProperty("java.naming.factory.initial",
+            MockInitialContextFactory.class.getName());
+
+    mockControl = EasyMock.createStrictControl();
+    driver = mockControl.createMock(Driver.class);
+    dataSource = mockControl.createMock(DataSource.class);
+    connection = mockControl.createMock(Connection.class);
+  }
+
+  @After
+  public void tearDown() {
+    if (sysProp == null) {
+      System.getProperties().remove("java.naming.factory.initial");
+    } else {
+      System.setProperty("java.naming.factory.initial", sysProp);
+    }
+  }
+
+  @Test
+  public void retrieveFromJndi() throws Exception {
+    MockInitialContextFactory.bind("java:comp/env/jdbc/JndiDB", dataSource);
+
+    props.put(JdbcDataSource.JNDI_NAME, "java:comp/env/jdbc/JndiDB");
+
+    EasyMock.expect(dataSource.getConnection()).andReturn(connection);
+    connection.setAutoCommit(false);
+    connection.setHoldability(1);
+
+    mockControl.replay();
+
+    Connection conn = jdbcDataSource.createConnectionFactory(context, props)
+            .call();
+
+    mockControl.verify();
+
+    Assert.assertSame("connection", conn, connection);
+  }
+
+  @Test
+  public void retrieveFromJndiWithCredentials() throws Exception {
+    MockInitialContextFactory.bind("java:comp/env/jdbc/JndiDB", dataSource);
+
+    props.put(JdbcDataSource.JNDI_NAME, "java:comp/env/jdbc/JndiDB");
+    props.put("user", "Fred");
+    props.put("password", "4r3d");
+
+    EasyMock.expect(dataSource.getConnection("Fred", "4r3d")).andReturn(
+            connection);
+    connection.setAutoCommit(false);
+    connection.setHoldability(1);
+
+    mockControl.replay();
+
+    Connection conn = jdbcDataSource.createConnectionFactory(context, props)
+            .call();
+
+    mockControl.verify();
+
+    Assert.assertSame("connection", conn, connection);
+  }
+
+  @Test
+  public void retrieveFromDriverManager() throws Exception {
+    DriverManager.registerDriver(driver);
+
+    EasyMock.expect(
+            driver.connect((String) EasyMock.notNull(), (Properties) EasyMock
+                    .notNull())).andReturn(connection);
+    connection.setAutoCommit(false);
+    connection.setHoldability(1);
+
+    props.put(JdbcDataSource.DRIVER, driver.getClass().getName());
+    props.put(JdbcDataSource.URL, "jdbc:fakedb");
+    mockControl.replay();
+
+    Connection conn = jdbcDataSource.createConnectionFactory(context, props)
+            .call();
+
+    mockControl.verify();
+
+    Assert.assertSame("connection", conn, connection);
+  }
 
   @Test
   @Ignore
@@ -74,5 +177,4 @@
     Assert.assertEquals(Float.class, msrp.getClass());
     Assert.assertEquals(Long.class, trim_id.getClass());
   }
-
 }