diff --git a/mdsal-resource/provider/pom.xml b/mdsal-resource/provider/pom.xml
index 5a61d76..ee0a3dc 100755
--- a/mdsal-resource/provider/pom.xml
+++ b/mdsal-resource/provider/pom.xml
@@ -53,7 +53,18 @@
             <artifactId>commons-codec</artifactId>
             <version>${commons.codec.version}</version>
         </dependency>
-
+        <dependency>
+            <groupId>org.testng</groupId>
+            <artifactId>testng</artifactId>
+            <version>6.11</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.mockito</groupId>
+            <artifactId>mockito-core</artifactId>
+            <version>${mockito.version}</version>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 
     <build>
diff --git a/mdsal-resource/provider/src/main/java/org/onap/ccsdk/sli/adaptors/resource/mdsal/ConfigResource.java b/mdsal-resource/provider/src/main/java/org/onap/ccsdk/sli/adaptors/resource/mdsal/ConfigResource.java
index 9cade88..d02530f 100644
--- a/mdsal-resource/provider/src/main/java/org/onap/ccsdk/sli/adaptors/resource/mdsal/ConfigResource.java
+++ b/mdsal-resource/provider/src/main/java/org/onap/ccsdk/sli/adaptors/resource/mdsal/ConfigResource.java
@@ -8,9 +8,9 @@
  * 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.
@@ -42,6 +42,10 @@
         restService = new RestService(sdncProtocol, sdncHost, sdncPort, sdncUser, sdncPasswd, RestService.PayloadType.XML);
     }
 
+    public ConfigResource(RestService restService) {
+    		this.restService = restService;
+    }
+
     @Override
     public QueryStatus isAvailable(String resource, String key, String prefix, SvcLogicContext ctx) throws SvcLogicException
     {
diff --git a/mdsal-resource/provider/src/main/java/org/onap/ccsdk/sli/adaptors/resource/mdsal/OperationalResource.java b/mdsal-resource/provider/src/main/java/org/onap/ccsdk/sli/adaptors/resource/mdsal/OperationalResource.java
index 92a7b6b..63fe8c6 100644
--- a/mdsal-resource/provider/src/main/java/org/onap/ccsdk/sli/adaptors/resource/mdsal/OperationalResource.java
+++ b/mdsal-resource/provider/src/main/java/org/onap/ccsdk/sli/adaptors/resource/mdsal/OperationalResource.java
@@ -8,9 +8,9 @@
  * 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.
@@ -44,6 +44,10 @@
 
     }
 
+    public OperationalResource(RestService restService) {
+    		this.restService = restService;
+    }
+
     @Override
     public QueryStatus isAvailable(String resource, String key, String prefix, SvcLogicContext ctx) throws SvcLogicException
     {
diff --git a/mdsal-resource/provider/src/test/java/org/onap/ccsdk/sli/adaptors/resource/mdsal/TestConfigResource.java b/mdsal-resource/provider/src/test/java/org/onap/ccsdk/sli/adaptors/resource/mdsal/TestConfigResource.java
new file mode 100644
index 0000000..a8f4d94
--- /dev/null
+++ b/mdsal-resource/provider/src/test/java/org/onap/ccsdk/sli/adaptors/resource/mdsal/TestConfigResource.java
@@ -0,0 +1,29 @@
+package org.onap.ccsdk.sli.adaptors.resource.mdsal;
+
+import junit.framework.TestCase;
+
+import static org.mockito.Mockito.mock;
+
+import org.onap.ccsdk.sli.core.sli.SvcLogicContext;
+
+public class TestConfigResource extends TestCase {
+
+	public void test() throws Exception {
+
+		RestService restService = mock(RestService.class);
+		SvcLogicContext ctx = new SvcLogicContext();
+
+		ConfigResource res = new ConfigResource(restService);
+
+		res.delete("my-resource", null, ctx);
+		res.notify("my-resource", "action", "key", ctx);
+		res.query("my-resource", false, "my-select", "mykey", "pfx", null, ctx);
+		res.release("my-resource", "mykey", ctx);
+		res.reserve("my-resource", "my-select", "mykey", "pfx", ctx);
+		res.exists("my-resource", "mykey", "pfx", ctx);
+		res.isAvailable("my-resource", "mykey", "pfx", ctx);
+		res.save("resource", false, false, null, null, null, ctx);
+		res.update("my-resource", "mykey", null, "pfx", ctx);
+	}
+
+}
diff --git a/mdsal-resource/provider/src/test/java/org/onap/ccsdk/sli/adaptors/resource/mdsal/TestOperationalResource.java b/mdsal-resource/provider/src/test/java/org/onap/ccsdk/sli/adaptors/resource/mdsal/TestOperationalResource.java
new file mode 100644
index 0000000..f5725e9
--- /dev/null
+++ b/mdsal-resource/provider/src/test/java/org/onap/ccsdk/sli/adaptors/resource/mdsal/TestOperationalResource.java
@@ -0,0 +1,29 @@
+package org.onap.ccsdk.sli.adaptors.resource.mdsal;
+
+import static org.mockito.Mockito.mock;
+
+import org.onap.ccsdk.sli.core.sli.SvcLogicContext;
+
+import junit.framework.TestCase;
+
+public class TestOperationalResource extends TestCase {
+
+
+	public void test() throws Exception {
+
+		RestService restService = mock(RestService.class);
+		SvcLogicContext ctx = new SvcLogicContext();
+
+		OperationalResource res = new OperationalResource(restService);
+
+		res.delete("my-resource", null, ctx);
+		res.notify("my-resource", "action", "key", ctx);
+		res.query("my-resource", false, "my-select", "mykey", "pfx", null, ctx);
+		res.release("my-resource", "mykey", ctx);
+		res.reserve("my-resource", "my-select", "mykey", "pfx", ctx);
+		res.exists("my-resource", "mykey", "pfx", ctx);
+		res.isAvailable("my-resource", "mykey", "pfx", ctx);
+		res.save("resource", false, false, null, null, null, ctx);
+		res.update("my-resource", "mykey", null, "pfx", ctx);
+	}
+}
