You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by oh...@apache.org on 2009/06/05 22:27:16 UTC

svn commit: r782124 - in /commons/proper/configuration/trunk: src/java/org/apache/commons/configuration/ src/test/org/apache/commons/configuration/ src/test/org/apache/commons/configuration/event/ xdocs/

Author: oheger
Date: Fri Jun  5 20:27:16 2009
New Revision: 782124

URL: http://svn.apache.org/viewvc?rev=782124&view=rev
Log:
CONFIGURATION-385: DatabaseConfiguration now generates correct events for the clear() and clearProperty() methods.
The handling of the in-process database used for the tests was refactored into a helper class.
A new unit test for the events generated by DatabaseConfiguration was added.

Added:
    commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/DatabaseConfigurationTestHelper.java   (with props)
    commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/event/TestDatabaseConfigurationEvents.java   (with props)
Modified:
    commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/DatabaseConfiguration.java
    commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/TestDatabaseConfiguration.java
    commons/proper/configuration/trunk/xdocs/changes.xml

Modified: commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/DatabaseConfiguration.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/DatabaseConfiguration.java?rev=782124&r1=782123&r2=782124&view=diff
==============================================================================
--- commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/DatabaseConfiguration.java (original)
+++ commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/DatabaseConfiguration.java Fri Jun  5 20:27:16 2009
@@ -406,7 +406,7 @@
      *
      * @param key the key of the property to be removed
      */
-    public void clearProperty(String key)
+    protected void clearPropertyDirect(String key)
     {
         // build the query
         StringBuffer query = new StringBuffer("DELETE FROM " + table + " WHERE " + keyColumn + "=?");
@@ -452,6 +452,7 @@
      */
     public void clear()
     {
+        fireEvent(EVENT_CLEAR, null, null, true);
         // build the query
         StringBuffer query = new StringBuffer("DELETE FROM " + table);
         if (nameColumn != null)
@@ -484,6 +485,7 @@
             // clean up
             close(conn, pstmt);
         }
+        fireEvent(EVENT_CLEAR, null, null, false);
     }
 
     /**

Added: commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/DatabaseConfigurationTestHelper.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/DatabaseConfigurationTestHelper.java?rev=782124&view=auto
==============================================================================
--- commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/DatabaseConfigurationTestHelper.java (added)
+++ commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/DatabaseConfigurationTestHelper.java Fri Jun  5 20:27:16 2009
@@ -0,0 +1,159 @@
+/*
+ * 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.commons.configuration;
+
+import java.io.FileInputStream;
+
+import javax.sql.DataSource;
+
+import org.apache.commons.configuration.test.HsqlDB;
+import org.apache.commons.dbcp.BasicDataSource;
+import org.dbunit.database.DatabaseConnection;
+import org.dbunit.database.IDatabaseConnection;
+import org.dbunit.dataset.IDataSet;
+import org.dbunit.dataset.xml.XmlDataSet;
+import org.dbunit.operation.DatabaseOperation;
+
+/**
+ * A helper class for performing tests for {@link DatabaseConfiguration}. This
+ * class maintains an in-process database that stores configuration data and can
+ * be accessed from a {@link DatabaseConfiguration} instance. Constants for
+ * table and column names and database connection settings are provided, too.
+ *
+ * @version $Id$
+ */
+public class DatabaseConfigurationTestHelper
+{
+    /** Constant for the JDBC driver class. */
+    public final String DATABASE_DRIVER = "org.hsqldb.jdbcDriver";
+
+    /** Constant for the connection URL. */
+    public final String DATABASE_URL = "jdbc:hsqldb:mem:testdb";
+
+    /** Constant for the DB user name. */
+    public final String DATABASE_USERNAME = "sa";
+
+    /** Constant for the DB password. */
+    public final String DATABASE_PASSWORD = "";
+
+    /** Constant for the configuration table. */
+    public static final String TABLE = "configuration";
+
+    /** Constant for the multi configuration table. */
+    public static final String TABLE_MULTI = "configurations";
+
+    /** Constant for the column with the keys. */
+    public static final String COL_KEY = "key";
+
+    /** Constant for the column with the values. */
+    public static final String COL_VALUE = "value";
+
+    /** Constant for the column with the configuration name. */
+    public static final String COL_NAME = "name";
+
+    /** Constant for the name of the test configuration. */
+    public static final String CONFIG_NAME = "test";
+
+    /** Stores the in-process database. */
+    private static HsqlDB hsqlDB = null;
+
+    /** The data source. */
+    private DataSource datasource;
+
+    /**
+     * Initializes this helper object. This method can be called from a
+     * <code>setUp()</code> method of a unit test class. It creates the database
+     * instance if necessary and populates it with test data.
+     *
+     * @throws Exception if an error occurs
+     */
+    public void setUp() throws Exception
+    {
+        if (hsqlDB == null)
+        {
+            hsqlDB = new HsqlDB(DATABASE_URL, DATABASE_DRIVER,
+                    "conf/testdb.script");
+        }
+
+        BasicDataSource datasource = new BasicDataSource();
+        datasource.setDriverClassName(DATABASE_DRIVER);
+        datasource.setUrl(DATABASE_URL);
+        datasource.setUsername(DATABASE_USERNAME);
+        datasource.setPassword(DATABASE_PASSWORD);
+
+        this.datasource = datasource;
+
+        // prepare the database
+        IDatabaseConnection connection = new DatabaseConnection(datasource
+                .getConnection());
+        IDataSet dataSet = new XmlDataSet(new FileInputStream(
+                "conf/dataset.xml"));
+
+        try
+        {
+            DatabaseOperation.CLEAN_INSERT.execute(connection, dataSet);
+        }
+        finally
+        {
+            connection.close();
+        }
+    }
+
+    /**
+     * Frees the resources used by this helper class. This method can be called
+     * by a <code>tearDown()</code> method of a unit test class.
+     *
+     * @throws Exception if an error occurs
+     */
+    public void tearDown() throws Exception
+    {
+        datasource.getConnection().commit();
+        datasource.getConnection().close();
+    }
+
+    /**
+     * Creates a database configuration with default values.
+     *
+     * @return the configuration
+     */
+    public DatabaseConfiguration setUpConfig()
+    {
+        return new DatabaseConfiguration(datasource, TABLE, COL_KEY, COL_VALUE);
+    }
+
+    /**
+     * Creates a database configuration that supports multiple configurations in
+     * a table with default values.
+     *
+     * @return the configuration
+     */
+    public DatabaseConfiguration setUpMultiConfig()
+    {
+        return new DatabaseConfiguration(datasource, TABLE_MULTI, COL_NAME,
+                COL_KEY, COL_VALUE, CONFIG_NAME);
+    }
+
+    /**
+     * Returns the <code>DataSource</code> managed by this class.
+     *
+     * @return the <code>DataSource</code>
+     */
+    public DataSource getDatasource()
+    {
+        return datasource;
+    }
+}

Propchange: commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/DatabaseConfigurationTestHelper.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/DatabaseConfigurationTestHelper.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/DatabaseConfigurationTestHelper.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/TestDatabaseConfiguration.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/TestDatabaseConfiguration.java?rev=782124&r1=782123&r2=782124&view=diff
==============================================================================
--- commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/TestDatabaseConfiguration.java (original)
+++ commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/TestDatabaseConfiguration.java Fri Jun  5 20:27:16 2009
@@ -17,7 +17,6 @@
 
 package org.apache.commons.configuration;
 
-import java.io.FileInputStream;
 import java.sql.Connection;
 import java.sql.SQLException;
 import java.util.Iterator;
@@ -28,13 +27,6 @@
 import junit.framework.TestCase;
 
 import org.apache.commons.configuration.event.ConfigurationErrorListener;
-import org.apache.commons.configuration.test.HsqlDB;
-import org.apache.commons.dbcp.BasicDataSource;
-import org.dbunit.database.DatabaseConnection;
-import org.dbunit.database.IDatabaseConnection;
-import org.dbunit.dataset.IDataSet;
-import org.dbunit.dataset.xml.XmlDataSet;
-import org.dbunit.operation.DatabaseOperation;
 
 /**
  * Test for database stored configurations.  Note, when running this Unit
@@ -45,36 +37,12 @@
  */
 public class TestDatabaseConfiguration extends TestCase
 {
-    public final String DATABASE_DRIVER = "org.hsqldb.jdbcDriver";
-    public final String DATABASE_URL = "jdbc:hsqldb:target/test-classes/testdb";
-    public final String DATABASE_USERNAME = "sa";
-    public final String DATABASE_PASSWORD = "";
-
-    /** Constant for the configuration table.*/
-    private static final String TABLE = "configuration";
-
-    /** Constant for the multi configuration table.*/
-    private static final String TABLE_MULTI = "configurations";
-
-    /** Constant for the column with the keys.*/
-    private static final String COL_KEY = "key";
-
-    /** Constant for the column with the values.*/
-    private static final String COL_VALUE = "value";
-
-    /** Constant for the column with the configuration name.*/
-    private static final String COL_NAME = "name";
-
-    /** Constant for the name of the test configuration.*/
-    private static final String CONFIG_NAME = "test";
-
-    private static HsqlDB hsqlDB = null;
-
-    private DataSource datasource;
-
     /** An error listener for testing whether internal errors occurred.*/
     private ConfigurationErrorListenerImpl listener;
 
+    /** The test helper. */
+    private DatabaseConfigurationTestHelper helper;
+
     protected void setUp() throws Exception
     {
         /*
@@ -85,43 +53,19 @@
 
         // set up the datasource
 
-        if (hsqlDB == null)
-        {
-            hsqlDB = new HsqlDB(DATABASE_URL, DATABASE_DRIVER, "conf/testdb.script");
-        }
-
-        BasicDataSource datasource = new BasicDataSource();
-        datasource.setDriverClassName(DATABASE_DRIVER);
-        datasource.setUrl(DATABASE_URL);
-        datasource.setUsername(DATABASE_USERNAME);
-        datasource.setPassword(DATABASE_PASSWORD);
-
-        this.datasource = datasource;
-
-
-        // prepare the database
-        IDatabaseConnection connection = new DatabaseConnection(datasource.getConnection());
-        IDataSet dataSet = new XmlDataSet(new FileInputStream("conf/dataset.xml"));
-
-        try
-        {
-            DatabaseOperation.CLEAN_INSERT.execute(connection, dataSet);
-        }
-        finally
-        {
-            connection.close();
-        }
+        helper = new DatabaseConfigurationTestHelper();
+        helper.setUp();
     }
 
-    protected void tearDown() throws Exception{
-        datasource.getConnection().commit();
-        datasource.getConnection().close();
-
+    protected void tearDown() throws Exception
+    {
         // if an error listener is defined, we check whether an error occurred
         if(listener != null)
         {
             assertEquals("An internal error occurred", 0, listener.getErrorCount());
         }
+        helper.tearDown();
+
         super.tearDown();
     }
 
@@ -132,7 +76,10 @@
      */
     private PotentialErrorDatabaseConfiguration setUpConfig()
     {
-        return new PotentialErrorDatabaseConfiguration(datasource, TABLE, COL_KEY, COL_VALUE);
+        return new PotentialErrorDatabaseConfiguration(helper.getDatasource(),
+                DatabaseConfigurationTestHelper.TABLE,
+                DatabaseConfigurationTestHelper.COL_KEY,
+                DatabaseConfigurationTestHelper.COL_VALUE);
     }
 
     /**
@@ -143,7 +90,7 @@
      */
     private DatabaseConfiguration setUpMultiConfig()
     {
-        return new DatabaseConfiguration(datasource, TABLE_MULTI, COL_NAME, COL_KEY, COL_VALUE, CONFIG_NAME);
+        return helper.setUpMultiConfig();
     }
 
     /**
@@ -309,20 +256,20 @@
         Configuration config1 = setUpMultiConfig();
         assertFalse("The configuration named 'test' is empty", config1.isEmpty());
 
-        Configuration config2 = new DatabaseConfiguration(datasource, TABLE_MULTI, COL_NAME, COL_KEY, COL_VALUE, "testIsEmpty");
+        Configuration config2 = new DatabaseConfiguration(helper.getDatasource(), DatabaseConfigurationTestHelper.TABLE_MULTI, DatabaseConfigurationTestHelper.COL_NAME, DatabaseConfigurationTestHelper.COL_KEY, DatabaseConfigurationTestHelper.COL_VALUE, "testIsEmpty");
         assertTrue("The configuration named 'testIsEmpty' is not empty", config2.isEmpty());
     }
 
     public void testGetList()
     {
-        Configuration config1 = new DatabaseConfiguration(datasource, "configurationList", COL_KEY, COL_VALUE);
+        Configuration config1 = new DatabaseConfiguration(helper.getDatasource(), "configurationList", DatabaseConfigurationTestHelper.COL_KEY, DatabaseConfigurationTestHelper.COL_VALUE);
         List list = config1.getList("key3");
         assertEquals(3,list.size());
     }
 
     public void testGetKeys()
     {
-        Configuration config1 = new DatabaseConfiguration(datasource, "configurationList", COL_KEY, COL_VALUE);
+        Configuration config1 = new DatabaseConfiguration(helper.getDatasource(), "configurationList", DatabaseConfigurationTestHelper.COL_KEY, DatabaseConfigurationTestHelper.COL_VALUE);
         Iterator i = config1.getKeys();
         assertTrue(i.hasNext());
         Object key = i.next();
@@ -347,7 +294,7 @@
      */
     public void testLogErrorListener()
     {
-        DatabaseConfiguration config = new DatabaseConfiguration(datasource, TABLE, COL_KEY, COL_VALUE);
+        DatabaseConfiguration config = new DatabaseConfiguration(helper.getDatasource(), DatabaseConfigurationTestHelper.TABLE, DatabaseConfigurationTestHelper.COL_KEY, DatabaseConfigurationTestHelper.COL_VALUE);
         assertEquals("No error listener registered", 1, config.getErrorListeners().size());
     }
 

Added: commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/event/TestDatabaseConfigurationEvents.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/event/TestDatabaseConfigurationEvents.java?rev=782124&view=auto
==============================================================================
--- commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/event/TestDatabaseConfigurationEvents.java (added)
+++ commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/event/TestDatabaseConfigurationEvents.java Fri Jun  5 20:27:16 2009
@@ -0,0 +1,52 @@
+/*
+ * 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.commons.configuration.event;
+
+import org.apache.commons.configuration.AbstractConfiguration;
+import org.apache.commons.configuration.DatabaseConfigurationTestHelper;
+
+/**
+ * A test class for the events generated by DatabaseConfiguration.
+ *
+ * @author hacker
+ * @version $Id$
+ */
+public class TestDatabaseConfigurationEvents extends
+        AbstractTestConfigurationEvents
+{
+    /** The test helper. */
+    private DatabaseConfigurationTestHelper helper;
+
+    protected void setUp() throws Exception
+    {
+        helper = new DatabaseConfigurationTestHelper();
+        helper.setUp();
+
+        super.setUp();
+    }
+
+    protected void tearDown() throws Exception
+    {
+        helper.tearDown();
+        super.tearDown();
+    }
+
+    protected AbstractConfiguration createConfiguration()
+    {
+        return helper.setUpConfig();
+    }
+}

Propchange: commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/event/TestDatabaseConfigurationEvents.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/event/TestDatabaseConfigurationEvents.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/event/TestDatabaseConfigurationEvents.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: commons/proper/configuration/trunk/xdocs/changes.xml
URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/xdocs/changes.xml?rev=782124&r1=782123&r2=782124&view=diff
==============================================================================
--- commons/proper/configuration/trunk/xdocs/changes.xml (original)
+++ commons/proper/configuration/trunk/xdocs/changes.xml Fri Jun  5 20:27:16 2009
@@ -23,6 +23,10 @@
 
   <body>
     <release version="1.7" date="in SVN" description="">
+      <action dev="oheger" type="fix" issue="CONFIGURATION-385">
+        DatabaseConfiguration now generates correct events for the clear() and
+        clearProperty() methods.
+      </action>
       <action dev="rgoers" type="add" issue="CONFIGURATION-380">
         Add ExprLookup to allow expressions to be evaluated in configurations. When 
         used, this requires that Apache Commons Jexl be added as a dependency to