changeset 2036:b188a7f445f2

Clean up gc-command tests PR3241 Reviewed-by: neugens, jerboaa Review-thread: http://icedtea.classpath.org/pipermail/thermostat/2016-November/021731.html
author Andrew Azores <aazores@redhat.com>
date Thu, 24 Nov 2016 12:34:53 -0500
parents fa302aa73bae
children 15c2184f097b
files vm-gc/command/src/main/java/com/redhat/thermostat/vm/gc/command/internal/GCCommandListener.java vm-gc/command/src/main/java/com/redhat/thermostat/vm/gc/command/internal/GCCommandListenerFactoryImpl.java vm-gc/command/src/test/java/com/redhat/thermostat/vm/gc/command/internal/GCCommandListenerTest.java vm-gc/command/src/test/java/com/redhat/thermostat/vm/gc/command/internal/GCCommandTest.java
diffstat 4 files changed, 63 insertions(+), 128 deletions(-) [+]
line wrap: on
line diff
--- 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<LocaleResources> 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;
-    }
 }
--- 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);
     }
 }
--- 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));
-    }
 }
--- 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)