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());
+    }
 }