blob: 2a6b1e39f4de1707feaa9fe90df601969381bb65 [file] [log] [blame]
/*=========================================================================
* Copyright (c) 2010-2014 Pivotal Software, Inc. All Rights Reserved.
* This product is protected by U.S. and international copyright
* and intellectual property laws. Pivotal products are covered by
* one or more patents listed at http://www.pivotal.io/patents.
*=========================================================================
*/
package com.gemstone.gemfire.internal.size;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.IdentityHashMap;
import java.util.Map;
import java.util.Set;
import org.junit.experimental.categories.Category;
import com.gemstone.gemfire.test.junit.categories.UnitTest;
import junit.framework.Assert;
import junit.framework.TestCase;
@Category(UnitTest.class)
public class ObjectTraverserJUnitTest extends TestCase {
public void testBasic() throws IllegalArgumentException, IllegalAccessException {
Set testData = new HashSet();
Object one = new Object();
testData.add(one);
Object[] two = new Object[2];
testData.add(two);
ArrayList three = new ArrayList();
two[0]= three;
three.add(testData);
TestVisitor visitor = new TestVisitor();
ObjectTraverser.breadthFirstSearch(testData, visitor, false);
Assert.assertNotNull(visitor.visited.remove(testData));
Assert.assertNotNull(visitor.visited.remove(one));
Assert.assertNotNull(visitor.visited.remove(two));
Assert.assertNotNull(visitor.visited.remove(three));
}
public void testStatics() throws IllegalArgumentException, IllegalAccessException {
final Object staticObject = new Object();
TestObject1.test2 = staticObject;
TestObject1 test1 = new TestObject1();
TestVisitor visitor = new TestVisitor();
ObjectTraverser.breadthFirstSearch(test1, visitor, false);
Assert.assertNull(visitor.visited.get(staticObject));
visitor = new TestVisitor();
ObjectTraverser.breadthFirstSearch(test1, visitor, true);
Assert.assertNotNull(visitor.visited.get(staticObject));
}
public void testStop() throws IllegalArgumentException, IllegalAccessException {
Set set1 = new HashSet();
final Set set2 = new HashSet();
Object object3 = new Object();
set1.add(set2);
set2.add(object3);
TestVisitor visitor = new TestVisitor();
visitor = new TestVisitor() {
public boolean visit(Object parent, Object object) {
super.visit(parent, object);
return object != set2;
}
};
ObjectTraverser.breadthFirstSearch(set1, visitor, true);
Assert.assertNotNull(visitor.visited.get(set1));
Assert.assertNotNull(visitor.visited.get(set2));
Assert.assertNull(visitor.visited.get(object3));
}
/** This test is commented out because it needs to be verified manually */
public void z_testHistogram() throws IllegalArgumentException, IllegalAccessException {
Set set1 = new HashSet();
final Set set2 = new HashSet();
Object object3 = new Object();
set1.add(set2);
set2.add(object3);
System.setProperty("gemfire.ObjectSizer.SIZE_OF_CLASS", "com.gemstone.gemfire.internal.size.SizeOfUtil0");
System.out.println(ObjectGraphSizer.histogram(set1, true));
}
private static class TestVisitor implements ObjectTraverser.Visitor {
private static final Object VALUE = new Object();
public Map visited = new IdentityHashMap();
public boolean visit(Object parent, Object object) {
Assert.assertNull(visited.put(object, VALUE));
return true;
}
}
private static class TestObject1 {
protected static Object test2;
}
}