# HG changeset patch # User Andrew Azores # Date 1480008893 18000 # Node ID b188a7f445f23004790b5f17737359260db7de2a # Parent fa302aa73bae72ab67ee9b8fd8051cbcc4995ba6 Clean up gc-command tests PR3241 Reviewed-by: neugens, jerboaa Review-thread: http://icedtea.classpath.org/pipermail/thermostat/2016-November/021731.html diff -r fa302aa73bae -r b188a7f445f2 vm-gc/command/src/main/java/com/redhat/thermostat/vm/gc/command/internal/GCCommandListener.java --- a/vm-gc/command/src/main/java/com/redhat/thermostat/vm/gc/command/internal/GCCommandListener.java Tue Nov 22 12:48:19 2016 -0500 +++ b/vm-gc/command/src/main/java/com/redhat/thermostat/vm/gc/command/internal/GCCommandListener.java Thu Nov 24 12:34:53 2016 -0500 @@ -50,14 +50,25 @@ import com.redhat.thermostat.vm.gc.command.locale.LocaleResources; public class GCCommandListener implements RequestResponseListener { + private static final Translate translator = LocaleResources.createLocalizer(); - private static final Logger logger = LoggingUtils - .getLogger(GCCommandListener.class); private final CountDownLatch latch = new CountDownLatch(1); - private PrintStream out; - private PrintStream err; + private final Logger logger; + private final PrintStream out; + private final PrintStream err; + + // injectable logger intended for testing only + GCCommandListener(Logger logger, PrintStream out, PrintStream err) { + this.logger = logger; + this.out = out; + this.err = err; + } + + GCCommandListener(PrintStream out, PrintStream err) { + this(LoggingUtils.getLogger(GCCommandListener.class), out, err); + } @Override public void fireComplete(Request request, Response response) { @@ -96,11 +107,4 @@ this.latch.await(milliseconds, TimeUnit.MILLISECONDS); } - public void setOut(PrintStream out) { - this.out = out; - } - - public void setErr(PrintStream err) { - this.err = err; - } } diff -r fa302aa73bae -r b188a7f445f2 vm-gc/command/src/main/java/com/redhat/thermostat/vm/gc/command/internal/GCCommandListenerFactoryImpl.java --- a/vm-gc/command/src/main/java/com/redhat/thermostat/vm/gc/command/internal/GCCommandListenerFactoryImpl.java Tue Nov 22 12:48:19 2016 -0500 +++ b/vm-gc/command/src/main/java/com/redhat/thermostat/vm/gc/command/internal/GCCommandListenerFactoryImpl.java Thu Nov 24 12:34:53 2016 -0500 @@ -41,9 +41,6 @@ class GCCommandListenerFactoryImpl implements GCCommandListenerFactory { @Override public GCCommandListener createListener(PrintStream out, PrintStream err) { - GCCommandListener gcCommandListener = new GCCommandListener(); - gcCommandListener.setOut(out); - gcCommandListener.setErr(err); - return gcCommandListener; + return new GCCommandListener(out, err); } } diff -r fa302aa73bae -r b188a7f445f2 vm-gc/command/src/test/java/com/redhat/thermostat/vm/gc/command/internal/GCCommandListenerTest.java --- a/vm-gc/command/src/test/java/com/redhat/thermostat/vm/gc/command/internal/GCCommandListenerTest.java Tue Nov 22 12:48:19 2016 -0500 +++ b/vm-gc/command/src/test/java/com/redhat/thermostat/vm/gc/command/internal/GCCommandListenerTest.java Thu Nov 24 12:34:53 2016 -0500 @@ -36,131 +36,74 @@ package com.redhat.thermostat.vm.gc.command.internal; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; -import static org.mockito.Matchers.any; -import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; -import java.io.ByteArrayOutputStream; +import org.junit.AfterClass; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; + import java.io.PrintStream; -import java.nio.charset.StandardCharsets; -import java.util.logging.Handler; +import java.util.Locale; import java.util.logging.Level; -import java.util.logging.LogRecord; import java.util.logging.Logger; -import org.junit.Before; -import org.junit.Test; -import org.mockito.invocation.InvocationOnMock; -import org.mockito.stubbing.Answer; - import com.redhat.thermostat.common.command.Request; import com.redhat.thermostat.common.command.Response; -import com.redhat.thermostat.common.utils.LoggingUtils; public class GCCommandListenerTest { - private final GCCommandListener listener = new GCCommandListener(); - private static final Logger logger = LoggingUtils - .getLogger(GCCommandListener.class); + private static Locale defaultLocale; + + private GCCommandListener listener; + + private Logger logger; + private PrintStream out; + private PrintStream err; - private PrintStream ps; - private ByteArrayOutputStream baos; + @BeforeClass + public static void setupClass() { + defaultLocale = Locale.getDefault(); + Locale.setDefault(Locale.US); + } + @AfterClass + public static void teardownClass() { + Locale.setDefault(defaultLocale); + } @Before public void setup() { - baos = new ByteArrayOutputStream(); - ps = new PrintStream(baos); - listener.setOut(ps); - listener.setErr(ps); + logger = mock(Logger.class); + out = mock(PrintStream.class); + err = mock(PrintStream.class); + + listener = new GCCommandListener(logger, out, err); } @Test public void testSuccessfulGCResponse() { - Request request = mock(Request.class); - - Response resp = new Response(Response.ResponseType.OK); - - Handler handler = mock(Handler.class); - logger.addHandler(handler); + listener.fireComplete(mock(Request.class), new Response(Response.ResponseType.OK)); - final boolean[] complete = {false}; - doAnswer(new Answer() { - @Override - public Object answer(InvocationOnMock invocation) throws Throwable { - LogRecord log = (LogRecord)invocation.getArguments()[0]; - if (log.getLevel().equals(Level.INFO)) { - complete[0] = true; - } - return null; - } - }).when(handler).publish(any(LogRecord.class)); - - listener.fireComplete(request, resp); - - assertTrue(complete[0]); - - String expected = "GC Successful for VM with PID: null\n"; - assertEquals(expected, new String(baos.toByteArray(), StandardCharsets.UTF_8)); + verify(logger).log(Level.INFO, "Garbage Collection performed on VM with PID null"); + verify(out).println("GC Successful for VM with PID: null"); } @Test public void testErrorResponse() { - Request request = mock(Request.class); - Response resp = new Response(Response.ResponseType.ERROR); - - Handler handler = mock(Handler.class); - logger.addHandler(handler); + listener.fireComplete(mock(Request.class), new Response(Response.ResponseType.ERROR)); - final boolean[] complete = {false}; - doAnswer(new Answer() { - @Override - public Object answer(InvocationOnMock invocation) throws Throwable { - LogRecord log = (LogRecord)invocation.getArguments()[0]; - if (log.getLevel().equals(Level.SEVERE)) { - complete[0] = true; - } - return null; - } - }).when(handler).publish(any(LogRecord.class)); - - listener.fireComplete(request, resp); - - assertTrue(complete[0]); - - String expected = "GC Request Error for VM with PID: null\n"; - assertEquals(expected, new String(baos.toByteArray(), StandardCharsets.UTF_8)); + verify(logger).log(Level.SEVERE, "GC Request error for VM PID null"); + verify(err).println("GC Request Error for VM with PID: null"); } @Test public void testDefaultResponse() { - Request request = mock(Request.class); - Response resp = new Response(Response.ResponseType.NOK); - - Handler handler = mock(Handler.class); - logger.addHandler(handler); + listener.fireComplete(mock(Request.class), new Response(Response.ResponseType.NOK)); - final boolean[] complete = {false}; - doAnswer(new Answer() { - @Override - public Object answer(InvocationOnMock invocation) throws Throwable { - LogRecord log = (LogRecord)invocation.getArguments()[0]; - if (log.getLevel().equals(Level.WARNING)) { - complete[0] = true; - } - return null; - } - }).when(handler).publish(any(LogRecord.class)); + verify(logger).log(Level.WARNING, "Unknown result from GC command"); + verify(out).println("Unknown result for GC request"); + } - listener.fireComplete(request, resp); - - assertTrue(complete[0]); - - assertTrue(baos.size() > 0); - - String expected = "Unknown result for GC request\n"; - assertEquals(expected, new String(baos.toByteArray(), StandardCharsets.UTF_8)); - } } diff -r fa302aa73bae -r b188a7f445f2 vm-gc/command/src/test/java/com/redhat/thermostat/vm/gc/command/internal/GCCommandTest.java --- a/vm-gc/command/src/test/java/com/redhat/thermostat/vm/gc/command/internal/GCCommandTest.java Tue Nov 22 12:48:19 2016 -0500 +++ b/vm-gc/command/src/test/java/com/redhat/thermostat/vm/gc/command/internal/GCCommandTest.java Thu Nov 24 12:34:53 2016 -0500 @@ -36,17 +36,14 @@ package com.redhat.thermostat.vm.gc.command.internal; -import static org.junit.Assert.assertTrue; import static org.mockito.Matchers.any; import static org.mockito.Matchers.eq; -import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import org.junit.Before; import org.junit.Test; -import org.mockito.invocation.InvocationOnMock; -import org.mockito.stubbing.Answer; import com.redhat.thermostat.common.cli.CommandContext; import com.redhat.thermostat.common.cli.CommandException; @@ -71,6 +68,8 @@ private VmInfoDAO vmInfoDAO; private AgentInfoDAO agentInfoDAO; private GCRequest gcRequest; + private GCCommandListenerFactory gcCommandListenerFactory; + private GCCommandListener gcCommandListener; @Before public void setup() { @@ -80,11 +79,11 @@ agentInfoDAO = mock(AgentInfoDAO.class); gcRequest = mock(GCRequest.class); - GCCommandListenerFactory listenerFactory = mock(GCCommandListenerFactory.class); - GCCommandListener listener = mock(GCCommandListener.class); - when(listenerFactory.createListener(any(PrintStream.class), any(PrintStream.class))).thenReturn(listener); + gcCommandListenerFactory = mock(GCCommandListenerFactory.class); + gcCommandListener = mock(GCCommandListener.class); + when(gcCommandListenerFactory.createListener(any(PrintStream.class), any(PrintStream.class))).thenReturn(gcCommandListener); - command = new GCCommand(listenerFactory); + command = new GCCommand(gcCommandListenerFactory); } @Test @@ -104,22 +103,14 @@ when(vmInfoDAO.getVmInfo(any(VmId.class))).thenReturn(vmInfo); - final boolean[] complete = {false}; - doAnswer(new Answer() { - @Override - public Object answer(InvocationOnMock invocation) throws Throwable { - complete[0] = true; - return null; - } - }).when(gcRequest).sendGCRequestToAgent(eq(vmRef), eq(agentInfoDAO), any(GCCommandListener.class)); - CommandContext context = createVmIdArgs(vmId); setServices(); command.run(context); - assertTrue(complete[0]); + verify(gcRequest).sendGCRequestToAgent(vmRef, agentInfoDAO, gcCommandListener); + verify(gcCommandListenerFactory).createListener(any(PrintStream.class), any(PrintStream.class)); } @Test(expected = CommandException.class)