Mercurial > hg > release > thermostat-1.2
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);