Mercurial > hg > release > thermostat-0.13
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
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)); + } }