diff --git a/src/test/java/org/apache/sling/commons/crypto/webconsole/internal/EncryptWebConsolePluginTest.java b/src/test/java/org/apache/sling/commons/crypto/webconsole/internal/EncryptWebConsolePluginTest.java
index de31c2d..d4b7594 100644
--- a/src/test/java/org/apache/sling/commons/crypto/webconsole/internal/EncryptWebConsolePluginTest.java
+++ b/src/test/java/org/apache/sling/commons/crypto/webconsole/internal/EncryptWebConsolePluginTest.java
@@ -32,6 +32,7 @@
 import static com.google.common.truth.Truth.assertThat;
 import static org.junit.Assert.fail;
 import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
 public class EncryptWebConsolePluginTest {
@@ -62,4 +63,43 @@
         }
     }
 
+    @Test
+    public void testPostServiceIdParameterMissing() throws ServletException, IOException {
+        final BundleContext bundleContext = mock(BundleContext.class);
+        final HttpServletRequest request = mock(HttpServletRequest.class);
+        when(request.getParameter("service-id")).thenReturn(null);
+        when(request.getParameter("message")).thenReturn("");
+        final HttpServletResponse response = mock(HttpServletResponse.class);
+        final EncryptWebConsolePlugin plugin = new EncryptWebConsolePlugin();
+        plugin.activate(bundleContext);
+        plugin.doPost(request, response);
+        verify(response).sendError(HttpServletResponse.SC_BAD_REQUEST, "Parameter service-id is missing");
+    }
+
+    @Test
+    public void testPostMessageParameterMissing() throws IOException, ServletException {
+        final BundleContext bundleContext = mock(BundleContext.class);
+        final HttpServletRequest request = mock(HttpServletRequest.class);
+        when(request.getParameter("service-id")).thenReturn("");
+        when(request.getParameter("message")).thenReturn(null);
+        final HttpServletResponse response = mock(HttpServletResponse.class);
+        final EncryptWebConsolePlugin plugin = new EncryptWebConsolePlugin();
+        plugin.activate(bundleContext);
+        plugin.doPost(request, response);
+        verify(response).sendError(HttpServletResponse.SC_BAD_REQUEST, "Parameter message is missing");
+    }
+
+    @Test
+    public void testPostCryptoServiceNotAvailable() throws ServletException, IOException {
+        final BundleContext bundleContext = mock(BundleContext.class);
+        final HttpServletRequest request = mock(HttpServletRequest.class);
+        when(request.getParameter("service-id")).thenReturn("0");
+        when(request.getParameter("message")).thenReturn("");
+        final HttpServletResponse response = mock(HttpServletResponse.class);
+        final EncryptWebConsolePlugin plugin = new EncryptWebConsolePlugin();
+        plugin.activate(bundleContext);
+        plugin.doPost(request, response);
+        verify(response).sendError(HttpServletResponse.SC_NOT_FOUND, "Crypto service with service id 0 not found");
+    }
+
 }
