package org.pentaho.reporting.engine.classic.core.modules.misc.connections;
import junit.framework.TestCase;
import org.pentaho.database.model.DatabaseAccessType;
import org.pentaho.database.model.DatabaseConnection;
import org.pentaho.database.model.IDatabaseConnection;
import org.pentaho.database.service.IDatabaseDialectService;
import org.pentaho.database.util.DatabaseTypeHelper;
import org.pentaho.reporting.engine.classic.core.ClassicEngineBoot;
import org.pentaho.reporting.engine.classic.core.modules.misc.connections.parser.DatabaseConnectionCollection;
import org.pentaho.reporting.engine.classic.core.modules.misc.connections.writer.FileDataSourceMgmtWriter;
import org.pentaho.reporting.libraries.base.boot.ObjectFactory;
import org.pentaho.reporting.libraries.resourceloader.Resource;
import org.pentaho.reporting.libraries.resourceloader.ResourceException;
import org.pentaho.reporting.libraries.resourceloader.ResourceManager;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.UUID;
public class ConnectionDefinitionIOIT extends TestCase {
public ConnectionDefinitionIOIT() {
}
protected void setUp() throws Exception {
ClassicEngineBoot.getInstance().start();
}
public void testWriteAndLoad() throws IOException, ResourceException {
// only a limited set of properties is actually persisted. We follow the lead of the platform,
// which seems to cut out all kettle-specific stuff that has not been abstracted out.
final IDatabaseConnection connection1 = generateDatabaseConnection();
final IDatabaseConnection connection2 = generateDatabaseConnection();
final FileDataSourceMgmtWriter writer = new FileDataSourceMgmtWriter();
final ByteArrayOutputStream bout = new ByteArrayOutputStream();
writer.write( new IDatabaseConnection[] { connection1, connection2 }, bout );
final ResourceManager mgr = new ResourceManager();
mgr.registerDefaults();
final Resource directly = mgr.createDirectly( bout.toByteArray(), DatabaseConnectionCollection.class );
final DatabaseConnectionCollection resource = (DatabaseConnectionCollection) directly.getResource();
final IDatabaseConnection[] connections = resource.getConnections();
assertEquals( 2, connections.length );
assertEquals( connection1, connections[0] );
assertEquals( connection2, connections[1] );
}
private void assertEquals( final IDatabaseConnection connection1, final IDatabaseConnection connection2 ) {
assertEquals( connection1.getName(), connection2.getName() );
assertEquals( connection1.getId(), connection2.getId() );
assertEquals( connection1.getAccessType(), connection2.getAccessType() );
assertEquals( connection1.getDataTablespace(), connection2.getDataTablespace() );
assertEquals( connection1.getDatabaseName(), connection2.getDatabaseName() );
assertEquals( connection1.getDatabasePort(), connection2.getDatabasePort() );
assertEquals( connection1.getHostname(), connection2.getHostname() );
assertEquals( connection1.getIndexTablespace(), connection2.getIndexTablespace() );
assertEquals( connection1.getInformixServername(), connection2.getInformixServername() );
assertEquals( connection1.getUsername(), connection2.getUsername() );
assertEquals( connection1.getPassword(), connection2.getPassword() );
}
public static IDatabaseConnection generateDatabaseConnection() {
final IDatabaseConnection connection = new DatabaseConnection();
connection.setName( UUID.randomUUID().toString() );
connection.setId( UUID.randomUUID().toString() );
connection.setAccessType( DatabaseAccessType.NATIVE );
connection.setDataTablespace( UUID.randomUUID().toString() );
connection.setDatabaseName( UUID.randomUUID().toString() );
connection.setDatabasePort( "12345" );
connection.setHostname( UUID.randomUUID().toString() );
connection.setIndexTablespace( UUID.randomUUID().toString() );
connection.setInformixServername( UUID.randomUUID().toString() );
connection.setUsername( UUID.randomUUID().toString() );
connection.setPassword( UUID.randomUUID().toString() );
final ObjectFactory objectFactory = ClassicEngineBoot.getInstance().getObjectFactory();
final IDatabaseDialectService dialectService = objectFactory.get( IDatabaseDialectService.class );
final DatabaseTypeHelper databaseTypeHelper = new DatabaseTypeHelper( dialectService.getDatabaseTypes() );
connection.setDatabaseType( databaseTypeHelper.getDatabaseTypeByShortName( "GENERIC" ) );
return connection;
}
}