[infinispan-commits] Infinispan SVN: r706 - in trunk/core/src: test/java/org/infinispan/config/parsing and 1 other directory.

infinispan-commits at lists.jboss.org infinispan-commits at lists.jboss.org
Wed Aug 19 06:18:49 EDT 2009


Author: manik.surtani at jboss.com
Date: 2009-08-19 06:18:49 -0400 (Wed, 19 Aug 2009)
New Revision: 706

Modified:
   trunk/core/src/main/java/org/infinispan/config/InfinispanConfiguration.java
   trunk/core/src/test/java/org/infinispan/config/parsing/XmlFileParsingTest.java
Log:
[ISPN-163] (XML parser breaks with a NPE when no named cache elemets are specificed in a config file)

Modified: trunk/core/src/main/java/org/infinispan/config/InfinispanConfiguration.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/config/InfinispanConfiguration.java	2009-08-19 09:35:21 UTC (rev 705)
+++ trunk/core/src/main/java/org/infinispan/config/InfinispanConfiguration.java	2009-08-19 10:18:49 UTC (rev 706)
@@ -37,6 +37,7 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.net.URL;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -59,15 +60,15 @@
 public class InfinispanConfiguration implements XmlConfigurationParser {
 
    public static final String VALIDATING_SYSTEM_PROPERTY = "infinispan.config.validate";
-   
+
    public static final String SCHEMA_SYSTEM_PROPERTY = "infinispan.config.schema";
-   
-   private static final String DEFAULT_SCHEMA_LOCATION = "schema/infinispan-config-" + Version.getMajorVersion()+ ".xsd";
-   
+
+   private static final String DEFAULT_SCHEMA_LOCATION = "schema/infinispan-config-" + Version.getMajorVersion() + ".xsd";
+
    public static final String SCHEMA_URL_SYSTEM_PROPERTY = "infinispan.config.schema.url";
-   
-   private static final String DEFAULT_SCHEMA_URL= "http://www.jboss.org/infinispan/infinispan-config-" + Version.getMajorVersion()+ ".xsd";
 
+   private static final String DEFAULT_SCHEMA_URL = "http://www.jboss.org/infinispan/infinispan-config-" + Version.getMajorVersion() + ".xsd";
+
    @XmlElement
    private GlobalConfiguration global;
 
@@ -224,6 +225,7 @@
    }
 
    public Map<String, Configuration> parseNamedConfigurations() throws ConfigurationException {
+      if (namedCaches == null) return Collections.emptyMap();
       Map<String, Configuration> map = new HashMap<String, Configuration>(7);
       for (Configuration conf : namedCaches) {
          map.put(conf.getName(), conf);

Modified: trunk/core/src/test/java/org/infinispan/config/parsing/XmlFileParsingTest.java
===================================================================
--- trunk/core/src/test/java/org/infinispan/config/parsing/XmlFileParsingTest.java	2009-08-19 09:35:21 UTC (rev 705)
+++ trunk/core/src/test/java/org/infinispan/config/parsing/XmlFileParsingTest.java	2009-08-19 10:18:49 UTC (rev 706)
@@ -1,37 +1,68 @@
 package org.infinispan.config.parsing;
 
-import java.io.IOException;
-import java.util.Map;
-
 import org.infinispan.Version;
 import org.infinispan.config.CacheLoaderManagerConfig;
 import org.infinispan.config.Configuration;
 import org.infinispan.config.GlobalConfiguration;
+import org.infinispan.config.GlobalConfiguration.ShutdownHookBehavior;
 import org.infinispan.config.InfinispanConfiguration;
-import org.infinispan.config.GlobalConfiguration.ShutdownHookBehavior;
 import org.infinispan.distribution.DefaultConsistentHash;
 import org.infinispan.eviction.EvictionStrategy;
 import org.infinispan.loaders.file.FileCacheStoreConfig;
+import org.infinispan.remoting.transport.jgroups.JGroupsTransport;
 import org.infinispan.util.concurrent.IsolationLevel;
 import org.testng.annotations.Test;
 
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Map;
+
 @Test(groups = "unit", testName = "config.parsing.XmlFileParsingTest")
 public class XmlFileParsingTest {
-  
+
    public void testNamedCacheFileJaxb() throws Exception {
-      String schemaFileName = "infinispan-config-" +Version.getMajorVersion()+ ".xsd";
+      String schemaFileName = "infinispan-config-" + Version.getMajorVersion() + ".xsd";
       testNamedCacheFile(InfinispanConfiguration.newInfinispanConfiguration(
-               "configs/named-cache-test.xml","schema/"+schemaFileName));
+            "configs/named-cache-test.xml", "schema/" + schemaFileName));
    }
 
    public void testConfigurationMergingJaxb() throws Exception {
       testConfigurationMerging(InfinispanConfiguration
-               .newInfinispanConfiguration("configs/named-cache-test.xml"));
+            .newInfinispanConfiguration("configs/named-cache-test.xml"));
    }
-   
-   
+
+   public void testNoNamedCaches() throws Exception {
+      String config = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
+            "\n" +
+            "<infinispan xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns=\"urn:infinispan:config:4.0\">\n" +
+            "   <global>\n" +
+            "      <transport clusterName=\"demoCluster\"/>\n" +
+            "   </global>\n" +
+            "\n" +
+            "   <default>\n" +
+            "      <clustering mode=\"replication\">\n" +
+            "      </clustering>\n" +
+            "   </default>\n" +
+            "</infinispan>";
+
+      InputStream is = new ByteArrayInputStream(config.getBytes());
+      InfinispanConfiguration c = InfinispanConfiguration.newInfinispanConfiguration(is);
+      GlobalConfiguration gc = c.parseGlobalConfiguration();
+      assert gc.getTransportClass().equals(JGroupsTransport.class.getName());
+      assert gc.getClusterName().equals("demoCluster");
+
+      Configuration def = c.parseDefaultConfiguration();
+      assert def.getCacheMode() == Configuration.CacheMode.REPL_SYNC;
+
+      Map<String, Configuration> named = c.parseNamedConfigurations();
+      assert named != null;
+      assert named.isEmpty();
+   }
+
+
    private void testNamedCacheFile(XmlConfigurationParser parser) throws IOException {
-      
+
       GlobalConfiguration gc = parser.parseGlobalConfiguration();
 
       assert gc.getAsyncListenerExecutorFactoryClass().equals("org.infinispan.executors.DefaultExecutorFactory");
@@ -51,9 +82,9 @@
       assert gc.getTransportClass().equals("org.infinispan.remoting.transport.jgroups.JGroupsTransport");
       assert gc.getClusterName().equals("infinispan-cluster");
       assert gc.getDistributedSyncTimeout() == 50000;
-      
+
       assert gc.getShutdownHookBehavior().equals(ShutdownHookBehavior.REGISTER);
-      
+
       assert gc.getMarshallerClass().equals("org.infinispan.marshall.VersionAwareMarshaller");
       assert gc.getMarshallVersionString().equals("1.0");
 
@@ -114,7 +145,7 @@
       CacheLoaderManagerConfig loaderManagerConfig = c.getCacheLoaderManagerConfig();
       assert loaderManagerConfig.isPreload();
       assert !loaderManagerConfig.isPassivation();
-      assert !loaderManagerConfig.isShared(); 
+      assert !loaderManagerConfig.isShared();
       assert loaderManagerConfig.getCacheLoaderConfigs().size() == 1;
       FileCacheStoreConfig csConf = (FileCacheStoreConfig) loaderManagerConfig.getFirstCacheLoaderConfig();
       assert csConf.getCacheLoaderClassName().equals("org.infinispan.loaders.file.FileCacheStore");
@@ -142,11 +173,11 @@
       assert c.getConsistentHashClass().equals(DefaultConsistentHash.class.getName());
       assert c.getNumOwners() == 3;
       assert c.isL1CacheEnabled();
-      
+
       c = namedCaches.get("cacheWithCustomInterceptors");
       assert !c.getCustomInterceptors().isEmpty();
       assert c.getCustomInterceptors().size() == 5;
-      
+
       c = namedCaches.get("evictionCache");
       assert c.getEvictionMaxEntries() == 5000;
       assert c.getEvictionStrategy().equals(EvictionStrategy.FIFO);
@@ -159,7 +190,7 @@
    }
 
    private void testConfigurationMerging(XmlConfigurationParser parser) throws IOException {
-      
+
       Configuration defaultCfg = parser.parseDefaultConfiguration();
       Map<String, Configuration> namedCaches = parser.parseNamedConfigurations();
 



More information about the infinispan-commits mailing list