diff --git a/src/main/java/net/onrc/onos/core/datagrid/HazelcastDatagrid.java b/src/main/java/net/onrc/onos/core/datagrid/HazelcastDatagrid.java
index 7d2b7f3..5758b38 100644
--- a/src/main/java/net/onrc/onos/core/datagrid/HazelcastDatagrid.java
+++ b/src/main/java/net/onrc/onos/core/datagrid/HazelcastDatagrid.java
@@ -33,6 +33,7 @@
     private IRestApiService restApi;
 
     static final String HAZELCAST_CONFIG_FILE = "datagridConfig";
+    private static final String HAZELCAST_DEFAULT_XML = "conf/hazelcast.default.xml";
     private HazelcastInstance hazelcastInstance;
     private Config hazelcastConfig;
 
@@ -44,11 +45,11 @@
     private final Map<String, IEventChannel<?, ?>> eventChannels = new HashMap<>();
 
     /**
-     * Initialize the Hazelcast Datagrid operation.
+     * Load the Hazelcast Datagrid configuration file.
      *
      * @param configFilename the configuration filename.
      */
-    public void init(String configFilename) {
+    public void loadHazelcastConfig(String configFilename) {
         /*
         System.setProperty("hazelcast.socket.receive.buffer.size", "32");
         System.setProperty("hazelcast.socket.send.buffer.size", "32");
@@ -60,6 +61,16 @@
             hazelcastConfig = new FileSystemXmlConfig(configFilename);
         } catch (FileNotFoundException e) {
             log.error("Error opening Hazelcast XML configuration. File not found: " + configFilename, e);
+
+            // Fallback mechanism to support running unit test without setup.
+            log.error("Falling back to default Hazelcast XML {}", HAZELCAST_DEFAULT_XML);
+            try {
+                hazelcastConfig = new FileSystemXmlConfig(HAZELCAST_DEFAULT_XML);
+            } catch (FileNotFoundException e2) {
+                log.error("Error opening fall back Hazelcast XML configuration. "
+                        + "File not found: " + HAZELCAST_DEFAULT_XML, e2);
+                // XXX probably should throw some exception to kill ONOS instead.
+            }
         }
         /*
         hazelcastConfig.setProperty(GroupProperties.PROP_IO_THREAD_COUNT, "1");
@@ -145,7 +156,7 @@
         // Get the configuration file name and configure the Datagrid
         Map<String, String> configMap = context.getConfigParams(this);
         String configFilename = configMap.get(HAZELCAST_CONFIG_FILE);
-        this.init(configFilename);
+        this.loadHazelcastConfig(configFilename);
     }
 
     /**
diff --git a/src/main/java/net/onrc/onos/core/datastore/hazelcast/HZClient.java b/src/main/java/net/onrc/onos/core/datastore/hazelcast/HZClient.java
index 2b319a1..d3c303f 100644
--- a/src/main/java/net/onrc/onos/core/datastore/hazelcast/HZClient.java
+++ b/src/main/java/net/onrc/onos/core/datastore/hazelcast/HZClient.java
@@ -41,6 +41,7 @@
 
     // make this path configurable
     private static final String BASE_CONFIG_FILENAME = System.getProperty("net.onrc.onos.core.datastore.hazelcast.baseConfig", "conf/hazelcast.xml");
+    private static final String HAZELCAST_DEFAULT_XML = "conf/hazelcast.default.xml";
     private static boolean useClientMode = Boolean.parseBoolean(System.getProperty("net.onrc.onos.core.datastore.hazelcast.clientMode", "true"));
 
     // Note: xml configuration will overwrite this value if present
@@ -64,7 +65,18 @@
             baseHzConfig = new FileSystemXmlConfig(hazelcastConfigFileName);
         } catch (FileNotFoundException e) {
             log.error("Error opening Hazelcast XML configuration. File not found: " + hazelcastConfigFileName, e);
-            throw new Error("Cannot find Hazelcast configuration: " + hazelcastConfigFileName, e);
+            // Fallback mechanism to support running unit test without setup.
+            log.error("Falling back to default Hazelcast XML {}", HAZELCAST_DEFAULT_XML);
+            try {
+                baseHzConfig = new FileSystemXmlConfig(HAZELCAST_DEFAULT_XML);
+            } catch (FileNotFoundException e2) {
+                log.error("Error opening fall back Hazelcast XML configuration. "
+                        + "File not found: " + HAZELCAST_DEFAULT_XML, e2);
+
+                // intentionally throwing Exception "e" thrown from non-fallback
+                // Hazelcast configuration loading.
+                throw new Error("Cannot find Hazelcast configuration: " + hazelcastConfigFileName, e);
+            }
         }
 
         // use xml config if present, if not use System.property
