You are viewing a plain text version of this content. The canonical link for it is here.
Posted to kato-commits@incubator.apache.org by mo...@apache.org on 2009/05/13 16:57:13 UTC

svn commit: r774430 - in /incubator/kato/trunk/KatoHProfAdapterPOC: src/org/apache/kato/hprof/java/ testsrc/org/apache/kato/hprof/java/ testsrc/test/apache/kato/hprof/

Author: monteith
Date: Wed May 13 16:57:09 2009
New Revision: 774430

URL: http://svn.apache.org/viewvc?rev=774430&view=rev
Log:
Apply updates - added JavaThread and stacks support. Some incomplete work on testcases too.

Added:
    incubator/kato/trunk/KatoHProfAdapterPOC/src/org/apache/kato/hprof/java/JavaStackFrameImpl.java   (with props)
    incubator/kato/trunk/KatoHProfAdapterPOC/src/org/apache/kato/hprof/java/JavaThreadImpl.java   (with props)
    incubator/kato/trunk/KatoHProfAdapterPOC/testsrc/org/apache/kato/hprof/java/JavaPrimitiveClassImplTest.java   (with props)
    incubator/kato/trunk/KatoHProfAdapterPOC/testsrc/org/apache/kato/hprof/java/JavaTestClass.java   (with props)
    incubator/kato/trunk/KatoHProfAdapterPOC/testsrc/org/apache/kato/hprof/java/PrimitiveArrayTestImpl.java   (with props)
Modified:
    incubator/kato/trunk/KatoHProfAdapterPOC/src/org/apache/kato/hprof/java/JavaHeapImpl.java
    incubator/kato/trunk/KatoHProfAdapterPOC/src/org/apache/kato/hprof/java/JavaPrimitiveClassImpl.java
    incubator/kato/trunk/KatoHProfAdapterPOC/src/org/apache/kato/hprof/java/JavaRuntimeImpl.java
    incubator/kato/trunk/KatoHProfAdapterPOC/testsrc/org/apache/kato/hprof/java/GCInstanceHeapDumpRecordTest.java
    incubator/kato/trunk/KatoHProfAdapterPOC/testsrc/org/apache/kato/hprof/java/JavaHeapImplTest.java
    incubator/kato/trunk/KatoHProfAdapterPOC/testsrc/org/apache/kato/hprof/java/JavaObjectInstanceImplTest.java
    incubator/kato/trunk/KatoHProfAdapterPOC/testsrc/test/apache/kato/hprof/TestJavaHeap.java

Modified: incubator/kato/trunk/KatoHProfAdapterPOC/src/org/apache/kato/hprof/java/JavaHeapImpl.java
URL: http://svn.apache.org/viewvc/incubator/kato/trunk/KatoHProfAdapterPOC/src/org/apache/kato/hprof/java/JavaHeapImpl.java?rev=774430&r1=774429&r2=774430&view=diff
==============================================================================
--- incubator/kato/trunk/KatoHProfAdapterPOC/src/org/apache/kato/hprof/java/JavaHeapImpl.java (original)
+++ incubator/kato/trunk/KatoHProfAdapterPOC/src/org/apache/kato/hprof/java/JavaHeapImpl.java Wed May 13 16:57:09 2009
@@ -253,7 +253,8 @@
 					 name ="<invalid primitive class type "+type+">";
 			}
 			
-			clazz = primitiveClasses[type-4] = new JavaPrimitiveClassImpl(name, type);
+			clazz = primitiveClasses[type-4] = new JavaPrimitiveClassImpl(name, type,
+					this.getJavaClassLoaderByID(0)); // The system class loader is 0
 		}
 		
 		return clazz;

Modified: incubator/kato/trunk/KatoHProfAdapterPOC/src/org/apache/kato/hprof/java/JavaPrimitiveClassImpl.java
URL: http://svn.apache.org/viewvc/incubator/kato/trunk/KatoHProfAdapterPOC/src/org/apache/kato/hprof/java/JavaPrimitiveClassImpl.java?rev=774430&r1=774429&r2=774430&view=diff
==============================================================================
--- incubator/kato/trunk/KatoHProfAdapterPOC/src/org/apache/kato/hprof/java/JavaPrimitiveClassImpl.java (original)
+++ incubator/kato/trunk/KatoHProfAdapterPOC/src/org/apache/kato/hprof/java/JavaPrimitiveClassImpl.java Wed May 13 16:57:09 2009
@@ -32,21 +32,22 @@
 public class JavaPrimitiveClassImpl implements JavaClass {
 	private String name;
 	private int id;
-
-	public JavaPrimitiveClassImpl(String name, int id) {
+	private JavaClassLoader loader;
+	
+	public JavaPrimitiveClassImpl(String name, int id, JavaClassLoader loader) {
 		this.name = name;
 		this.id = id;
+		this.loader = loader;
 	}
 	
 	@Override
 	public JavaClassLoader getClassLoader() throws CorruptDataException {
-		// TODO This should probably exist.
-		return null;
+		return loader;
 	}
 
 	@Override
 	public JavaClass getComponentType() throws CorruptDataException {
-		return null;
+		throw new IllegalArgumentException("Primitive class is not an array. There is no component type");
 	}
 
 	@Override
@@ -86,6 +87,9 @@
 		return name;
 	}
 
+	/**
+	 * Primitive type have no superclass - not even java/lang/Object.
+	 */
 	@Override
 	public JavaObject getObject() throws CorruptDataException {
 		return null;

Modified: incubator/kato/trunk/KatoHProfAdapterPOC/src/org/apache/kato/hprof/java/JavaRuntimeImpl.java
URL: http://svn.apache.org/viewvc/incubator/kato/trunk/KatoHProfAdapterPOC/src/org/apache/kato/hprof/java/JavaRuntimeImpl.java?rev=774430&r1=774429&r2=774430&view=diff
==============================================================================
--- incubator/kato/trunk/KatoHProfAdapterPOC/src/org/apache/kato/hprof/java/JavaRuntimeImpl.java (original)
+++ incubator/kato/trunk/KatoHProfAdapterPOC/src/org/apache/kato/hprof/java/JavaRuntimeImpl.java Wed May 13 16:57:09 2009
@@ -14,23 +14,16 @@
 package org.apache.kato.hprof.java;
 
 import java.io.IOException;
-import java.util.HashMap;
+import java.util.Collection;
 import java.util.Iterator;
 import java.util.LinkedList;
 import java.util.List;
-import java.util.Map;
-import java.util.WeakHashMap;
 
-import org.apache.kato.common.BasicType;
 import org.apache.kato.common.IViewMonitor;
 import org.apache.kato.hprof.HProfView;
-import org.apache.kato.hprof.IJavaClass;
-import org.apache.kato.hprof.IJavaClassLoader;
+import org.apache.kato.hprof.IJavaThread;
 import org.apache.kato.hprof.datalayer.HProfFile;
-import org.apache.kato.hprof.datalayer.IGCInstanceHeapDumpRecord;
-import org.apache.kato.hprof.datalayer.IGCObjectArrayHeapDumpRecord;
-import org.apache.kato.hprof.datalayer.IGCPrimitiveArrayHeapDumpRecord;
-import org.apache.kato.hprof.datalayer.IHeapObject;
+import org.apache.kato.hprof.image.CorruptDataImpl;
 import org.apache.kato.image.CorruptDataException;
 import org.apache.kato.image.DataUnavailable;
 import org.apache.kato.image.ImagePointer;
@@ -114,30 +107,68 @@
 			
 	}
 
+	/**
+	 * 
+	 * Monitors aren't present in HProf, so return an empty iterator.
+	 * 
+	 * @return empty Iterator
+	 */
 	@Override
-	public Iterator getMonitors() {
-		
-		return null;
+	public Iterator getMonitors() {		
+		return (new LinkedList()).iterator();
 	}
 
+	/**
+	 * Returns an object with a given object ID.
+	 * This is not the same as the objects address, which is unknown in HProf.
+	 * This method is the mirror of JavaObject.getID().
+	 * 
+	 * @return JavaObject with the given object ID.
+	 * @throws IllegalArgumentException If an object with the given ID can't be found.
+	 * 
+	 */
 	@Override
 	public JavaObject getObjectAtAddress(ImagePointer address)
 			throws CorruptDataException, IllegalArgumentException,
 			MemoryAccessException, DataUnavailable {
-		return heap.getObjectByID(address.getAddress());
+		JavaObject obj = heap.getObjectByID(address.getAddress());
+		
+		if (obj == null) {
+			throw new IllegalArgumentException("Couldn't retrieve object @"+
+					Long.toHexString(address.getAddress()));
+		}
+		
+		return obj;
 	}
 
+	private List<JavaThreadImpl> threads = null;
 	@Override
 	public Iterator getThreads() {
-		// TODO Auto-generated method stub
-		return null;
+		if(threads == null) {
+			threads = new LinkedList<JavaThreadImpl>();
+
+			Collection<IJavaThread> ithreads = view.getActiveThreads();
+			Iterator<IJavaThread> iter = ithreads.iterator();
+			
+			while (iter.hasNext()) {
+				
+				threads.add(new JavaThreadImpl(heap, iter.next()));
+			}		
+		}
+		
+		return threads.iterator();
 	}
 
+	/**
+	 * HProf could potentially return trace buffers, through analysing the 
+	 * stack trace records, etc. 
+	 * This isn't done now - the emphasis is on the heap, and threads.
+	 * This method may even be removed.
+	 */
 	@Override
 	public Object getTraceBuffer(String bufferName, boolean formatted)
 			throws CorruptDataException {
-		// TODO Auto-generated method stub
-		return null;
+		throw new CorruptDataException(new CorruptDataImpl("There are no trace buffers"));
 	}
 
 	@Override

Added: incubator/kato/trunk/KatoHProfAdapterPOC/src/org/apache/kato/hprof/java/JavaStackFrameImpl.java
URL: http://svn.apache.org/viewvc/incubator/kato/trunk/KatoHProfAdapterPOC/src/org/apache/kato/hprof/java/JavaStackFrameImpl.java?rev=774430&view=auto
==============================================================================
--- incubator/kato/trunk/KatoHProfAdapterPOC/src/org/apache/kato/hprof/java/JavaStackFrameImpl.java (added)
+++ incubator/kato/trunk/KatoHProfAdapterPOC/src/org/apache/kato/hprof/java/JavaStackFrameImpl.java Wed May 13 16:57:09 2009
@@ -0,0 +1,213 @@
+package org.apache.kato.hprof.java;
+
+import java.util.Iterator;
+import java.util.LinkedList;
+
+import org.apache.kato.hprof.IJavaStackFrame;
+import org.apache.kato.hprof.image.ImagePointerImpl;
+import org.apache.kato.image.CorruptDataException;
+import org.apache.kato.image.DataUnavailable;
+import org.apache.kato.image.ImagePointer;
+import org.apache.kato.image.KatoException;
+import org.apache.kato.java.JavaClass;
+import org.apache.kato.java.JavaLocation;
+import org.apache.kato.java.JavaMethod;
+import org.apache.kato.java.JavaStackFrame;
+
+/**
+ * 	A stack frame, wraps a {@link IJavaHeapInternal}.
+ *
+ */
+public class JavaStackFrameImpl implements JavaStackFrame {
+	private IJavaStackFrame frame;
+	private IJavaHeapInternal heap;
+	
+	public JavaStackFrameImpl(IJavaHeapInternal heap, IJavaStackFrame frame) {
+		this.frame = frame;
+		this.heap = heap;
+	}
+	
+	/**
+	 * There is no stored frame bas pointer.
+	 * Returns frame ID instead.
+	 * 
+	 * FIXME Would like a DataUnavailable exception here.
+	 */
+	@Override
+	public ImagePointer getBasePointer() throws CorruptDataException {		
+		return new ImagePointerImpl(frame.getID());
+	}
+
+	@Override
+	public Iterator getHeapRoots() {
+		// TODO Need implementation here.
+		return null;
+	}
+
+	private JavaLocation location = new JavaLocationImpl();
+	@Override
+	public JavaLocation getLocation() throws CorruptDataException {
+		return location;
+	}
+
+	/**
+	 * Implements a JavaLocation
+	 * There is a 1:1 relationship with JavaStackFrames. 
+	 *
+	 */
+	private class JavaLocationImpl implements JavaLocation {
+		
+		/**
+		 * For testing equality.
+		 * 
+		 * @return IJavaStackFrame of this location
+		 */
+		IJavaStackFrame getFrame() {
+			return frame;			
+		}
+		
+		
+		@Override
+		public ImagePointer getAddress() throws CorruptDataException {
+			return new ImagePointerImpl(frame.getID());
+		}
+
+		
+		/**
+		 * Returns 1 if the method is compiled, otherwise returns 0
+		 */
+		@Override
+		public int getCompilationLevel() throws CorruptDataException {
+			int level = frame.getLineNumber();
+		
+			return level == -2 ? 1 : 0;			
+		}
+
+		@Override
+		public String getFilename() throws DataUnavailable,
+				CorruptDataException {			
+			return frame.getSourceFileName();
+		}
+
+		@Override
+		public int getLineNumber() throws DataUnavailable, CorruptDataException {
+			int level = frame.getLineNumber();
+			
+			if (level < 0) {
+				throw new DataUnavailable("No line number information.");
+			}
+			return level;
+		}
+
+		private JavaMethodImpl method = new JavaMethodImpl();
+		
+		@Override
+		public JavaMethod getMethod() throws CorruptDataException {
+			return method;
+		}
+		
+		public boolean equals(Object obj) {
+			if (obj == null) return false;
+			
+			if (! (obj instanceof JavaLocationImpl)) {
+				return false;
+			}
+			
+			JavaLocationImpl otherLocation = (JavaLocationImpl) obj;
+			
+			return otherLocation.getFrame().equals(frame);
+		}
+		
+		// TODO
+		public String toString() {
+			return "a string";
+		}
+		
+	}
+
+	/**
+	 *  A dummy method. 
+	 *
+	 */
+	private class JavaMethodImpl implements JavaMethod {
+
+		/**
+		 * HProf has no bytecode sections.
+		 * 
+		 * @return empty Iterator
+		 */
+		@Override
+		public Iterator getBytecodeSections() {			
+			return (new LinkedList()).iterator();
+		}
+
+		/**
+		 * HProf has no compiled code sections.
+		 * @return empty Iterator
+		 */
+		@Override
+		public Iterator getCompiledSections() {
+			return (new LinkedList()).iterator();
+		}
+
+		@Override
+		public JavaClass getDeclaringClass() throws CorruptDataException,
+				DataUnavailable {			
+			return heap.getJavaClassByID(frame.getMethodClass().getClassObjectID());
+		}
+
+		/**
+		 * HProf doesn't store modifiers. 
+		 * A method will never be reported as static.
+		 * 
+		 * @return 0
+		 */
+		@Override		
+		public int getModifiers() throws CorruptDataException {
+			return 0;
+		}
+
+		@Override
+		public String getName() throws CorruptDataException {
+			return frame.getMethodName();
+		}
+
+		@Override
+		public String getSignature() throws CorruptDataException {
+			return frame.getMethodSignature();
+		}
+		
+		public boolean equals(Object obj) {
+			if (obj == null) return false;
+			
+			if (! (obj instanceof JavaMethodImpl)) {
+				return false;
+			}
+			
+			JavaMethodImpl otherMethod = (JavaMethodImpl) obj;
+			
+			try {
+				if (otherMethod.getDeclaringClass().equals(getDeclaringClass()) &&
+						otherMethod.getName().equals(getName()) &&
+						otherMethod.getSignature().equals(getSignature())) {
+					return true;
+				}
+			} catch (CorruptDataException e) {
+			} catch (DataUnavailable e) {
+			}
+			
+			return false;
+		}
+		
+		/**
+		 * @return String in format "classname.methodname(signature)";
+		 */
+		public String toString() {
+			try {
+				return getDeclaringClass().getName()+"."+getName()+getSignature();
+			} catch (KatoException e) {				
+				return "Exception on JavaMethodImpl.toString()+"+ e.getMessage();
+			}  
+		}
+	}
+}

Propchange: incubator/kato/trunk/KatoHProfAdapterPOC/src/org/apache/kato/hprof/java/JavaStackFrameImpl.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: incubator/kato/trunk/KatoHProfAdapterPOC/src/org/apache/kato/hprof/java/JavaThreadImpl.java
URL: http://svn.apache.org/viewvc/incubator/kato/trunk/KatoHProfAdapterPOC/src/org/apache/kato/hprof/java/JavaThreadImpl.java?rev=774430&view=auto
==============================================================================
--- incubator/kato/trunk/KatoHProfAdapterPOC/src/org/apache/kato/hprof/java/JavaThreadImpl.java (added)
+++ incubator/kato/trunk/KatoHProfAdapterPOC/src/org/apache/kato/hprof/java/JavaThreadImpl.java Wed May 13 16:57:09 2009
@@ -0,0 +1,116 @@
+package org.apache.kato.hprof.java;
+
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.Vector;
+
+import org.apache.kato.hprof.IJavaStack;
+import org.apache.kato.hprof.IJavaStackFrame;
+import org.apache.kato.hprof.IJavaThread;
+import org.apache.kato.hprof.image.ImagePointerImpl;
+import org.apache.kato.image.CorruptDataException;
+import org.apache.kato.image.DataUnavailable;
+import org.apache.kato.image.ImagePointer;
+import org.apache.kato.image.ImageThread;
+import org.apache.kato.java.JavaObject;
+import org.apache.kato.java.JavaThread;
+
+/**
+ * Implements a JavaThread by wrapping a IJavaThread from HprofView.
+ *
+ */
+public class JavaThreadImpl implements JavaThread {
+	private IJavaHeapInternal heap;
+	private IJavaThread thread;
+	
+	public JavaThreadImpl(IJavaHeapInternal heap, IJavaThread thread) {
+		this.heap = heap;
+		this.thread = thread;
+	}
+	
+	/**
+	 * There are no image threads in hprof files.
+	 * 
+	 * @throws DataUnavailable always - there are no ImageThreads
+	 */
+	@Override
+	public ImageThread getImageThread() throws CorruptDataException,
+			DataUnavailable {
+		throw new DataUnavailable("ImageThreads not present in Hprof file.");
+	}
+
+	
+	/**
+	 * There are no JNIEnvs in Hprof.
+	 * There is no DataUnavailable exception, so we wrap up the thread serial# in an
+	 * image pointer.
+	 * 
+	 * @return ImagePointer of thread serial number
+	 */
+	@Override
+	public ImagePointer getJNIEnv() throws CorruptDataException {
+		return new ImagePointerImpl(thread.getThreadSerialNumber());
+	}
+
+	@Override
+	public String getName() throws CorruptDataException {
+		return thread.getThreadName();
+	}
+
+	@Override
+	public JavaObject getObject() throws CorruptDataException {
+		return heap.getObjectByID(thread.getThreadObjectID());
+	}
+
+	/**
+	 * Priority not stored in Hprof.
+	 * 
+	 * @return 0
+	 */
+	@Override
+	public int getPriority() throws CorruptDataException {		
+		return 0;
+	}
+
+	/**
+	 * 
+	 * @return Iterator over all stack frames
+	 */
+	private Vector<JavaStackFrameImpl> frames;
+	@Override
+	public Iterator getStackFrames() {
+		if(frames == null) {
+			IJavaStack stack =thread.getStack();
+		 	IJavaStackFrame[] stackFrames = stack.getStack();
+		 	frames = new Vector<JavaStackFrameImpl>(stackFrames.length);
+
+		 	for (IJavaStackFrame frame : stackFrames) {
+		 		frames.add(new JavaStackFrameImpl(heap, frame));
+		 	}
+		}
+		
+		return frames.iterator();
+	}
+
+	/**
+	 * Stack sections are not recorded in hprof files.
+	 * 
+	 * @return empty iterator.
+	 */
+	@Override
+	public Iterator getStackSections() {
+		return new LinkedList().iterator();
+	}
+
+	/**
+	 * State isn't recorded in Hprof. Only live threads
+	 * are reported, STATE_ALIVE can therefore be stated.
+	 * 
+	 * @return STATE_ALIVE
+	 */
+	@Override
+	public int getState() throws CorruptDataException {
+		return STATE_ALIVE;
+	}
+
+}

Propchange: incubator/kato/trunk/KatoHProfAdapterPOC/src/org/apache/kato/hprof/java/JavaThreadImpl.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: incubator/kato/trunk/KatoHProfAdapterPOC/testsrc/org/apache/kato/hprof/java/GCInstanceHeapDumpRecordTest.java
URL: http://svn.apache.org/viewvc/incubator/kato/trunk/KatoHProfAdapterPOC/testsrc/org/apache/kato/hprof/java/GCInstanceHeapDumpRecordTest.java?rev=774430&r1=774429&r2=774430&view=diff
==============================================================================
--- incubator/kato/trunk/KatoHProfAdapterPOC/testsrc/org/apache/kato/hprof/java/GCInstanceHeapDumpRecordTest.java (original)
+++ incubator/kato/trunk/KatoHProfAdapterPOC/testsrc/org/apache/kato/hprof/java/GCInstanceHeapDumpRecordTest.java Wed May 13 16:57:09 2009
@@ -15,76 +15,93 @@
 
 import org.apache.kato.hprof.datalayer.IGCInstanceHeapDumpRecord;
 
+/**
+ * Implements a IGCInstanceHeapDumpRecord, to be wrapped by a JavaObjectInstanceImpl.
+ * 
+ * uses setters to set values.
+ * 
+ * These have to make sense in context with the classes.
+ *
+ */
 public class GCInstanceHeapDumpRecordTest implements IGCInstanceHeapDumpRecord{
+	long[] slots;
+	
+	public void setSlots(long[] slots) {
+		this.slots = slots;
+	}
+	
+	long id;
+	public void setID(long id) {
+		this.id = id;
+	}
 	@Override
-	public boolean getBooleanField(int offset) {
-		// TODO Auto-generated method stub
-		return false;
+	public long getID() {
+		return id;
+	}
+	long classObjectID;
+	public void setClassObjectID(long id) {
+		this.classObjectID = id;
 	}
+	@Override
+	public long getClassObjectID() {
+		return classObjectID;
+	}
+	
 
+	int stackTraceNumber;
+	public void setStackTraceNumber(int num) {
+		this.stackTraceNumber = num;
+	}
 	@Override
-	public byte getByteField(int offset) {
-		// TODO Auto-generated method stub
-		return 0;
+	public int getStackTraceNumber() {
+		return stackTraceNumber;
+	}
+	
+	@Override
+	public boolean getBooleanField(int offset) {
+		return !(slots[offset] == 0L);
 	}
 
 	@Override
-	public char getCharField(int offset) {
-		// TODO Auto-generated method stub
-		return 0;
+	public byte getByteField(int offset) {
+		return (byte) slots[offset];
 	}
 
 	@Override
-	public long getClassObjectID() {
-		return 12;
+	public char getCharField(int offset) {
+		return (char) slots[offset];
 	}
 
 	@Override
 	public double getDoubleField(int offset) {
-		// TODO Auto-generated method stub
-		return 0;
+		return Double.longBitsToDouble(slots[offset]);
 	}
 
 	@Override
 	public float getFloatField(int offset) {
-		// TODO Auto-generated method stub
-		return 0;
+		return Float.intBitsToFloat((int) slots[offset]);
 	}
 
 	@Override
 	public long getIDField(int offset) {
-		// TODO Auto-generated method stub
-		return 0;
+		return slots[offset];
 	}
 
 	@Override
 	public int getIntegerField(int offset) {
-		// TODO Auto-generated method stub
-		return 0;
+		return (int) slots[offset];
 	}
 
 	@Override
 	public long getLongField(int offset) {
-		// TODO Auto-generated method stub
-		return 0;
+		return slots[offset];
 	}
 
 	@Override
 	public short getShortField(int offset) {
-		// TODO Auto-generated method stub
-		return 0;
+		return (short) slots[offset];
 	}
 
-	@Override
-	public long getID() {
-		// TODO Auto-generated method stub
-		return 0;
-	}
 
-	@Override
-	public int getStackTraceNumber() {
-		// TODO Auto-generated method stub
-		return 0;
-	}
 	
 }
\ No newline at end of file

Modified: incubator/kato/trunk/KatoHProfAdapterPOC/testsrc/org/apache/kato/hprof/java/JavaHeapImplTest.java
URL: http://svn.apache.org/viewvc/incubator/kato/trunk/KatoHProfAdapterPOC/testsrc/org/apache/kato/hprof/java/JavaHeapImplTest.java?rev=774430&r1=774429&r2=774430&view=diff
==============================================================================
--- incubator/kato/trunk/KatoHProfAdapterPOC/testsrc/org/apache/kato/hprof/java/JavaHeapImplTest.java (original)
+++ incubator/kato/trunk/KatoHProfAdapterPOC/testsrc/org/apache/kato/hprof/java/JavaHeapImplTest.java Wed May 13 16:57:09 2009
@@ -14,16 +14,27 @@
 package org.apache.kato.hprof.java;
 
 import java.util.Collection;
+import java.util.HashMap;
 import java.util.Iterator;
 
 import org.apache.kato.java.JavaObject;
 
+/**
+ * A dummy implementation of IJavaHeapInternal.
+ * 
+ * @author monteith
+ *
+ */
 public class JavaHeapImplTest implements IJavaHeapInternal {
-
+	public HashMap<Long,JavaClassImpl> classImplIDMap = new HashMap<Long,JavaClassImpl>();
+	
+	public void putJavaClassByID(JavaClassImpl clazz, long id) {
+		classImplIDMap.put(id, clazz);
+		
+	}
 	@Override
 	public JavaClassImpl getJavaClassByID(long arrayClassObjectID) {
-		// TODO Auto-generated method stub
-		return null;
+		return classImplIDMap.get(arrayClassObjectID);
 	}
 
 	@Override
@@ -38,10 +49,13 @@
 		return null;
 	}
 
+	HashMap<Long,JavaObject> objectIDMap = new HashMap<Long,JavaObject>();
+	public void setObjectByID(Long id, JavaObject obj) {
+		objectIDMap.put(id, obj);
+	}
 	@Override
 	public JavaObject getObjectByID(Long element) {
-		// TODO Auto-generated method stub
-		return null;
+		return objectIDMap.get(element);
 	}
 
 	@Override

Modified: incubator/kato/trunk/KatoHProfAdapterPOC/testsrc/org/apache/kato/hprof/java/JavaObjectInstanceImplTest.java
URL: http://svn.apache.org/viewvc/incubator/kato/trunk/KatoHProfAdapterPOC/testsrc/org/apache/kato/hprof/java/JavaObjectInstanceImplTest.java?rev=774430&r1=774429&r2=774430&view=diff
==============================================================================
--- incubator/kato/trunk/KatoHProfAdapterPOC/testsrc/org/apache/kato/hprof/java/JavaObjectInstanceImplTest.java (original)
+++ incubator/kato/trunk/KatoHProfAdapterPOC/testsrc/org/apache/kato/hprof/java/JavaObjectInstanceImplTest.java Wed May 13 16:57:09 2009
@@ -1,6 +1,3 @@
-package org.apache.kato.hprof.java;
-
-
 /*******************************************************************************
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -14,6 +11,10 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  ******************************************************************************/
+package org.apache.kato.hprof.java;
+
+
+
 import junit.framework.TestCase;
 
 public class JavaObjectInstanceImplTest extends TestCase {
@@ -24,6 +25,7 @@
 	public void setUp() {
 		heap = new JavaHeapImplTest();
 		gcInstance =  new GCInstanceHeapDumpRecordTest();
+		gcInstance.setID(1);
 		instance = new JavaObjectInstanceImpl(heap, gcInstance);
 	}
 	
@@ -55,6 +57,11 @@
 	}
 	
 	public void testGetArraySize() throws Exception {
-		//assert
+		try{
+			int size = instance.getArraySize();
+			fail("instance.getArraySize() didn't throw IllegalArgumentException - returned "+size);
+		} catch(IllegalArgumentException e) {
+			// Normal case.
+		}
 	}
 }

Added: incubator/kato/trunk/KatoHProfAdapterPOC/testsrc/org/apache/kato/hprof/java/JavaPrimitiveClassImplTest.java
URL: http://svn.apache.org/viewvc/incubator/kato/trunk/KatoHProfAdapterPOC/testsrc/org/apache/kato/hprof/java/JavaPrimitiveClassImplTest.java?rev=774430&view=auto
==============================================================================
--- incubator/kato/trunk/KatoHProfAdapterPOC/testsrc/org/apache/kato/hprof/java/JavaPrimitiveClassImplTest.java (added)
+++ incubator/kato/trunk/KatoHProfAdapterPOC/testsrc/org/apache/kato/hprof/java/JavaPrimitiveClassImplTest.java Wed May 13 16:57:09 2009
@@ -0,0 +1,110 @@
+/*******************************************************************************
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+package org.apache.kato.hprof.java;
+
+import java.util.Iterator;
+
+import junit.framework.TestCase;
+
+import org.apache.kato.java.JavaClass;
+
+/**
+ * Tests the dummy class for representing dummy types.
+ * There is nothing to this class, except it's name ID and loader.
+ */
+public class JavaPrimitiveClassImplTest extends TestCase {
+	JavaPrimitiveClassImpl instance;
+	static String className = "name";
+	static int id = 10;
+	
+	public void setUp() {
+		instance = new JavaPrimitiveClassImpl(className,id , null);
+	}
+	
+	public void testName() throws Exception {
+		assertEquals(className, instance.getName());
+	}
+	
+	public void testSuperClass() throws Exception {
+		assertNull(instance.getSuperclass());
+	}
+	
+	public void testIsArray() throws Exception {
+		assertFalse(instance.isArray());
+	}
+	
+	public void testGetObject() throws Exception {
+		assertNull(instance.getObject());
+	}
+	
+	public void testGetModifiers() throws Exception {
+		assertEquals(0, instance.getModifiers());
+	}
+	
+	public void testGetID() throws Exception {
+		assertEquals(id, instance.getID());
+	}
+	
+	public void getComponentType() throws Exception {
+		try{
+			JavaClass clazz = instance.getComponentType();
+			
+			fail("Expected IllegalArgumentException from getComponentType(), got " + clazz);
+		}catch(IllegalArgumentException e) {
+			// Expected
+		}
+	}
+	
+	public void testGetConstantPoolReferences() throws Exception {
+		Iterator iter = instance.getConstantPoolReferences();
+		
+		assertNotNull(iter);
+		
+		assertFalse(iter.hasNext());		
+	}
+	
+	public void testGetDeclaredFields() throws Exception {
+		Iterator iter = instance.getDeclaredFields();
+		
+		assertNotNull(iter);
+		
+		assertFalse(iter.hasNext());		
+	}
+	
+	public void testGetDeclaredMethods() throws Exception {
+		Iterator iter = instance.getDeclaredMethods();
+		
+		assertNotNull(iter);
+		
+		assertFalse(iter.hasNext());		
+	}
+	
+	
+	public void testGetInterfaces() throws Exception {
+		Iterator iter = instance.getInterfaces();
+		
+		assertNotNull(iter);
+		
+		assertFalse(iter.hasNext());		
+	}
+
+	public void testGetReferences() throws Exception {
+		Iterator iter = instance.getReferences();
+		
+		assertNotNull(iter);
+		
+		assertFalse(iter.hasNext());		
+	}
+	
+}

Propchange: incubator/kato/trunk/KatoHProfAdapterPOC/testsrc/org/apache/kato/hprof/java/JavaPrimitiveClassImplTest.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: incubator/kato/trunk/KatoHProfAdapterPOC/testsrc/org/apache/kato/hprof/java/JavaTestClass.java
URL: http://svn.apache.org/viewvc/incubator/kato/trunk/KatoHProfAdapterPOC/testsrc/org/apache/kato/hprof/java/JavaTestClass.java?rev=774430&view=auto
==============================================================================
--- incubator/kato/trunk/KatoHProfAdapterPOC/testsrc/org/apache/kato/hprof/java/JavaTestClass.java (added)
+++ incubator/kato/trunk/KatoHProfAdapterPOC/testsrc/org/apache/kato/hprof/java/JavaTestClass.java Wed May 13 16:57:09 2009
@@ -0,0 +1,147 @@
+/*******************************************************************************
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+package org.apache.kato.hprof.java;
+
+import org.apache.kato.hprof.IJavaClass;
+import org.apache.kato.hprof.datalayer.ConstantPoolEntry;
+import org.apache.kato.hprof.datalayer.InstanceFieldEntry;
+import org.apache.kato.hprof.datalayer.StaticFieldEntry;
+
+/**
+ * Implements a IJavaClass for consumption by
+ * JavaClassImpl.
+ *
+ * Uses setters to set all values.
+ */
+public class JavaTestClass implements IJavaClass {
+	long loaderID;
+	public void  setClassLoadersObjectID(long id) {
+		this.loaderID = id;
+	}
+	@Override
+	public long getClassLoaderObjectID() {
+		return loaderID;
+	}
+
+	String className;
+	public void setClassName(String className) {
+		this.className = className;
+	}
+	@Override
+	public String getClassName() {
+		return className;
+	}
+
+	long classObjectID;
+	public void setClassObjectID(long id) {
+		this.classObjectID = id;
+	}
+	@Override
+	public long getClassObjectID() {
+		return classObjectID;
+	}
+
+	int serialNo;
+	public void setClassSerialNumber(int serialNo) {
+		this.serialNo = serialNo;
+	}
+	@Override
+	public int getClassSerialNumber() {
+		return serialNo;
+	}
+
+	ConstantPoolEntry[] constantPoolEntries;
+	public void setConstantPoolEntries(ConstantPoolEntry[] entries) {
+		this.constantPoolEntries = entries;
+	}
+
+	@Override
+	public ConstantPoolEntry[] getConstantPoolEntries() {
+		return constantPoolEntries;
+	}
+
+	InstanceFieldEntry[] instanceFieldEntries;
+	public void setInstanceFields(InstanceFieldEntry[] entries) {
+		this.instanceFieldEntries = entries;
+	}
+	@Override
+	public InstanceFieldEntry[] getInstanceFields() {
+		return instanceFieldEntries;
+	}
+
+	
+	int instanceSize;
+	public void setInstanceSize(int size) {
+		this.instanceSize = size;
+	}
+	@Override
+	public int getInstanceSize() {
+		return instanceSize;
+	}
+
+	int offsetSize;
+	public void setOffsetSize(int size) {
+		this.offsetSize = size;
+	}
+	@Override
+	public int getOffsetSize() {
+		return offsetSize;
+	}
+
+	long protectionDomainObjectID;
+	public void setProtectionDomainObjectID(long id) {
+		this.protectionDomainObjectID = id;
+	}
+	@Override
+	public long getProtectionDomainObjectID() {
+		return protectionDomainObjectID;
+	}
+
+	long signersObjectID;
+	public void setSignersObjectID(long id) {
+		this.signersObjectID = id;
+	}
+	@Override
+	public long getSignersObjectID() {
+		return signersObjectID;
+	}
+
+	int stackTraceSerialNumber;
+	public void setStackTraceSerialNumber(int num) {
+		this.stackTraceSerialNumber = num;
+	}
+	@Override
+	public int getStackTraceSerialNumber() {
+		return stackTraceSerialNumber;
+	}
+
+	StaticFieldEntry staticFieldEntries[];
+	public void setStaticFields(StaticFieldEntry[] entries) {
+		this.staticFieldEntries = entries;
+	}
+	@Override
+	public StaticFieldEntry[] getStaticFields() {
+		return staticFieldEntries;
+	}
+
+	long superClassObjectID;
+	public void setSuperClassObjectID(long id) {
+		this.superClassObjectID = id;
+	}
+	@Override
+	public long getSuperClassObjectID() {
+		return superClassObjectID;
+	}
+
+}

Propchange: incubator/kato/trunk/KatoHProfAdapterPOC/testsrc/org/apache/kato/hprof/java/JavaTestClass.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: incubator/kato/trunk/KatoHProfAdapterPOC/testsrc/org/apache/kato/hprof/java/PrimitiveArrayTestImpl.java
URL: http://svn.apache.org/viewvc/incubator/kato/trunk/KatoHProfAdapterPOC/testsrc/org/apache/kato/hprof/java/PrimitiveArrayTestImpl.java?rev=774430&view=auto
==============================================================================
--- incubator/kato/trunk/KatoHProfAdapterPOC/testsrc/org/apache/kato/hprof/java/PrimitiveArrayTestImpl.java (added)
+++ incubator/kato/trunk/KatoHProfAdapterPOC/testsrc/org/apache/kato/hprof/java/PrimitiveArrayTestImpl.java Wed May 13 16:57:09 2009
@@ -0,0 +1,157 @@
+/*******************************************************************************
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+package org.apache.kato.hprof.java;
+
+import org.apache.kato.common.BasicType;
+import org.apache.kato.hprof.datalayer.IGCPrimitiveArrayHeapDumpRecord;
+
+/**
+ * 
+ * @author monteith
+ *
+ */
+public class PrimitiveArrayTestImpl implements IGCPrimitiveArrayHeapDumpRecord, BasicType{
+
+	long ID;
+	public void setID(long id) {
+		this.ID = id;
+	}
+	@Override
+	public long getID() {
+		return this.ID;
+	}
+
+	int stackTraceNumber;
+	public void setStackTraceNumber(int num) {
+		this.stackTraceNumber = num;
+	}
+	@Override
+	public int getStackTraceNumber() {
+		return stackTraceNumber;
+	}
+	
+	@Override
+	public short getElementType() {
+		return elementType;
+	}
+	
+	@Override
+	public int getNumberOfElements() {
+		return numElements;
+	}
+	
+	
+	boolean[] booleanArray;
+	byte[] byteArray;
+	char[] charArray;
+	short[] shortArray;
+	int[] intArray;
+	long[] longArray;
+	float[] floatArray;
+	double[] doubleArray;
+	short elementType;
+	int numElements;
+	
+	public PrimitiveArrayTestImpl(boolean[] array) {
+		this.booleanArray = array;
+		this.numElements = array.length;
+		this.elementType = BOOLEAN;
+	}
+	
+	@Override
+	public boolean getBooleanElement(int index) {
+		return booleanArray[index];
+	}
+
+	public PrimitiveArrayTestImpl(byte[] array) {
+		this.byteArray = array;
+		this.numElements = array.length;
+		this.elementType = BYTE;
+	}
+	
+	@Override
+	public short getByteElement(int index) {
+		return byteArray[index];
+	}
+
+	public PrimitiveArrayTestImpl(char[] array) {
+		this.charArray = array;
+		this.numElements = array.length;
+		this.elementType = CHAR;
+	}
+	
+	@Override
+	public char getCharElement(int index) {
+		return charArray[index];
+	}
+
+	public PrimitiveArrayTestImpl(double[] array) {
+		this.doubleArray = array;
+		this.numElements = array.length;
+		this.elementType = DOUBLE;
+	}
+	
+	@Override
+	public double getDoubleElement(int index) {
+		return doubleArray[index];
+	}
+
+
+
+	public PrimitiveArrayTestImpl(float[] array) {
+		this.floatArray = array;
+		this.numElements = array.length;
+		this.elementType = FLOAT;
+	}
+	
+	@Override
+	public float getFloatElement(int index) {
+		return floatArray[index];
+	}
+	public PrimitiveArrayTestImpl(int[] array) {
+		this.intArray = array;
+		this.numElements = array.length;
+		this.elementType = INT;
+	}
+	@Override
+	public int getIntElement(int index) {
+		return intArray[index];
+	}
+	
+	public PrimitiveArrayTestImpl(long[] array) {
+		this.longArray = array;
+		this.numElements = array.length;
+		this.elementType = LONG;
+	}
+	
+	@Override
+	public long getLongElement(int index) {
+		return longArray[index];
+	}
+
+
+
+	public PrimitiveArrayTestImpl(short[] array) {
+		this.shortArray = array;
+		this.numElements = array.length;
+		this.elementType = SHORT;
+	}
+	
+	@Override
+	public short getShortElement(int index) {
+		return shortArray[index];
+	}
+
+
+}

Propchange: incubator/kato/trunk/KatoHProfAdapterPOC/testsrc/org/apache/kato/hprof/java/PrimitiveArrayTestImpl.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: incubator/kato/trunk/KatoHProfAdapterPOC/testsrc/test/apache/kato/hprof/TestJavaHeap.java
URL: http://svn.apache.org/viewvc/incubator/kato/trunk/KatoHProfAdapterPOC/testsrc/test/apache/kato/hprof/TestJavaHeap.java?rev=774430&r1=774429&r2=774430&view=diff
==============================================================================
--- incubator/kato/trunk/KatoHProfAdapterPOC/testsrc/test/apache/kato/hprof/TestJavaHeap.java (original)
+++ incubator/kato/trunk/KatoHProfAdapterPOC/testsrc/test/apache/kato/hprof/TestJavaHeap.java Wed May 13 16:57:09 2009
@@ -17,8 +17,6 @@
 
 import org.apache.kato.hprof.HProfView;
 import org.apache.kato.hprof.java.JavaHeapImpl;
-import org.apache.kato.hprof.java.JavaRuntimeImpl;
-import org.apache.kato.java.JavaRuntime;
 
 import test.apache.kato.hprof.image.AbstractHProfTestCase;
 
@@ -37,11 +35,10 @@
 	public void testBadHeapRecordIDConstructor() throws IOException {
 		
 		
-		getMinimalImage();
-		JavaRuntimeImpl rt= (JavaRuntimeImpl) getJavaRuntime();
+		HProfView view=getMinimalHProfView();
 		
 		try {
-		JavaHeapImpl impl=new JavaHeapImpl(rt,0);
+		JavaHeapImpl impl=new JavaHeapImpl(view,0);
 		fail("expected illegal argument exception");
 		}
 		catch(IllegalArgumentException iae) {