diff --git a/appc-adapters/appc-chef-adapter/appc-chef-adapter-bundle/src/test/java/org/onap/appc/adapter/chef/impl/ChefAdapterImplTest.java b/appc-adapters/appc-chef-adapter/appc-chef-adapter-bundle/src/test/java/org/onap/appc/adapter/chef/impl/ChefAdapterImplTest.java
index 9289330..62de292 100644
--- a/appc-adapters/appc-chef-adapter/appc-chef-adapter-bundle/src/test/java/org/onap/appc/adapter/chef/impl/ChefAdapterImplTest.java
+++ b/appc-adapters/appc-chef-adapter/appc-chef-adapter-bundle/src/test/java/org/onap/appc/adapter/chef/impl/ChefAdapterImplTest.java
@@ -21,6 +21,7 @@
 
 
 import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
 import static org.mockito.Answers.RETURNS_DEEP_STUBS;
 import static org.mockito.BDDMockito.given;
 
@@ -38,6 +39,7 @@
 import org.onap.appc.adapter.chef.chefclient.ChefApiClientFactory;
 import org.onap.appc.adapter.chef.chefclient.api.ChefResponse;
 import org.onap.ccsdk.sli.core.sli.SvcLogicContext;
+import org.onap.ccsdk.sli.core.sli.SvcLogicException;
 
 @RunWith(MockitoJUnitRunner.class)
 public class ChefAdapterImplTest {
@@ -149,4 +151,45 @@
             .isEqualTo(Integer.toString(HttpStatus.SC_INTERNAL_SERVER_ERROR));
         assertThat(svcLogicContext.getAttribute(CHEF_AGENT_MESSAGE_KEY)).isEqualTo(new RuntimeException().toString());
     }
-}
+
+    @Test
+    public void chefInfo_shouldUpdateSvcLogicContext_withFailStatusAndMsg_andThrowException_whenUsernameParamIsMissing() {
+        Map<String, String> params = ImmutableMap.of(
+            "serverAddress", "http://chefAddress",
+            "organizations", "onap");
+        checkIfInputParamsAreValidated(params);
+    }
+
+    @Test
+    public void chefInfo_shouldUpdateSvcLogicContext_withFailStatusAndMsg_andThrowException_whenServerAddressParamIsMissing() {
+        Map<String, String> params = ImmutableMap.of(
+            "username", "TestUsername",
+            "organizations", "onap");
+        checkIfInputParamsAreValidated(params);
+    }
+
+    @Test
+    public void chefInfo_shouldUpdateSvcLogicContext_withFailStatusAndMsg_andThrowException_whenOrganizationsParamIsMissing() {
+        Map<String, String> params = ImmutableMap.of(
+            "username", "TestUsername",
+            "serverAddress", "http://chefAddress");
+        checkIfInputParamsAreValidated(params);
+    }
+
+    private void checkIfInputParamsAreValidated(Map<String, String> params) {
+        // GIVEN
+        String expectedErrorMsg = "Missing mandatory param(s) such as username, serverAddress, organizations";
+        SvcLogicContext svcLogicContext = new SvcLogicContext();
+
+        // WHEN// THEN
+        assertThatExceptionOfType(SvcLogicException.class)
+            .isThrownBy(() -> chefAdapterFactory.create().chefGet(params, svcLogicContext))
+            .withMessage("Chef Adapter error:"
+                + expectedErrorMsg);
+        assertThat(svcLogicContext.getStatus()).isEqualTo("failure");
+        assertThat(svcLogicContext.getAttribute("chefServerResult.code"))
+            .isEqualTo(Integer.toString(HttpStatus.SC_UNAUTHORIZED));
+        assertThat(svcLogicContext.getAttribute("chefServerResult.message"))
+            .isEqualTo(expectedErrorMsg);
+    }
+}
\ No newline at end of file
