HHH-11555 - Add test for issue

This commit is contained in:
Andrea Boriero 2017-03-08 16:12:52 +00:00
parent 549e712f1f
commit d9ef8fc366
1 changed files with 105 additions and 0 deletions

View File

@ -0,0 +1,105 @@
/*
* Hibernate, Relational Persistence for Idiomatic Java
*
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
*/
package org.hibernate.jpa.test.serialization;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EntityManager;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.PersistenceException;
import javax.persistence.Table;
import org.hibernate.jpa.test.BaseEntityManagerFunctionalTestCase;
import org.hibernate.testing.TestForIssue;
import org.junit.Test;
/**
* @author Andrea Boriero
*/
public class EntityManagerDeserializationTest extends BaseEntityManagerFunctionalTestCase {
@Override
protected Class<?>[] getAnnotatedClasses() {
return new Class[] {TestEntity.class};
}
@Test(expected = PersistenceException.class)
@TestForIssue(jiraKey = "HHH-11555")
public void deserializedEntityManagerPersistenceExceptionManagementTest() throws IOException {
EntityManager entityManager = getOrCreateEntityManager();
final EntityManager deserializedSession = spoofSerialization( entityManager );
try {
deserializedSession.getTransaction().begin();
TestEntity entity = new TestEntity();
entity.setName( "Andrea" );
deserializedSession.persist( entity );
entity.setName( null );
deserializedSession.flush();
}
finally {
deserializedSession.getTransaction().rollback();
deserializedSession.close();
entityManager.close();
}
}
private EntityManager spoofSerialization(EntityManager entityManager) throws IOException {
try {
// Serialize the incoming out to memory
ByteArrayOutputStream serBaOut = new ByteArrayOutputStream();
ObjectOutputStream serOut = new ObjectOutputStream( serBaOut );
serOut.writeObject( entityManager );
// Now, re-constitute the model from memory
ByteArrayInputStream serBaIn =
new ByteArrayInputStream( serBaOut.toByteArray() );
ObjectInputStream serIn = new ObjectInputStream( serBaIn );
EntityManager outgoing = (EntityManager) serIn.readObject();
return outgoing;
}
catch (ClassNotFoundException cnfe) {
throw new IOException( "Unable to locate class on reconstruction" );
}
}
@Entity
@Table(name = "TEST_ENTITY")
public static class TestEntity {
@Id
@GeneratedValue
private Long id;
@Column(nullable = false)
String name;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
}