diff --git a/core/net/src/main/java/org/onosproject/cfg/impl/ComponentConfigLoader.java b/core/net/src/main/java/org/onosproject/cfg/impl/ComponentConfigLoader.java
index 22f612a..1622df1 100644
--- a/core/net/src/main/java/org/onosproject/cfg/impl/ComponentConfigLoader.java
+++ b/core/net/src/main/java/org/onosproject/cfg/impl/ComponentConfigLoader.java
@@ -41,8 +41,10 @@
 @Component(immediate = true)
 public class ComponentConfigLoader {
 
-    private static final File CFG_FILE = new File("../config/component-cfg.json");
     private static final int RETRY_DELAY = 5_000; // millis between retries
+    private static final String CFG_JSON = "../config/component-cfg.json";
+
+    static File cfgFile = new File(CFG_JSON);
 
     private final Logger log = getLogger(getClass());
 
@@ -78,15 +80,15 @@
     */
     private void loadConfigs() {
         try {
-            if (CFG_FILE.exists()) {
-                root = (ObjectNode) new ObjectMapper().readTree(CFG_FILE);
+            if (cfgFile.exists()) {
+                root = (ObjectNode) new ObjectMapper().readTree(cfgFile);
                 root.fieldNames().forEachRemaining(pendingComponents::add);
-                SharedExecutors.getTimer().schedule(loader, RETRY_DELAY, RETRY_DELAY);
-                log.info("Loaded initial component configuration from {}", CFG_FILE);
+                SharedExecutors.getTimer().schedule(loader, 0, RETRY_DELAY);
+                log.info("Loaded initial component configuration from {}", cfgFile);
             }
         } catch (Exception e) {
             log.warn("Unable to load initial component configuration from {}",
-                     CFG_FILE, e);
+                     cfgFile, e);
         }
     }
     /*
diff --git a/core/net/src/test/java/org/onosproject/cfg/impl/ComponentConfigLoaderTest.java b/core/net/src/test/java/org/onosproject/cfg/impl/ComponentConfigLoaderTest.java
new file mode 100644
index 0000000..856092e
--- /dev/null
+++ b/core/net/src/test/java/org/onosproject/cfg/impl/ComponentConfigLoaderTest.java
@@ -0,0 +1,113 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * Licensed 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.onosproject.cfg.impl;
+
+import com.google.common.collect.ImmutableSet;
+import com.google.common.io.Files;
+import org.junit.Before;
+import org.junit.Test;
+import org.onosproject.cfg.ComponentConfigAdapter;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Set;
+
+import static com.google.common.io.ByteStreams.toByteArray;
+import static com.google.common.io.Files.write;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+import static org.onlab.junit.TestTools.assertAfter;
+
+/**
+ * UnitTest for ComponentLoader.
+ */
+public class ComponentConfigLoaderTest {
+
+    static final File TEST_DIR = Files.createTempDir();
+
+    private static final String FOO_COMPONENT = "fooComponent";
+
+    private ComponentConfigLoader loader;
+
+    private TestConfigService service;
+
+    /*
+     * Method to SetUp the test environment with test file, a config loader a service,
+     * and assign it to the loader.configService for the test.
+     */
+    @Before
+    public void setUp() {
+        ComponentConfigLoader.cfgFile = new File(TEST_DIR, "test.json");
+        loader = new ComponentConfigLoader();
+        service = new TestConfigService();
+        loader.configService = service;
+    }
+
+    /*
+     * Tests that the component in the json receives the correct configuration.
+     */
+    @Test
+    public void basics() throws IOException {
+        stageTestResource("basic.json");
+        loader.activate();
+        assertAfter(1_000, () -> assertEquals("incorrect component", FOO_COMPONENT, service.component));
+    }
+
+    /*
+     * Tests that the component is null if the file has a bad configuration format
+     * for which it yielded an exception. Can't test the exception because it happens
+     * in a different thread,
+     */
+    @Test
+    public void badConfig() throws IOException {
+        stageTestResource("badConfig.json");
+        loader.activate();
+        assertAfter(1_000, () -> assertNull("incorrect component", service.component));
+
+    }
+
+    /*
+     * Writes the necessary file for the tests in the temporary directory
+     */
+    static void stageTestResource(String name) throws IOException {
+        byte[] bytes = toByteArray(ComponentConfigLoaderTest.class.getResourceAsStream(name));
+        write(bytes, ComponentConfigLoader.cfgFile);
+    }
+
+    /*
+     * Mockup class for the config service.
+     */
+    private class TestConfigService extends ComponentConfigAdapter {
+
+        private String component;
+        private String name;
+        private String value;
+
+        @Override
+        public Set<String> getComponentNames() {
+            return ImmutableSet.of(FOO_COMPONENT);
+        }
+
+        @Override
+        public void setProperty(String componentName, String name, String value) {
+            this.component = componentName;
+            this.name = name;
+            this.value = value;
+
+        }
+    }
+}
\ No newline at end of file
diff --git a/core/net/src/test/resources/org/onosproject/cfg/impl/badConfig.json b/core/net/src/test/resources/org/onosproject/cfg/impl/badConfig.json
new file mode 100644
index 0000000..a76552e
--- /dev/null
+++ b/core/net/src/test/resources/org/onosproject/cfg/impl/badConfig.json
@@ -0,0 +1,5 @@
+{
+  "fooComponent": {
+    badconfig
+  }
+}
\ No newline at end of file
diff --git a/core/net/src/test/resources/org/onosproject/cfg/impl/basic.json b/core/net/src/test/resources/org/onosproject/cfg/impl/basic.json
new file mode 100644
index 0000000..dd32924
--- /dev/null
+++ b/core/net/src/test/resources/org/onosproject/cfg/impl/basic.json
@@ -0,0 +1,5 @@
+{
+  "fooComponent": {
+    "testProperty": true
+  }
+}
\ No newline at end of file
