HHH-5704 HHH-5893 : Added tests for empty LOBs

This commit is contained in:
Gail Badner 2011-02-07 13:56:41 -08:00
parent 224121aee1
commit 67c05ff9f5
5 changed files with 64 additions and 9 deletions

View File

@ -71,6 +71,7 @@ public class BlobLocatorTest extends DatabaseSpecificFunctionalTestCase {
public void testBoundedBlobLocatorAccess() throws Throwable {
byte[] original = buildRecursively( BLOB_SIZE, true );
byte[] changed = buildRecursively( BLOB_SIZE, false );
byte[] empty = new byte[] {};
Session s = openSession();
s.beginTransaction();
@ -121,11 +122,23 @@ public class BlobLocatorTest extends DatabaseSpecificFunctionalTestCase {
s.getTransaction().commit();
s.close();
// test empty blob
s = openSession();
s.beginTransaction();
entity = ( LobHolder ) s.get( LobHolder.class, entity.getId() );
assertEquals( BLOB_SIZE, entity.getBlobLocator().length() );
assertEquals( changed, extractData( entity.getBlobLocator() ) );
entity.setBlobLocator( s.getLobHelper().createBlob( empty ) );
s.getTransaction().commit();
s.close();
s = openSession();
s.beginTransaction();
entity = ( LobHolder ) s.get( LobHolder.class, entity.getId() );
if ( entity.getBlobLocator() != null) {
assertEquals( empty.length, entity.getBlobLocator().length() );
assertEquals( empty, extractData( entity.getBlobLocator() ) );
}
s.delete( entity );
s.getTransaction().commit();
s.close();

View File

@ -33,6 +33,8 @@ import org.hibernate.dialect.Dialect;
import org.hibernate.dialect.H2Dialect;
import org.hibernate.testing.junit.functional.DatabaseSpecificFunctionalTestCase;
import org.hibernate.testing.junit.functional.FunctionalTestClassTestSuite;
import org.hibernate.type.descriptor.java.DataHelper;
import org.hibernate.util.StringHelper;
/**
* Tests lazy materialization of data mapped by
@ -67,6 +69,7 @@ public class ClobLocatorTest extends DatabaseSpecificFunctionalTestCase {
public void testBoundedClobLocatorAccess() throws Throwable {
String original = buildRecursively( CLOB_SIZE, 'x' );
String changed = buildRecursively( CLOB_SIZE, 'y' );
String empty = "";
Session s = openSession();
s.beginTransaction();
@ -117,11 +120,23 @@ public class ClobLocatorTest extends DatabaseSpecificFunctionalTestCase {
s.getTransaction().commit();
s.close();
// test empty clob
s = openSession();
s.beginTransaction();
entity = ( LobHolder ) s.get( LobHolder.class, entity.getId() );
assertEquals( CLOB_SIZE, entity.getClobLocator().length() );
assertEquals( changed, extractData( entity.getClobLocator() ) );
entity.setClobLocator( s.getLobHelper().createClob( empty ) );
s.getTransaction().commit();
s.close();
s = openSession();
s.beginTransaction();
entity = ( LobHolder ) s.get( LobHolder.class, entity.getId() );
if ( entity.getClobLocator() != null) {
assertEquals( empty.length(), entity.getClobLocator().length() );
assertEquals( empty, extractData( entity.getClobLocator() ) );
}
s.delete( entity );
s.getTransaction().commit();
s.close();
@ -166,14 +181,7 @@ public class ClobLocatorTest extends DatabaseSpecificFunctionalTestCase {
}
private String extractData(Clob clob) throws Throwable {
if ( getDialect() instanceof H2Dialect ) {
return clob.getSubString( 1, ( int ) clob.length() );
}
else {
char[] data = new char[ (int) clob.length() ];
clob.getCharacterStream().read( data );
return new String( data );
}
return DataHelper.extractString( clob.getCharacterStream() );
}

View File

@ -45,6 +45,7 @@ public abstract class LongByteArrayTest extends DatabaseSpecificFunctionalTestCa
public void testBoundedLongByteArrayAccess() {
byte[] original = buildRecursively( ARRAY_SIZE, true );
byte[] changed = buildRecursively( ARRAY_SIZE, false );
byte[] empty = new byte[] {};
Session s = openSession();
s.beginTransaction();
@ -83,6 +84,17 @@ public abstract class LongByteArrayTest extends DatabaseSpecificFunctionalTestCa
s.beginTransaction();
entity = ( LongByteArrayHolder ) s.get( LongByteArrayHolder.class, entity.getId() );
assertNull( entity.getLongByteArray() );
entity.setLongByteArray( empty );
s.getTransaction().commit();
s.close();
s = openSession();
s.beginTransaction();
entity = ( LongByteArrayHolder ) s.get( LongByteArrayHolder.class, entity.getId() );
if ( entity.getLongByteArray() != null ) {
assertEquals( empty.length, entity.getLongByteArray().length );
assertEquals( empty, entity.getLongByteArray() );
}
s.delete( entity );
s.getTransaction().commit();
s.close();

View File

@ -43,6 +43,7 @@ public abstract class LongStringTest extends DatabaseSpecificFunctionalTestCase
public void testBoundedLongStringAccess() {
String original = buildRecursively( LONG_STRING_SIZE, 'x' );
String changed = buildRecursively( LONG_STRING_SIZE, 'y' );
String empty = "";
Session s = openSession();
s.beginTransaction();
@ -81,6 +82,17 @@ public abstract class LongStringTest extends DatabaseSpecificFunctionalTestCase
s.beginTransaction();
entity = ( LongStringHolder ) s.get( LongStringHolder.class, entity.getId() );
assertNull( entity.getLongString() );
entity.setLongString( empty );
s.getTransaction().commit();
s.close();
s = openSession();
s.beginTransaction();
entity = ( LongStringHolder ) s.get( LongStringHolder.class, entity.getId() );
if ( entity.getLongString() != null ) {
assertEquals( empty.length(), entity.getLongString().length() );
assertEquals( empty, entity.getLongString() );
}
s.delete( entity );
s.getTransaction().commit();
s.close();

View File

@ -34,6 +34,7 @@ public class SerializableTypeTest extends FunctionalTestCase {
public void testNewSerializableType() {
final String initialPayloadText = "Initial payload";
final String changedPayloadText = "Changed payload";
final String empty = "";
Session s = openSession();
s.beginTransaction();
@ -72,6 +73,15 @@ public class SerializableTypeTest extends FunctionalTestCase {
s.beginTransaction();
holder = ( SerializableHolder ) s.get( SerializableHolder.class, holder.getId() );
assertNull( holder.getSerialData() );
holder.setSerialData( new SerializableData( empty ) );
s.getTransaction().commit();
s.close();
s = openSession();
s.beginTransaction();
holder = ( SerializableHolder ) s.get( SerializableHolder.class, holder.getId() );
serialData = ( SerializableData ) holder.getSerialData();
assertEquals( empty, serialData.getPayload() );
s.delete( holder );
s.getTransaction().commit();
s.close();