HHH-10433 - Add test for issue
This commit is contained in:
parent
659157a45c
commit
a982b5674e
|
@ -0,0 +1,117 @@
|
||||||
|
/*
|
||||||
|
* 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.test.schemaupdate;
|
||||||
|
|
||||||
|
import javax.persistence.Entity;
|
||||||
|
import javax.persistence.Id;
|
||||||
|
import javax.persistence.Table;
|
||||||
|
import java.sql.Connection;
|
||||||
|
import java.sql.SQLException;
|
||||||
|
import java.util.Properties;
|
||||||
|
|
||||||
|
import org.hibernate.boot.MetadataSources;
|
||||||
|
import org.hibernate.boot.registry.StandardServiceRegistry;
|
||||||
|
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
|
||||||
|
import org.hibernate.boot.spi.MetadataImplementor;
|
||||||
|
import org.hibernate.cfg.Environment;
|
||||||
|
import org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl;
|
||||||
|
import org.hibernate.engine.jdbc.connections.spi.ConnectionProvider;
|
||||||
|
import org.hibernate.tool.hbm2ddl.SchemaUpdate;
|
||||||
|
import org.hibernate.tool.hbm2ddl.SchemaValidator;
|
||||||
|
import org.hibernate.tool.hbm2ddl.Target;
|
||||||
|
|
||||||
|
import org.junit.After;
|
||||||
|
import org.junit.Before;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import org.hibernate.testing.TestForIssue;
|
||||||
|
import org.hibernate.testing.junit4.BaseUnitTestCase;
|
||||||
|
|
||||||
|
import static org.hamcrest.MatcherAssert.assertThat;
|
||||||
|
import static org.hamcrest.core.Is.is;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Andrea Boriero
|
||||||
|
*/
|
||||||
|
@TestForIssue(jiraKey = "HHH-10443")
|
||||||
|
public class ConnectionsReleaseTest extends BaseUnitTestCase {
|
||||||
|
|
||||||
|
public static Properties getConnectionProviderProperties() {
|
||||||
|
Properties props = new Properties();
|
||||||
|
props.put( Environment.DRIVER, "org.h2.Driver" );
|
||||||
|
props.put( Environment.URL, String.format( "jdbc:h2:mem:%s;DB_CLOSE_DELAY=-1", "db1" ) );
|
||||||
|
props.put( Environment.USER, "sa" );
|
||||||
|
props.put( Environment.PASS, "" );
|
||||||
|
return props;
|
||||||
|
}
|
||||||
|
|
||||||
|
private StandardServiceRegistry ssr;
|
||||||
|
private MetadataImplementor metadata;
|
||||||
|
private ConnectionProviderDecorator connectionProvider;
|
||||||
|
|
||||||
|
@Before
|
||||||
|
public void setUp() {
|
||||||
|
connectionProvider = new ConnectionProviderDecorator();
|
||||||
|
connectionProvider.configure( getConnectionProviderProperties() );
|
||||||
|
|
||||||
|
ssr = new StandardServiceRegistryBuilder()
|
||||||
|
.addService( ConnectionProvider.class, connectionProvider )
|
||||||
|
.build();
|
||||||
|
metadata = (MetadataImplementor) new MetadataSources( ssr )
|
||||||
|
.addAnnotatedClass( Thing.class )
|
||||||
|
.buildMetadata();
|
||||||
|
metadata.validate();
|
||||||
|
}
|
||||||
|
|
||||||
|
@After
|
||||||
|
public void tearDown() {
|
||||||
|
StandardServiceRegistryBuilder.destroy( ssr );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testSchemaUpdateReleasesAllConnections() throws SQLException {
|
||||||
|
|
||||||
|
new SchemaUpdate( ssr, metadata ).execute( Target.EXPORT );
|
||||||
|
|
||||||
|
assertThat( connectionProvider.getOpenConnection(), is( 0 ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testSchemaValidatorReleasesAllConnections() throws SQLException {
|
||||||
|
|
||||||
|
new SchemaValidator( ssr, metadata ).validate();
|
||||||
|
|
||||||
|
assertThat( connectionProvider.getOpenConnection(), is( 0 ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Entity(name = "Thing")
|
||||||
|
@Table(name = "Thing")
|
||||||
|
public static class Thing {
|
||||||
|
@Id
|
||||||
|
public Integer id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class ConnectionProviderDecorator extends DriverManagerConnectionProviderImpl {
|
||||||
|
private int openConnection;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Connection getConnection() throws SQLException {
|
||||||
|
openConnection++;
|
||||||
|
return super.getConnection();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void closeConnection(Connection conn) throws SQLException {
|
||||||
|
super.closeConnection( conn );
|
||||||
|
openConnection--;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getOpenConnection() {
|
||||||
|
return this.openConnection;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue