Mercurial > hg > release > thermostat-1.0
changeset 384:b1aa706a6ce9
Implement HeapInfoDAO.getAllHeapInfo().
Reviewed-by: neugens
Review-thread: http://icedtea.classpath.org/pipermail/thermostat/2012-June/001872.html
PR 1032
author | Roman Kennke <rkennke@redhat.com> |
---|---|
date | Mon, 18 Jun 2012 21:44:07 +0200 |
parents | 1974926fb7a0 |
children | 5383cde331c8 42939a012ddf |
files | common/core/src/main/java/com/redhat/thermostat/common/dao/HeapDAO.java common/core/src/main/java/com/redhat/thermostat/common/dao/HeapDAOImpl.java common/core/src/main/java/com/redhat/thermostat/common/model/HeapInfo.java common/core/src/test/java/com/redhat/thermostat/common/dao/HeapDAOTest.java common/core/src/test/java/com/redhat/thermostat/common/model/HeapInfoTest.java |
diffstat | 5 files changed, 96 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/common/core/src/main/java/com/redhat/thermostat/common/dao/HeapDAO.java Mon Jun 18 20:15:58 2012 +0200 +++ b/common/core/src/main/java/com/redhat/thermostat/common/dao/HeapDAO.java Mon Jun 18 21:44:07 2012 +0200 @@ -36,6 +36,8 @@ package com.redhat.thermostat.common.dao; +import java.util.Collection; + import com.redhat.thermostat.common.model.HeapInfo; import com.redhat.thermostat.common.storage.Category; import com.redhat.thermostat.common.storage.Key; @@ -48,4 +50,6 @@ void putHeapInfo(HeapInfo heapInfo); + Collection<HeapInfo> getAllHeapInfo(VmRef vm); + }
--- a/common/core/src/main/java/com/redhat/thermostat/common/dao/HeapDAOImpl.java Mon Jun 18 20:15:58 2012 +0200 +++ b/common/core/src/main/java/com/redhat/thermostat/common/dao/HeapDAOImpl.java Mon Jun 18 21:44:07 2012 +0200 @@ -37,9 +37,12 @@ package com.redhat.thermostat.common.dao; import java.io.InputStream; +import java.util.ArrayList; +import java.util.Collection; import com.redhat.thermostat.common.model.HeapInfo; import com.redhat.thermostat.common.storage.Chunk; +import com.redhat.thermostat.common.storage.Cursor; import com.redhat.thermostat.common.storage.Key; import com.redhat.thermostat.common.storage.Storage; @@ -71,4 +74,23 @@ } } + @Override + public Collection<HeapInfo> getAllHeapInfo(VmRef vm) { + Chunk query = new Chunk(heapInfoCategory, false); + query.put(Key.AGENT_ID, vm.getAgent().getAgentId()); + query.put(Key.VM_ID, vm.getId()); + Cursor cursor = storage.findAll(query); + Collection<HeapInfo> heapInfos = new ArrayList<>(); + while (cursor.hasNext()) { + heapInfos.add(convertChunkToHeapInfo(vm, cursor.next())); + } + return heapInfos; + } + + private HeapInfo convertChunkToHeapInfo(VmRef vm, Chunk chunk) { + HeapInfo info = new HeapInfo(vm, chunk.get(Key.TIMESTAMP)); + info.setHeapDumpId(chunk.get(HeapDAO.heapDumpIdKey)); + return info; + } + }
--- a/common/core/src/main/java/com/redhat/thermostat/common/model/HeapInfo.java Mon Jun 18 20:15:58 2012 +0200 +++ b/common/core/src/main/java/com/redhat/thermostat/common/model/HeapInfo.java Mon Jun 18 21:44:07 2012 +0200 @@ -37,6 +37,7 @@ package com.redhat.thermostat.common.model; import java.io.InputStream; +import java.util.Objects; import com.redhat.thermostat.common.dao.VmRef; @@ -45,6 +46,7 @@ private VmRef vm; private long timestamp; private InputStream heapDump; + private String heapDumpId; public HeapInfo(VmRef vm, long timestamp) { this.vm = vm; @@ -66,4 +68,26 @@ public void setHeapDump(InputStream heapDump) { this.heapDump = heapDump; } + + public void setHeapDumpId(String heapDumpId) { + this.heapDumpId = heapDumpId; + } + + public String getHeapDumpId() { + return heapDumpId; + } + + @Override + public boolean equals(Object o) { + if (! (o instanceof HeapInfo)) { + return false; + } + HeapInfo other = (HeapInfo) o; + return Objects.equals(vm, other.vm) && Objects.equals(heapDumpId, other.heapDumpId) && timestamp == other.timestamp; + } + + @Override + public int hashCode() { + return Objects.hash(vm, heapDumpId, timestamp); + } }
--- a/common/core/src/test/java/com/redhat/thermostat/common/dao/HeapDAOTest.java Mon Jun 18 20:15:58 2012 +0200 +++ b/common/core/src/test/java/com/redhat/thermostat/common/dao/HeapDAOTest.java Mon Jun 18 21:44:07 2012 +0200 @@ -39,10 +39,14 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; +import static org.mockito.Matchers.any; +import static org.mockito.Matchers.anyString; import static org.mockito.Matchers.eq; import static org.mockito.Matchers.same; import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.*; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; import java.io.ByteArrayInputStream; import java.io.InputStream; @@ -55,6 +59,7 @@ import com.redhat.thermostat.common.model.HeapInfo; import com.redhat.thermostat.common.storage.Category; import com.redhat.thermostat.common.storage.Chunk; +import com.redhat.thermostat.common.storage.Cursor; import com.redhat.thermostat.common.storage.Key; import com.redhat.thermostat.common.storage.Storage; @@ -76,6 +81,25 @@ byte[] data = new byte[] { 1, 2, 3 }; dataStream = new ByteArrayInputStream(data); heapInfo.setHeapDump(dataStream); + + // Setup for reading data from DB. + Chunk findAllQuery = new Chunk(HeapDAO.heapInfoCategory, false); + findAllQuery.put(Key.AGENT_ID, "123"); + findAllQuery.put(Key.VM_ID, 234); + Cursor cursor = mock(Cursor.class); + Chunk info1 = new Chunk(HeapDAO.heapInfoCategory, false); + info1.put(Key.AGENT_ID, "123"); + info1.put(Key.VM_ID, 234); + info1.put(Key.TIMESTAMP, 12345l); + info1.put(HeapDAO.heapDumpIdKey, "test1"); + Chunk info2 = new Chunk(HeapDAO.heapInfoCategory, false); + info2.put(Key.AGENT_ID, "123"); + info2.put(Key.VM_ID, 234); + info2.put(Key.TIMESTAMP, 23456l); + info2.put(HeapDAO.heapDumpIdKey, "test2"); + when(cursor.hasNext()).thenReturn(true).thenReturn(true).thenReturn(false); + when(cursor.next()).thenReturn(info1).thenReturn(info2).thenReturn(null); + when(storage.findAll(findAllQuery)).thenReturn(cursor); } @After @@ -125,4 +149,18 @@ verify(storage).putChunk(expectedChunk); verify(storage, never()).saveFile(anyString(), any(InputStream.class)); } + + @Test + public void testGetAllHeapInfo() { + HostRef host = new HostRef("123", "test-host"); + VmRef vm = new VmRef(host, 234, "test-vm"); + Collection<HeapInfo> heapInfos = dao.getAllHeapInfo(vm); + HeapInfo info1 = new HeapInfo(vm, 12345); + info1.setHeapDumpId("test1"); + HeapInfo info2 = new HeapInfo(vm, 23456); + info2.setHeapDumpId("test2"); + assertEquals(2, heapInfos.size()); + assertTrue(heapInfos.contains(info1)); + assertTrue(heapInfos.contains(info2)); + } }
--- a/common/core/src/test/java/com/redhat/thermostat/common/model/HeapInfoTest.java Mon Jun 18 20:15:58 2012 +0200 +++ b/common/core/src/test/java/com/redhat/thermostat/common/model/HeapInfoTest.java Mon Jun 18 21:44:07 2012 +0200 @@ -78,4 +78,11 @@ assertEquals(3, in.read()); assertEquals(-1, in.read()); } + + @Test + public void testHeapDumpId() { + assertNull(heapInfo.getHeapDumpId()); + heapInfo.setHeapDumpId("test"); + assertEquals("test", heapInfo.getHeapDumpId()); + } }