changeset 201:e7bd33c29e67

Add regression tests for NPE root cause in ChunkConverter reviewed-by: rkennke, neugens review-thread: http://icedtea.classpath.org/pipermail/thermostat/2012-April/000689.html
author Jon VanAlten <jon.vanalten@redhat.com>
date Wed, 04 Apr 2012 15:51:48 -0400
parents 18fdcb51a38e
children 7d7f9dd102bb
files common/src/test/java/com/redhat/thermostat/common/dao/CpuStatDAOTest.java common/src/test/java/com/redhat/thermostat/common/dao/HostInfoDAOTest.java common/src/test/java/com/redhat/thermostat/common/dao/MemoryStatDAOTest.java common/src/test/java/com/redhat/thermostat/common/dao/NetworkInterfaceInfoDAOTest.java common/src/test/java/com/redhat/thermostat/common/dao/VmClassStatDAOTest.java common/src/test/java/com/redhat/thermostat/common/dao/VmCpuStatDAOTest.java common/src/test/java/com/redhat/thermostat/common/dao/VmGcStatDAOTest.java common/src/test/java/com/redhat/thermostat/common/dao/VmInfoDAOTest.java common/src/test/java/com/redhat/thermostat/common/dao/VmMemoryStatDAOTest.java common/src/test/java/com/redhat/thermostat/common/storage/ChunkConverterTest.java
diffstat 10 files changed, 39 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/common/src/test/java/com/redhat/thermostat/common/dao/CpuStatDAOTest.java	Wed Apr 04 21:49:29 2012 +0200
+++ b/common/src/test/java/com/redhat/thermostat/common/dao/CpuStatDAOTest.java	Wed Apr 04 15:51:48 2012 -0400
@@ -64,6 +64,7 @@
     public void testCategory() {
         assertEquals("cpu-stats", CpuStatDAO.cpuStatCategory.getName());
         Collection<Key<?>> keys = CpuStatDAO.cpuStatCategory.getKeys();
+        assertTrue(keys.contains(new Key<>("agent-id", false)));
         assertTrue(keys.contains(new Key<Long>("timestamp", false)));
         assertTrue(keys.contains(new Key<Double>("5load", false)));
         assertTrue(keys.contains(new Key<Double>("10load", false)));
--- a/common/src/test/java/com/redhat/thermostat/common/dao/HostInfoDAOTest.java	Wed Apr 04 21:49:29 2012 +0200
+++ b/common/src/test/java/com/redhat/thermostat/common/dao/HostInfoDAOTest.java	Wed Apr 04 15:51:48 2012 -0400
@@ -61,6 +61,7 @@
     public void testCategory() {
         assertEquals("host-info", HostInfoDAO.hostInfoCategory.getName());
         Collection<Key<?>> keys = HostInfoDAO.hostInfoCategory.getKeys();
+        assertTrue(keys.contains(new Key<>("agent-id", false)));
         assertTrue(keys.contains(new Key<String>("hostname", true)));
         assertTrue(keys.contains(new Key<String>("os_name", false)));
         assertTrue(keys.contains(new Key<String>("os_kernel", false)));
--- a/common/src/test/java/com/redhat/thermostat/common/dao/MemoryStatDAOTest.java	Wed Apr 04 21:49:29 2012 +0200
+++ b/common/src/test/java/com/redhat/thermostat/common/dao/MemoryStatDAOTest.java	Wed Apr 04 15:51:48 2012 -0400
@@ -63,6 +63,7 @@
     public void testCategory() {
         assertEquals("memory-stats", MemoryStatDAO.memoryStatCategory.getName());
         Collection<Key<?>> keys = MemoryStatDAO.memoryStatCategory.getKeys();
+        assertTrue(keys.contains(new Key<>("agent-id", false)));
         assertTrue(keys.contains(new Key<Long>("timestamp", false)));
         assertTrue(keys.contains(new Key<Long>("total", false)));
         assertTrue(keys.contains(new Key<Long>("free", false)));
--- a/common/src/test/java/com/redhat/thermostat/common/dao/NetworkInterfaceInfoDAOTest.java	Wed Apr 04 21:49:29 2012 +0200
+++ b/common/src/test/java/com/redhat/thermostat/common/dao/NetworkInterfaceInfoDAOTest.java	Wed Apr 04 15:51:48 2012 -0400
@@ -65,6 +65,7 @@
 
         assertEquals("network-info", NetworkInterfaceInfoDAO.networkInfoCategory.getName());
         keys = NetworkInterfaceInfoDAO.networkInfoCategory.getKeys();
+        assertTrue(keys.contains(new Key<>("agent-id", false)));
         assertTrue(keys.contains(new Key<Long>("timestamp", false)));
         assertTrue(keys.contains(new Key<String>("iface", true)));
         assertTrue(keys.contains(new Key<String>("ipv4addr", false)));
--- a/common/src/test/java/com/redhat/thermostat/common/dao/VmClassStatDAOTest.java	Wed Apr 04 21:49:29 2012 +0200
+++ b/common/src/test/java/com/redhat/thermostat/common/dao/VmClassStatDAOTest.java	Wed Apr 04 15:51:48 2012 -0400
@@ -63,6 +63,7 @@
     public void testCategory() {
         assertEquals("vm-class-stats", VmClassStatDAO.vmClassStatsCategory.getName());
         Collection<Key<?>> keys = VmClassStatDAO.vmClassStatsCategory.getKeys();
+        assertTrue(keys.contains(new Key<>("agent-id", false)));
         assertTrue(keys.contains(new Key<Integer>("vm-id", false)));
         assertTrue(keys.contains(new Key<Long>("timestamp", false)));
         assertTrue(keys.contains(new Key<Long>("loadedClasses", false)));
--- a/common/src/test/java/com/redhat/thermostat/common/dao/VmCpuStatDAOTest.java	Wed Apr 04 21:49:29 2012 +0200
+++ b/common/src/test/java/com/redhat/thermostat/common/dao/VmCpuStatDAOTest.java	Wed Apr 04 15:51:48 2012 -0400
@@ -63,6 +63,7 @@
     public void testCategory() {
         assertEquals("vm-cpu-stats", VmCpuStatDAO.vmCpuStatCategory.getName());
         Collection<Key<?>> keys = VmCpuStatDAO.vmCpuStatCategory.getKeys();
+        assertTrue(keys.contains(new Key<>("agent-id", false)));
         assertTrue(keys.contains(new Key<Long>("timestamp", false)));
         assertTrue(keys.contains(new Key<Integer>("vm-id", false)));
         assertTrue(keys.contains(new Key<Integer>("processor-usage", false)));
--- a/common/src/test/java/com/redhat/thermostat/common/dao/VmGcStatDAOTest.java	Wed Apr 04 21:49:29 2012 +0200
+++ b/common/src/test/java/com/redhat/thermostat/common/dao/VmGcStatDAOTest.java	Wed Apr 04 15:51:48 2012 -0400
@@ -64,6 +64,7 @@
     public void testCategory() {
         assertEquals("vm-gc-stats", VmGcStatDAO.vmGcStatCategory.getName());
         Collection<Key<?>> keys = VmGcStatDAO.vmGcStatCategory.getKeys();
+        assertTrue(keys.contains(new Key<>("agent-id", false)));
         assertTrue(keys.contains(new Key<Integer>("vm-id", false)));
         assertTrue(keys.contains(new Key<Long>("timestamp", false)));
         assertTrue(keys.contains(new Key<String>("collector", false)));
--- a/common/src/test/java/com/redhat/thermostat/common/dao/VmInfoDAOTest.java	Wed Apr 04 21:49:29 2012 +0200
+++ b/common/src/test/java/com/redhat/thermostat/common/dao/VmInfoDAOTest.java	Wed Apr 04 15:51:48 2012 -0400
@@ -107,6 +107,7 @@
     public void testCategory() {
         assertEquals("vm-info", VmInfoDAO.vmInfoCategory.getName());
         Collection<Key<?>> keys = VmInfoDAO.vmInfoCategory.getKeys();
+        assertTrue(keys.contains(new Key<>("agent-id", false)));
         assertTrue(keys.contains(new Key<Integer>("vm-id", true)));
         assertTrue(keys.contains(new Key<Integer>("vm-pid", false)));
         assertTrue(keys.contains(new Key<String>("runtime-version", false)));
--- a/common/src/test/java/com/redhat/thermostat/common/dao/VmMemoryStatDAOTest.java	Wed Apr 04 21:49:29 2012 +0200
+++ b/common/src/test/java/com/redhat/thermostat/common/dao/VmMemoryStatDAOTest.java	Wed Apr 04 15:51:48 2012 -0400
@@ -64,6 +64,7 @@
 
         assertEquals("vm-memory-stats", VmMemoryStatDAO.vmMemoryStatsCategory.getName());
         keys = VmMemoryStatDAO.vmMemoryStatsCategory.getKeys();
+        assertTrue(keys.contains(new Key<>("agent-id", false)));
         assertTrue(keys.contains(new Key<Integer>("vm-id", false)));
         assertTrue(keys.contains(new Key<Long>("timestamp", false)));
         assertTrue(keys.contains(new Key<String>("eden.gen", false)));
@@ -125,6 +126,7 @@
         VmMemoryStatDAO impl = new VmMemoryStatDAOImpl(storage);
         impl.getLatestMemoryStat(vmRef);
 
+        @SuppressWarnings("rawtypes")
         ArgumentCaptor<Key> sortKey = ArgumentCaptor.forClass(Key.class);
         ArgumentCaptor<SortDirection> sortDirection = ArgumentCaptor.forClass(SortDirection.class);
         verify(cursor).sort(sortKey.capture(), sortDirection.capture());
--- a/common/src/test/java/com/redhat/thermostat/common/storage/ChunkConverterTest.java	Wed Apr 04 21:49:29 2012 +0200
+++ b/common/src/test/java/com/redhat/thermostat/common/storage/ChunkConverterTest.java	Wed Apr 04 15:51:48 2012 -0400
@@ -60,9 +60,13 @@
     private static final Key<String> key2_key2 = new Key<>("key2.key2", false);
     private static final Key<String> key2_key3 = new Key<>("key2.key3", false);
 
+    private static final String mongoId = "_id";
+    private static final Key<String> invalidMongoIdKey = new Key<>(mongoId, false);
+
     private static final Category testCategory = new Category("ChunkConverterTest", key1, key2, key3, key4, key5,
                                                              key1_key1, key1_key2, key2_key1, key2_key2, key2_key3,
                                                              key1_key2_key1, key1_key2_key2, key1_key2_key3);
+    private static final Category smallerCategory = new Category("SmallerTest", key1, key2);
 
     @Test
     public void verifyBasicChunkToDBObject() {
@@ -202,7 +206,6 @@
 
         DBObject nested1 = (DBObject) dbObject.get("key1");
         assertEquals(2, nested1.keySet().size());
-        System.err.println("keys: " + nested1.keySet());
         assertTrue(nested1.keySet().contains("key1"));
         assertTrue(nested1.keySet().contains("key2"));
         assertEquals("test1", nested1.get("key1"));
@@ -303,4 +306,29 @@
         assertEquals("test5", chunk.get(key1_key2_key3));
         assertEquals("test6", chunk.get(key3));
     }
+
+    @Test
+    public void verifyDBObjectToChunkIgnoresMongoID() {
+        DBObject obj = new BasicDBObject(mongoId, "mongo_private_info");
+        ChunkConverter converter = new ChunkConverter();
+        Chunk chunk = converter.dbObjectToChunk(obj, new Category("invalidCategory", invalidMongoIdKey));
+
+        assertEquals(0, chunk.getKeys().size());
+    }
+
+    @Test
+    public void verifyDBObjectToChunkAvoidsNonExistentKeys() {
+        DBObject obj = new BasicDBObject("key1", "data1");
+        obj.put("key2", "data2");
+        obj.put("key3", "data3"); // This one is not a part of smallerCategory
+        ChunkConverter converter = new ChunkConverter();
+        Chunk chunk = converter.dbObjectToChunk(obj, smallerCategory);
+
+        assertEquals(2, chunk.getKeys().size());
+        assertFalse(chunk.getKeys().contains(key3));
+        assertTrue(chunk.getKeys().contains(key1));
+        assertTrue(chunk.getKeys().contains(key2));
+        assertEquals("data1", chunk.get(key1));
+        assertEquals("data2", chunk.get(key2));
+    }
 }