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 2013/04/11 22:12:22 UTC

svn commit: r1467071 - /commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/builder/combined/TestReloadingCombinedConfigurationBuilderFileBased.java

Author: oheger
Date: Thu Apr 11 20:12:21 2013
New Revision: 1467071

URL: http://svn.apache.org/r1467071
Log:
Added a test cases for reloading the builder's definition file.

Modified:
    commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/builder/combined/TestReloadingCombinedConfigurationBuilderFileBased.java

Modified: commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/builder/combined/TestReloadingCombinedConfigurationBuilderFileBased.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/builder/combined/TestReloadingCombinedConfigurationBuilderFileBased.java?rev=1467071&r1=1467070&r2=1467071&view=diff
==============================================================================
--- commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/builder/combined/TestReloadingCombinedConfigurationBuilderFileBased.java (original)
+++ commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/builder/combined/TestReloadingCombinedConfigurationBuilderFileBased.java Thu Apr 11 20:12:21 2013
@@ -30,9 +30,11 @@ import org.apache.commons.configuration.
 import org.apache.commons.configuration.Configuration;
 import org.apache.commons.configuration.ConfigurationException;
 import org.apache.commons.configuration.HierarchicalConfiguration;
+import org.apache.commons.configuration.XMLConfiguration;
 import org.apache.commons.configuration.builder.BasicConfigurationBuilder;
 import org.apache.commons.configuration.builder.FileBasedBuilderParametersImpl;
 import org.apache.commons.configuration.builder.ReloadingDetectorFactory;
+import org.apache.commons.configuration.builder.ReloadingFileBasedConfigurationBuilder;
 import org.apache.commons.configuration.builder.fluent.Parameters;
 import org.apache.commons.configuration.io.FileHandler;
 import org.apache.commons.configuration.reloading.AlwaysReloadingDetector;
@@ -265,6 +267,88 @@ public class TestReloadingCombinedConfig
     }
 
     /**
+     * Helper method for testing whether the builder's definition file can be
+     * reloaded. This method expects that the test builder has been fully
+     * initialized.
+     *
+     * @param defFile the path to the definition file
+     * @throws IOException if an I/O error occurs
+     * @throws ConfigurationException if a configuration-related error occurs
+     * @throws InterruptedException if waiting is interrupted
+     */
+    private void checkReloadDefinitionFile(File defFile) throws IOException,
+            ConfigurationException, InterruptedException
+    {
+        File src1 = writeReloadFile(null, 1, 0);
+        File src2 = writeReloadFile(null, 1, 1);
+        writeDefinitionFile(defFile, src1);
+        CombinedConfiguration config = builder.getConfiguration();
+        assertEquals("Wrong initial value", 0, config.getInt(testProperty(1)));
+
+        // No change definition file
+        boolean reloaded = false;
+        for (int attempts = 0; attempts < 10 && !reloaded; attempts++)
+        {
+            writeDefinitionFile(defFile, src2);
+            reloaded = builder.getReloadingController().checkForReloading(null);
+            if (!reloaded)
+            {
+                Thread.sleep(100);
+            }
+        }
+        assertTrue("Need for reload not detected", reloaded);
+        config = builder.getConfiguration();
+        assertEquals("Wrong reloaded value", 1, config.getInt(testProperty(1)));
+    }
+
+    /**
+     * Tests whether a change in the definition file is detected and causes a
+     * reload if a specific builder for the definition configuration is
+     * provided.
+     */
+    @Test
+    public void testReloadDefinitionFileExplicitBuilder()
+            throws ConfigurationException, IOException, InterruptedException
+    {
+        File defFile = folder.newFile();
+        builder.configure(Parameters.combined().setDefinitionBuilder(
+                new ReloadingFileBasedConfigurationBuilder<XMLConfiguration>(
+                        XMLConfiguration.class).configure(Parameters.xml()
+                        .setReloadingRefreshDelay(0L).setFile(defFile))));
+        checkReloadDefinitionFile(defFile);
+    }
+
+    /**
+     * Tests whether the default definition builder is capable of detecting a
+     * change in the definition configuration.
+     */
+    @Test
+    public void testReloadDefinitioinFileDefaultBuilder()
+            throws ConfigurationException, IOException, InterruptedException
+    {
+        File defFile = folder.newFile();
+        builder.configure(Parameters.combined().setDefinitionBuilderParameters(
+                Parameters.xml().setReloadingRefreshDelay(0L).setFile(defFile)));
+        checkReloadDefinitionFile(defFile);
+    }
+
+    /**
+     * Writes a configuration definition file that refers to the specified file
+     * source.
+     *
+     * @param defFile the target definition file
+     * @param src the configuration source file to be referenced
+     * @throws ConfigurationException if an error occurs
+     */
+    private void writeDefinitionFile(File defFile, File src)
+            throws ConfigurationException
+    {
+        XMLConfiguration defConf = new XMLConfiguration();
+        addReloadSource(defConf, src.getAbsolutePath());
+        new FileHandler(defConf).save(defFile);
+    }
+
+    /**
      * A test builder class which always returns the same configuration.
      */
     private static class ConstantConfigurationBuilder extends