changeset 1379:b9dc33ef549a

Fix String error response on auth-fail for ping. Reviewed-by: omajid Review-thread: http://icedtea.classpath.org/pipermail/thermostat/2013-December/008992.html PR1619
author Severin Gehwolf <sgehwolf@redhat.com>
date Mon, 02 Dec 2013 18:28:36 +0100
parents 9ecfae760078
children b4c7ee6fb5c5
files client/command/src/main/java/com/redhat/thermostat/client/command/cli/PingCommand.java client/command/src/test/java/com/redhat/thermostat/client/command/cli/PingCommandTest.java
diffstat 2 files changed, 41 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/client/command/src/main/java/com/redhat/thermostat/client/command/cli/PingCommand.java	Mon Dec 02 14:04:06 2013 +0100
+++ b/client/command/src/main/java/com/redhat/thermostat/client/command/cli/PingCommand.java	Mon Dec 02 18:28:36 2013 +0100
@@ -67,35 +67,37 @@
 
     private static final Translate<LocaleResources> translator = LocaleResources.createLocalizer();
 
-    private class PongListener implements RequestResponseListener {
+    static class PongListener implements RequestResponseListener {
 
         private PrintStream out;
         private final Semaphore responseBarrier;
+        private final Translate<LocaleResources> t;
 
-        public PongListener(PrintStream out, Semaphore responseBarrier) {
+        PongListener(PrintStream out, Semaphore responseBarrier, Translate<LocaleResources> t) {
             this.out = out;
             this.responseBarrier = responseBarrier;
+            this.t = t;
         }
 
         @Override
         public void fireComplete(Request request, Response response) {
             switch (response.getType()) {
             case ERROR:
-                out.println(translator.localize(LocaleResources.COMMAND_PING_RESPONSE_ERROR, request.getTarget().toString()).getContents());
+                out.println(t.localize(LocaleResources.COMMAND_PING_RESPONSE_ERROR, request.getTarget().toString()).getContents());
                 break;
             case AUTH_FAILED:
-                out.println(translator.localize(LocaleResources.COMMAND_PING_RESPONSE_AUTH_FAILED, request.getTarget().toString()));
+                out.println(t.localize(LocaleResources.COMMAND_PING_RESPONSE_AUTH_FAILED, request.getTarget().toString()).getContents());
                 break;
             case OK:
                 // fallthrough
             case NOOP:
-                out.println(translator.localize(LocaleResources.COMMAND_PING_RESPONSE_OK, request.getTarget().toString()).getContents());
+                out.println(t.localize(LocaleResources.COMMAND_PING_RESPONSE_OK, request.getTarget().toString()).getContents());
                 break;
             case NOK:
-                out.println(translator.localize(LocaleResources.COMMAND_PING_RESPONSE_REFUSED).getContents());
+                out.println(t.localize(LocaleResources.COMMAND_PING_RESPONSE_REFUSED).getContents());
                 break;
             default:
-                out.println(translator.localize(LocaleResources.COMMAND_PING_RESPONSE_UNKNOWN).getContents());
+                out.println(t.localize(LocaleResources.COMMAND_PING_RESPONSE_UNKNOWN).getContents());
                 break;
             }
             responseBarrier.release();
@@ -148,7 +150,7 @@
         ping.setParameter(Request.ACTION, PING_ACTION_NAME);
         ping.setReceiver("com.redhat.thermostat.agent.command.internal.PingReceiver");
         final Semaphore responseBarrier = new Semaphore(0);
-        ping.addListener(new PongListener(out, responseBarrier));
+        ping.addListener(new PongListener(out, responseBarrier, translator));
 
         ServiceReference queueRef = context.getServiceReference(RequestQueue.class.getName());
         if (queueRef == null) {
--- a/client/command/src/test/java/com/redhat/thermostat/client/command/cli/PingCommandTest.java	Mon Dec 02 14:04:06 2013 +0100
+++ b/client/command/src/test/java/com/redhat/thermostat/client/command/cli/PingCommandTest.java	Mon Dec 02 18:28:36 2013 +0100
@@ -42,12 +42,23 @@
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
+import java.io.ByteArrayOutputStream;
+import java.io.PrintStream;
+import java.net.InetSocketAddress;
 import java.util.Arrays;
+import java.util.concurrent.Semaphore;
 
 import org.junit.Test;
 
+import com.redhat.thermostat.client.command.cli.PingCommand.PongListener;
+import com.redhat.thermostat.client.command.internal.LocaleResources;
 import com.redhat.thermostat.common.cli.CommandException;
 import com.redhat.thermostat.common.cli.SimpleArguments;
+import com.redhat.thermostat.common.command.Request;
+import com.redhat.thermostat.common.command.Response;
+import com.redhat.thermostat.common.command.Response.ResponseType;
+import com.redhat.thermostat.shared.locale.LocalizedString;
+import com.redhat.thermostat.shared.locale.Translate;
 import com.redhat.thermostat.storage.core.HostRef;
 import com.redhat.thermostat.storage.dao.AgentInfoDAO;
 import com.redhat.thermostat.storage.dao.HostInfoDAO;
@@ -151,6 +162,26 @@
             assertEquals("Unable to access command request queue: service not available", e.getMessage());
         }
     }
+    
+    /*
+     * Tests whether getContents() gets called on auth fail responses.
+     */
+    @Test
+    public void testAuthFailStringMessage() {
+        ByteArrayOutputStream bout = new ByteArrayOutputStream();
+        PrintStream out = new PrintStream(bout);
+        Semaphore responseBarrier = new Semaphore(1);
+        InetSocketAddress addr = InetSocketAddress.createUnresolved("foo", 1234);
+        @SuppressWarnings("unchecked")
+        Translate<LocaleResources> t = mock(Translate.class);
+        when(t.localize(LocaleResources.COMMAND_PING_RESPONSE_AUTH_FAILED, addr.toString())).thenReturn(new LocalizedString("auth_fail"));
+        PongListener listener = new PongListener(out, responseBarrier, t);
+        responseBarrier.release();
+        Request request = mock(Request.class);
+        when(request.getTarget()).thenReturn(addr);
+        listener.fireComplete(request, new Response(ResponseType.AUTH_FAILED));
+        assertEquals("auth_fail\n", bout.toString());
+    }
 
     // TODO add more tests that check the actual behaviour under valid input
 }