package de.pinyto.ctSESAM; import junit.framework.TestCase; import java.lang.reflect.Field; /** * Testing that the extended class really deletes the buffer. */ public class SecureByteArrayOutputStreamTest extends TestCase { public void testEmptyBuffer() { SecureByteArrayOutputStream stream = new SecureByteArrayOutputStream(); stream.write(0x12); stream.write(0x34); stream.write(0x56); assertEquals(0x12, stream.toByteArray()[0]); assertEquals(0x34, stream.toByteArray()[1]); assertEquals(0x56, stream.toByteArray()[2]); stream.emptyBuffer(); assertEquals(3, stream.size()); Class targetClass = stream.getClass(); try { Field field = targetClass.getSuperclass().getDeclaredField("buf"); field.setAccessible(true); byte[] buffer = (byte[]) field.get(stream); assertEquals(0x00, buffer[0]); assertEquals(0x00, buffer[1]); assertEquals(0x00, buffer[2]); } catch (NoSuchFieldException e) { e.printStackTrace(); int count = 0; for (Field found : targetClass.getDeclaredFields()) { assertEquals("buf", found.getName()); count++; } assertTrue(count > 0); } catch (IllegalAccessException e) { e.printStackTrace(); assertTrue(false); } stream.reset(); assertEquals(0, stream.size()); } }