changeset 1326:921506d81225

Handle no DeadLock data for a VM Reviewed-by: jerboaa, neugens Review-thread: http://icedtea.classpath.org/pipermail/thermostat/2013-November/008739.html
author Omair Majid <omajid@redhat.com>
date Thu, 14 Nov 2013 13:03:19 -0500
parents 2228cf23604c
children 4bd366153706
files thread/client-controllers/src/main/java/com/redhat/thermostat/thread/client/controller/impl/VmDeadLockController.java thread/client-controllers/src/test/java/com/redhat/thermostat/thread/client/controller/impl/VmDeadLockControllerTest.java thread/collector/src/main/java/com/redhat/thermostat/thread/dao/ThreadDao.java thread/collector/src/test/java/com/redhat/thermostat/thread/dao/impl/ThreadDaoImplTest.java
diffstat 4 files changed, 51 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/thread/client-controllers/src/main/java/com/redhat/thermostat/thread/client/controller/impl/VmDeadLockController.java	Thu Nov 14 18:17:51 2013 +0100
+++ b/thread/client-controllers/src/main/java/com/redhat/thermostat/thread/client/controller/impl/VmDeadLockController.java	Thu Nov 14 13:03:19 2013 -0500
@@ -121,6 +121,11 @@
 
     private void checkStorageForDeadLockData() {
         VmDeadLockData data = collector.getLatestDeadLockData();
+        if (data == null) {
+            // no deadlock data; so don't update anything
+            return;
+        }
+
         String description = data.getDeadLockDescription();
         if (description.equals(VmDeadLockData.NO_DEADLOCK)) {
             description = translate.localize(LocaleResources.NO_DEADLOCK_DETECTED).getContents();
--- a/thread/client-controllers/src/test/java/com/redhat/thermostat/thread/client/controller/impl/VmDeadLockControllerTest.java	Thu Nov 14 18:17:51 2013 +0100
+++ b/thread/client-controllers/src/test/java/com/redhat/thermostat/thread/client/controller/impl/VmDeadLockControllerTest.java	Thu Nov 14 13:03:19 2013 -0500
@@ -36,10 +36,13 @@
 
 package com.redhat.thermostat.thread.client.controller.impl;
 
+import static org.mockito.Matchers.anyString;
 import static org.mockito.Matchers.isA;
 import static org.mockito.Mockito.doThrow;
 import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyNoMoreInteractions;
 import static org.mockito.Mockito.when;
 
 import java.util.concurrent.TimeUnit;
@@ -175,4 +178,22 @@
 
         verify(view).setDeadLockInformation("No Deadlocks Detected.");
     }
+
+    @Test
+    public void verifyTimerActionHandlesNoDataCorrectly() {
+        doThrow(new AssertionError()).when(collector).requestDeadLockCheck();
+
+        controller.initialize();
+
+        when(collector.getLatestDeadLockData()).thenReturn(null);
+
+        ArgumentCaptor<Runnable> runnableCaptor = ArgumentCaptor.forClass(Runnable.class);
+        verify(timer).setAction(runnableCaptor.capture());
+
+        Runnable action = runnableCaptor.getValue();
+
+        action.run();
+
+        // pass if no exceptions thrown
+    }
 }
--- a/thread/collector/src/main/java/com/redhat/thermostat/thread/dao/ThreadDao.java	Thu Nov 14 18:17:51 2013 +0100
+++ b/thread/collector/src/main/java/com/redhat/thermostat/thread/dao/ThreadDao.java	Thu Nov 14 13:03:19 2013 -0500
@@ -145,6 +145,12 @@
     void saveCapabilities(VMThreadCapabilities caps);
 
     void saveDeadLockStatus(VmDeadLockData deadLockInfo);
+
+    /**
+     * Returns the latest vm deadlock data
+     *
+     * @return the latest data or null if there is none
+     */
     VmDeadLockData loadLatestDeadLockStatus(VmRef ref);
     
 }
--- a/thread/collector/src/test/java/com/redhat/thermostat/thread/dao/impl/ThreadDaoImplTest.java	Thu Nov 14 18:17:51 2013 +0100
+++ b/thread/collector/src/test/java/com/redhat/thermostat/thread/dao/impl/ThreadDaoImplTest.java	Thu Nov 14 13:03:19 2013 -0500
@@ -260,14 +260,26 @@
     }
 
     @Test
-    public void testLoadLatestDeadLockStatus() throws DescriptorParsingException, StatementExecutionException {
-        VmRef vm = mock(VmRef.class);
-        when(vm.getVmId()).thenReturn(VM_ID);
+    public void testLoadLatestDeadLockStatusWithNoData() throws Exception {
+        Storage storage = mock(Storage.class);
+        @SuppressWarnings("unchecked")
+        PreparedStatement<VmDeadLockData> stmt = (PreparedStatement<VmDeadLockData>) mock(PreparedStatement.class);
+        when(storage.prepareStatement(anyDescriptor(VmDeadLockData.class))).thenReturn(stmt);
+        @SuppressWarnings("unchecked")
+        Cursor<VmDeadLockData> cursor = (Cursor<VmDeadLockData>) mock(Cursor.class);
 
-        HostRef agent = mock(HostRef.class);
-        when(agent.getAgentId()).thenReturn(AGENT_ID);
-        when(vm.getHostRef()).thenReturn(agent);
+        when(cursor.hasNext()).thenReturn(false);
+        when(cursor.next()).thenThrow(new IllegalStateException("must not do this"));
+        when(stmt.executeQuery()).thenReturn(cursor);
 
+        ThreadDaoImpl dao = new ThreadDaoImpl(storage);
+        VmDeadLockData result = dao.loadLatestDeadLockStatus(vmRef);
+
+        assertNull(result);
+    }
+
+    @Test
+    public void testLoadLatestDeadLockStatus() throws DescriptorParsingException, StatementExecutionException {
         Storage storage = mock(Storage.class);
         @SuppressWarnings("unchecked")
         PreparedStatement<VmDeadLockData> stmt = (PreparedStatement<VmDeadLockData>) mock(PreparedStatement.class);
@@ -281,7 +293,7 @@
         when(stmt.executeQuery()).thenReturn(cursor);
 
         ThreadDaoImpl dao = new ThreadDaoImpl(storage);
-        VmDeadLockData result = dao.loadLatestDeadLockStatus(vm);
+        VmDeadLockData result = dao.loadLatestDeadLockStatus(vmRef);
 
         assertSame(data, result);