diff --git a/appc-directed-graph/dg-loader/provider/pom.xml b/appc-directed-graph/dg-loader/provider/pom.xml
index 8736135..c074ca6 100644
--- a/appc-directed-graph/dg-loader/provider/pom.xml
+++ b/appc-directed-graph/dg-loader/provider/pom.xml
@@ -72,6 +72,18 @@
             <groupId>org.slf4j</groupId>
             <artifactId>jcl-over-slf4j</artifactId>
         </dependency>
+       <dependency>
+		<groupId>org.powermock</groupId>
+                <artifactId>powermock-api-mockito</artifactId>
+                <version>1.6.2</version>
+                <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.mockito</groupId>
+            <artifactId>mockito-core</artifactId>
+            <scope>test</scope>
+        </dependency>
+
     </dependencies>
 
     <build>
diff --git a/appc-directed-graph/dg-loader/provider/src/main/java/org/openecomp/sdnc/dg/loader/DGXMLActivate.java b/appc-directed-graph/dg-loader/provider/src/main/java/org/openecomp/sdnc/dg/loader/DGXMLActivate.java
index b37400b..ac3f639 100644
--- a/appc-directed-graph/dg-loader/provider/src/main/java/org/openecomp/sdnc/dg/loader/DGXMLActivate.java
+++ b/appc-directed-graph/dg-loader/provider/src/main/java/org/openecomp/sdnc/dg/loader/DGXMLActivate.java
@@ -1,9 +1,11 @@
 /*-
  * ============LICENSE_START=======================================================
- * ONAP : APP-C
+ * ONAP : APPC
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property.  All rights reserved.
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
+ * Copyright (C) 2017 Amdocs
+ * =============================================================================
  * 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
@@ -15,6 +17,8 @@
  * 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.
+ * 
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
  * ============LICENSE_END=========================================================
  */
 
@@ -46,6 +50,10 @@
         }
         this.store = SvcLogicStoreFactory.getSvcLogicStore(propfile);
     }
+    
+    protected DGXMLActivate(SvcLogicStore store) {
+        this.store = store;
+    }
 
 
     public void activateDg(String activateFilePath) throws Exception {
diff --git a/appc-directed-graph/dg-loader/provider/src/main/java/org/openecomp/sdnc/dg/loader/DGXMLLoad.java b/appc-directed-graph/dg-loader/provider/src/main/java/org/openecomp/sdnc/dg/loader/DGXMLLoad.java
index b7651bb..13e5e29 100644
--- a/appc-directed-graph/dg-loader/provider/src/main/java/org/openecomp/sdnc/dg/loader/DGXMLLoad.java
+++ b/appc-directed-graph/dg-loader/provider/src/main/java/org/openecomp/sdnc/dg/loader/DGXMLLoad.java
@@ -4,6 +4,8 @@
  * ================================================================================
  * Copyright (C) 2017 AT&T Intellectual Property.  All rights reserved.
  * ================================================================================
+ * Copyright (C) 2017 Amdocs
+ * =============================================================================
  * 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
@@ -15,6 +17,8 @@
  * 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.
+ * 
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
  * ============LICENSE_END=========================================================
  */
 
@@ -46,6 +50,10 @@
         this.store = SvcLogicStoreFactory.getSvcLogicStore(propfile);
     }
 
+    protected DGXMLLoad(SvcLogicStore store) throws Exception {
+        this.store=store;
+    }
+    
     public void loadDGXMLFile(String dgXMLpath) throws SvcLogicException{
         if(dgXMLpath != null ){
             SvcLogicParser.load(dgXMLpath, this.store);
@@ -95,7 +103,6 @@
             }else{
                 throw new Exception("Sufficient inputs for DGXMLLoadNActivate are missing <xmlpath> <dbPropertyfile>");
             }
-
             DGXMLLoad dgXMLLoadDB = new DGXMLLoad(propertyPath);
             dgXMLLoadDB.loadDGXMLDir(xmlPath);
         } catch (Exception e) {
diff --git a/appc-directed-graph/dg-loader/provider/src/main/java/org/openecomp/sdnc/dg/loader/DGXMLLoadNActivate.java b/appc-directed-graph/dg-loader/provider/src/main/java/org/openecomp/sdnc/dg/loader/DGXMLLoadNActivate.java
index f5eb244..ae7156c 100644
--- a/appc-directed-graph/dg-loader/provider/src/main/java/org/openecomp/sdnc/dg/loader/DGXMLLoadNActivate.java
+++ b/appc-directed-graph/dg-loader/provider/src/main/java/org/openecomp/sdnc/dg/loader/DGXMLLoadNActivate.java
@@ -4,6 +4,8 @@
  * ================================================================================
  * Copyright (C) 2017 AT&T Intellectual Property.  All rights reserved.
  * ================================================================================
+ * Copyright (C) 2017 Amdocs
+ * =============================================================================
  * 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
@@ -15,6 +17,8 @@
  * 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.
+ * 
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
  * ============LICENSE_END=========================================================
  */
 
@@ -47,6 +51,10 @@
         this.store = SvcLogicStoreFactory.getSvcLogicStore(propfile);
     }
 
+    protected DGXMLLoadNActivate(SvcLogicStore store) {
+        this.store=store;
+    }
+
     public void loadDGXMLFile(String dgXMLpath) throws SvcLogicException{
         if(dgXMLpath != null ){
             SvcLogicParser.load(dgXMLpath, this.store);
@@ -164,5 +172,4 @@
             System.exit(1);
         }
     }
-
 }
diff --git a/appc-directed-graph/dg-loader/provider/src/test/java/org/openecomp/sdnc/dg/loader/DGLoaderTest.java b/appc-directed-graph/dg-loader/provider/src/test/java/org/openecomp/sdnc/dg/loader/DGLoaderTest.java
new file mode 100644
index 0000000..fea884c
--- /dev/null
+++ b/appc-directed-graph/dg-loader/provider/src/test/java/org/openecomp/sdnc/dg/loader/DGLoaderTest.java
@@ -0,0 +1,188 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP : APPC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Copyright (C) 2017 Amdocs
+ * =============================================================================
+ * 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.
+ * 
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdnc.dg.loader;
+
+import static org.junit.Assert.*;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Properties;
+
+import org.apache.commons.io.FileUtils;
+import org.eclipse.osgi.framework.internal.core.BundleContextImpl;
+import org.eclipse.osgi.framework.internal.core.BundleHost;
+import org.junit.Rule;
+import org.junit.Test;
+import org.mockito.Mockito;
+import org.openecomp.sdnc.sli.ConfigurationException;
+import org.openecomp.sdnc.sli.SvcLogicException;
+import org.openecomp.sdnc.sli.SvcLogicStore;
+import org.openecomp.sdnc.sli.SvcLogicStoreFactory;
+import org.osgi.framework.BundleContext;
+import org.powermock.reflect.Whitebox;
+import org.powermock.*;
+
+public class DGLoaderTest {
+    
+    @Test
+    public void testXMLGenerator() throws Exception {
+        DGXMLGenerator application = new DGXMLGenerator();
+        String jsonPath = null;
+        String xmlPath = null;
+        String propertyPath = "somePath";
+        // Generate, GenerateLoad, GenerateLoadActivate
+        String []args = new String[]{"src/test/resources/json","src/test/resources/xml"};
+        //logger.info("DGXML Conversion Started with arguments :"+ args[0] +":"+ args[1]);
+        if(args != null && args.length >= 2){
+            jsonPath = args[0];
+            xmlPath = args[1];
+        }
+    
+        application.generateXMLFromJSON(jsonPath, xmlPath, propertyPath);
+        File dir=new File("src/test/resources/xml");
+        String extensions[]=new String[] {"xml","XML"};
+        List<File> files = new ArrayList<File>();
+        files=(List<File>) FileUtils.listFiles(dir, extensions, true);
+        assertNotNull(files.get(0));
+        assertNotNull(files.get(0).getName());
+    }
+    
+    @Test
+    public void testXMLGeneratorMain() throws Exception {
+        String []args = new String[]{"src/test/resources/json","src/test/resources/xml"};
+        DGXMLGenerator.main(args);
+        File dir=new File("src/test/resources/xml");
+        String extensions[]=new String[] {"xml","XML"};
+        List<File> files = new ArrayList<File>();
+        files=(List<File>) FileUtils.listFiles(dir, extensions, true);
+        assertNotNull(files.get(0));
+        assertNotNull(files.get(0).getName());
+    }
+        
+    @Test
+    public void testDGLoader() throws Exception {
+        String propertyPath = "src/test/resources/dummy.properties";
+        String xmlPath = "src/test/resources/xml/Appc_UniTest.xml";
+        DGXMLLoad dgXMLLoad = new MockDGXMLLoad();
+        dgXMLLoad.loadDGXMLFile(xmlPath);
+       }
+    
+    @Test
+    public void testDGLoaderWithDir() throws Exception {
+        String propertyPath = "src/test/resources/dummy.properties";
+        String xmlPath = "src/test/resources/xml";
+        DGXMLLoad dgXMLLoad = new MockDGXMLLoad();
+        Whitebox.invokeMethod(dgXMLLoad, "loadDGXMLDir",xmlPath);
+    }
+    
+    @Test
+    public void testDGLoaderWithDirThrowsException() throws Exception {
+        String propertyPath = "src/test/resources/dummy.properties";
+        String xmlPath = "src/test/resources/xml/xml";
+        DGXMLLoad dgXMLLoad = new MockDGXMLLoad();
+        Whitebox.invokeMethod(dgXMLLoad, "loadDGXMLDir",xmlPath);
+    }
+    
+    @Test
+    public void testDGActivate() throws Exception {
+        String propertyPath = "src/test/resources/dummy.properties";
+        String activateFilePath = "src/test/resources/dg_activate_test";
+        DGXMLActivate dgXMLActivate = new MockDGXMLActivate();
+        dgXMLActivate.activateDg(activateFilePath);
+
+    }
+    
+    @Test
+    public void testDGActivateThrowsException() throws Exception {
+        String propertyPath = "src/test/resources/dummy.properties";
+        String activateFilePath = "src/test/resources/someFile";
+        DGXMLActivate dgXMLActivate = new MockDGXMLActivate();
+        dgXMLActivate.activateDg(activateFilePath);
+
+    }
+    
+    @Test
+    public void testDGLoadNActivate() throws Exception {
+        String propertyPath = "src/test/resources/dummy.properties";
+        String activateFilePath = "src/test/resources/dg_activate_test";
+        String xmlPath = "src/test/resources/xml/Appc_UniTest.xml";
+        DGXMLLoadNActivate dgXMLLoadNActivate = new MockDGXMLLoadNActivate();
+        dgXMLLoadNActivate.loadDGXMLFile(xmlPath);
+        dgXMLLoadNActivate.activateDg(activateFilePath);
+    }
+    
+    @Test
+    public void testDGLoadNActivateThrowsException() throws Exception {
+        String propertyPath = "src/test/resources/dummy.properties";
+        String activateFilePath = "src/test/resources/someFile";
+        String xmlPath = "src/test/resources/xml/Appc_UniTest.xml";
+        DGXMLLoadNActivate dgXMLLoadNActivate = new MockDGXMLLoadNActivate();
+        dgXMLLoadNActivate.loadDGXMLFile(xmlPath);
+        dgXMLLoadNActivate.activateDg(activateFilePath);
+    }
+    
+    @Test
+    public void testDGLoadNActivateloadDGXMLDir() throws Exception {
+        String xmlPath = "src/test/resources/xml";
+        DGXMLLoadNActivate dgXMLLoadNActivate = new MockDGXMLLoadNActivate();
+        Whitebox.invokeMethod(dgXMLLoadNActivate,"loadDGXMLDir",xmlPath);
+     }
+    
+    
+    public void testDGLoadNActivateloadDGXMLDirThrowsException() throws Exception {
+        String xmlPath = "src/test/resources/someDir";
+        DGXMLLoadNActivate dgXMLLoadNActivate = new MockDGXMLLoadNActivate();
+        Whitebox.invokeMethod(dgXMLLoadNActivate,"loadDGXMLDir",xmlPath);
+     }
+    
+    @Test
+    public void testDGLoaderActivator() throws Exception {
+        String xmlPath = "src/test/resources/xml";
+        DGLoaderActivator dgLoaderActivator = new DGLoaderActivator();
+        dgLoaderActivator.start(null);
+        dgLoaderActivator.stop(null);
+        assertTrue(true);
+    }
+
+    @Test (expected=Exception.class)
+    public void testDGActivateConstructorThrowsException() throws Exception {
+        String somePath="";
+        DGXMLActivate dgXMLActivate = new DGXMLActivate(somePath);
+    }
+    
+    @Test (expected=Exception.class)
+    public void testDGXMLLoadConstructorThrowsException() throws Exception {
+        String somePath="";
+        DGXMLLoad dgXMLLoad = new DGXMLLoad(somePath);
+    }
+    
+    @Test (expected=Exception.class)
+    public void testDGLoadNActivateConstructorThrowsException() throws Exception {
+        String somePath="";
+        DGXMLLoadNActivate dgXMLLoadNActivate = new DGXMLLoadNActivate(somePath);
+    }
+    
+}
diff --git a/appc-directed-graph/dg-loader/provider/src/test/java/org/openecomp/sdnc/dg/loader/MockDGXMLActivate.java b/appc-directed-graph/dg-loader/provider/src/test/java/org/openecomp/sdnc/dg/loader/MockDGXMLActivate.java
new file mode 100644
index 0000000..5143120
--- /dev/null
+++ b/appc-directed-graph/dg-loader/provider/src/test/java/org/openecomp/sdnc/dg/loader/MockDGXMLActivate.java
@@ -0,0 +1,35 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP : APPC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Copyright (C) 2017 Amdocs
+ * =============================================================================
+ * 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.
+ * 
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdnc.dg.loader;
+
+import org.openecomp.sdnc.sli.SvcLogicStore;
+
+public class MockDGXMLActivate extends DGXMLActivate {
+    private final static SvcLogicStore storeChild=MockSvcLogicFactory.getMockSvcLogicStore();;
+    MockDGXMLActivate() throws Exception {
+        super(storeChild);
+    }
+
+}
diff --git a/appc-directed-graph/dg-loader/provider/src/test/java/org/openecomp/sdnc/dg/loader/MockDGXMLLoad.java b/appc-directed-graph/dg-loader/provider/src/test/java/org/openecomp/sdnc/dg/loader/MockDGXMLLoad.java
new file mode 100644
index 0000000..56cabbf
--- /dev/null
+++ b/appc-directed-graph/dg-loader/provider/src/test/java/org/openecomp/sdnc/dg/loader/MockDGXMLLoad.java
@@ -0,0 +1,37 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP : APPC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Copyright (C) 2017 Amdocs
+ * =============================================================================
+ * 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.
+ * 
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdnc.dg.loader;
+
+import org.mockito.internal.util.reflection.Whitebox;
+import org.openecomp.sdnc.sli.SvcLogicStore;
+
+public class MockDGXMLLoad extends DGXMLLoad{
+
+    private final static SvcLogicStore storeChild=MockSvcLogicFactory.getMockSvcLogicStore();;
+    MockDGXMLLoad() throws Exception {
+        super(storeChild);
+    }
+
+}
diff --git a/appc-directed-graph/dg-loader/provider/src/test/java/org/openecomp/sdnc/dg/loader/MockDGXMLLoadNActivate.java b/appc-directed-graph/dg-loader/provider/src/test/java/org/openecomp/sdnc/dg/loader/MockDGXMLLoadNActivate.java
new file mode 100644
index 0000000..266f1cd
--- /dev/null
+++ b/appc-directed-graph/dg-loader/provider/src/test/java/org/openecomp/sdnc/dg/loader/MockDGXMLLoadNActivate.java
@@ -0,0 +1,34 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP : APPC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Copyright (C) 2017 Amdocs
+ * =============================================================================
+ * 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.
+ * 
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdnc.dg.loader;
+
+import org.openecomp.sdnc.sli.SvcLogicStore;
+
+public class MockDGXMLLoadNActivate extends DGXMLLoadNActivate {
+    private final static SvcLogicStore storeChild=MockSvcLogicFactory.getMockSvcLogicStore();;
+        MockDGXMLLoadNActivate() throws Exception {
+        super(storeChild);
+    }
+}
diff --git a/appc-directed-graph/dg-loader/provider/src/test/java/org/openecomp/sdnc/dg/loader/MockSvcLogicDblibStore.java b/appc-directed-graph/dg-loader/provider/src/test/java/org/openecomp/sdnc/dg/loader/MockSvcLogicDblibStore.java
new file mode 100644
index 0000000..ab96ef7
--- /dev/null
+++ b/appc-directed-graph/dg-loader/provider/src/test/java/org/openecomp/sdnc/dg/loader/MockSvcLogicDblibStore.java
@@ -0,0 +1,86 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP : APPC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Copyright (C) 2017 Amdocs
+ * =============================================================================
+ * 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.
+ * 
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdnc.dg.loader;
+
+import java.util.Properties;
+
+import org.openecomp.sdnc.sli.SvcLogicDblibStore;
+import org.openecomp.sdnc.sli.SvcLogicException;
+import org.openecomp.sdnc.sli.SvcLogicGraph;
+import org.openecomp.sdnc.sli.SvcLogicStore;
+
+public class MockSvcLogicDblibStore implements SvcLogicStore {
+
+    @Override
+    public boolean hasGraph(String module, String rpc, String version,
+            String mode) {
+        return true;
+    }
+    @Override
+    public SvcLogicGraph fetch(String module, String rpc, String version,
+            String mode) throws SvcLogicException {
+        SvcLogicGraph retVal=new SvcLogicGraph();
+        retVal.setMode("sync");
+        retVal.setModule("Appc");
+        retVal.setRpc("unitTestDG");
+        retVal.setVersion("4.0.0");
+        return retVal;
+        
+    }
+    @Override
+    public void store(SvcLogicGraph graph) throws SvcLogicException {
+
+    }
+    @Override
+    public void init(Properties props) throws SvcLogicException {
+        // TODO Auto-generated method stub
+        
+    }
+    @Override
+    public void registerNodeType(String nodeType) throws SvcLogicException {
+        // TODO Auto-generated method stub
+        
+    }
+    @Override
+    public void unregisterNodeType(String nodeType) throws SvcLogicException {
+        // TODO Auto-generated method stub
+        
+    }
+    @Override
+    public boolean isValidNodeType(String nodeType) throws SvcLogicException {
+        // TODO Auto-generated method stub
+        return true;
+    }
+    @Override
+    public void delete(String module, String rpc, String version, String mode) throws SvcLogicException {
+        // TODO Auto-generated method stub
+        
+    }
+    @Override
+    public void activate(SvcLogicGraph graph) throws SvcLogicException {
+        // TODO Auto-generated method stub
+        
+    }
+}
diff --git a/appc-directed-graph/dg-loader/provider/src/test/java/org/openecomp/sdnc/dg/loader/MockSvcLogicFactory.java b/appc-directed-graph/dg-loader/provider/src/test/java/org/openecomp/sdnc/dg/loader/MockSvcLogicFactory.java
new file mode 100644
index 0000000..e38c64e
--- /dev/null
+++ b/appc-directed-graph/dg-loader/provider/src/test/java/org/openecomp/sdnc/dg/loader/MockSvcLogicFactory.java
@@ -0,0 +1,36 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP : APPC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Copyright (C) 2017 Amdocs
+ * =============================================================================
+ * 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.
+ * 
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdnc.dg.loader;
+
+import org.openecomp.sdnc.sli.SvcLogicStore;
+import org.openecomp.sdnc.sli.SvcLogicStoreFactory;
+import org.openecomp.sdnc.sli.SvcLogicDblibStore;
+
+public class MockSvcLogicFactory extends SvcLogicStoreFactory {
+    static SvcLogicStore getMockSvcLogicStore() {
+         SvcLogicStore store=new MockSvcLogicDblibStore();
+         return store;
+    }
+}
diff --git a/appc-directed-graph/dg-loader/provider/src/test/resources/dg_activate_test b/appc-directed-graph/dg-loader/provider/src/test/resources/dg_activate_test
new file mode 100644
index 0000000..895e177
--- /dev/null
+++ b/appc-directed-graph/dg-loader/provider/src/test/resources/dg_activate_test
@@ -0,0 +1,3 @@
+# MODULE NAME:RPC NAME:VERSION:MODE
+# Example -> APPC:GetDeviceRunningConfiguration:3.0.0:sync
+Appc:UniTest:4.0.0:sync
\ No newline at end of file
diff --git a/appc-directed-graph/dg-loader/provider/src/test/resources/dummy.properties b/appc-directed-graph/dg-loader/provider/src/test/resources/dummy.properties
new file mode 100644
index 0000000..4545f89
--- /dev/null
+++ b/appc-directed-graph/dg-loader/provider/src/test/resources/dummy.properties
@@ -0,0 +1,38 @@
+###
+# ============LICENSE_START=======================================================
+# ONAP : APPC
+# ================================================================================
+# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+# ================================================================================
+# Copyright (C) 2017 Amdocs
+# =============================================================================
+# 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.
+# 
+# ECOMP is a trademark and service mark of AT&T Intellectual Property.
+# ============LICENSE_END=========================================================
+###
+
+org.openecomp.sdnc.sli.dbtype=jdbc
+
+org.openecomp.sdnc.sli.jdbc.hosts=
+org.openecomp.sdnc.sli.jdbc.url=
+org.openecomp.sdnc.sli.jdbc.database=
+org.openecomp.sdnc.sli.jdbc.user=
+org.openecomp.sdnc.sli.jdbc.password=
+org.openecomp.sdnc.sli.jdbc.connection.name=
+
+org.openecomp.sdnc.sli.jdbc.connection.timeout=50
+org.openecomp.sdnc.sli.jdbc.request.timeout=100
+org.openecomp.sdnc.sli.jdbc.limit.init=10
+org.openecomp.sdnc.sli.jdbc.limit.min=10
+org.openecomp.sdnc.sli.jdbc.limit.max=20
diff --git a/appc-directed-graph/dg-loader/provider/src/test/resources/json/Appc_UniTest.json b/appc-directed-graph/dg-loader/provider/src/test/resources/json/Appc_UniTest.json
new file mode 100644
index 0000000..2a6e49b
--- /dev/null
+++ b/appc-directed-graph/dg-loader/provider/src/test/resources/json/Appc_UniTest.json
@@ -0,0 +1 @@
+[{"id":"1606180e.6254c","type":"dgstart","name":"DGSTART","outputs":1,"x":494.75,"y":149.75,"z":"7174441c.9fb7f4","wires":[["f650067e.2ad7e"]]},{"id":"f650067e.2ad7e","type":"service-logic","name":"Appc 4.0.0","module":"Appc","version":"4.0.0","comments":"","xml":"<service-logic xmlns='http://www.openecomp.org/sdnc/svclogic' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:schemaLocation='http://www.openecomp.org/sdnc/svclogic ./svclogic.xsd' module='Appc' version='4.0.0'>","outputs":1,"x":642.75,"y":151.75,"z":"7174441c.9fb7f4","wires":[["10b2117c.ee118f"]]},{"id":"e928ee64.3762c","type":"block","name":"block","xml":"<block>\n","atomic":"false","comments":"","outputs":1,"x":952.75,"y":145.75,"z":"7174441c.9fb7f4","wires":[["342ce050.4a2fe8"]]},{"id":"342ce050.4a2fe8","type":"returnSuccess","name":"return success","xml":"<return status='success'>\n\n","comments":"","x":1115.75,"y":146.75,"z":"7174441c.9fb7f4","wires":[]},{"id":"10b2117c.ee118f","type":"method","name":"unitTest","xml":"<method rpc='unitTestDG' mode='sync'>\n","comments":"","outputs":1,"x":815.75,"y":147.75,"z":"7174441c.9fb7f4","wires":[["e928ee64.3762c"]]}]
diff --git a/appc-directed-graph/dg-loader/provider/src/test/resources/xml/Appc_UniTest.xml b/appc-directed-graph/dg-loader/provider/src/test/resources/xml/Appc_UniTest.xml
new file mode 100644
index 0000000..6eca104
--- /dev/null
+++ b/appc-directed-graph/dg-loader/provider/src/test/resources/xml/Appc_UniTest.xml
@@ -0,0 +1,5 @@
+<service-logic xmlns='http://www.openecomp.org/sdnc/svclogic' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:schemaLocation='http://www.openecomp.org/sdnc/svclogic ./svclogic.xsd' module='Appc' version='4.0.0'><method rpc='unitTestDG' mode='sync'>
+<block>
+<return status='success'>
+
+</return></block></method></service-logic>
\ No newline at end of file
