HHH-15717 Add test for issue
This commit is contained in:
parent
d648adfd59
commit
9720037963
|
@ -0,0 +1,216 @@
|
||||||
|
package org.hibernate.orm.test.tool.schema;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileWriter;
|
||||||
|
import java.net.URL;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.EnumSet;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import org.hibernate.boot.Metadata;
|
||||||
|
import org.hibernate.boot.MetadataSources;
|
||||||
|
import org.hibernate.boot.registry.StandardServiceRegistry;
|
||||||
|
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
|
||||||
|
import org.hibernate.boot.registry.classloading.spi.ClassLoaderService;
|
||||||
|
import org.hibernate.cfg.AvailableSettings;
|
||||||
|
import org.hibernate.tool.schema.SourceType;
|
||||||
|
import org.hibernate.tool.schema.TargetType;
|
||||||
|
import org.hibernate.tool.schema.internal.SchemaCreatorImpl;
|
||||||
|
import org.hibernate.tool.schema.spi.CommandAcceptanceException;
|
||||||
|
import org.hibernate.tool.schema.spi.ContributableMatcher;
|
||||||
|
import org.hibernate.tool.schema.spi.ExceptionHandler;
|
||||||
|
import org.hibernate.tool.schema.spi.ExecutionOptions;
|
||||||
|
import org.hibernate.tool.schema.spi.SchemaFilter;
|
||||||
|
import org.hibernate.tool.schema.spi.ScriptSourceInput;
|
||||||
|
import org.hibernate.tool.schema.spi.ScriptTargetOutput;
|
||||||
|
import org.hibernate.tool.schema.spi.SourceDescriptor;
|
||||||
|
import org.hibernate.tool.schema.spi.TargetDescriptor;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.AfterEach;
|
||||||
|
import org.junit.jupiter.api.BeforeEach;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
import jakarta.persistence.Entity;
|
||||||
|
import jakarta.persistence.Id;
|
||||||
|
import jakarta.persistence.Table;
|
||||||
|
|
||||||
|
import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
|
||||||
|
import static org.hibernate.tool.schema.internal.SchemaCreatorImpl.DEFAULT_IMPORT_FILE;
|
||||||
|
|
||||||
|
public class DefaultImportFileExecutionTest {
|
||||||
|
|
||||||
|
private File defaultImportFile;
|
||||||
|
private StandardServiceRegistry serviceRegistry;
|
||||||
|
private static final String COMMAND = "INSERT INTO TEST_ENTITY (id, name) values (1,'name')";
|
||||||
|
|
||||||
|
|
||||||
|
@BeforeEach
|
||||||
|
public void setUp() throws Exception {
|
||||||
|
defaultImportFile = createDefaultImportFile( "import.sql" );
|
||||||
|
serviceRegistry = new StandardServiceRegistryBuilder().build();
|
||||||
|
}
|
||||||
|
|
||||||
|
@AfterEach
|
||||||
|
public void tearDown() {
|
||||||
|
serviceRegistry.close();
|
||||||
|
if ( defaultImportFile.exists() ) {
|
||||||
|
defaultImportFile.delete();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testImportScriptIsExecutedOnce() {
|
||||||
|
assertThat( serviceRegistry.getService( ClassLoaderService.class )
|
||||||
|
.locateResource( DEFAULT_IMPORT_FILE ) ).isNotNull();
|
||||||
|
|
||||||
|
TargetDescriptorImpl targetDescriptor = TargetDescriptorImpl.INSTANCE;
|
||||||
|
|
||||||
|
createSchema( targetDescriptor );
|
||||||
|
|
||||||
|
TestScriptTargetOutput targetOutput = (TestScriptTargetOutput) targetDescriptor.getScriptTargetOutput();
|
||||||
|
|
||||||
|
assertThat( targetOutput.getInsertCommands().size() ).isEqualTo( 1 );
|
||||||
|
}
|
||||||
|
|
||||||
|
private void createSchema(TargetDescriptorImpl targetDescriptor) {
|
||||||
|
|
||||||
|
final Metadata mappings = buildMappings( serviceRegistry );
|
||||||
|
|
||||||
|
final SchemaCreatorImpl schemaCreator = new SchemaCreatorImpl( serviceRegistry );
|
||||||
|
|
||||||
|
final Map<String, Object> options = new HashMap<>();
|
||||||
|
options.put( AvailableSettings.JAKARTA_HBM2DDL_LOAD_SCRIPT_SOURCE, "import.sql" );
|
||||||
|
schemaCreator.doCreation(
|
||||||
|
mappings,
|
||||||
|
new ExecutionOptionsTestImpl( options ),
|
||||||
|
ContributableMatcher.ALL,
|
||||||
|
SourceDescriptorImpl.INSTANCE,
|
||||||
|
targetDescriptor
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static File createDefaultImportFile(String fileName) throws Exception {
|
||||||
|
URL myUrl = Thread.currentThread().getContextClassLoader().getResource( "hibernate.properties" );
|
||||||
|
String path = myUrl.getPath().replace( "hibernate.properties", fileName );
|
||||||
|
final File file = new File( path );
|
||||||
|
file.createNewFile();
|
||||||
|
|
||||||
|
try (final FileWriter myWriter = new FileWriter( file )) {
|
||||||
|
myWriter.write( COMMAND );
|
||||||
|
}
|
||||||
|
|
||||||
|
return file;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Metadata buildMappings(StandardServiceRegistry registry) {
|
||||||
|
return new MetadataSources( registry )
|
||||||
|
.addAnnotatedClass( TestEntity.class )
|
||||||
|
.buildMetadata();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Entity(name = "TestEntity")
|
||||||
|
@Table(name = "TEST_ENTITY")
|
||||||
|
public static class TestEntity {
|
||||||
|
@Id
|
||||||
|
private long id;
|
||||||
|
|
||||||
|
private String name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public class ExecutionOptionsTestImpl implements ExecutionOptions, ExceptionHandler {
|
||||||
|
Map<String, Object> configValues;
|
||||||
|
|
||||||
|
public ExecutionOptionsTestImpl(Map<String, Object> configValues) {
|
||||||
|
this.configValues = configValues;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Map getConfigurationValues() {
|
||||||
|
return configValues;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean shouldManageNamespaces() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ExceptionHandler getExceptionHandler() {
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SchemaFilter getSchemaFilter() {
|
||||||
|
return SchemaFilter.ALL;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void handleException(CommandAcceptanceException exception) {
|
||||||
|
throw exception;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static class SourceDescriptorImpl implements SourceDescriptor {
|
||||||
|
/**
|
||||||
|
* Singleton access
|
||||||
|
*/
|
||||||
|
public static final SourceDescriptorImpl INSTANCE = new SourceDescriptorImpl();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SourceType getSourceType() {
|
||||||
|
return SourceType.METADATA;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ScriptSourceInput getScriptSourceInput() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static class TargetDescriptorImpl implements TargetDescriptor {
|
||||||
|
/**
|
||||||
|
* Singleton access
|
||||||
|
*/
|
||||||
|
public static final TargetDescriptorImpl INSTANCE = new TargetDescriptorImpl();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public EnumSet<TargetType> getTargetTypes() {
|
||||||
|
return EnumSet.of( TargetType.SCRIPT );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ScriptTargetOutput getScriptTargetOutput() {
|
||||||
|
return TestScriptTargetOutput.INSTANCE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static class TestScriptTargetOutput implements ScriptTargetOutput {
|
||||||
|
|
||||||
|
public static final TestScriptTargetOutput INSTANCE = new TestScriptTargetOutput();
|
||||||
|
|
||||||
|
List<String> insertCommands = new ArrayList<>();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void prepare() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void accept(String command) {
|
||||||
|
if ( command.toLowerCase().startsWith( "insert" ) ) {
|
||||||
|
insertCommands.add( command );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void release() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<String> getInsertCommands() {
|
||||||
|
return insertCommands;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue