# HG changeset patch # User Severin Gehwolf # Date 1386005316 -3600 # Node ID b9dc33ef549a2100ea33605bc6ec580e402705ed # Parent 9ecfae760078f1d6ac0c55d0805c205a3f0cf2ca 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 diff -r 9ecfae760078 -r b9dc33ef549a client/command/src/main/java/com/redhat/thermostat/client/command/cli/PingCommand.java --- 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 translator = LocaleResources.createLocalizer(); - private class PongListener implements RequestResponseListener { + static class PongListener implements RequestResponseListener { private PrintStream out; private final Semaphore responseBarrier; + private final Translate t; - public PongListener(PrintStream out, Semaphore responseBarrier) { + PongListener(PrintStream out, Semaphore responseBarrier, Translate 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) { diff -r 9ecfae760078 -r b9dc33ef549a client/command/src/test/java/com/redhat/thermostat/client/command/cli/PingCommandTest.java --- 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 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 }